MLP深層学習
隠れマルコフモデルと
コネクショニスト時系列分類法
曽和 修平
・マルコフモデル
・隠れマルコフモデル
・コネクショニスト時系列分類法
扱う内容
-前向き/後ろ向きアルゴリズム
-ビタビアルゴリズム
-バウム・ウェルチアルゴリズム
マルコフモデル
マルコフモデルとは
・各試行は独立ではないとする確率モデル
現実世界では、独立性が成り立たない場合が多い
株価、音声信号、言語・・など
→例題から考えていく
・では、具体的にどのような確率モデルなのか
マルコフ性とマルコフ過程
• 各試行が独立でない
現在の状態が一時点前の状態に依存して確率的に決まる
マルコフ性
マルコフ過程
• マルコフ性を満たすような確率過程
j重マルコフ過程
• 現在の状態がj時点までの状態に依存して確率的に決まる
j=1のとき特に単純マルコフ過程と呼ぶ
例題
サイコロが までc種類あり、
までm種類の目がある
t回目に投げたサイコロの種類を ,観測された目を で表す
v1 ⇠ vm
!1 ⇠ !c
st xt
t回目に取り出すサイコロ は(t-1)回目に取り出したサイコロ
   によって確率的に決まるとする
st
その確率を a(st, st−1) で表す
st−1
例題
t-1回目に取り出したサイコロがωiで、t回目にサイコロωj
を取り出す確率 aij = a(!i, !j)
t回目にサイコロを投げてxtが観測される確率を b(st, xt)と表す
サイコロωjを投げてvkが観測される確率は bjk = b(!j, vk)
遷移確率
出力確率
確率的に状態が遷移していく過程→マルコフ連鎖
例題
ある時点でサイコロ を投げたら、次の時点では確率 で
サイコロ を投げ、確率  で の目が観測される
ここまでをまとめると・・
!i
!j
aij
bjk vk
一般的に表現すると・・
ある時点で状態 にあり、次の時点に確率  で に遷移
するとともに、確率  で を出力する
!i !jaij
bjk vk
例題
遷移確率 と出力確率  はそれぞれ行列A,Bとして表記できるaij bjk
例)
A =
0
@
0.1 0.4 0.5
0.2 0.1 0.7
0.3 0.1 0.6
1
A B =
0
@
0.8 0.2
0.6 0.4
0.3 0.7
1
A
出目(2種類)
種類
現在の状態
次の状態
!1
!2 !3
0.1
0.4
0.2 0.5
0.3
0.1
0.7
0.60.1
パラメータの最尤推定
AとBとρが決まればマルコフモデルが完成する
(観測データが存在している事が前提なので、
 マルコフモデルは教師あり学習)
