post Image
様々なディープラーニングの手法について、簡単にまとめ

概要

ディープラーニングの様々な手法について、ざっくり理解してまとめてみました。

MLP(多層パーセプトロン)

入力層と隠れ層と出力層が全結合である、もっとも単純なディープラーニング。

multilayer-perceptron.png

https://www.vaetas.cz/blog/introduction-artificial-neural-networks/

CNN(畳み込みニューラルネット)

畳み込み層とプーリング層をもつディープラーニング。
局所的なデータの位置のずれを吸収してくれる。

イメージ

畳み込み層(Convolutional layer)ではフィルターと呼ばれる$H×H$の正方データを対象画像上をスライドさせて、重なる部分のデータとフィルターの積和を特徴量として圧縮して、新たなmapと呼ばれるデータを生成する。

convolve_1.jpg

プーリング層(Max-pooling layer)では、$K×K$内の最大値を抽出しデータを圧縮する。

pool.png

https://cambridgespark.com/content/tutorials/convolutional-neural-networks-with-keras/index.html

それを何層か重ねて最後は全結合によって出力層にデータを渡す。

CNN.jpg

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.646.8205&rep=rep1&type=pdf

RNN(再帰型ニューラルネット)

時系列データ、前後のデータに意味のあるデータに対して、その特徴を学習できるディープラーニング。
中間層に出力を自らの入力とする帰還路をもつ。
ただし、長期的な特徴を学習することは困難。

イメージ

“I have a pen”という前後に意味をもつデータを学習する場合、$x1$に “I”、$x2$に “have”・・・というようにデータが入力され、$W$ 重みを学習する。

CNN.jpg

http://peterroelants.github.io/posts/rnn_implementation_part01/

LSTM(長短期記憶)

時系列データにおいて、RNNより長期のデータの特徴を学習できるディープラーニング。
RNNの中間層をLSTM-Blockと呼ばれる、状態を記憶するメモリセルと、記憶を制御する忘却ゲートをもったものに置き換えられたもの。

イメージ

Blockへの入力データは(四角の外から矢印がBlockに向いている部分)、入力層からのデータと中間層からの帰還データを合わせたもの。

各ゲートは活性関数を適用してデータを$g_{j}\in[0,1]$とする。
入力ゲート(Input Gate)と出力ゲート(Output Gate)は0に近ければデータがブロックされ、1に近ければ伝播させる。

忘却ゲート(Foget Gate)は0の場合に忘却(リセット)される仕組み。

CNN.jpg

ResNet

学習対象(レイヤーごとの仮説関数)に入力の差(残差)を使うことで、勾配消失問題(層が深くなるにつれて、勾配が0に収束してしまう問題)を解消するディープラーニング。

イメージ

あるレイヤーの仮説関数$H(x)$は入力が$x$なので、残差は$F(x)=H(x)-x$となり、仮説関数は$H(x)=F(x)+x$と書き換えられ、これを学習する。

ショートカット接続という道を作り、何層か前の情報を使う。
これにより、層をかなり深くしても勾配消失が起こりにくくなることが確認されている。

ResNet.png

ResNet2.png

https://arxiv.org/abs/1512.03385

VAE

データの潜在変数 $z$ を確率分布とした、生成モデル。
入力データをニューラルネットで潜在変数に変換し(Encode)、潜在変数からまたニューラルネットで入力データと同じ空間に変換(Decode)して新たなデータを生成する。

イメージ

vae.4.png

http://blog.fastforwardlabs.com/2016/08/22/under-the-hood-of-the-variational-autoencoder-in.html

GAN(敵対的生成ネットワーク)

データを生成するニューラルネット(generator)と、データが本物データかgeneratorによって生成されたデータかを識別するニューラルネット(discriminator)を使った、生成モデル。
discriminatorによって正しく判別できないような、より本物データに近いデータをgeneratorが生成するよう学習を進める。

イメージ

GANは価値関数$V(G,D)$のMin-Max法として定義できる

\min_{G}\max_{D}V(D,G)=E_{x \sim p_{data}(x)}[\log D(x)]+E_{x \sim p_{z}(x)}[\log (D(1-G(z)))] 

前半の $E_{x \sim p_{data}(x)}[\log D(x)]$ はDiscriminatorが本物データを本物と識別する確率変数
後半の $E_{x \sim p_{z}(x)}[\log (D(1-G(z)))]$ がDiscriminatorが生成データを偽物と識別する確率変数

これを、GeneratorはDiscriminatorに識別を誤らせようとし、最小化させ、Discriminatorは正しく識別しようと最大化する。

GAN.jpeg

https://sthalles.github.io/intro-to-gans/

論文(arxiv): Generative Adversarial Networks

Transfer learning(転移学習)

あるデータで学習させたモデルや重みを、別のドメインに転移して利用するディープラーニング。
1から学習するするよりも、少ない訓練データで精度の高い予測が可能。

イメージ

1. ImageNetで学習
2. データが少ない場合は、最後の全結合と出力層だけを再度学習
3. ある程度データがある場合は、もう少し前の中間層の途中から再学習

transfer_learning.png

http://cs231n.stanford.edu/syllabus.html

DQN(Deep Q-Network)

強化学習において、行動価値関数$Q(s,a)$(sの状態の時にaという行動をとる価値を)の値が高くなる様に学習する方法をQ学習といい、Q学習をパラメータを追加した近似関数とて表し、ディープラーニングで求める手法。

行動価値関数

Q^\pi(s,a)=E_{\pi}\{R_{t} | s_{t}=s, a_{t}=a \}

論文(arxiv): Playing Atari with Deep Reinforcement Learning

CapsNet

ニューロンでの計算を入出力共にベクトルで行うことで、データの位相空間情報を保持したカプセルという単位で特徴を学習するディープラーニング。

CNNが相対的な位置関係の特徴を学習仕切れない問題に対する、新たな手法。

イメージ

capsnet.png

通常のニューロンとの違い。
バイアスがなく、活性関数がsquash関数というものを使っている。

capsnet1.png

論文(arxiv): Dynamic Routing Between Capsules

おわり

間違いがありましたら、ご指摘いただけたら嬉しいです。

この記事で、Rossoアドベントカレンダーの私の担当記事が終了しました。
企画してくれた@yk0614に感謝!!


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。