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
1
x 2
x 3
x 4
x 5
x 6
x 7
x 8
x 9
x 10
x 11
x
11
y
w ʌ n n nʌʌʌʌww
トピック
 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回だけ
 再帰型では系列長だけ順伝播計算を繰り返す
t
z1
t
z2
1
1
t
z
1
2
t
zt
x1
t
x2
t
y1
t
y2
t
z1
t
z2
t
x1
t
x2
t
y1
t
y2
FFNN RNN
RNNによる系列予測
t
x  2
x 1
x
RNNによる系列予測
t
x  2
x 1
x
0
z
RNNによる系列予測
t
x  2
x
1
y
1
z
RNNによる系列予測
t
x 
1
y
2
x
1
z
1
z
RNNによる系列予測
t
x 
1
y2
y
2
z
RNNによる系列予測
t
x 
2
y 1
y
3
x
2
z
2
z
RNNによる系列予測
t
x 
2
y 1
y



RNNによる系列予測
2
y 1
y
t
x
t
y
1t
z

RNNの順伝播計算
 現時刻の入力 と前時刻の中間層出力 から を計算
 入力層 → 中間層
現時刻の入力 前時刻からの入力
t
z1
t
z2
1
1
t
z
1
2
t
zt
x1
t
x2
t
y1
t
y2
1t
z
t
x t
y
RNNの順伝播計算
 中間層 → 出力層 (FFNNと同様)
t
z1
t
z2
1
1
t
z
1
2
t
zt
x1
t
x2
t
y1
t
y2
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
t
x1
t
x2
1
1
t
z
1
2
t
z
2
1
t
y
2
2
t
y
2
1y
2
2y
t
y1
t
y2
t
z1
t
z2
1
1
t
y
1
2
t
y
・・・
復習:FFNNの重み学習 (BP)
 サンプル毎に目的関数の勾配でパラメタを更新
 勾配の計算:連鎖規則で問題を分解
復習:FFNNの重み学習 (BP)
t
ju f t
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
t
x1
t
x2
1
1
t
z
1
2
t
z
2
1
t
y
2
2
t
y
2
1y
2
2y
t
y1
t
y2
t
z1
t
z2
1
1
t
y
1
2
t
y
・・・
RNNの重み学習(BPTT法)
t
ku
1
1
t
u
1
2
t
u
t
v1
out
f
t
v2
out
f
・・・・・・
2
1
t
u
2
1
t
u
・・・
t
y1
t
y2
・・・
が目的関数に
影響する範囲
f
f
f
f
f
RNNの重み学習(BPTT法)
 BPTTにおけるδの漸化式
次時刻への入力を
経由した微分連鎖
出力層への入力を
経由した微分連鎖
RNNの重み学習(BPTT法)
 BPTTにおけるδの漸化式
RNNの重み学習(BPTT法)
 BPTTにおけるδの漸化式
漸化式
定義から
微分可能
RNNの重み学習(BPTT法)
 BPTTにおけるδの漸化式
RNNの重み学習 (BPTT)
・・・
T

1, Tout

1T

2, Tout

2T
1
 2

2,out
1,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
jz
t
jsf f
tI
jg ,
tO
jg ,
f
f
t
jsj
中間層
(前時刻)
tI
jg , tF
jg , tO
jg ,
 各メモリユニットの状態計算
メモリユニット
前時刻の
状態
入力層の
加重和
忘却ゲート 入力ゲート
入力層 出力層
入力層
t
ju t
jz
t
jsf f
中間層
(前時刻)
tI
jg , tF
jg , tO
jg ,
 各メモリユニットからの出力計算
メモリユニット
現状態の
活性化値
出力ゲート
入力層 出力層
入力層
t
ju t
jz
t
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
jz
t
ju f t
js ft
js id
fff
出力層
入力層
入力層
中間層
(前時刻)
tI
ju , tF
ju , tO
ju ,
LSTMの学習
 それぞれの ユニットについて δ を計算
 i.e., 目的関数のユニット入力に関する微分
 それぞれの出力先を経由した微分連鎖を計算(?)
out

O
F
I

 cell
 
~
LSTMの学習
LSTMの学習
Tout,

TO,
T

~T
cell
T
1, TO
1~ T

TI ,
TF,~

1T
cell
1, Tout

・・・
 RNNの学習同様に漸化式で全ての δ を計算
 全ての δ がわかれば全ての重み勾配が計算可能
Connectionist Temporal Classification (CTC)
CTC
 理想の訓練データ
 現実の訓練データ
w ʌ n n nʌʌʌʌww
ここからここまで ”wʌn”
CTC
 問題設定
 入力:ベクトル系列
 出力:ラベル系列
 サンプル毎の目的関数
T
xxX ,,1

||1
,, l
lll 
)|(log XlpEn 
入出力の系列長は
必ずしも一致しない
出力はソフトマックス層
CTCによる学習
・・・
T
1T
2T
1
 2

out

 厳密な出力系列は知らないけどBPTTを適用したい
 各時刻・各出力ユニットの が計算できればOK!
1, Tout
2, Tout
2,out
1,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
ay
2
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( yt=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

1T

2, Tout

2T
1
 2

2,out
1,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による予測
 愚直な計算だと時間かかる
 厳密解を速く計算する方法は知られていない

再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会