Upload
shuhei-sowa
View
212
Download
3
Embed Size (px)
Citation preview
MLP深層学習
隠れマルコフモデルと コネクショニスト時系列分類法曽和 修平
・マルコフモデル
・隠れマルコフモデル
・コネクショニスト時系列分類法
扱う内容
-前向き/後ろ向きアルゴリズム-ビタビアルゴリズム-バウム・ウェルチアルゴリズム
マルコフモデル
マルコフモデルとは
・各試行は独立ではないとする確率モデル
現実世界では、独立性が成り立たない場合が多い株価、音声信号、言語・・など
→例題から考えていく
・では、具体的にどのような確率モデルなのか
マルコフ性とマルコフ過程
• 各試行が独立でない現在の状態が一時点前の状態に依存して確率的に決まる
マルコフ性
マルコフ過程• マルコフ性を満たすような確率過程
j重マルコフ過程
• 現在の状態がj時点までの状態に依存して確率的に決まる
j=1のとき特に単純マルコフ過程と呼ぶ
例題
サイコロが までc種類あり、
までm種類の目がある
t回目に投げたサイコロの種類を ,観測された目を で表す
v1 ⇠ vm
!1 ⇠ !c
st xt
t回目に取り出すサイコロ は(t-1)回目に取り出したサイコロ
によって確率的に決まるとする
st
その確率を a(st, st1) で表す
st1
例題
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.50.2 0.1 0.70.3 0.1 0.6
1
A B =
0
@0.8 0.20.6 0.40.3 0.7
1
A
出目(2種類)
種類
現在の状態
次の状態
!1
!2 !3
0.1
0.40.2 0.5
0.3
0.1
0.70.60.1
パラメータの最尤推定
AとBとρが決まればマルコフモデルが完成する
(観測データが存在している事が前提なので、 マルコフモデルは教師あり学習)
⇢i !i・・初期状態(t=1)が である確率
⇢ = (⇢1, ⇢2, ..., ⇢c)
最後に初期状態の定義
⇒それぞれのパラメータを観測データから最尤推定していくx = x1x2...xt...xns = 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(sn1, sn)
=
nY
t=1
a(st1, st) a(s0, s1)def= P (s1)(ただし )
ここまでを整理すると
P (x, s) =
nY
t=1
a(st1, st)b(st, xt)
パラメータの最尤推定
P (x, s) =
nY
t=1
a(st1, st)b(st, xt)
微分しやすいように対数を取る
P (x, s) = logP (s1) +n1X
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 =wiPn
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
=wiPn
k=1 wk(i = 1, 2..., n)
となる。
(証明終)
パラメータの最尤推定
P (x, s) = logP (s1) +n1X
t=1
log a(st, st+1) +nX
t=1
log b(st, xt)
La =n1X
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 =mijPc
h=1 mih
また、
aij =mij
niと求められる(パラメータAの最尤推定値)
パラメータの最尤推定
P (x, s) = logP (s1) +n1X
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 =njkPml=1 njl
=njk
nj
より
(パラメータBの最尤推定値)
パラメータの最尤推定
P (x, s) = logP (s1) +n1X
t=1
log a(st, st+1) +nX
t=1
log b(st, xt)
初期状態は既知であるものとしている
Lp = logP (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(st1, 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
↵t1(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
↵t1(1)
↵t1(i)
↵t1(c)
↵1j
↵ij
↵cj
b(!j , xt)
↵t(1)
↵t(j)
↵t(c)
↵t(j) = [
cX
i=1
↵t1(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)Pci=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) = maxs1,...,st1
P (x1...xt, s1...st1, st = !j)
この式は再帰的な形で表せる
1(i) = ⇢ib(!i, x1)
(t = 2, 3, ..., n) (i, j = 1, 2, ..., c)
t(j) = maxi
[ t1(i)aij ]b(!j , xt)
ビタビアルゴリズム
1時点前の状態のうち,先の確率を最大にする状態がωk
であったとする時、Ψを以下で定義
t(j) = k = argmaxi{ t1(i)aij}
上式により,最適な状態系列を記憶しておく (状態を復元するため)
ビタビアルゴリズム
t-1 t
↵1j
↵ij
↵cj
b(!j , xt)
t1(1)
t1(i)
t1(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{ t1(i)aij}b(!j , xt)
t(j) = argmaxi{ t1(i)aij}
3.終了 P (x, s⇤) = maxi
{ 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 =
Pn1t=1 at(i)aijb(!j , xt+1)βt+1(j)Pn1
t=1 ↵t(i)βt(i)
bik =
Pnt=1 δ(xt, vk)↵t(j)βt(j)Pc
t=1 ↵t(j)βt(j)
⇢i =↵1(i)β1(i)Pcj=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で ある確率
ytk
系列内のラベルの生起が互いに独立であるとすると
入力系列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 = ytl0s(↵s1,t1 + ↵s,t1)
↵s,t = ytl0s(↵s2,t1 + ↵s1,t1 + ↵s,t1)
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に対するラベル系列の事後確率の負の対数 尤度を使う
これを で微分しなければならないytk
コネクショニスト時系列分類法の学習
E(w)
ytk= 1
p(d|X)p(d|X)ytk
ここで、αβを利用する
↵s,tβs,t =X
⇡2ß−1(d)\⇡t=d0s
p(d|X)
α_stとβ_stの積は(s,t)を通る全パスにわたる同じ確率の総和
任意のtに対し,全てのs ∈[1,|d’|]にわたる和を取ると
p(d|X) =
|d0|X
s=1
↵s,tβs,td’はdの系列の間,最初,最後に空白ラベルを入れたもの
コネクショニスト時系列分類法の学習
α,βには が含まれているので微分可能。ytk
その結果より、出力層でのデルタ out,tk =E
vtkを計算
このような流れでBTPP法を適用し、パラメータを求める
コネクショニスト時系列分類法学習後,与えられた入力系列Xに対してラベル列lを推定
l = argmaxip(l|X)
ただ、この厳密解を少ない計算量で計算する方法は知られて いないらしい。ので、近似的に計算を行う
最も単純なのは
⇡ = argmax⇡p(⇡|X)
と求めた後 l = ß(⇡) とする方法
この方法で計算したlが最適である保証はない。
p(⇡|X) =
TY
t=1
yt⇡tと各時刻のπtの正解ラベルである
確率yの積和を取るだけなので計算が速い