Connectionist Temporal Classification(CTC)

论文地址: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^* ZL 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);uT
训练一个模型: h : X ↦ Z h: \Chi \mapsto \Zeta h:XZ

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 LT长度为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=1Tyπtt,πLT2
π \pi π是属于 L ′ T L'^T LT中的路径
定义一个多对一的函数 B : L ′ T ↦ L ≤ T B:L&#x27;^T\mapsto L^{\le T} B:LTLT,其中 L ≤ T L^{\le T} LT是可能的Labeling的集合。这个函数的作用就是删除<blank>和重复的labels。例如 B ( a − a b − ) = B ( − a a − − a b b ) = a a b B(a-ab-)=B(-aa--abb)=aab B(aab)=B(aaabb)=aab。然后,使用 B B B来定义条件概率,给定 l ∈ L ≤ T l\in L^{\le T} lLT
p ( l ∣ x ) = ∑ π ∈ B − 1 ( l ) p ( π ∣ x ) ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 公 式 3 p(l|x)=\sum_{\pi\in B^{-1}(l)}p(\pi|x)·······公式3 p(lx)=πB1(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)=arglLTmaxp(lx)
使用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(lx)。公式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} qrp: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&#x27;=1}^t y_{\pi_t&#x27;}^{t&#x27;} ········公式5 αt(s)=defB(π1:t)=l1:sπNTt=1tyπtt5
将会看到 α ( s ) \alpha(s) α(s)可以递归地从 α t − 1 ( s ) \alpha_{t-1}(s) αt1(s) α t − 1 ( s − 1 ) \alpha_{t-1}(s-1) αt1(s1)得到

这一段中,q的下标长度的表述有问题,因为在后文会发现, q r − p : r q_{r-p:r} qrp:r的范围是包含r-p的,所以不是后p个,而是后p+1个。

为了在输出路径中允许<blank>的存在,将原始labels的头尾插入<blank>,并且在每两个字符中间加入<blank>,构成一个改造过的label序列 l ′ l&#x27; l,改造后 l ′ l&#x27; l的长度是 2 ∣ l ∣ + 1 2|l|+1 2l+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 &gt; 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 ′ = &lt; b l a n k &gt; 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&#x27;}^t &amp; &amp; {if\ l_s&#x27;=&lt;blank&gt; or l_{s-1}&#x27;=l_s&#x27;} \\ (\overline\alpha_t(s)+\alpha_{t-1}(s-2))y_{l_s&#x27;}^t &amp; &amp; otherwise \end{cases}·····公式6 αt(s)={αt(s)ylst(αt(s)+αt1(s2))ylstif ls=<blank>orls1=lsotherwise6
这里
α ‾ 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αt1(s)+αt1(s1)7

在递归公式中,第一种情况用蓝线表示,第二种情况用橙色的线表示
在递归公式中,第一种情况用蓝线表示,第二种情况用橙色的线表示。横向表示时间点,纵向表示labelling的第几个字符。
另外 α t ( s ) = 0 ∀ s &lt; ∣ l ′ ∣ − 2 ( T − t ) − 1 \alpha_t(s)=0 \forall s \lt |l&#x27;|-2(T-t)-1 αt(s)=0s<l2(Tt)1,就是图中左上角的部分。
序列 l l l的概率是 l ′ l&#x27; l中以<blank>和非<blank>结尾的概率和。
p ( l ∣ x ) = α t ( ∣ l ′ ∣ ) + α T ( ∣ l ′ ∣ − 1 ) ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 公 式 8 p(l|x)=\alpha_t(|l&#x27;|)+\alpha_T(|l&#x27;|-1)······公式8 p(lx)=αt(l)+αT(l1)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&#x27;}^{t&#x27;}}·····公式9 βt(s)=defB(πt:T)=ls:lπNTyπtt9
β T ( ∣ l ′ ∣ ) = y &lt; b l a n k &gt; T β T ( ∣ l ′ ∣ − 1 ) = y l ∣ l ∣ T β T ( s ) = 0 , ∀ s &lt; ∣ l ′ ∣ − 1 \beta_T(|l&#x27;|)=y_{&lt;blank&gt;}^T \\ \beta_T(|l&#x27;|-1)=y_{l_{|l|}}^T \\ \beta_T(s)=0,\forall s \lt |l&#x27;|-1 βT(l)=y<blank>TβT(l1)=yllTβT(s)=0,s<l1

β 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&#x27;}^t &amp; &amp; if\ \ l_s=b\ or\ l_{s+2}&#x27;=l_s&#x27; \\ (\overline\beta_t(s)+\beta_{t+1}(s+2))y_{l_s&#x27;}^t &amp; &amp; otherwise \end{cases} βt(s)={βt(s)ylst(βt(s)+βt+1(s+2))ylstif  ls=b or ls+2=lsotherwise
这里
β ‾ 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 &gt; 2 t   a n d   ∀ s &gt; ∣ l ′ ∣ \beta_t(s)=0 \forall s\gt2t\ and\ \forall s\gt|l&#x27;| βt(s)=0s>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(lx))=t=1Tln(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)Sln(p(zx))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 yktOML({(x,z)},Nw)=yktln(p(zx))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&#x27;}y_{l_s&#x27;}^t\prod_{t=1}^Ty_{\pi_t}^t αt(s)βt(s)=πt=lsπB1(l)ylstt=1Tyπ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&#x27;=1}^t y_{\pi_t&#x27;}^{t&#x27;}][ \sum_{\pi\in N^T \atop B(\pi_{t:T})=l_{s:|l|}} y_{\pi_{t&#x27;}^{t&#x27;}}] [B(π1:t)=l1:sπNTt=1tyπtt][B(πt:T)=ls:lπNTyπtt],将括号展开之后就变成了前半段路径和后半段路径的排列组合。在前面对序列进行定义的地方说过,后半段和前半段实际上在s这个位置是会重复的所以在乘积前面会多出来一项 y l s ′ t y_{l_{s&#x27;}}^t ylst
这里解释了为什么要求正向和反向两个概率的乘积。因为在看这篇文章之前,想着直接正向概率到最后不就可以了吗,为什么要拆分成前向和后向两部分呢。这里就发现因为要对每一个位置求概率,所以需要进行拆分

利用公式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&#x27;}^t}=\sum_{\pi \in B^{-1}(l)\atop \pi_t=l_s&#x27;}p(\pi|x) ylstαt(s)βt(s)=πt=lsπB1(l)p(πx)

同样,这里等式左边除的那一项是因为乘的过程中重复了

对比公式3,可以看出这是对总概率 p ( l ∣ x ) p(l|x) p(lx)中,所有经过在时刻 t t t经过 l s ′ l_s&#x27; 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&#x27;|}\frac{\alpha_t(s)\beta_t(s)}{y_{l_s&#x27;}^t}····公式14 p(lx)=s=1lylstα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&#x27;=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 yktp(lx)=ykt21slab(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} yktln(p(lx)))=p(lx)1yktp(lx)
设定 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) uktOML({(x,z)},Nm)=yktyktZt1slab(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&#x27;|}\frac{\hat\alpha_t(s)\hat\beta_t(s)}{y_{l_s&#x27;}^t} Zt=defs=1lylstα^t(s)β^t(s)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值