Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ニューラル論文を読む前に

小町研究室の新入生向けチュートリアルで使用したスライドです。

  • Login to see the comments

  • Be the first to like this

ニューラル論文を読む前に

  1. 1. ニューラル論⽂を読むための おさらい 6/28 研究会 M1 ⼭岸駿秀
  2. 2. ⽬的 ⽬的 • B4からの質問を共有する • B4から聞かれそうなことに先⼿を打っておく 今⽇やること • ⾏列の記号 • ゲート • 最適化法
  3. 3. ⾏列まわりの記号を改めて • 𝐀 = 1 2 3 4 5 6 𝐁 = 2 4 6 8 10 12 𝐴, 𝐵 ∈ ℛ2×4 • 積 • ドット積 (いわゆる⾏列積、ベクトルの内積) 𝐀 5 𝐁6= 28 64 64 154 • 要素積 (element-wise product) 𝐀⨀𝐁 = 1 ∗ 2 2 ∗ 4 3 ∗ 6 4 ∗ 8 5 ∗ 10 6 ∗ 12 (◯のときとかもある) • ベクトルの外積 𝐀×𝐁 は、NNではあまり使わないイメージがある
  4. 4. ⾏列まわりの記号を改めて • Concatenation (numpy.hstack) • 𝐀 ; 𝐁 = 1 2 3 4 5 6 2 4 6 8 10 12 • Stack (concatenationの縦軸版?; numpy.vstack) • 𝐀 𝐁 = 1 2 3 4 5 6 2 4 6 8 10 12 • ⼊⼒が1つにまとまることがいい
  5. 5. LSTMとGRU
  6. 6. LSTMとGRU • 論⽂でRNNと書いてあるところは、実際はLSTMかGRU • 何が違うんですか? • どっちがいいんですか? → 知りません • 勾配消失/爆発が抑えられる • なんで?
  7. 7. LSTM • メモリセルがある + forget gateがある • Input gate: 𝑖L = 𝜎 𝑊O ℎLQR; 𝑥L + 𝑏O • Forget gate: 𝑓L = 𝜎 𝑊W ℎLQR; 𝑥L + 𝑏W • Output gate: 𝑜L = 𝜎 𝑊Y ℎLQR; 𝑥L + 𝑏Y • メモリセル: 𝐶L = 𝑓L ⊙ 𝐶LQR + 𝑖L ⊙ 𝑡𝑎𝑛ℎ 𝑊_ ℎLQR; 𝑥L + 𝑏_ • 隠れ層: ℎL = 𝑜L ⊙ 𝑡𝑎𝑛ℎ 𝐶L
  8. 8. LSTM 緑のブロックは⼊⼒される前に重みがかかる 実際のゲートの役割をしているのは要素積のブロック tanh σ ⊙ Ct ht[ht-1; xt] ⊙ σ Ct-1 σ tanh ⊙ + ft it ot
  9. 9. LSTM (with peephole connection) ゲートの値を計算するときの⼊⼒にCt-1がconcatされる Chainerはpeepholeなしだが、これがLSTMの標準形らしい? tanh σ ⊙ Ct ht[ht-1; xt] ⊙ σ Ct-1 σ tanh ⊙ + ft it ot
  10. 10. GRU • メモリセルがない + forget gateがない • Update gateがある • Update gate: 𝑧L = 𝜎 𝑊g ℎLQR; 𝑥L + 𝑏g • Reset gate: 𝑟L = 𝜎 𝑊i ℎLQR; 𝑥L + 𝑏i • 隠れ層: ℎL = (1 − 𝑧L) ⊙ ℎLQR + 𝑧L ⊙ 𝑡𝑎𝑛ℎ 𝑊k 𝑟L ⊙ ℎLQR; 𝑥L + 𝑏k
  11. 11. GRU LSTMよりパラメータが少ない - ⊙ ht[ht-1; xt] σσ ⊙ tanh ztrt ⊙ ht-1 + 1
  12. 12. もともと何が問題だったのか • ℎL = 𝑓 ℎLQR としておく • ある時刻𝑡でのロス𝑙 ℎL の微分値 no kp nq 𝜕𝑙 ℎL 𝜕𝑤 = 𝜕𝑙 ℎL 𝜕ℎL 𝜕ℎL 𝜕𝑤 = 𝜕𝑙 ℎL 𝜕ℎL 𝜕𝑓(ℎLQR) 𝜕𝑤 = 𝜕𝑙 ℎL 𝜕ℎL 𝜕𝑓(ℎLQR) 𝜕ℎLQR 𝜕𝑓(ℎLQ2) 𝜕𝑤 = ⋯ かけ算 = 値がすごく増える or すごく減る ⼊⼒が⻑くなると初めの⼊⼒に対して正しく誤差が伝播しない
  13. 13. ゲート • ℎL = 𝑓 ℎLQR + 𝑔L ⊙ ℎLQRとしておく • ある時刻𝑡でのロス𝑙 ℎL の微分値 no kp nq 𝜕𝑙 ℎL 𝜕𝑤 = 𝜕𝑙 ℎL 𝜕ℎL 𝜕ℎL 𝜕𝑤 = 𝜕𝑙 ℎL 𝜕ℎL 𝜕𝑓(ℎLQR) 𝜕𝑤 + 𝜕𝑙 ℎL 𝜕ℎL 𝑔L ⊙ 𝜕 𝜕𝑤 ℎLQR 𝜕𝑙 ℎL 𝜕ℎL 𝜕 𝜕𝑤 𝑔L ⊙ ℎLQR = 𝜕𝑙 ℎL 𝜕ℎL 𝑔L ⊙ 𝜕 𝜕𝑤 𝑓(ℎLQ2) + 𝑔L ⊙ 𝑔LQR ⊙ 𝜕 𝜕𝑤 ℎLQ2 和の形になるので問題解決?
  14. 14. 最適化法
  15. 15. 最適化法 • 何これ?
  16. 16. 最適化法 • 誤差のうち、パラメータに反映させる値を定める • 局所解に陥らないように反映させたい • ⾊々な最適化法が研究されている • ChainerなどのDNNフレームワークでは、クラスとして選択可 • chainer.optimizers.SGD(): SGD • chainer.optimizers.AdaGrad(): AdaGrad
  17. 17. 最適化法: SGD • 以下、i回⽬の更新のときの式 • 𝑊O = 𝑊OQR − 𝜂 nw nx • ロスLを各パラメータWで微分したものに、定数の学習率をかける • ηは0.01とか0.001とか • (勾配は数値が上がる⽅向の値になる → ×(-1)で下向き) • 勾配が強い⽅向へものすごく動く
  18. 18. 最適化法: Momentum • ほぼ⾒かけないけど⼀応 • 𝑣O = 𝛼𝑣OQR − 𝜂 nw nx 、𝑊L = 𝑊LQR + 𝑣O • αは0.9くらい • ηは0.01とか0.001とか • vi-1の向きと勾配の向きが同じとき加速、そうでないとき減速
  19. 19. 最適化法: AdaGrad • 学習率を動的にする • 𝑣O = 𝑣OQR + nw nx ⊙ nw nx • 𝑊O = 𝑊OQR − 𝜂 R {| nw nx • viにそれまでの勾配の2乗をためておき、学習率を2乗和で割る ために使う • たくさん更新した⽅向は更新されないようになる
  20. 20. みんな⾒たことあるはずのGIF • SGDは鞍点を抜けられない • Momentumはある⼀⽅向が終わると次の⽅向へ切り替わる • AdaGradは鞍点へ⾏かない
  21. 21. ありそうな疑問 • AdaDeltaがよさそうなのに何で解説しなかったんですか? ØAdaGradの改良だから ØAdamも同様 • 結局どれがいいんですか? Ø知りません ØSGDを使っている論⽂もかなりあります
  22. 22. 引⽤等 • 式等の引⽤ • 『深層学習による⾃然⾔語処理』 • 講談社 • 坪井裕太 、海野裕也、鈴⽊潤 • 『ゼロから作るDeep Learning』 • オライリージャパン • 斎藤康毅 • gif: http://postd.cc/optimizing-gradient-descent/

×