⇢i !i・・初期状態(t=1)が である確率
⇢ = (⇢1, ⇢2, ..., ⇢c)
最後に初期状態の定義
⇒それぞれのパラメータを観測データから最尤推定していく
x = x1x2...xt...xn
s = s1s2...st...sn
パラメータの最尤推定
x = x1x2...xt...xn
s = s1s2...st...sn
・・・得られた出目の系列
・・・得られた状態の系列
このような結果が得られる確率は
P(x, s) = P(s)P(x|s)
P(x|s) = P(x1x2...xn|s1s2...sn)
= P(x1|s1)P(x2|s2)...P(xn|sn)
b(st, xt) = P(xt|st)ここから、 を用いて
P(x|s) =
nY
t=1
b(st, xt)
と書ける。
n…観測回数
パラメータの最尤推定
P(s) について考える
状態の系列は,1つ前の系列の影響を受けるので独立でない
P(s) = P(s1s2...sn)
= P(s1)a(s1, s2)a(s2, s3)...a(sn−1, sn)
=
nY
t=1
a(st−1, st) a(s0, s1)
def
= P(s1)(ただし )
ここまでを整理すると
P(x, s) =
nY
t=1
a(st−1, st)b(st, xt)
パラメータの最尤推定
P(x, s) =
nY
t=1
a(st−1, st)b(st, xt)
微分しやすいように対数を取る
P(x, s) = log P(s1) +
n−1X
t=1
log a(st, st+1) +
nX
t=1
log b(st, xt)
下線部はそれぞれ ⇢i, aij, bjk のみを含む
なので、下線部それぞれについて独立にパラメータを最大化
すれば良い
(補足)最尤推定に必要な定理
n個の正の定数 がある.
ここで,n個の変数 x1, x2, ..., xn (0 < xi < 1)
が拘束条件
nX
i=1
xi = 1 を満たしている時
f(x1, x2, ..., xn) =
nX
i=1
wi log xi を最大にする xi は
xi =
wi
Pn
k=1 wk
(i = 1, 2..., n)
w1, w2, ..., wn
(補足)最尤推定に必要な定理【証明】
ラグランジュの未定乗数法より
L =
nX
i=1
wi log xi − λ
nX
i=1
xi − 1
!
この式が極値を取るxiを求めるため、Lをxiで偏微分し
結果を0と置く
∆L
∆xi
= wi
1
xi
− λ = 0
これより λxi = wi (i = 1, 2..., n)
(補足)最尤推定に必要な定理【証明】
両辺に  を施すと
λxi = wi (i = 1, 2..., n)
nX
i=1
λ
nX
i=1
xi =
nX
i=1
wi
ここで、
nX
i=1
xi = 1 という拘束条件があったので
λ =
nX
i=1
wi
従って、λxi = wi (i = 1, 2..., n) より、求めるxiは
xi =
wi
λ
=
wi
Pn
k=1 wk
(i = 1, 2..., n)
となる。
(証明終)
パラメータの最尤推定
P(x, s) = log P(s1) +
n−1X
t=1
log a(st, st+1) +
nX
t=1
log b(st, xt)
La =
n−1X
t=1
log a(st, st+1)
=
cX
i=1
(
cX
j=1
mij log aij)
c …状態の数
mij …ωi,ωjと連続して
   取り出した回数
パラメータ  に関して最大化するには各i毎に
を最大化すれば良い
aij
cX
j=1
mij log aij
パラメータの最尤推定
cX
j=1
aij = 1 という拘束条件が成り立つ
cX
j=1
mij = ni なので
よって、先の定理を用いると
ˆaij =
mij
Pc
h=1 mih
また、
ˆaij =
mij
ni
と求められる(パラメータAの最尤推定値)
パラメータの最尤推定
P(x, s) = log P(s1) +
n−1X
t=1
log a(st, st+1) +
nX
t=1
log b(st, xt)
Lb =
cX
j=1
mX
k=1
njk log bjk
!
サイコロ  を取り出した回数をwj nj とし
サイコロ  を投げて出た目が  であった回数を  とするwj vk njk
m…出力記号の数
各j毎に
mX
k=1
njk log bjk を最大化すれば良い
パラメータの最尤推定
mX
k=1
bjk = 1 (j = 1, 2..., c)
mX
k=1
njk = nj
bに関しても以下の拘束条件が成り立っているので
先と同様の定理を用いることができる
ˆbjk =
njk
Pm
l=1 njl
=
njk
nj
より
(パラメータBの最尤推定値)
パラメータの最尤推定
P(x, s) = log P(s1) +
n−1X
t=1
log a(st, st+1) +
nX
t=1
log b(st, xt)
初期状態は既知であるものとしている
Lp = log P (s1 = !i)
s1=ωiだとしたとき
= log ⇢i
⇢
ˆ⇢i = 1
ˆ⇢j = 0 (j 6= i)
上式を最大にするパラメータρは
(パラメータρの最尤推定値)
隠れマルコフモデル
隠れマルコフモデルとは
• マルコフ性をもったデータに対する教師なし学習
(マルコフモデルでは教師あり学習だった)
単純マルコフ過程を前提として先と同様の例題を考えていく
ある時点でサイコロ を投げたら、次の時点では確率 で
サイコロ を投げ、確率  で の目が観測される
!i
!j
aij
bjk vk
x = x1x2...xt...xn s = s1s2...st...sn
ただし、今回は取り出したサイコロの種類がわからない
既知 未知
考えないといけない問題
(3)観測結果からパラメータA,B,ρを最尤推定
(1)パラメータA,B,ρが既知の時,ある観測結果が得られる確率
(2)パラメータA,B,ρが既知の時,観測結果から推定される系列
(1)パラメータA,B,ρが既知の時,ある観測結果が得られる確率
観測結果 x = x1x2...xt...xn が得られた
このような観測結果が得られる確率  は?P(x)
系列sを観測することができないので、可能な系列sを全て
想定しないといけない
P(x) =
X
s
P(x, s)
P(x, s) =
nY
t=1
a(st−1, st)b(st, xt)
P(x,s)は先と同様
により求まる
(1)パラメータA,B,ρが既知の時,ある観測結果が得られる確率
教師ありの場合は,sも観測できるため,そのような観測結果が
得られる確率P(x,s)は容易に求まる
教師なしの場合は周辺化の演算が必要となり,計算量が膨大
P(x) =
X
s
P(x, s) 2nc^nのオーダ
効率的な計算方法が必要
=前向き・後向きアルゴリズム
(1)パラメータA,B,ρが既知の時,ある観測結果が得られる確率
x = x1x2...xt...xn観測結果
が得られ,かつt回目にサイコロωiを取り出している確率は
P(x, st = !i) = P(x1x2...xt, st = !i)P(xt+1xt+2...xn|st = !i)
↵t(i)
def
= P(x1x2...xt, st = !i)
βt(i)
def
= P(xt+1xt+2...xn|st = !i)
P(x, st = !i) = ↵t(i)βt(i)
と定義し
とする
(1)パラメータA,B,ρが既知の時,ある観測結果が得られる確率
P(x, st = !i) = ↵t(i)βt(i)
↵t(i) ・・・x1x2..xtという観測結果が得られ,かつt回目に
   サイコロωiを取り出している確率
