联结主义时间分类(Connectionist temporal classification)的论文笔记
前言:
{
最近在github上更新了一些代码,但没在这里更新文章,这次就在这写一篇论文的阅读笔记。
论文是《Connectionist temporal classification: Labelling unsegmented sequence data with recurrent neural 'networks》(Alex Graves, Santiago Fernández,Faustino J. Gomez, Jürgen Schmidhuber,https://www.researchgate.net/publication/221346365_Connectionist_temporal_classification_Labelling_unsegmented_sequence_data_with_recurrent_neural_%27networks),主题是序列识别的方法。
}
正文:
{
首先,论文的第一节Introduction提到了之前方法的问题:
- they usually require a significant amount of task specific knowledge, e.g. to design the state models for HMMs, or choose the input features for CRFs; (2)they require explicit (and often questionable) dependency assumptions to make inference tractable, e.g. the assumption that observations are independent for HMMs; (3) for standard HMMs, training is generative, even though sequence labelling is discriminative.
(1)通常这些方法需要很多任务专属的知识,比如说需要为HMMs设计状态模型,或为CRFs选择输入特征;(2)需要为这些方法做明显的依赖假设(经常存在问题),以使得推断可解,比如说需要为HMMs做观测独立的假设;(3)虽然序列标记是判别式的,但对于标准的HMMs,训练是生成式的。
接下来又说到循环神经网络(RNN)。用RNN需要分段,而最有效的方法还是结合HMMs(the most effective use of RNNs for sequence labelling is to combine them with HMMs ... The HMM component is able to automatically segment the sequence during training)。
在第二节中,主要给出了一种误差:
其中,x代表输入序列,z代表标准标签,h代表本论文的模型,ED(A,B)代表由A变换到B所需要的修改的数量(添加和删除等都算是一次修改),S代表测试集。
第三节介绍了模型的大致过程,我理解的数据流如下:
声波序列x ------(通过循环神经网络)------> 各个标签(包括空白标签)在各个时段下的概率y -------(通过式(2),(3),(4))-------> 最终的标签输出h(x)
(4)
其中,L‘T代表所有长度为T的标签序列的集合。π为标签序列(可能包括空白),B为一种多对一的映射(例如B(a−ab−) = B(−aa−−abb) = aab,其中a和b为标签,−为空白标签。论文中说此映射是删除空白与重复标签)。
第四节中提到了模型的训练方法。
计算式(2),(3),(4)会很耗时(需要考虑所有的π和l),所以论文中就提出了一种递归的算法:
式(5)中定义的αt(s)指的是在x给出并且πt=ls的情况下,π的前t部分经B的映射后为I的前s部分的概率。
一通推导之后得出了式(8)。
又介绍了反向递归:
所以递归过程被分成了两部分。在πt=ls的情况下,两个概率部分相乘之后再除以ls的概率便可得到式(3),因此,对于所有的t和s,可得式(14)。
训练的目标函数如下:
所以每个网络的误差为目标函数(12)对每个网络每次输出的微分,即式(16)。
式中u为网络输出(我认为就是y),α和β都被归一化了。
第五节描述了实验结果。
按照我的理解,输入为每个时刻的被量化的声波幅值(量化为26种)。在TIMIT数据集上的结果对比如表1:
可以看到,相比于Weighted error BLSTM/HMM,CTC的效果没有明显优势,Weighted error是指根据输出的长短缩放误差信号(the error signal was scaled to give equal weight to long and short phonemes (Robinson, 1991))。
另外,论文中也提到CTC更适合噪音等级比较高的场景(a higher level of noise was found to be optimal for CTC)。
}
结语:
{
这边论文涉及的还是数学或统计学方法,在循环神经网络后加了一个统计学模型,并没有涉及新的网络结构。光公式就琢磨了很久,可能是我的数学熟练度不够吧。
}
联结主义时间分类(Connectionist temporal classification)的论文笔记相关推荐
- CTC的直观理解(Connectionist Temporal Classification连接时序分类),单行文本时序分类识别的端到端方法
CTC(Connectionist Temporal Classification), ctc擅长单行验证码识别: 两组谷歌验证码示例 ctc可以提高单行文本识别鲁棒性(不同长度不同位置 ).本文用几 ...
- CTC介绍(connectionist temporal classification论文翻译)
1.摘要 我基本是基于论文<Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Rec ...
- Connectionist Temporal Classification(CTC)、音识别模型小型综述和一个简易的语音识别模型的tensorflow实现
CTC是一种端到端的语音识别技术,他避免了需要字或者音素级别的标注,只需要句子级别的标注就可以进行训练,感觉非常巧妙,也很符合神经网络浪潮人们的习惯.特别是LSTM+CTC相较于之前的DNN+HMM, ...
- 一文读懂CRNN+CTC(Connectionist Temporal Classification)文字识别
先总结一把CTC,下面文档太长: CTC是一种Loss计算方法,用CTC代替Softmax Loss,TF和pytorch都有对CTC的实现,从而解决OCR或者语音识别中序列对齐的问题.CTC特点: ...
- CTC(Connectionist Temporal Classification)介绍
CTC解决什么问题 CTC,Connectionist Temporal Classification,用来解决输入序列和输出序列难以一一对应的问题. 举例来说,在语音识别中,我们希望音频中的音素和翻 ...
- CMU 11-785 L16 Connectionist Temporal Classification
Sequence to sequence Sequence goes in, sequence comes out No notion of "time synchrony" be ...
- 白话CTC(connectionist temporal classification)算法讲解
CTC是计算一种损失值,主要的优点是可以对没有对齐的数据进行自动对齐, 主要用在没有事先对齐的序列化数据训练上.比如语音识别.ocr识别等等. CTC算法有个经典的英文的论文,但是相信大多数人和我一样 ...
- SST:Single-Stream Temporal Action Proposals论文笔记
SST:Single-Stream Temporal Action Proposals 这是本仙女认认真真读完且把算法全部读懂(其实也不是非常懂)的第一篇论文 CVPR2017 一作 论文写作的动机m ...
- 《Universal Language Model Fine-tuning for Text Classification》论文笔记
摘要 基于Pretrain-Finetune与语言模型的优点,作者提出 ULMFiT 迁移学习方法,降低深度学习模型对标注数据集的依赖, 以及提升模型表现. ULMFiT 包含三个主要步骤, 第一,在 ...
最新文章
- Linux EOF 输入流
- RabbitMQ 的这些骚操作你知道吗?
- TCP/IP总结(4)TCP 概述
- kubernetes+Azure DevOps实现.Net Core项目的自动化部署均衡负载
- java中延迟_Java中的延迟分配
- Activity与Fragment的onActivityResult细节
- [Java] 蓝桥杯ALGO-148 算法训练 5-1最小公倍数
- CTF中一点进制转换脚本记录
- 《单词的减法》state1~state17(第一遍学习记录)
- 【转载】Linux下rz,sz与ssh的配合使用
- 虚拟机 网卡模式配置
- CTCconnectionist temporal classfication: labelling unsegmented sequence data with recurrent(一)
- Python第四课:input()函数
- 大学十年(一个程序员的路程)
- Python中的Counter类
- 基于Java swing的多人,图片,语音聊天室
- uva 220 趣味黑白棋 精简代码
- android webview 播放视频总结,Android WebView 播放视频总结~
- [jobdu]二进制中1的个数
- RuntimeError: No such operator aten::cudnn_convolution_backward_weight
热门文章
- Android之百度地图集成
- pandas中计算分位数的方法describe,quantile,以及sql中计算分位数的方法percentile_approx,percent_rank() over()
- 过程控制系统与仪表 华南理工大学期末重点 王再英(第二版) 长篇思维导图
- 里约奥运会火的不是巴西而是中国互联网,自己看
- 高清地图生成技术综述
- 素数,质数,奇数,合数,偶数这些你都能分清吗?
- Android JS调原生 有盟分享 打开微信分享 原程序崩溃问题 报android.view.ViewRootImpl$CalledFromWrongThreadException:
- mybatis报错# Cause: Cause: org.xml.sax.SAXParseException;
- 年薪50万是一条线,年薪100万又是一条线…...
- RatingBar(星级评分条)