CTC学习笔记(二) 训练和公式推导

22 篇文章 0 订阅

整体思路

训练流程和传统的神经网络类似,构建loss function,然后根据BP算法进行训练,不同之处在于传统的神经网络的训练准则是针对每帧数据,即每帧数据的训练误差最小,而CTC的训练准则是基于序列(比如语音识别的一整句话)的,比如最大化 p(z|x) ,序列化的概率求解比较复杂,因为一个输出序列可以对应很多的路径,所有引入前后向算法来简化计算。

前期准备

  1. 输入 
    x ,长度为T
  2. 输出集合 
    A 表示正常的输出 
    A=A{blank} 表示输出全集 
    AT 表示输入x对应的输出元素集合
  3. 输出序列 
    π 表示输出路径 
    l 表示输出label序列 
    表示路径到label序列的映射关系
  4. 概率 
    ytk 表示时间t输出k的概率 
    p(π|x)=t=1Tytπt 表示基于输入x的输出 π 路径的概率 
    p(l|x)=π1(l)p(π|x) 表示输出label序列的概率是多条路径的概率和。

前后向算法

这里写图片描述
考虑到计算 p(l|x) 需要计算很多条路径的概率,随着输入长度呈指数化增加,可以引入类似于HMM的前后向算法来计算该概率值。 
为了引入blank节点,在label首尾以及中间插入blank节点,如果label序列原来的长度为U,那么现在变为U’=2U+1。

前向

前向变量为 α(t,u) ,表示t时刻在节点u的前向概率值,其中 u[1,2U+1]
初始化值如下: 

α(1,1)=y1b

α(1,2)=y1l1

α(1,u)=0,u>2

递推关系: 
α(t,u)=ytlui=f(u)uα(t1,i)

其中 
f(u)={u1u2if lu=blank or lu2=luotherwise

注:如果l表示{c,a,t},那么l’表示为{b,c,b,a,b,t,b},所以原来在l中的下标u为2,在l’中的下标u变为4。 
α(t,u)=0u<U2(Tt)1
对应于上图中的右上角部分,因为时间的限制,有些节点不可能到达最后的终止节点。 
根据上图,很容易理解前向的递推关系。

后向

初始化值: 

β(T,U)=1

β(T,U1)=1

β(T,u)=0,u<U2

α(1,u)=0,u>2

递推关系: 
β(t,u)=i=ug(u)β(t+1,i)yt+1li

其中 
g(u)={u+1u+2if lu=blank or lu+2=luotherwise

取log

概率计算在log计算,避免underflow,其中log加可以通过以下形式转化: 

ln(a+b)=lna+ln(1+elnblna)

训练

loss function

CTC的loss function使用最大似然: 

L(S)=(x,z)SL(x,z)

L(x,z)=lnp(z|x)

根据前后向变量,可以求得: 
p(z|x)=u=1|z|α(t,u)β(t,u)

|z| 表示z对应的label长度的U’, α(t,u)β(t,u) 表示t时刻经过节点u的所有路径的概率和。 
L(x,z)=lnu=1|z|α(t,u)β(t,u)

bp训练

ytk 表示t时刻输出k的概率 
atk 表示t时刻对应输出节点k在做softmax转换之前的值 

L(x,z)ytk=1p(z|x)p(z|x)ytk

只需要考虑t时刻经过k节点的路径即可 
p(z|x)ytk=uB(z,k)α(t,u)β(t,u)ytk

其中 B(z,k) 表示节点为k的集合 
考虑到 
α(t,u)β(t,u)=πX(t,u)t=1Tytπt

其中 X(t,u) 表示所有在t时刻经过节点u的路径。 
所以 
p(z|x)ytk=uB(z,k)α(t,u)β(t,u)ytk

可以到损失函数对 ytk 偏导数 
L(x,z)ytk=1p(z|x)ytkuB(z,k)α(t,u)β(t,u)

同时可以得到损失函数对于 atk 偏导数 
L(x,z)atk=ytk1p(z|x)uB(z,k)α(t,u)β(t,u)

推导参考: 
这里写图片描述
这里写图片描述
后续可以使用 BPTT算法 得到损失函数对神经网络参数的偏导。

参考

《Supervised Sequence Labelling with Recurrent Neural Networks》 chapter7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值