βt(i) ・・・t回目にサイコロωiを取り出したという条件で
   以降の観測結果がxt+1,xt+2…xnとなる確率
前向きアルゴリズム
↵t(i) は再帰的な計算方法で求めることができる
↵t(j) = [
cX
i=1
↵t−1(i)aij]b(!j, xt)
(t = 2, 3..., n) (j = 1, 2..., c)
↵1(i) = p(x1, s1 = !i)
= ⇢ib(wi, x1)
各パラメータが既知なのでここは
計算できる
ただし
(i = 1, 2, ..., c)
このような計算方法は前向きアルゴリズムと呼ばれている
前向きアルゴリズム
t-1 t
↵t−1(1)
↵t−1(i)
↵t−1(c)
↵1j
↵ij
↵cj
b(!j, xt)
↵t(1)
↵t(j)
↵t(c)
↵t(j) = [
cX
i=1
↵t−1(i)aij]b(!j, xt)
前向きアルゴリズム
P(x) = P(x1x2...xn)
=
cX
i=1
↵n(i)
↵t(i) をt=nとし、sに関して周辺化することでP(x)が求まる
↵n(i) = P(x1x2...xn, sn = !i)
↵n(i) を前向きアルゴリズムにより計算することでP(x)を求めた
βn(i)を後向きアルゴリズムにより計算することでも求められる
(今回は省略)
(2)パラメータA,B,ρが既知の時,観測結果から推定される系列
観測結果 x = x1x2...xt...xn が得られた
この時、観測できなかった系列      を推定s = s1s2...sn
観測結果xをもたらす系列sとしてはどのようなものが最適か?
(2)パラメータA,B,ρが既知の時,観測結果から推定される系列
求めるべき系列sを s⇤
= s⇤
1s⇤
2...s⇤
n とする
γt(i)
def
= P(st = !i|x)
γt(i)また、 を以下のように定義する
観測結果xが得られた時,t回目にサイコロωiを取り出している
確率
cX
i=1
γt(i) = 1
が成り立つのは自明
(2)パラメータA,B,ρが既知の時,観測結果から推定される系列
γt(i) = P(st = !i|x)
=
P(x, st = !i)
P(x) P(x, st = !i) = ↵t(i)βt(i)
=
↵t(i)βt(i)
P(x) P(x) = P(x1x2...xn)
=
cX
i=1
↵n(i)=
↵t(i)βt(i)
Pc
i=1 ↵n(i)
(2)パラメータA,B,ρが既知の時,観測結果から推定される系列
ここでS*を求める手段として
i⇤
= argmaxi (γt(i))
s⇤
= !⇤
i
(最も確率が高いものをs*とする)
が、考えられるが、これは誤り
マルコフ性を持つので、このようにして求めた系列は
実現不可能な場合があるため
観測結果xが得られたという条件下で、連続した系列sの
正規確率P(s|x)を最大化しなくてはならない
(γtはtごとに独立として求めている)
ビタビアルゴリズム
すなわち・・
s⇤
= argmaxs(P(s|x))
= argmaxs(P(x, s))
= argmaxs(
P(x, s)
P(x)
)
可能な全てのP(x,s)を求めれば最大となる系列sを発見できる
しかし、可能なsはc^n通りあるので計算量は膨大となる
ビタビアルゴリズム
ビタビアルゴリズム
ある時点tで状態ωjに到達し,かつxtが観測される確率を考え
その最大値をψt(j)で表す
t(j) = max
s1,...,st−1
P(x1...xt, s1...st−1, st = !j)
この式は再帰的な形で表せる
1(i) = ⇢ib(!i, x1)
(t = 2, 3, ..., n) (i, j = 1, 2, ..., c)
t(j) = max
i
[ t−1(i)aij]b(!j, xt)
ビタビアルゴリズム
1時点前の状態のうち,先の確率を最大にする状態がωk
であったとする時、Ψを以下で定義
t(j) = k = argmaxi{ t−1(i)aij}
上式により,最適な状態系列を記憶しておく
(状態を復元するため)
ビタビアルゴリズム
t-1 t
↵1j
↵ij
↵cj
b(!j, xt)
t−1(1)
t−1(i)
t−1(c)
t(c)
t(j)
t(1)
まず前向きに再起計算していき、nまで到達したら
逆向きにin…i1までたどることにより系列を求める
ビタビアルゴリズム
1.初期化 1(i) = ⇢ib(wi, x1)
1(i) = 0 (i = 1, 2, ..., c)
2.再帰的計算
t(j) = max
i
{ t−1(i)aij}b(!j, xt)
t(j) = argmaxi{ t−1(i)aij}
3.終了 P(x, s⇤
) = max
i
{ n(i)}
(i = 1, 2, ..., c)
4.系列の復元(
it = t+1(it + 1)
s⇤
t = !it
(
in = argmaxi{ n(i)}
s⇤
t = !in
(t = n − 1, ..., 2, 1)
(3)観測結果からパラメータA,B,ρを最尤推定
バウムウェルチアルゴリズムによりパラメータを推定する
EMアルゴリズムの一種
数式を追っていく形ではなく、流れのみを解説する
(長くなるので。。)
バウム・ウェルチアルゴリズム
(1)初期化
パラメータaij, bjk, ⇢i に適当な初期値を与える
(2)再帰的計算
ˆaij =
Pn−1
t=1 at(i)aijb(!j, xt+1)βt+1(j)
Pn−1
t=1 ↵t(i)βt(i)
ˆbik =
Pn
t=1 δ(xt, vk)↵t(j)βt(j)
Pc
t=1 ↵t(j)βt(j)
ˆ⇢i =
↵1(i)β1(i)
Pc
j=1 ↵n(j)
δ(xt, vk) =
(
1(xt = vk)
0(otherwise)
これらの式から      を求める。
α,β等は前向き・後向きアルゴリズムによって求める。
ˆaij,ˆbjk, ˆ⇢i
バウム・ウェルチアルゴリズム
(3)パラメータの更新
aij = ˆaij, bjk = ˆbjk, ⇢i = ˆ⇢iパラメータを として更新する
(4)判定
対数尤度をlogP(x)により計算
=
cX
i=1
↵n(i)P(x)
1ステップ前の対数尤度と比べ,その増分が予め定めていた
閾値よりも小さければ収束とする.
そうでない場合は(2)に戻る
コネクショニスト時系列分類法
コネクショニスト時系列分類法
入出力間で系列長が違う分類問題をHMMではなく
ニューラルネットだけで解決しようとするもの
・RNNの出力の解釈を変更して実現する
・任意のRNN(LSTMや双方向性のものなど)に適用可
コネクショニスト時系列分類法
真のラベル l = ‘cbab’
L = {a,b,c} ・・認識対象となるラベルの集合
L0
= {a, b, c, }・・Lに空白を表すラベルを追加した集合
真のラベルの冗長な系列は無数にある
例){c b aab} { c ba b} {cc b aaa bb}
冗長性のない系列lと冗長な系列πは多:1の以下の
写像によって結ばれる
l = ß(⇡) l = ß(c b aab) = ß( c ba b)
コネクショニスト時系列分類法
1つのラベル系列lに対し,これを与える冗長な系列すべての
集合を ß−1
(l) = {⇡|ß(⇡) = l} と書くことにする
この集合の要素πをlに対する「パス」と呼ぶことにする
長さが8の時の全ての冗長な経路
コネクショニスト時系列分類法
CTCで使うRNNの出力層は|L’|個であり,活性化関数はソフト
マックス関数
時刻tにおける出力  はその時刻の正解ラベルがkで
ある確率
yt
k
系列内のラベルの生起が互いに独立であるとすると
入力系列Xに対して1つのパスπが正解である確率は
p(⇡|X) =
TY
t=1
yt
⇡t
コネクショニスト時系列分類法
これを最大にするようなlを推定される系列とする
p(⇡|X) =
TY
t=1
yt
⇡t
p(l|X) =
X
⇡2ß−1(l)
p(⇡|X)
これは計算量が膨大なので
前向き、後ろ向きアルゴリズムを使って解く
コネクショニスト時系列分類法
前半のtまでパス
後半のt以降のパス ⇡t:T = (⇡t, ..., ⇡T )
⇡1:t = (⇡1, ..., ⇡t)
s番目のラベルを時刻tに通過するパスの集合を考える
前半パス   に関する確率の和p(⇡1:t)
p(⇡t:T )
↵s,t
βs,t後半パス   に関する確率の和
α,βは再帰的に計算可能(前向きと後向き)
コネクショニスト時系列分類法
に関して再帰的に計算↵s,t
l’sが空白の場合,もしくはl’sが空白ではないが空白をまた
いで同じラベルの場合
1)
それ以外の場合2)
↵s,t = yt
l0
s
(↵s−1,t−1 + ↵s,t−1)
↵s,t = yt
l0
s
(↵s−2,t−1 + ↵s−1,t−1 + ↵s,t−1)
t=Tまで計算ができるとp(l|X)は
p(l|x) = ↵|l0|,T + ↵|l0|−1,T で計算できる(図参照)
図の再掲
コネクショニスト時系列分類法の学習
系列Xに対する正解ラベルをdとする
dは冗長性のない入力系列Xより一般に短い系列
最尤推定によってRNNのパラメータを決定
E(w) = −
X
n
log p(dn|Xn)
誤差関数としてXに対するラベル系列の事後確率の負の対数
尤度を使う
これを  で微分しなければならないyt
k
コネクショニスト時系列分類法の学習
∆E(w)
∆yt
k
= −
1
p(d|X)
∆p(d|X)
∆yt
k
ここで、αβを利用する
↵s,tβs,t =
X
⇡2ß−1(d)⇡t=d0
s
p(d|X)
α_stとβ_stの積は(s,t)を通る全パスにわたる同じ確率の総和
任意のtに対し,全てのs ∈[1,|d’|]にわたる和を取ると
p(d|X) =
|d0
|
X
s=1
↵s,tβs,t
d’はdの系列の間,最初,最後に空白
ラベルを入れたもの
コネクショニスト時系列分類法の学習
α,βには  が含まれているので微分可能。yt
k
その結果より、出力層でのデルタ δout,t
k =
∆E
∆vt
k
を計算
このような流れでBTPP法を適用し、パラメータを求める
コネクショニスト時系列分類法
学習後,与えられた入力系列Xに対してラベル列lを推定
ˆl = argmaxip(l|X)
ただ、この厳密解を少ない計算量で計算する方法は知られて
いないらしい。ので、近似的に計算を行う
最も単純なのは
ˆ⇡ = argmax⇡p(⇡|X)
と求めた後 ˆl = ß(ˆ⇡) とする方法
この方法で計算したlが最適である保証はない。
p(⇡|X) =
TY
t=1
yt
⇡tと各時刻のπtの正解ラベルである
確率yの積和を取るだけなので計算が速い

マルコフモデル,隠れマルコフモデルとコネクショニスト時系列分類法