论文地址:https://www.cs.toronto.edu/~graves/icml_2006.pdf
概述
这是论文中第三节的翻译,加入了一些自己的理解。还有没看懂的地方,希望可以有人一起讨论
符号
符号的介绍在论文的第二章里面。
符号 | 含义 |
---|---|
S | 训练集 |
D X × Z D_{X \times Z} DX×Z | 数据服从的分布, X \Chi X是输入, Z \Zeta Z是标签 |
X ∈ ( R m ) ∗ \Chi \in (\mathbb{R}^m)^* X∈(Rm)∗ | 输入是m维的向量,*表示有很多个向量 |
Z ∈ L ∗ \Zeta \in L^* Z∈L∗ | L ∗ L^* L∗是字母表,表示模型的输出在有限字母表中 |
S中每一个样本为
(
x
,
z
)
(x,z)
(x,z),
z
=
(
z
1
,
z
2
,
.
.
.
z
u
)
;
x
=
(
x
1
,
x
2
,
.
.
.
x
T
)
;
u
≤
T
z=(z_1,z_2,...z_u);x=(x_1,x_2,...x_T);u \le T
z=(z1,z2,...zu);x=(x1,x2,...xT);u≤T
训练一个模型:
h
:
X
↦
Z
h: \Chi \mapsto \Zeta
h:X↦Z。
3. Connectionist Temporal Classification
3.1 From Network Outputs to Labellings
对于长度为T的输入 x x x,rnn有m个输入n个输出,权重向量 w w w, N w : ( R m ) T ↦ ( R n ) T N_w:(\mathbb{R}^m)^T \mapsto (\mathbb{R}^n)^T Nw:(Rm)T↦(Rn)T。假设 y = N w ( X ) y=N_w(X) y=Nw(X)是网络的输出序列。
符号 | 含义 |
---|---|
y k t y_k^t ykt | 表示在时刻t得到label k的概率。 |
L ′ T L'^T L′T | 长度为T的路径集合,路径上每一个元素在字母表 L ′ = L ∪ { b l a n k } L'=L \cup\{blank\} L′=L∪{blank} |
p
(
π
∣
x
)
=
∏
t
=
1
T
y
π
t
t
,
∀
π
∈
L
′
T
⋅
⋅
⋅
⋅
⋅
⋅
⋅
⋅
公
式
2
p(\pi|x)=\prod_{t=1}^Ty_{\pi_t}^t, \forall\pi\in L'^T········公式2
p(π∣x)=t=1∏Tyπtt,∀π∈L′T⋅⋅⋅⋅⋅⋅⋅⋅公式2
π
\pi
π是属于
L
′
T
L'^T
L′T中的路径
定义一个多对一的函数
B
:
L
′
T
↦
L
≤
T
B:L'^T\mapsto L^{\le T}
B:L′T↦L≤T,其中
L
≤
T
L^{\le T}
L≤T是可能的Labeling的集合。这个函数的作用就是删除<blank>和重复的labels。例如
B
(
a
−
a
b
−
)
=
B
(
−
a
a
−
−
a
b
b
)
=
a
a
b
B(a-ab-)=B(-aa--abb)=aab
B(a−ab−)=B(−aa−−abb)=aab。然后,使用
B
B
B来定义条件概率,给定
l
∈
L
≤
T
l\in L^{\le T}
l∈L≤T:
p
(
l
∣
x
)
=
∑
π
∈
B
−
1
(
l
)
p
(
π
∣
x
)
⋅
⋅
⋅
⋅
⋅
⋅
⋅
公
式
3
p(l|x)=\sum_{\pi\in B^{-1}(l)}p(\pi|x)·······公式3
p(l∣x)=π∈B−1(l)∑p(π∣x)⋅⋅⋅⋅⋅⋅⋅公式3
3.2 Constructing the classifier
分类器的目标是对于输入
x
x
x输出可能性最大的labelling
h
(
x
)
=
a
r
g
max
l
∈
L
≤
T
p
(
l
∣
x
)
h(x)=arg \max_{l\in L {\le T}}p(l|x)
h(x)=argl∈L≤Tmaxp(l∣x)
使用HMM的术语,将找labelling的任务成为decoding。不幸的是,这篇论文中理论系统没有找到一个通用、可解释的decoding算法,但是后面的两种方法在实践中取得了良好的效果。
第一种方法不是这篇论文的重点,重点是第二种方法。
第一种方法(best path decoding),是基于假设:最可能的路径对应最可能的labelling
h
(
x
)
≈
B
(
π
∗
)
w
h
e
r
e
π
∗
=
a
r
g
max
π
∈
N
t
p
(
π
∣
x
)
h(x) \approx B(\pi^*)\\where\ \ \pi^*=arg\max_{\pi\in N^t}p(\pi|x)
h(x)≈B(π∗)where π∗=argπ∈Ntmaxp(π∣x)
这个公式里面第一次出现了 N t N^t Nt,后面还会出现这个符号,但是文章并没有给出这个符号的具体意思。
第二种方法(prefix search decoding)
4. Training the Network
这一节介绍CTC网络使用梯度下降的优化目标。
目标函数是依据maximum likelihood的原则得到的。这个原则和标准神经网络目标函数的原则是一样的。
4.1 The CTC Forward-Backward Algorithm
需要一个高效的方法去计算单个labelling的条件概率
p
(
l
∣
x
)
p(l|x)
p(l∣x)。公式3中,发现这个问题很复杂:因为需要计算给定labelling的所有路径和。
幸运的是这个问题可以使用一种动态规划的方法解决,类似与HMM中的forward-backward algorithm。关键的一点是针对一个labelling,路径的和可以拆分成对这个labelling对应的前缀迭代求和。
这一段没有太看懂,大致意思是说路径的概率可以拆分成前向和后向两步,但是不知道怎么翻译
对于长度为
r
r
r的序列q,
q
1
:
p
q_{1:p}
q1:p和
q
r
−
p
:
r
q_{r-p:r}
qr−p:r分别表示前p个和后p个字符。对于labelling
l
l
l,定义前向变量
α
t
(
s
)
\alpha_t(s)
αt(s)是在时刻t,
l
1
:
s
l_{1:s}
l1:s的总概率。
α
t
(
s
)
=
d
e
f
∑
π
∈
N
T
B
(
π
1
:
t
)
=
l
1
:
s
∏
t
′
=
1
t
y
π
t
′
t
′
⋅
⋅
⋅
⋅
⋅
⋅
⋅
⋅
公
式
5
\alpha_t(s)\overset{def}{=}\sum_{\pi\in N^T\atop B(\pi_{1:t})=l_{1:s}}\prod_{t'=1}^t y_{\pi_t'}^{t'} ········公式5
αt(s)=defB(π1:t)=l1:sπ∈NT∑t′=1∏tyπt′t′⋅⋅⋅⋅⋅⋅⋅⋅公式5
将会看到
α
(
s
)
\alpha(s)
α(s)可以递归地从
α
t
−
1
(
s
)
\alpha_{t-1}(s)
αt−1(s)和
α
t
−
1
(
s
−
1
)
\alpha_{t-1}(s-1)
αt−1(s−1)得到
这一段中,q的下标长度的表述有问题,因为在后文会发现, q r − p : r q_{r-p:r} qr−p:r的范围是包含r-p的,所以不是后p个,而是后p+1个。
为了在输出路径中允许<blank>的存在,将原始labels的头尾插入<blank>,并且在每两个字符中间加入<blank>,构成一个改造过的label序列 l ′ l' l′,改造后 l ′ l' l′的长度是 2 ∣ l ∣ + 1 2|l|+1 2∣l∣+1。允许前缀以<blank>或者 l l l中的第一个字符( l 1 l_1 l1)开头。
如下的迭代式:
α
1
(
1
)
=
y
b
1
α
1
(
2
)
=
y
l
1
1
α
1
(
s
)
=
0
,
∀
s
>
2
\alpha_1(1)=y_b^1 \\ \alpha_1(2)=y_{l_1}^1 \\ \alpha_1(s)=0,\forall s \gt 2
α1(1)=yb1α1(2)=yl11α1(s)=0,∀s>2
递归:
α
t
(
s
)
=
{
α
‾
t
(
s
)
y
l
s
′
t
i
f
l
s
′
=
<
b
l
a
n
k
>
o
r
l
s
−
1
′
=
l
s
′
(
α
‾
t
(
s
)
+
α
t
−
1
(
s
−
2
)
)
y
l
s
′
t
o
t
h
e
r
w
i
s
e
⋅
⋅
⋅
⋅
⋅
公
式
6
\alpha_t(s)=\begin{cases} \overline\alpha_t(s)y_{l_s'}^t & & {if\ l_s'=<blank> or l_{s-1}'=l_s'} \\ (\overline\alpha_t(s)+\alpha_{t-1}(s-2))y_{l_s'}^t & & otherwise \end{cases}·····公式6
αt(s)={αt(s)yls′t(αt(s)+αt−1(s−2))yls′tif ls′=<blank>orls−1′=ls′otherwise⋅⋅⋅⋅⋅公式6
这里
α
‾
t
(
s
)
=
d
e
f
α
t
−
1
(
s
)
+
α
t
−
1
(
s
−
1
)
⋅
⋅
⋅
⋅
⋅
公
式
7
\overline\alpha_t(s)\overset{def}{=}\alpha_{t-1}(s)+\alpha_{t-1}(s-1)·····公式7
αt(s)=defαt−1(s)+αt−1(s−1)⋅⋅⋅⋅⋅公式7
在递归公式中,第一种情况用蓝线表示,第二种情况用橙色的线表示。横向表示时间点,纵向表示labelling的第几个字符。
另外
α
t
(
s
)
=
0
∀
s
<
∣
l
′
∣
−
2
(
T
−
t
)
−
1
\alpha_t(s)=0 \forall s \lt |l'|-2(T-t)-1
αt(s)=0∀s<∣l′∣−2(T−t)−1,就是图中左上角的部分。
序列
l
l
l的概率是
l
′
l'
l′中以<blank>和非<blank>结尾的概率和。
p
(
l
∣
x
)
=
α
t
(
∣
l
′
∣
)
+
α
T
(
∣
l
′
∣
−
1
)
⋅
⋅
⋅
⋅
⋅
⋅
公
式
8
p(l|x)=\alpha_t(|l'|)+\alpha_T(|l'|-1)······公式8
p(l∣x)=αt(∣l′∣)+αT(∣l′∣−1)⋅⋅⋅⋅⋅⋅公式8
类似的,可以定义后向变量
β
t
(
s
)
\beta_t(s)
βt(s),是时刻t
l
s
:
∣
l
∣
l_{s:|l|}
ls:∣l∣的总概率。
β
t
(
s
)
=
d
e
f
∑
π
∈
N
T
B
(
π
t
:
T
)
=
l
s
:
∣
l
∣
y
π
t
′
t
′
⋅
⋅
⋅
⋅
⋅
公
式
9
\beta_t(s) \overset{def}{=} \sum_{\pi\in N^T \atop B(\pi_{t:T})=l_{s:|l|}} y_{\pi_{t'}^{t'}}·····公式9
βt(s)=defB(πt:T)=ls:∣l∣π∈NT∑yπt′t′⋅⋅⋅⋅⋅公式9
β
T
(
∣
l
′
∣
)
=
y
<
b
l
a
n
k
>
T
β
T
(
∣
l
′
∣
−
1
)
=
y
l
∣
l
∣
T
β
T
(
s
)
=
0
,
∀
s
<
∣
l
′
∣
−
1
\beta_T(|l'|)=y_{<blank>}^T \\ \beta_T(|l'|-1)=y_{l_{|l|}}^T \\ \beta_T(s)=0,\forall s \lt |l'|-1
βT(∣l′∣)=y<blank>TβT(∣l′∣−1)=yl∣l∣TβT(s)=0,∀s<∣l′∣−1
β
t
(
s
)
=
{
β
‾
t
(
s
)
y
l
s
′
t
i
f
l
s
=
b
o
r
l
s
+
2
′
=
l
s
′
(
β
‾
t
(
s
)
+
β
t
+
1
(
s
+
2
)
)
y
l
s
′
t
o
t
h
e
r
w
i
s
e
\beta_t(s)=\begin{cases} \overline\beta_t(s)y_{l_s'}^t & & if\ \ l_s=b\ or\ l_{s+2}'=l_s' \\ (\overline\beta_t(s)+\beta_{t+1}(s+2))y_{l_s'}^t & & otherwise \end{cases}
βt(s)={βt(s)yls′t(βt(s)+βt+1(s+2))yls′tif ls=b or ls+2′=ls′otherwise
这里
β
‾
t
(
s
)
=
d
e
f
β
t
+
1
(
s
)
+
β
t
+
1
(
s
+
1
)
\overline\beta_t(s)\overset{def}{=}\beta_{t+1}(s)+\beta_{t+1}(s+1)
βt(s)=defβt+1(s)+βt+1(s+1)
同样的,有
β
t
(
s
)
=
0
∀
s
>
2
t
a
n
d
∀
s
>
∣
l
′
∣
\beta_t(s)=0 \forall s\gt2t\ and\ \forall s\gt|l'|
βt(s)=0∀s>2t and ∀s>∣l′∣
在实践的过程中,发现上面的递归过程会导致underflow。避免下一处的方法是对前向和后向变量进行rescale。
C
t
=
d
e
f
∑
s
α
t
(
s
)
,
α
^
t
(
s
)
=
d
e
f
α
t
(
s
)
C
t
C_t\overset{def}{=}\sum_s \alpha_t(s),\ \ \ \ \hat\alpha_t(s)\overset{def}{=}\frac{\alpha_t(s)}{C_t}
Ct=defs∑αt(s), α^t(s)=defCtαt(s)
D
t
=
d
e
f
∑
s
β
t
(
s
)
,
β
^
t
(
s
)
=
d
e
f
β
t
(
s
)
D
t
D_t\overset{def}{=}\sum_s \beta_t(s),\ \ \ \ \hat\beta_t(s)\overset{def}{=}\frac{\beta_t(s)}{D_t}
Dt=defs∑βt(s), β^t(s)=defDtβt(s)
为了计算maximum likelihood error,需要得到目标labelling的概率的自然对数。使用rescale之后的变量可以得到一个很简单的形式: ln ( p ( l ∣ x ) ) = ∑ t = 1 T ln ( C t ) \ln(p(l|x))=\sum\limits_{t=1}^T\ln(C_t) ln(p(l∣x))=t=1∑Tln(Ct)
这个公式没有看懂,但是在后面好像也没用到这个公式
4.2 Maximum Likelihood Training
目标函数:
O
M
L
(
S
,
N
w
)
=
∑
(
x
,
z
)
∈
S
l
n
(
p
(
z
∣
x
)
)
⋅
⋅
⋅
⋅
⋅
⋅
公
式
12
O^{ML}(S,N_w)=\sum_{(x,z)\in S} ln(p(z|x))······公式12
OML(S,Nw)=(x,z)∈S∑ln(p(z∣x))⋅⋅⋅⋅⋅⋅公式12
这个公式里面,M和L是啥没看懂。
S是训练集, N w N_w Nw相当于神经网络的参数,z是样本标签,x是样本输入
为了使用梯度下降训练,公式12需要进行微分。因为训练样本是互相独立的,所以可以分开考虑它们:
∂
O
M
L
(
{
(
x
,
z
)
}
,
N
w
)
∂
y
k
t
=
−
∂
l
n
(
p
(
z
∣
x
)
)
∂
y
k
t
⋅
⋅
⋅
⋅
⋅
⋅
公
式
13
\frac{\partial O^{ML}(\{(x,z)\},N_w)}{\partial y_k^t}=-\frac{\partial ln(p(z|x))}{\partial y_k^t}······公式13
∂ykt∂OML({(x,z)},Nw)=−∂ykt∂ln(p(z∣x))⋅⋅⋅⋅⋅⋅公式13
最开始有一个疑问是公式的右边没有出现神经网络的参数,那优化的时候是怎么优化到参数的呢?后来想明白是因为 y k t y_k^t ykt是由神经网络得到的,所以在链式法则中会印象到参数
下面介绍4.1中介绍的算法如何运用到公式13中
关键点在于,对于一个labelling
l
l
l,在给定的s和t的位置前向变量和后向变量的乘积是经过(s,t)的所有路径的概率和。更精确的说,利用公式5和公式9,可以得到:
α
t
(
s
)
β
t
(
s
)
=
∑
π
∈
B
−
1
(
l
)
π
t
=
l
s
′
y
l
s
′
t
∏
t
=
1
T
y
π
t
t
\alpha _t(s)\beta_t(s)= \sum_{\pi \in B^{-1}(l) \atop \pi_t=l_s'}y_{l_s'}^t\prod_{t=1}^Ty_{\pi_t}^t
αt(s)βt(s)=πt=ls′π∈B−1(l)∑yls′tt=1∏Tyπtt
直接把5和9式写一起是这样的
[ ∑ π ∈ N T B ( π 1 : t ) = l 1 : s ∏ t ′ = 1 t y π t ′ t ′ ] [ ∑ π ∈ N T B ( π t : T ) = l s : ∣ l ∣ y π t ′ t ′ ] [\sum_{\pi\in N^T\atop B(\pi_{1:t})=l_{1:s}}\prod_{t'=1}^t y_{\pi_t'}^{t'}][ \sum_{\pi\in N^T \atop B(\pi_{t:T})=l_{s:|l|}} y_{\pi_{t'}^{t'}}] [∑B(π1:t)=l1:sπ∈NT∏t′=1tyπt′t′][∑B(πt:T)=ls:∣l∣π∈NTyπt′t′],将括号展开之后就变成了前半段路径和后半段路径的排列组合。在前面对序列进行定义的地方说过,后半段和前半段实际上在s这个位置是会重复的所以在乘积前面会多出来一项 y l s ′ t y_{l_{s'}}^t yls′t
这里解释了为什么要求正向和反向两个概率的乘积。因为在看这篇文章之前,想着直接正向概率到最后不就可以了吗,为什么要拆分成前向和后向两部分呢。这里就发现因为要对每一个位置求概率,所以需要进行拆分
利用公式2对它进行改写,得到:
α t ( s ) β t ( s ) y l s ′ t = ∑ π ∈ B − 1 ( l ) π t = l s ′ p ( π ∣ x ) \frac{\alpha_t(s)\beta_t(s)}{y_{l_s'}^t}=\sum_{\pi \in B^{-1}(l)\atop \pi_t=l_s'}p(\pi|x) yls′tαt(s)βt(s)=πt=ls′π∈B−1(l)∑p(π∣x)
同样,这里等式左边除的那一项是因为乘的过程中重复了
对比公式3,可以看出这是对总概率
p
(
l
∣
x
)
p(l|x)
p(l∣x)中,所有经过在时刻
t
t
t经过
l
s
′
l_s'
ls′的割集。因此,对于任意的t,对所有的s加和就是总概率:
p
(
l
∣
x
)
=
∑
s
=
1
∣
l
′
∣
α
t
(
s
)
β
t
(
s
)
y
l
s
′
t
⋅
⋅
⋅
⋅
公
式
14
p(l|x)=\sum_{s=1}^{|l'|}\frac{\alpha_t(s)\beta_t(s)}{y_{l_s'}^t}····公式14
p(l∣x)=s=1∑∣l′∣yls′tαt(s)βt(s)⋅⋅⋅⋅公式14
为了求公式14对
y
k
t
y_k^t
ykt的偏导数,只需要考虑在时刻t经过label k的路径。由于在一个labelling
l
l
l中同一个label(或者blank)可能重复多次,所以定义了一个label k出现的位置集合,
l
a
b
(
l
,
k
)
=
{
s
:
l
s
′
=
k
}
lab(l,k)=\{s:l_s'=k\}
lab(l,k)={s:ls′=k},这个集合可能是空的。
然后对公式14求偏导,得到:
∂
p
(
l
∣
x
)
∂
y
k
t
=
1
y
k
t
2
∑
s
∈
l
a
b
(
l
,
k
)
α
t
(
s
)
β
t
(
s
)
⋅
⋅
⋅
⋅
⋅
⋅
公
式
15
\frac{\partial p(l|x)}{\partial y_k^t}=\frac{1}{{y_k^t}^2}\sum_{s \in lab(l,k)}\alpha_t(s)\beta_t(s)······公式15
∂ykt∂p(l∣x)=ykt21s∈lab(l,k)∑αt(s)βt(s)⋅⋅⋅⋅⋅⋅公式15
这个公式没有看太懂,分式对 y k t y_k^t ykt求偏导之后,为什么 α 和 β \alpha和\beta α和β不需要求偏导呢?就是求和的地方不是应该是 ∂ α t ( s ) β t ( s ) ∂ y k t \frac{\partial\alpha_t(s)\beta_t(s)}{\partial y_k^t} ∂ykt∂αt(s)βt(s)
还有这里定义的集合没有看懂
注意到
∂
l
n
(
p
(
l
∣
x
)
)
)
∂
y
k
t
=
1
p
(
l
∣
x
)
∂
p
(
l
∣
x
)
∂
y
k
t
\frac{\partial ln(p(l|x)))}{\partial y_k^t}=\frac{1}{p(l|x)}\frac{\partial p(l|x)}{\partial y_k^t}
∂ykt∂ln(p(l∣x)))=p(l∣x)1∂ykt∂p(l∣x)
设定
l
=
z
l=z
l=z,在将8和15代入13,可以对目标函数进行微分
后面的就都没看懂了
最后,将梯度反向传播到SoftMax层,我们需要使用没有标准化的输出
u
k
t
u_k^t
ukt对应的目标函数的梯度。
如果使用4.1节中的方法进行rescaling,我们得到
∂
O
M
L
(
{
(
x
,
z
)
}
,
N
m
)
∂
u
k
t
=
y
k
t
−
1
y
k
t
Z
t
∑
s
∈
l
a
b
(
z
,
k
)
α
^
t
(
s
)
β
^
t
(
s
)
\frac{\partial O^{ML}(\{(x,z)\},N_m)}{\partial u_k^t}=y_k^t-\frac{1}{y_k^tZ_t}\sum_{s\in lab(z,k)}\hat\alpha_t(s)\hat\beta_t(s)
∂ukt∂OML({(x,z)},Nm)=ykt−yktZt1s∈lab(z,k)∑α^t(s)β^t(s)
这里
Z
t
=
d
e
f
∑
s
=
1
∣
l
′
∣
α
^
t
(
s
)
β
^
t
(
s
)
y
l
s
′
t
Z_t\overset{def}{=}\sum_{s=1}^{|l'|}\frac{\hat\alpha_t(s)\hat\beta_t(s)}{y_{l_s'}^t}
Zt=defs=1∑∣l′∣yls′tα^t(s)β^t(s)