论文地址:https://www.cs.toronto.edu/~graves/icml_2006.pdf

概述

这是论文中第三节的翻译,加入了一些自己的理解。还有没看懂的地方,希望可以有人一起讨论

符号

符号的介绍在论文的第二章里面。

符号 含义
S 训练集
DX×ZD_{X \times Z}DX×Z​ 数据服从的分布,X\ChiX是输入,Z\ZetaZ是标签
X∈(Rm)∗\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=(z1,z2,...zu);x=(x1,x2,...xT);u≤Tz=(z_1,z_2,...z_u);x=(x_1,x_2,...x_T);u \le Tz=(z1​,z2​,...zu​);x=(x1​,x2​,...xT​);u≤T
训练一个模型:h:X↦Zh: \Chi \mapsto \Zetah:X↦Z。

3. Connectionist Temporal Classification

3.1 From Network Outputs to Labellings

对于长度为T的输入xxx,rnn有m个输入n个输出,权重向量www,Nw:(Rm)T↦(Rn)TN_w:(\mathbb{R}^m)^T \mapsto (\mathbb{R}^n)^TNw​:(Rm)T↦(Rn)T。假设y=Nw(X)y=N_w(X)y=Nw​(X)是网络的输出序列。

符号 含义
ykty_k^tykt​ 表示在时刻t得到label k的概率。
L′TL'^TL′T 长度为T的路径集合,路径上每一个元素在字母表L′=L∪{blank}L'=L \cup\{blank\}L′=L∪{blank}

p(π∣x)=∏t=1Tyπtt,∀π∈L′T⋅⋅⋅⋅⋅⋅⋅⋅公式2p(\pi|x)=\prod_{t=1}^Ty_{\pi_t}^t, \forall\pi\in L'^T········公式2p(π∣x)=t=1∏T​yπt​t​,∀π∈L′T⋅⋅⋅⋅⋅⋅⋅⋅公式2
π\piπ是属于L′TL'^TL′T中的路径
定义一个多对一的函数B:L′T↦L≤TB:L'^T\mapsto L^{\le T}B:L′T↦L≤T,其中L≤TL^{\le T}L≤T是可能的Labeling的集合。这个函数的作用就是删除<blank>和重复的labels。例如B(a−ab−)=B(−aa−−abb)=aabB(a-ab-)=B(-aa--abb)=aabB(a−ab−)=B(−aa−−abb)=aab。然后,使用BBB来定义条件概率,给定l∈L≤Tl\in L^{\le T}l∈L≤T:
p(l∣x)=∑π∈B−1(l)p(π∣x)⋅⋅⋅⋅⋅⋅⋅公式3p(l|x)=\sum_{\pi\in B^{-1}(l)}p(\pi|x)·······公式3p(l∣x)=π∈B−1(l)∑​p(π∣x)⋅⋅⋅⋅⋅⋅⋅公式3

3.2 Constructing the classifier

分类器的目标是对于输入xxx输出可能性最大的labelling
h(x)=argmax⁡l∈L≤Tp(l∣x)h(x)=arg \max_{l\in L {\le T}}p(l|x)h(x)=argl∈L≤Tmax​p(l∣x)
使用HMM的术语,将找labelling的任务成为decoding。不幸的是,这篇论文中理论系统没有找到一个通用、可解释的decoding算法,但是后面的两种方法在实践中取得了良好的效果。

第一种方法不是这篇论文的重点,重点是第二种方法。

第一种方法(best path decoding),是基于假设:最可能的路径对应最可能的labelling
h(x)≈B(π∗)whereπ∗=argmax⁡π∈Ntp(π∣x)h(x) \approx B(\pi^*)\\where\ \ \pi^*=arg\max_{\pi\in N^t}p(\pi|x)h(x)≈B(π∗)where  π∗=argπ∈Ntmax​p(π∣x)

这个公式里面第一次出现了NtN^tNt,后面还会出现这个符号,但是文章并没有给出这个符号的具体意思。

