Upload
shotaro-sano
View
1.167
Download
0
Embed Size (px)
Citation preview
Chapter 7: 再帰型ニューラルネット
機械学習プロフェッショナルシリーズ輪読会
~深層学習編~
佐野 正太郎
前章までの流れ
順伝播型や自己符号化器では入出力次元数が固定
ニューラルネット
6.0
5.0
2.0
入力ベクトル 出力ベクトル
1.0
9.0
固定次元
固定次元
本章で扱う問題
サンプル毎に系列長が違うデータをどう扱うか?
ニューラルネット
1.0
9.0
3.0
入力ベクトル系列 出力ベクトル系列
6.0
5.0
2.0
2.0
4.0
6.0
1.0
9.0
6.0
3.0
7.0
3.0
固定次元
固定次元
可変
入力と同じ系列長
応用
自然言語処理
途中までの文章から次の単語を順次予測
音声認識
短時間フレーム毎の音素認識
We can get an idea of the quality of the leaned feature 1x 2x 3x 4x 5x 6x 7x 8x 9x 10x
11x11y
w ʌ n n n ʌ ʌ ʌ ʌ w w
トピック
Recurrent Neural Network (RNN)
系列量が異なるサンプルの予測・学習
Long Short-Term Memory (LSTM)
より長い系列の予測・学習
Connectionist Temporal Classification (CTC)
時間フレーム単位のラベル付けが不要なRNN学習
略語
FFNN
Feed Forward Neural Network
順伝播型ニューラルネットワーク
RNN
Recurrent Neural Network
再帰型ニューラルネットワーク
BP
Back Propagation
誤差逆伝播法
Recurrent Neural Network (RNN)
RNNの構造
3層FFNNに前時刻からのディレイ入力が付加
ネットワークの使い方が違う!
FFNNでは順伝播計算が1回だけ
再帰型では系列長だけ順伝播計算を繰り返す
tz1tz2
1
1
tz1
2
tztx1
tx2
ty1
ty2
tz1tz2
tx1
tx2
ty1
ty2
FFNN RNN
RNNによる系列予測
tx 2x 1x
RNNによる系列予測
tx 2x1x
0z
RNNによる系列予測
tx 2x1y
1z
RNNによる系列予測
tx 1y
2x
1z
1z
RNNによる系列予測
tx 1y2y
2z
RNNによる系列予測
tx 2y 1y
3x
2z
2z
RNNによる系列予測
tx 2y 1y
RNNによる系列予測
2y 1y
txty
1tz
RNNの順伝播計算
現時刻の入力 と前時刻の中間層出力 から を計算
入力層 → 中間層
現時刻の入力 前時刻からの入力
tz1tz2
1
1
tz1
2
tztx1
tx2
ty1
ty2
1tztx
ty
RNNの順伝播計算
中間層 → 出力層 (FFNNと同様)
tz1tz2
1
1
tz1
2
tztx1
tx2
ty1
ty2
RNNの重み学習 (BPTT)
学習法: Back Propagation Through Time (BPTT)
RNN =「深さが系列長のFFNN」→ 展開してBPを適用
1
1x
1
2x
0
1z
0
2z
2
1x
2
2x
1
1z
1
2z
3
1x
3
2x
2
1z
2
2z
1
1y
1
2y
tx1
tx2
1
1
tz
1
2
tz
2
1
ty
2
2
ty
2
1y
2
2y
ty1
ty2
tz1
tz2
1
1
ty
1
2
ty
・・・
復習:FFNNの重み学習 (BP)
サンプル毎に目的関数の勾配でパラメタを更新
勾配の計算:連鎖規則で問題を分解
復習:FFNNの重み学習 (BP)
t
ju ft
jz
t 層目の第 j ユニット
定義から
微分可能
中間層の場合
直接微分できない
復習:FFNNの重み学習 (BP)
更に連鎖規則を適用
定義から
微分可能
復習:FFNNの重み学習 (BP)
δの漸化式が得られる
出力層のδは活性化関数の定義から微分可能
出力層から再帰的に δを計算
全ての δ が計算できれば全ての重み勾配も計算できる
RNNの重み学習 (BPTT)
各層(時刻)で出力を持つのでδの漸化式が異なる
出力系列
1
1x
1
2x
0
1z
0
2z
2
1x
2
2x
1
1z
1
2z
3
1x
3
2x
2
1z
2
2z
1
1y
1
2y
tx1
tx2
1
1
tz
1
2
tz
2
1
ty
2
2
ty
2
1y
2
2y
ty1
ty2
tz1
tz2
1
1
ty
1
2
ty
・・・
RNNの重み学習(BPTT法)
t
ku
1
1
tu
1
2
tu
tv1outf
tv2outf
・・・
・・・
2
1
tu
2
1
tu
・・・
ty1
ty2
・・・
が目的関数に
影響する範囲
f
f
f
f
f
RNNの重み学習(BPTT法)
BPTTにおけるδの漸化式
次時刻への入力を
経由した微分連鎖
出力層への入力を
経由した微分連鎖
RNNの重み学習(BPTT法)
BPTTにおけるδの漸化式
RNNの重み学習(BPTT法)
BPTTにおけるδの漸化式
漸化式
定義から
微分可能
RNNの重み学習(BPTT法)
BPTTにおけるδの漸化式
RNNの重み学習 (BPTT)
・・・ T
1, Tout
1T
2, Tout
2T1 2
2,out1,out Tout,
RNNの重み学習(BPTT法)
RNNをサンプル系列長のFFNNに展開
展開されたFFNNにBPを適用
普通のBPとの違い
δの漸化式に各時刻の出力が反映される
Long Short-Term Memory (LSTM)
復習:勾配消失問題
ネットワークが深すぎると
学習がうまくいかない!
LSTM
RNNの問題点
BPTTで展開されるFFNNは入力系列長の深さを持つ
勾配消失問題により長い系列の学習が困難
LSTM
中間層に状態(長期記憶)を与えることで長い系列に対応
RNNの中間ユニットをメモリユニットに置きかえた構造
LSTMにおける中間ユニット (メモリユニット)
ユニット は状態 を持つ (メモリセル)
中間ユニットが青枠内のモジュール群に置き換わる
活性化関数 (1回目)
入力ゲート
状態計算 (前状態との加算)
活性化関数 (2回目)
出力ゲート
メモリユニット
入力層 出力層
入力層
t
ju t
jzt
jsf f
tI
jg ,
tO
jg ,
f
f
t
jsj
中間層
(前時刻)
tI
jg , tF
jg , tO
jg ,
各メモリユニットの状態計算
メモリユニット
前時刻の
状態
入力層の
加重和
忘却ゲート 入力ゲート
入力層 出力層
入力層
t
ju t
jzt
jsf f中間層
(前時刻)
tI
jg , tF
jg , tO
jg ,
各メモリユニットからの出力計算
メモリユニット
現状態の
活性化値
出力ゲート
入力層 出力層
入力層
t
ju t
jzt
jsf f
tI
jg ,
中間層
(前時刻)
tF
jg , tO
jg ,
メモリユニット:ゲートの計算
入力/忘却/出力ゲートもネットワーク構造を持つ
入力ゲート
忘却ゲート
出力ゲート
中間層ユニットへの入力と同じ計算
(異なる重みを学習)
LSTM
LSTM
入力層 中間層 出力層
入力
ゲート
忘却
ゲート
出力
ゲート
メモリ
セル
中間層
入力
LSTMの学習
学習すべきパラメタ
① 中間層入力への重み
② 入力ゲートへの重み
③ 忘却ゲートへの重み
④ 出力ゲートへの重み
⑤ 出力層への重み
1 1
2 2
3 3
4 4
5 5
LSTMの学習
更に2つのユニットがあると考える
状態から状態への恒等写像ユニット
状態に活性化関数を作用させるユニット
入力重みは常に1
t
jzt
ju ft
js ft
js id
fff
出力層
入力層
入力層
中間層
(前時刻)
tI
ju , tF
ju , tO
ju ,
LSTMの学習
それぞれの ユニットについて δ を計算
i.e., 目的関数のユニット入力に関する微分
それぞれの出力先を経由した微分連鎖を計算(?)
out
OFI
cell ~
LSTMの学習
LSTMの学習
Tout,
TO,T~T
cell
T1, TO1~ T
TI ,TF ,~
1T
cell
1, Tout
・・・
RNNの学習同様に漸化式で全ての δ を計算
全ての δ がわかれば全ての重み勾配が計算可能
Connectionist Temporal Classification (CTC)
CTC
理想の訓練データ
現実の訓練データ
w ʌ n n n ʌ ʌ ʌ ʌ w w
ここからここまで ”wʌn”
CTC
問題設定
入力:ベクトル系列
出力:ラベル系列
サンプル毎の目的関数
TxxX ,,1
||1 ,, llll
)|(log XlpEn
入出力の系列長は
必ずしも一致しない
出力はソフトマックス層
CTCによる学習
・・・ T1T2T1 2
out
厳密な出力系列は知らないけどBPTTを適用したい
各時刻・各出力ユニットの が計算できればOK!
1, Tout2, Tout2,out1,out Tout,
CTCによる学習
どうやって
計算するか?
p(l|X) の計算
出力層に空白ラベル_のユニットを追加
a b a b _
p(l|X) の計算
入出力の系列長を揃えたい
空白ラベル_が存在すると仮定
各正解ラベルを(空白ラベルor同じラベル)の連続で埋める
""abl
__,_,_,,,ba
__,_,,,, baa
ba _,_,_,_,,
bbbaaa ,,,,,
系列長6の場合
RNNからの出力ラベルは
この中のどれか
(確率的にしか分からない)
p(l|X) の計算
)|( Xabpl
)|__,_,_,,,(' Xbapl
)|__,_,,,,(' Xbaapl
)|_,_,_,_,,(' Xbapl
)|,,,,,(' Xbbbaaapl
全部足すと p(l|X)
6
_
5
_
4
_
3
_
21 yyyyyy ba
6
_
5
_
4
_
321 yyyyyy baa
65
_
4
_
3
_
2
_
1
ba yyyyyy
654321
bbbaaa yyyyyy
ソフトマックス層の
出力から計算可能
p(l|X) の高速計算
どうやって
計算するか?
どうやって
もっと速く
計算するか?
p(l|X) の高速計算
)|( Xabpl
)|__,_,_,,,(' Xbapl
)|__,_,,,,(' Xbaapl
)|_,_,_,_,,(' Xbapl
)|,,,,,(' Xbbbaaapl
全部足すと p(l|X)
6
_
5
_
4
_
3
_
21 yyyyyy ba
6
_
5
_
4
_
321 yyyyyy baa
65
_
4
_
3
_
2
_
1
ba yyyyyy
654321
bbbaaa yyyyyy
ソフトマックス層の
出力から計算可能
1 2 3 4 5 6 時刻
状態
_
a
_
b
_
p(l|X) の高速計算
全パスの確率和)|( Xlp
2
_y
2
ay2
ay
2
by
2
_y
1 2 3 4 5 6 時刻
状態
ある時刻に着目
_
a
_
b
_
1 2 3 4 5 6 時刻
状態
この状態を通るパスと
_
a
_
b
_
1 2 3 4 5 6 時刻
状態
この状態を通るパスと
_
a
_
b
_
1 2 3 4 5 6 時刻
状態
この状態を通るパスと
_
a
_
b
_
1 2 3 4 5 6 時刻
状態
この状態を通るパスと
_
a
_
b
_
1 2 3 4 5 6 時刻
状態
この状態を通るパスと
_
a
_
b
_
全部の確率和を足すと
1 2 3 4 5 6 時刻
状態
_
a
_
b
_
)|( Xlp
… t … 時刻
状態
…
s
…
p(l|X) の高速計算
s
tstsXlp ),(),()|(
α(s, t) は
前半パスの
確率和
β(s, t) は
後半パスの
確率和
p(l|X) の高速計算
)1,()1,1(),( )(')(' tsytsyts t
sl
t
sl
α(s, t) は
漸化式で
計算
状態
_
a
_
b
_
1 2 3 4 5 6 時刻
t
sly )('
)1,1( ts
)1,( ts
(sが空白の場合)
p(l|X) の高速計算
)1,()1,1()1,2(),( )(')(')(' tsytsytsyts t
sl
t
sl
t
sl
α(s, t) は
漸化式で
計算
状態
_
a
_
b
_
1 2 3 4 5 6 時刻
)1,1( ts
)1,( ts
)1,2( ts
t
sly )('
(sが空白以外の場合)
p(l|X) の高速計算
1
_)1,1( yt=1 の場合
状態
_
a
_
b
_
1 2 3 4 5 6 時刻
1
)(')1,2( sly
動的計画法でαの計算を高速化 (βも同様)
… t … 時刻
状態
…
s
…
p(l|X) の高速計算
s
tstsXlp ),(),()|(
α(s, t) は
前半パスの
確率和
β(s, t) は
後半パスの
確率和
p(l|X) の微分計算
どうやって
計算するか?
速くなった!
p(l|X) の微分計算
p(l|X) の微分も α と β から計算可能
ラベル j に
対応する
状態の集合
CTCによる学習
p(l|X)とp(l|X) の微分が分かった → が計算可能 out
CTCによる学習
が計算可能 → BPTTが適用できる
・・・ T
1, Tout
1T
2, Tout
2T1 2
2,out1,out Tout,
out
CTCによる予測
RNN出力から冗長でない系列へとデコードしたい
1.0
9.0
3.0
入力ベクトル系列 冗長なラベル系列
6.0
5.0
2.0
2.0
4.0
6.0
2.0
4.0
6.0
bba ,_,,
ab
本当に欲しい出力
CTCによる予測
愚直な計算だと時間かかる
厳密解を速く計算する方法は知られていない