Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
「深層学習による自然言語処理」読書会 第6章2.7
Search
Kei Shiratsuchi
PRO
October 05, 2017
Technology
0
430
「深層学習による自然言語処理」読書会 第6章2.7
「深層学習による自然言語処理」読書会
第5章5.1
Kei Shiratsuchi
PRO
October 05, 2017
Tweet
Share
More Decks by Kei Shiratsuchi
See All by Kei Shiratsuchi
なぜ リアーキテクティング専任チームを作ったのか
kei_s
PRO
2
1.2k
実践 Rails アソシエーションリファクタリング / Rails association refactoring in practice
kei_s
PRO
8
7.3k
「Go言語でつくるインタプリタ」を Rust で移植してみた / "Write An Interpreter In Go" In Rust
kei_s
PRO
1
1.7k
Rust言語で作るインタプリタ / Write An Interpreter In Rust
kei_s
PRO
2
470
育児休業のご報告と、育児グッズとしてのスマートスピーカー / Parental Leave and SmartSpeaker
kei_s
PRO
0
820
「深層学習による自然言語処理」読書会 第5章5.1
kei_s
PRO
0
370
最近個人的に気になるプログラミング言語おさらい Ruby, Python, Go, Rust, Julia
kei_s
PRO
0
900
「深層学習による自然言語処理」読書会 第2章2.1~2.5
kei_s
PRO
0
390
「深層学習による自然言語処理」読書会 第4章4.3
kei_s
PRO
1
490
Other Decks in Technology
See All in Technology
一生覚えておきたい「システム開発=コミュニケーション」〜初めての実務案件振り返りLT〜
maimyyym
2
320
開発パフォーマンスを最大化するための開発体制
ham0215
7
1.1k
ルーターでプレゼンする
puhitaku
1
3.2k
IPUT App Dev. Co. -Overview 2024/4
iputapp
0
120
実例で紹介するRAG導入時の知見と精度向上の勘所
yamahiro
5
1.6k
Google Cloud Next '24 Recap(Cloud Run/k8s)
mokocm
0
330
コードや知識を組み込む / Incorporate Code and knowledge
ks91
PRO
0
150
How to Lead? Testimonial of a Lead Android Engineer
oleur
1
110
Android Target SDK 35 (Android 15) 対応の概要
akkie76
0
150
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
5
18k
R3のコードから見る実践LINQ実装最適化・コンカレントプログラミング実例
neuecc
3
2.5k
EM完全に理解した と思ったけど、 やっぱり何も分からなかった話 / EM Night Fukuoka #1
hirutas
0
280
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
61
4k
[RailsConf 2023] Rails as a piece of cake
palkan
28
4k
The Language of Interfaces
destraynor
151
23k
GraphQLの誤解/rethinking-graphql
sonatard
55
9.3k
Code Reviewing Like a Champion
maltzj
515
39k
Designing Experiences People Love
moore
136
23k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
8
1.3k
Facilitating Awesome Meetings
lara
43
5.6k
Web Components: a chance to create the future
zenorocha
306
41k
Build your cross-platform service in a week with App Engine
jlugia
226
17k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Transcript
ʮਂֶशʹΑΔࣗવݴޠॲ ཧʯಡॻձ ୈষ ⽩⼟ 慧 株式会社レトリバ © 2017 Retrieva, Inc.
ࣗݾհ • 名前:⽩⼟ 慧 • 年齢:33歳 • 所属:株式会社レトリバ(2016年4⽉〜) • 職業:エンジニア
• ⾃然⾔語処理:⼤学の授業レベル。 • 深層学習:⼊社してから少しだけ案件で。 © 2017 Retrieva, Inc. 2
<એ> • WEB+DB PRESS Vol.100 に、弊社 のメンバーが特集記事を書きまし た。 • 特集1
作って学ぶ⼈⼯知能 • 第1章 ⼈⼯知能とはどんな技術なの か? • 第2章 ⾃然⾔語処理 • 第3章 機械学習 • 第4章 深層学習とニューラルネット ワーク • 明⽇ 8/24 発売! © 2017 Retrieva, Inc. 3
ൣғ • 6.2. 推定誤差低減に効く⼿法 • 6.2.7 アンサンブル法 • 6.2.8 ドロップアウト
• 6.3. 最適化誤差低減に効く⼿法 • 6.3.1 初期値設定 • 6.3.2 活性化関数 • 6.3.3 カリキュラム学習 • 6.3.4 正規化 • 6.3.5 確率的勾配法の拡張(Adam) • 6.4. 超パラメータ選択 © 2017 Retrieva, Inc. 4
Ξϯαϯϒϧ๏ • 複数モデルを組み合わせて予測することで、予測のばらつきを 減らす⼿法 • ニューラルネットのような複雑なモデルは、少しの違いによって学習 結果が⼤きく異なる傾向があり、推定誤差が⼤きいため、特に有効 • 複数モデルの過半数が間違う可能性は低い •
有効であるための仮定は、個々のモデルがランダムな予測ではないこ と、個々のモデルの予測が独⽴であること © 2017 Retrieva, Inc. 5
Ξϯαϯϒϧ๏ • ニューラルネットでは、以下のような⽅法がある 1. 初期値だけを変えて学習したモデルを複数⽤意する⽅法 • 初期値によって学習結果のばらつきが⼤きいため 2. 学習中のモデルを定期的に保存しておき、それぞれを違うモデル とする⽅法
3. 状態変数など設定の違うモデルを⽤意する⽅法 4. 訓練データから部分集合を何回も無作為抽出し、それぞれを使っ て異なるモデルを学習する⽅法(バギング) • 論⽂等では、アンサンブル法の有無の両⽅の実験結果を提⽰するの が⼀般的 © 2017 Retrieva, Inc. 6
υϩοϓΞτ • 訓練時に、状態変数の⼀部をランダムに 0 に設定する⽅法 • 特定の状態変数だけを重視した学習を防ぐ • 確率pで1、1-pで0を取るベクトル(#)(ドロップアウトマス ク)を隠れ状態ベクトルにかける
ℎ(#) = (#)⨀ℎ(#()) • 微分計算のたびに異なるドロップアウトマスクを使⽤するため、 別の部分構造を毎回評価してパラメータを更新することになる • 特定のネットワーク構造に依存しない学習ができると期待 © 2017 Retrieva, Inc. 7
υϩοϓΞτ • 学習後に予測する場合には、決定的な予測をしたい場合がある • その場合、ドロップアウトマスクをかける代わりに、p倍して 縮約した値を使う ℎ(#) = ℎ(#()) •
この予測⽅法は、状態変数それぞれが{0,hi}の2つの値をとる複数モデ ルを組み合わせたアンサンブル効果があると⾔われている • 次の層の状態変数を計算する場合、h(l) ではなくパラメータ⾏ 列W(l+1)にpをかけることと等しいため、⼊⼒に関わらずあら かじめ計算できる © 2017 Retrieva, Inc. 8
υϩοϓΞτ • 同じ⼊⼒に対して複数のドロップアウトマスクを適⽤した結果を組 み合わせる⽅法がある • アンサンブル法を適⽤することに相当する • ドロップアウトをパラメータ分布からのサンプリング⽅法と考え、 事後分布を変分近似しているという解釈がある(変分ドロップアウ ト)
• RNNでは、パラメータは時刻⾮依存なので、時刻に⾮依存なドロップアウト マスク⽤ベクトルを⽤いることになる • 評価時は、モンテカルロドロップアウトという⼿法がある • 単⼀モデルを⽤いた単語単位の⾔語モデルで最⾼⽔準の性能 • アンサンブルをしていると解釈できる © 2017 Retrieva, Inc. 9
࠷దԽޡࠩݮʹޮ͘ํ๏ • 勾配法に起因する最適化誤差を減らすのに効果のある⼿法を紹 介 © 2017 Retrieva, Inc. 10
ॳظઃఆ • ニューラルネットでは、パラメータ⾏列Wを、通常乱数を使っ て初期化する • 同じ値で初期化すると、対応する状態変数の値が同じで、勾配や⾹⾟ 料も同じになり、複数の状態変数を使う利点がなくなる • 最適化誤差が初期値に⾮常に強く依存していることが知られて いる
• ⼀様分布からパラメータ⾏列を⽣成し、複数の値で学習し、性 能評価結果から選ぶこともある © 2017 Retrieva, Inc. 11
ॳظઃఆ • 学習の初期に勾配爆発や勾配消失が起きにくいようにパラメータを初期化する⼿法もある • ゼイヴィア初期値 • 以下の範囲の⼀様分布から無作為抽出する − 6 (#())
+ (#) , 6 (#()) + (#) • N(l-1) は⼊⼒となるh(l-1)、N(l)は出⼒となるh(l) • ⾮線形活性化関数を使わない場合、各層の状態変数の分散と勾配の分散が⼀定に保たれるようにす る(?) • ⾮線形の場合、理論的な裏付けはないが、広く使われている • ReLUの場合にも同様の初期化⽅法が提案されている • N(l-1),N(l)に⽐例した分散を持つ正規分布から無作為抽出する • 各層の勾配の分散が⼀定になるため、勾配爆発や勾配消失が軽減する © 2017 Retrieva, Inc. 12
ॳظઃఆ • RNNの初期値設定⼿法 • 単位⾏列で⼀部のパラメータ⾏列を初期化する(IRNN) ℎ2 (#) = (#) 5
(#)ℎ2 #() + ℎ2() (#) + (#) • 5 (#)を単位⾏列で初期化すると、時刻tの勾配が活性化関数の微 分係数だけをかけて時刻t-1に⾜される • 勾配爆発や勾配消失が軽減される © 2017 Retrieva, Inc. 13
ॳظઃఆ • バイアスパラメータの初期化⼿法 • 通常は0で初期化する • LSTMでは、忘却ゲートfのバイアスパラメータの初期値を⼤き な値(1など)にすることで性能が向上する • 忘却ゲートが1の時は単純なショートカットと同じになり、勾配消失が
起こりにくくなる • fのバイアスパラメータの初期値を⼤きな値にすることで、シグモイド 関数の⼊⼒値が底上げされ、忘却ゲートの値が1に近づく © 2017 Retrieva, Inc. 14
׆ੑԽؔ • 活性化関数の選択も最適化誤差に影響がある • Sigmoid, tanh • 出⼒が(0,1)や(-1,1)と有界なので計算が安定する • 微分係数が1より⼩さいため、勾配消失が起きやすい
• ReLU • 正の値の範囲では微分係数が1なので、勾配消失は起きにくい • ReLUやmaxoutが、FFNNやCNNではよく使われる © 2017 Retrieva, Inc. 15
ΧϦΩϡϥϜֶश • 簡単な学習から始めて、徐々に複雑な概念を学習するようにする⽅法 1. 学習の初期は⾼頻度の単語のみ限定した訓練データを使⽤し、徐々に訓 練データの多様性を増やす • ⾼頻度の単語同⼠の関係は学習しやすいという仮定 2. 学習の初期は短い⽂を使い、徐々に⻑い⽂を使⽤する
• ⻑い⽂は⽂法的にも意味的にも複雑なことが多いという仮定 3. 学習中のモデルを使い、簡単な訓練データを選ぶ • 学習中のモデルにとって解きやすい訓練データが簡単なデータであるという仮定 4. タスクの性能が⾼くなるように単語埋め込みベクトルで学習する順番を 学習する © 2017 Retrieva, Inc. 16
ਖ਼نԽ • 勾配法では、他のパラメータとの関係が考慮されない • あるパラメータの偏微分が⽰す⽅向は、他のパラメータが変わらない という仮定のもとでの最急降下⽅向 • パラメータ間に依存関係があると、学習率が⼤きい時に学習が安定し ない •
パラメータ間の関係が強い時は、ニュートン法などが有効だが、パラ メータ数の2乗に⽐例した時間がかかる • 3層以上のニューラルネットでは、より⾼次のパラメータ間の関係につ いては考慮できない © 2017 Retrieva, Inc. 17
ਖ਼نԽ • バッチ正規化は、各層の依存関係によって状態変数の値が⼤きく変化することを防ぐ • ℎ(#) = (#) (#)ℎ(#()) + (#)
を次のように書き換える ℎ(#) = (#) Ψ(#)⨀ℎ 8(#) + (#) ℎ 8(#) = ℎ :(#) − (#) (#) + ℎ :(#) = (#)ℎ(#()) + (#) • m(l)とv(l)は、ミニバッチ内のℎ :(#)の値を使って計算した平均と分散 • ℎ 8(#)は、平均0分散1となるように変換されている • Ψ(#)、(#)は、平均0分散1に正規化されたスカラー値パラメータなので学習は容易 © 2017 Retrieva, Inc. 18
ਖ਼نԽ • ⼀度正規化することで、各層のでの変化が別の層に影響を及ぼ しにくくなる • 正規化する前後で表現⼒は同等 • 誤差逆伝搬法の中でも平均・分散を計算する操作も含めて微分 を計算する •
パラメータを更新した後にパラメータの値を正規化するより効率的(?) • 決定的な予測をするためには、m(l)とv(l)を複数のミニバッチ に対して計算し、その平均を使う © 2017 Retrieva, Inc. 19
֬తޯ๏ͷ֦ு "EBN • 学習率をパラメータごとに調整するアルゴリズム • 適応的に(adaptive)勾配の1次・2次モーメント(moment)を推定する • 勾配の指数移動平均m(k)、中⼼化されていない分散の指数移動 平均v(k) (>)
= ) (>()) + 1 − ) > (>) = C (>()) + (1 − C )( > )C • Beta1, beta2 は0.9、0.999が推奨値 • 過去の勾配への重みを指数的に減少させ、直近の勾配を重視する © 2017 Retrieva, Inc. 20
֬తޯ๏ͷ֦ு "EBN • 初期値の影響を補正する D(>) = (>) 1 − )
> , E(>) = (>) 1 − ) > • パラメータを更新する >F) = > − D(>) E(>) + • は学習率で、0.001が推奨値。 は0除算を防ぐ値で、10^-8が推奨値 • 勾配の平均を勾配の標準偏差で割っている • 継続的に勾配が⼤きいパラメータは学習率を⼩さく • 勾配が⼩さいパラメータは学習率を⼤きく © 2017 Retrieva, Inc. 21
ύϥϝʔλબ • グリッド探索 • 複数の超パラメータの候補値のあらゆる組み合わせを評価して、⼀番良い組み合わ せを選ぶ⽅法 • 深層学習では、超パラメータが多いため、全て試すことは困難 • ランダム探索
• 状態変数の数 x 層の数 x 学習率、などをある設定した範囲からそれぞれランダムに 選択する • ベイズ最適化 • 広い範囲から良い超パラメータを探すために、獲得関数を最適化することで、評価 結果の不確実性が⾼く、評価結果が良さそうな点を選ぶことができる • ⼈⼿ • 学習中の結果を確認しながら、学習率を調整、学習を打ち切るなどの調整をする © 2017 Retrieva, Inc. 22