第二种方法(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对应的前缀迭代求和。

这一段没有太看懂,大致意思是说路径的概率可以拆分成前向和后向两步,但是不知道怎么翻译

对于长度为rrr的序列q,q1:pq_{1:p}q1:p​和qr−p:rq_{r-p:r}qr−p:r​分别表示前p个和后p个字符。对于labelling lll,定义前向变量αt(s)\alpha_t(s)αt​(s)是在时刻t,l1:sl_{1:s}l1:s​的总概率。
αt(s)=def∑π∈NTB(π1:t)=l1:s∏t′=1tyπ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∏t​yπ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的下标长度的表述有问题,因为在后文会发现,qr−p:rq_{r-p:r}qr−p:r​的范围是包含r-p的,所以不是后p个,而是后p+1个。

为了在输出路径中允许<blank>的存在,将原始labels的头尾插入<blank>,并且在每两个字符中间加入<blank>,构成一个改造过的label序列l′l'l′,改造后l′l'l′的长度是2∣l∣+12|l|+12∣l∣+1。允许前缀以<blank>或者lll中的第一个字符(l1l_1l1​)开头。

如下的迭代式:
α1(1)=yb1α1(2)=yl11α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)=yl1​1​α1​(s)=0,∀s>2
递归:
αt(s)={α‾t(s)yls′tifls′=&lt;blank&gt;orls−1′=ls′(α‾t(s)+αt−1(s−2))yls′totherwise⋅⋅⋅⋅⋅公式6\alpha_t(s)=\begin{cases} \overline\alpha_t(s)y_{l_s'}^t &amp; &amp; {if\ l_s'=&lt;blank&gt; or l_{s-1}'=l_s'} \\ (\overline\alpha_t(s)+\alpha_{t-1}(s-2))y_{l_s'}^t &amp; &amp; otherwise \end{cases}·····公式6 αt​(s)={αt​(s)yls′​t​(αt​(s)+αt−1​(s−2))yls′​t​​​if ls′​=<blank>orls−1′​=ls′​otherwise​⋅⋅⋅⋅⋅公式6
这里
α‾t(s)=defα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&lt;∣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,就是图中左上角的部分。
序列lll的概率是l′l'l′中以<blank>和非<blank>结尾的概率和。
p(l∣x)=αt(∣l′∣)+αT(∣l′∣−1)⋅⋅⋅⋅⋅⋅公式8p(l|x)=\alpha_t(|l'|)+\alpha_T(|l'|-1)······公式8p(l∣x)=αt​(∣l′∣)+αT​(∣l′∣−1)⋅⋅⋅⋅⋅⋅公式8
类似的,可以定义后向变量βt(s)\beta_t(s)βt​(s),是时刻tls:∣l∣l_{s:|l|}ls:∣l∣​的总概率。
βt(s)=def∑π∈NTB(πt:T)=ls:∣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&lt;blank&gt;TβT(∣l′∣−1)=yl∣l∣TβT(s)=0,∀s&lt;∣l′∣−1\beta_T(|l'|)=y_{&lt;blank&gt;}^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)yls′tifls=borls+2′=ls′(β‾t(s)+βt+1(s+2))yls′totherwise\beta_t(s)=\begin{cases} \overline\beta_t(s)y_{l_s'}^t &amp; &amp; if\ \ l_s=b\ or\ l_{s+2}'=l_s' \\ (\overline\beta_t(s)+\beta_{t+1}(s+2))y_{l_s'}^t &amp; &amp; otherwise \end{cases}βt​(s)={β​t​(s)yls′​t​(β​t​(s)+βt+1​(s+2))yls′​t​​​if  ls​=b or ls+2′​=ls′​otherwise​
这里
β‾t(s)=defβ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;2tand∀s&gt;∣l′∣\beta_t(s)=0 \forall s\gt2t\ and\ \forall s\gt|l'|βt​(s)=0∀s>2t and ∀s>∣l′∣
在实践的过程中,发现上面的递归过程会导致underflow。避免下一处的方法是对前向和后向变量进行rescale。
Ct=def∑sαt(s),α^t(s)=defαt(s)CtC_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)​
Dt=def∑sβt(s),β^t(s)=defβt(s)DtD_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=1Tln⁡(Ct)\ln(p(l|x))=\sum\limits_{t=1}^T\ln(C_t)ln(p(l∣x))=t=1∑T​ln(Ct​)

这个公式没有看懂,但是在后面好像也没用到这个公式

4.2 Maximum Likelihood Training

目标函数:
OML(S,Nw)=∑(x,z)∈Sln(p(z∣x))⋅⋅⋅⋅⋅⋅公式12O^{ML}(S,N_w)=\sum_{(x,z)\in S} ln(p(z|x))······公式12OML(S,Nw​)=(x,z)∈S∑​ln(p(z∣x))⋅⋅⋅⋅⋅⋅公式12

这个公式里面,M和L是啥没看懂。
S是训练集,NwN_wNw​相当于神经网络的参数,z是样本标签,x是样本输入

为了使用梯度下降训练,公式12需要进行微分。因为训练样本是互相独立的,所以可以分开考虑它们:
∂OML({(x,z)},Nw)∂ykt=−∂ln(p(z∣x))∂ykt⋅⋅⋅⋅⋅⋅公式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

最开始有一个疑问是公式的右边没有出现神经网络的参数,那优化的时候是怎么优化到参数的呢?后来想明白是因为ykty_k^tykt​是由神经网络得到的,所以在链式法则中会印象到参数

下面介绍4.1中介绍的算法如何运用到公式13中

关键点在于,对于一个labelling lll,在给定的s和t的位置前向变量和后向变量的乘积是经过(s,t)的所有路径的概率和。更精确的说,利用公式5和公式9,可以得到:
αt(s)βt(s)=∑π∈B−1(l)πt=ls′yls′t∏t=1Tyπtt\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′​t​t=1∏T​yπt​t​

直接把5和9式写一起是这样的
[∑π∈NTB(π1:t)=l1:s∏t′=1tyπt′t′][∑π∈NTB(πt:T)=ls:∣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′=1t​yπt′​t′​][∑B(πt:T​)=ls:∣l∣​π∈NT​​yπt′t′​​],将括号展开之后就变成了前半段路径和后半段路径的排列组合。在前面对序列进行定义的地方说过,后半段和前半段实际上在s这个位置是会重复的所以在乘积前面会多出来一项yls′ty_{l_{s'}}^tyls′​t​
这里解释了为什么要求正向和反向两个概率的乘积。因为在看这篇文章之前,想着直接正向概率到最后不就可以了吗,为什么要拆分成前向和后向两部分呢。这里就发现因为要对每一个位置求概率,所以需要进行拆分

利用公式2对它进行改写,得到:

αt(s)βt(s)yls′t=∑π∈B−1(l)πt=ls′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)中,所有经过在时刻ttt经过ls′l_s'ls′​的割集。因此,对于任意的t,对所有的s加和就是总概率:
p(l∣x)=∑s=1∣l′∣αt(s)βt(s)yls′t⋅⋅⋅⋅公式14p(l|x)=\sum_{s=1}^{|l'|}\frac{\alpha_t(s)\beta_t(s)}{y_{l_s'}^t}····公式14p(l∣x)=s=1∑∣l′∣​yls′​t​αt​(s)βt​(s)​⋅⋅⋅⋅公式14
为了求公式14对ykty_k^tykt​的偏导数,只需要考虑在时刻t经过label k的路径。由于在一个labelling lll中同一个label(或者blank)可能重复多次,所以定义了一个label k出现的位置集合,lab(l,k)={s:ls′=k}lab(l,k)=\{s:l_s'=k\}lab(l,k)={s:ls′​=k},这个集合可能是空的。
然后对公式14求偏导,得到:
∂p(l∣x)∂ykt=1ykt2∑s∈lab(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)​=ykt​21​s∈lab(l,k)∑​αt​(s)βt​(s)⋅⋅⋅⋅⋅⋅公式15

这个公式没有看太懂,分式对ykty_k^tykt​求偏导之后,为什么α和β\alpha和\betaα和β不需要求偏导呢?就是求和的地方不是应该是∂αt(s)βt(s)∂ykt\frac{\partial\alpha_t(s)\beta_t(s)}{\partial y_k^t}∂ykt​∂αt​(s)βt​(s)​
还有这里定义的集合没有看懂

注意到∂ln(p(l∣x)))∂ykt=1p(l∣x)∂p(l∣x)∂ykt\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=zl=zl=z,在将8和15代入13,可以对目标函数进行微分

后面的就都没看懂了

最后,将梯度反向传播到SoftMax层,我们需要使用没有标准化的输出uktu_k^tukt​对应的目标函数的梯度。
如果使用4.1节中的方法进行rescaling,我们得到
∂OML({(x,z)},Nm)∂ukt=ykt−1yktZt∑s∈lab(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​−ykt​Zt​1​s∈lab(z,k)∑​α^t​(s)β^​t​(s)
这里
Zt=def∑s=1∣l′∣α^t(s)β^t(s)yls′tZ_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)​

Connectionist Temporal Classification(CTC)相关推荐

  1. 一文读懂CRNN+CTC(Connectionist Temporal Classification)文字识别

    先总结一把CTC,下面文档太长: CTC是一种Loss计算方法,用CTC代替Softmax Loss,TF和pytorch都有对CTC的实现,从而解决OCR或者语音识别中序列对齐的问题.CTC特点: ...

  2. CTC介绍(connectionist temporal classification论文翻译)

    1.摘要 我基本是基于论文<Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Rec ...

  3. Connectionist Temporal Classification(CTC)、音识别模型小型综述和一个简易的语音识别模型的tensorflow实现

    CTC是一种端到端的语音识别技术,他避免了需要字或者音素级别的标注,只需要句子级别的标注就可以进行训练,感觉非常巧妙,也很符合神经网络浪潮人们的习惯.特别是LSTM+CTC相较于之前的DNN+HMM, ...

  4. CTC的直观理解(Connectionist Temporal Classification连接时序分类),单行文本时序分类识别的端到端方法

    CTC(Connectionist Temporal Classification), ctc擅长单行验证码识别: 两组谷歌验证码示例 ctc可以提高单行文本识别鲁棒性(不同长度不同位置 ).本文用几 ...

  5. CTC(Connectionist Temporal Classification)介绍

    CTC解决什么问题 CTC,Connectionist Temporal Classification,用来解决输入序列和输出序列难以一一对应的问题. 举例来说,在语音识别中,我们希望音频中的音素和翻 ...

  6. CMU 11-785 L16 Connectionist Temporal Classification

    Sequence to sequence Sequence goes in, sequence comes out No notion of "time synchrony" be ...

  7. 联结主义时间分类(Connectionist temporal classification)的论文笔记

    前言: { 最近在github上更新了一些代码,但没在这里更新文章,这次就在这写一篇论文的阅读笔记. 论文是<Connectionist temporal classification: Lab ...

  8. 论文翻译 3-3Flexible Metric Nearest Neighbor Classi¯cation 弹性度量最近邻居分类

    弹性度量最近邻居分类 Flexible Metric Nearest Neighbor Classi¯cation Jerome H. Friedman¤杰罗姆 h. 弗里德曼 斯坦福,加利福尼亚州 ...

  9. Bag of Tricks for Image Classification with Convolutional Neural Networks(卷积神经网络在图像分类中的技巧)

    来源:Tong He Zhi Zhang Hang Zhang Zhongyue Zhang Junyuan Xie Mu L Amazon Web Services fhtong,zhiz,hzaw ...

最新文章

  1. 树莓派~ubuntu开机自启动
  2. 快拿走这份千字秘笈:3招量化促销活动结果,新零售营销得这么做
  3. spring部分注解
  4. IOS debug网络PonyDebugger 实践篇
  5. 人族机器人叉兵_星际争霸兵种体积和伤害判断:叉叉小体积为什么运输机占2单位?...
  6. chmod、chown函数的使用
  7. react学习(12)-moment插件设置日期格式
  8. C++——C++11中的defalut和delete关键字
  9. JAVA WORD转PDF
  10. sosoapi 项目之本地搭建
  11. 给你介绍Python代码中下划线的魔幻魅力!
  12. 7-1 愿天下有情人都是失散多年的兄妹 --DFS
  13. android中实现内容搜索
  14. 保存360锁屏壁纸批量修改文件后缀名
  15. windows上安装detectron2
  16. php tdd,用phpUnit入门TDD
  17. 通达云OA2015版及钉钉、微信办公集成产品正式发布
  18. NFA到DFA的转换及DFA的简化
  19. SIFT/SURF算法的作用
  20. 《阿凡达2》首周末IMAX全球票房4880万美元;康泰生物新冠疫苗纳入第二剂次加强免疫接种 | 美通企业日报...

热门文章

  1. 2022年茶艺师(中级)考试及茶艺师(中级)考试内容
  2. 编程计算饥荒所有农作物搭配(JavaScript版)
  3. 《深入理解计算机系统》(CSAPP)第二章——信息的表示和处理 知识点总结
  4. 新朋老友齐聚首,共话「图形学」未来 | 将门行动派特别直播企划,就在7月6日晚!
  5. 为什么使用Ubuntu发现没有声音输出?
  6. ASE无线认证服务器,华为ac配置portal认证服务器
  7. ac 无线二维码认证服务器,无线V7 AC配合Cisco ISE认证服务器实现portal认证配置
  8. alexa全球网站信息 搜索【排名】
  9. 34金币时间管理--作者 艾力
  10. 一个集成redis-benchmark的redis压测的脚本