FC2ブログ

[AI]用語

(注)全てが参照先で説明してる訳ではない。個人的な理解(予想)で書いてる内容もあり。

YouTube①: Deep Learning入門:ニューラルネットワーク設計の基礎
https://www.youtube.com/watch?v=O3qm6qZooP0

YouTube②: Deep Learning入門:Deep Learningでできること
https://www.youtube.com/watch?v=FwuBbj8F6cI

YouTube③: Deep Learning精度向上テクニック:様々なCNN #1
https://www.youtube.com/watch?v=UximUEjPQco

YouTube④: Deep Learning精度向上テクニック:様々な活性化関数
https://www.youtube.com/watch?v=cTvJ-jj63U4

YouTube⑤: Deep Learning入門:ニューラルネットワーク学習の仕組み
https://www.youtube.com/watch?v=r8bbe273vEs

書籍①: ゼロから作るDeep_Learning_Pythonで学ぶディープラーニングの理論と実装

-----------------------------------------------
YouTube① Feed Forward : 入力層(Input Layer)から出力層(Output Layer)へ左から右へ進むもの

YouTube① Affine : 入力ニューロンと出力ニューロンが全結合してる関数。重みWも入力x出力の数だけ必要。

YouTube① Tanh : (タンエイチ) 活性化関数の1つ。

YouTube① Affine + Tanh : 1層分のニューロンの構成の1つ。

YouTube① Affine + Softmax : 出力層によく使われる構成。Softmaxは出力の合計が1になる特徴。

YouTube① DNN : Deep Neural Network。全結合の(?)Neural Network

YouTube① CNN : Convolutional(畳み込み演算) Neural Network。畳み込みNeural Network

YouTube① Convolution :

 入力画像を例えば5x5の複数の異なるフィルタ(例:ぼかし)で畳み込みし、複数(例:6種)の画像を出力する演算(関数)。
 重みWは画像の各ピクセル毎に同じ数値。
 1枚画像で25個のWなら、そのフィルタ数分(例:6枚なら25個x6枚=150個)だけ重みが必要。
 Affineの重みより少なくて済む。



YouTube① max pooling関数 :

 ダウンサンプリングの処理の1つ。
 隣接ピクセルで最大値を取り、ダウンサンプリングする。
 例:解像度を縦横半分にする。



YouTube① average pooling関数 :

 ダウンサンプリングの処理の1つ。
 隣接ピクセルで平均値を取り、ダウンサンプリングする。



YouTube① CNN構成例 :

  例:入力画像28x28x1枚 ->
   Convolution(例:処理画像24x24xフィルタ6枚分) ->
    maxpooling(例:処理画像12x12xフィルタ6枚分) ->
    tanh ->

       convolutoin(例:処理画像8x8xフィルタ16枚分) ->
       maxpooling(例:処理画像4x4xフィルタ16枚分) ->
       tanh ->

          affine(4x4x16=256ピクセル分と全結合) ->
          tanh(256から120にする) ->
             affine ->
             softmax(数字0~9分の10出力にする)

 以下の1層を構成する構造(例)を何個もつなぎ合わせる事で多層ネットワークを構成していく。
   Affine層(全結合) = 全結合(Affine) + 活性化関数(Tanh)
   Convolution層   = 畳み込み(Convolution) + ダウンサンプリング(maxpooling) + 活性化関数(Tanh)



YouTube② Semantic Segmentation :

 ピクセル単位の物体認識。出力層は入力画像に対するピクセル毎のカテゴリ。
 入力画像のピクセル毎にどういった物体か?というデータを用意して学習すればよい。



YouTube② 画像キャプショニング : 入力は画像で、その画像の説明文章を説明する機能。

YouTube② Visual 画像キャプショニング : 入力は画像で、その画像の説明文章を説明する機能。

YouTube③ カーネルサイズ : (別サイトも見て調べた。)画像フィルターの事。畳み込み(Convolution)層の処理において、カーネル(もしくはフィルター)と呼ばれる格子状の数値データと同サイズの部分画像(ウィンドウ)の数値データを、積和演算して変換する。

YouTube③ AlexNet : 2012年にDLを使って画像認識の性能を大きく向上させたCNNのテクニック(構造)。

YouTube③ ResNet : 2015年に登場したCNNのテクニック(構造)。

YouTube③ Inception-v4 : 2016年に登場したCNNのテクニック(構造)。

