lstm+ctc训练端对端的模型(34)---《深度学习》

我们在前面了解了CNN(卷积神经网络),也了解了RNN(递归神经网络),也在前面进行了基于CNN的BP和基于RNN的BPTT公式的推导,主要都利用了我们所定义的误差δ(预期正确输出和输出之间的误差),进行误差的反向传播,进而修改不同权重的梯度,然后是的网络朝着好的方向不断训练!
然而针对有的问题,这些模型却并不适合,例如针对声音转文字的预测,不定长验证码的破解等等,CNN不适合因为其无法满足时序特征,RNN也不适合是因为虽然它满足时序特征,但是却要求每一帧所对应的label进行训练,因此也并不适合这种问题,因此针对这种问题:1)sequence to sequence(序列到序列问题));2)输入序列的维度远大于输出序列。我们需要找到一种新的方法,很舒服的是我们找到了,解决方法有两种:1)RNN+CTC(一般采用lstm+ctc实现,因为RNN可能会出现梯度消失或者梯度爆炸的问题,由于lstm中进行了相应的处理,因此不会出现梯度消失或者梯度爆炸的问题);2)attention机制。本篇博客我们主要讲解lstm+ctc,attention机制以后有时间的话在进行一个讲解吧!
ctc全称为connectionist temporal classifier(连接时序分类器),主要用于len(输入序列)>len(输出序列)的这种问题,在这儿我们先来讲4个概念:
这里写图片描述
1)y(k,t):其中,k为下标,t为上标,因为CSDN暂时还不支持这种那种表达,所以暂时写成这种,表示的是t时刻,y输出的类别为k的可能性;
2)p(π|x):表示输入为x的时候,预测的路径为path(π)的概率,其中π为对应的输出路径,p(π|x)=∏(t=1..T) y(k,t),注意写法哈,表示y(k,t)(t=1..T)的连乘,因为其每一个输出都是无关的,因此可以写成连乘;
3)p(l|x):表示输入为x的时候,预测为标签为lable的概率,其中l(标签序列)一般和多个path(π)对应,如(aa-a–bb-)和(a–aaab-)和(a-aaa–b-)这几个不同的路径对应的却是一个对应的lable序列(aab),因此p(l|x)=∑p(π|x),其中∑表明多条路径π到同一个label标签序列的映射;
下面如何如何从所有可能的标签序列中挑选出一个最可能的标签序列呢,即对其进行解码呢?如果想要群举的话可能真得类似,因为数量级太大太大,因此,我们需要找到一个合适的算法进行解码。
解码:I(x):l(x)=argmax (l) p(l|x),表明从所所有的lable序列中选出概率最大的那个lable序列作为输出。
Alex的论文中给了两种很不错的方法:
1)最佳路径解码(best path decoding):
h(x)≈B(π*)
where π=argmaxp(π|x),π∈N^t,这种解码方式非常容易计算,π就是每个时间步骤的最可能的输出连接,但这种方法的最大不足就在于它并不能保证最有可能的标记,因为它每次都是局部最优,可能忽略掉全局最优!
2)前缀查找解码(prefix search decoding):
这里写图片描述
非常适合解决输入序列和输出序列的长度相差很大的情况,希望大家可以学的开心哈!
The CTC Forward-Backward Algorithm
p(l|x)怎么求解是个问题,因为对应的所有的路径非常多,有T!种选择,显然我们如果想要求出所有的路径不太现实,因为这些路径中包括很多种不适合的,因此我们并没有求出所有的路径,我们选择是ctc前向后向算法,如下所示:
这里写图片描述
这种方法选择在所有的label两两之间加上了空格,并且在开头和结尾之间也加上了空格,假如label的长度为l,则新的l’的长度为2l+1,然后我们从其中选择最可能的标签序列,即求出不同的p(l|x),最后再利用我们上面所介绍的解码方式求出对应的标签,这里介绍的比较粗泛一些,详细的大家可以看一下底下的博客,讲的非常细致,对最大似然的loss函数也介绍的很仔细,包括它的偏导等等都很详细!
这是一个使用lstm+ctc针对不定长(3-5)个变长验证码进行端对端识别的程序,希望可以帮助大家理解lstm+ctc的原理!https://github.com/Tangzixia/tensorflow_captcha_lstm_ctc_loss
如果大家对与ctc的loss函数的有兴趣的话,可以参考这些博客,资料很详细,希望大家可以获益匪浅!
CTC学习笔记(二) 训练和公式推导
论文笔记:Connectionist Temporal Classification: Labelling Unsegmented Sequence
[论文]CTC——Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks
祝大家排雷顺利!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值