YouTube③ 1x1(Pointwise) convolution : one by one convolution。空間方向のフィルタ処理がなく、画像枚数を調整したい場合に用いられる。例:画像512枚で3x3フィルタ処理を行うには大き過ぎるので、1x1 Convolutionで画像枚数を128枚にしてから、3x3フィルタ処理を行う、という例。

YouTube③ ResNetX :

 ResNetX = Grouped Convolution + 1x1 Convolution
 通常、出力画像は全ての入力画像を参照するニューロン接続構成にしていたが、画像枚数が増えると演算が膨大。
 そこで考えたのがGrouped Conv。例えばGroup数=画像枚数/2とすると、2枚の入力画像と1枚の出力画像がグループになる。
 このグループの間だけで3x3フィルタ処理を行う。しかし、このままではグループ外の入力画像は出力画像に反映されない。
 そのために、Grouped Convの後に、1x1 Convを入れて、全ての入力画像が出力画像に反映できるようにする。



YouTube③ Seperable Convolution :
 上のGrouped Convを究極に突き詰めたもの。Xceptionという論文で発表。

YouTube④ ReLU :

 活性化関数の1つ。
 何らかの非線形関数なら活性化関数として機能する。
 ReLUの登場によって、多数のニューラルネットワークが可能になった。
 従来はTanhがよく使われていたが、0付近は傾き線形だが、0から離れると勾配がほぼ0になってしまう。
 NN学習の仕組みとしてBack Propagationがあり、勾配を前の層に伝搬させていく過程で勾配の乗算がある。
 しかしTanhだと、入力の絶対値が大きくなると勾配がほぼ0になるため、勾配が前の層に戻らない問題あり。
 一方、ReLUは0以上の入力で勾配は常に1なので、前の層に勾配が伝わり易い。



YouTube⑤ ミニバッチ勾配降下法 :

 Mini-Batch Gradient Descent
 ニューラルネットワークにおいて、乱数で初期化された重みWを更新していく時の手法。
 動作手順
  1.学習データからミニバッチと呼ばれる複数個のデータ(例:256個程度)を取得。
  2.ミニバッチを用いて、Forward計算を実施。現Wによる出力Yとロス(最小化したい値)Eを算出。
  3.Backward計算(ロスEの逆伝搬)を行い、Wの勾配を求める。勾配は、その地点における接線の傾き(微分dE/dW)。
    計算方法の1つがBack Propagation。
  4.Update(求めたWの勾配で現Wを更新)。 ロスEが小さくなる方向に更新。 W' = W - η(イータ)dE/dWという計算。



YouTube⑤ Back Propagation :
 どんな複雑なNNでもパラメータ勾配を求めるには、「出力から順にさかのぼりながら勾配を計算する事で合成関数の微分を行う。」
 ◆やりたい事
   ロスEが最小となる重みwとバイアスbを求めたい。
   Eが最小になるのは、wとbそれぞれ、勾配が0になる地点。(常に勾配0地点がロスE最小ポイントか??)
   そのために、ロスEから重みwの勾配、及びバイアスbの勾配を計算したい。
 ◆前提条件
  Affine層の出力Y=重みw x 入力値x + バイアスb、Squared ErrorロスE = (y -t)^2
 ◆Eのwに関する微分を求めるために、まずはEの出力yに関する勾配を求める
   E = (y - t)^2の微分は、dE/dy = 2(y - t)
 ◆yの勾配からwの勾配を求める
   まずは合成関数の微分で用いるテクニックでこのように変換。dE/dw = dE/dy dy/dw
   このうちyの勾配(dE/dy)は既に求めてる。残るはyをwで微分したものが必要。
   y= w * x + bなので、wにかかっている係数はx。よって、yをwで微分したらxになる。
   よって、上で求めた式を変形してdE/dw = dE/dy * x = 2(y - t) * x、となる。
 ◆同様に、bの勾配も求める
   まずは式変換。dE/db = dE/dy dy/db
   さらに、yをbで微分すると、y式からbには何もかかってないため、結果1になる。
   この結果で式を変換して、dE/db = dE/dy dy/db = dE/dy * 1 = dE/dy = 2(y - t)、となる。
 ◆これまでの流れで、どんな複雑な構成でも、各ノードの勾配を計算できる。
スポンサーサイト



コメントの投稿

非公開コメント

カレンダー
01 | 2020/02 | 03
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード