CTCconnectionist temporal classfication: labelling unsegmented sequence data with recurrent(一)
CTC 是对于未分割的时序进行分类的一种经典,并且非常有效的算法,目前针对语音识别,orc都是不可或缺的技术,虽然有很多人解释了ctc,但仍然不懂,经过长时间论文以及阅读大牛们的解释,算是有所收获,借此对论文重新解释,加深印象。
摘要:
现实生活中我们需要从有噪声、未分割的数据中来学习预测labels的任务。例如在语音识别把语音转化为单词或者字符的任务,作者以深度学习为例。神经网络rnn具有很好的学习能力,但是由于它们需要预先分割序列数据,然后把他们的输出转化为序列标记,这就限制了精确度,并且需要大量人工,本文就提出一种在未分割数据的情况下,利用rnn进行序列分类的方法,实验结果显示,要优于hmm。
引言:
未分割的序列数据是一个无处不在的学习任务,尤其是在perceptual 任务中(手写识别,语音识别,手势识别)其中,含有噪声并且用单词或者letter进行离散的标注。
目前最主要的就是hmm,crf和他们的一些变种是序列标注的主要框架(2006年,现在不是了),但是他们仍然有几个缺点:
1、他们需要大量指定任务的知识,例如为了设计hmm模型或者选择crf的输入特征,
2、他们需要明确的依赖假设使得推断变得可行,例如:在hmm中假设观察变量之间是相互独立的。
3、对于标准的训练hmm,traing is generative,even though sequence labeling is discriminative ,这一个缺点不太懂,hmm本身是生成模型,这句话是说即使序列标记已经是判别变量,但是hmm仍然是生成模型?,请大牛解释。
rnn不需要先验知识,也不需要选择输入和输出表示,他们可以有条不紊的进行训练,他的内部机制提供了一个泛化的机制对于时间序列模型,往往很健壮,并且没有空间噪声(spatial noise)。
直接利用rnn是不可能的在未分割时序数据,关键所在是rnn的优化函数是针对训练时序的每一个点预测的类别,RNN只能训练一系列独立的label分类。这就意味着训练数据必须预先分割,神经网络的输出是后处理之后给定的最后分类类别。
在之前是利用RNN与HMM结合的方法,用hmm构建长范围的 顺序结构化数据,网络提供了一个本地的分类,hmm在训练阶段能够自动分割序列,把神经网络分类转变为label标记,然而继承了hmm的缺点,这种结合并不能完全展示rnn的内在优势。
在本文提出一个新方法能够去除预先分割和输出后处理过程,用一个网络构建所有的序列模型。基本的想法就是在给定一个输入序列,例如语音mffcc特征,把神经网络输出作为一个所有可能label序列的概率分布,在给定这个分布之后,目标优化函数就是可以最大化正确的那个label序列。由于目标优化函数是可微分的,所以能够利用标准的反馈训练模型。
主要参考了把未分割的数据作为时间分类,结合称为connectionist temporal classification(CTC),相比之下,我们参考了每一个时间步或者每一帧是一个独立的作为独立的标记,作为逐帧分类。
以下是工作重点。
2.temporal classification
使用从一个固定的分布的训练数据集。输入空间为是所有含有m维度的向量输入序列。target空间是字母集合所有组合的序列label ,在中的每一对(x,z),目前、标序列对应的x序列为,其中,,由于输入序列与目标序列一般长度都不相等,所以之前没有先前方法把他们对齐。
我们的目标是利用训练一个时序分类器:,来分类未参与训练的输入序列,以最小化损失的情况下,也就是,预测序列尽可能与实际序列保持一致。
2.1 label error rate(标记损失)
我们主要关注的以下损失给定集合,不在内定义一个label error rate(LER),实际就是正常实际标记与预测标记之间的编辑距离例如如下:
(1)
其中是p和q序列的编辑距离。最小编辑距离的意思是利用插入、删除、替换等操作使得p变成q的最小操作数。这是一个衡量标准针对例如语音或者手写识别。最小化这个编辑距离。
3.connectionist temporal classification
时序分类,这个一张就是利用ctc来做循环神经网络,最重要的一步就是了怎么把循环神经网络的输出转换为label序列的条件概率分布。神经网络选择最优可能的labeling作为输出。
3.1 from network outputs to labelling
ctc神经网络有一个softmax输出层,比实际labels多一个单元,把最大值作为激活单元,表示为在特定times下观测变量对应的labels的概率。激活额外的单元是‘blank’的概率,总的加起来这个输出就定义了输入序列的所有概率预测与labels对齐的可能概率。那么任何一个label序列的概率就是对不同对应的输出预测线路求和得到。
更正式的,有一个长度为T的输入x,定义一个循环神经网络,输入为m维度,输出为n维度,对应的连续映射:,使得,是序列网络的输出,那么表示t时刻输出label为k的概率,那么长度为T的概率分布,覆盖了字母表,那么对于一个输入序列列x为T长度的整个概率预测序列为:
(2)
这个概率可以解释为对于每一个时刻t预测label为,所有时刻的联合概率,这个也仅是一条x输入输出序列labels的概率输出路径。也就是现在是个元素组成的path,相当于神经网络针对语音每一帧对应的标记输出,但是如果是卷积神经网络,那么输出就有可能小于帧数。对于一个路径表示为。
公式(2) 假设神经网络的输出是条件独立的,在给定网络内部状态之后。下一步就是定义多对一的映射:,其中是所有可能的标记labels,小于等于T,做这个映设就是把blank和对应重复的字符去除掉,例如:,这对应了一个神经网络从没有label到转换生成一个新标记,或者预测从一个label到另外一个,最后给定一个label ,利用定义它的条件概率,把对应所有序列的概率求和就是的条件概率。如下公式:
可以比较容易理解,就是神经网络所有输出序列经过映射是序列的概率求和就是的概率。
3.2 Constructing the Classififier(构造分类器)
给定以上公式,那么输入对应最有可能的label就是概率最大的那一个,
那么利用hmm的术语,就是任务就是解码decoding,但是并没有通用可用的解码算法,接下来的两个近似的方法能够获得很好好的答案。
第一方法(最优路径decoding)基于这样的假设:最优的可能path对应最优后可能的labeling,如下公式:
最优decoding需要琐碎的计算,由于仅仅是在每一个时间步最大概率的激活输出的连接,但是他并不能保证找到最优可能的label,原因就是他不是联合概率最大化,其实质每一个时间步之间是有上下文关系的。
4. Training the Network
加下来就是设计一个优化函数来训练CTC网络,最优化函数来源于最大似然估计,也就是最小化log似然目标,这和标准的神经网络优化函数一样,那么参数的权重调节可以和反馈下降
4.1. The CTC Forward-Backward Algorithm
这个是所有工作的重点,我们要利用一个有效的方式 来计算条件概率,公式3给了一个问题:就是要对给定的labelling 对所有的对应路径概率求和就是这个labelling的概率。一般情况这个labelling对应的路径有很多。
但是可以利用动态规划的算法来解决这个问题,类似于hmm的前后向算法,关键的信息就是把labelling所有对应路径概率求和分解成迭代式的对所有路径求解前缀的概率求和,这里接下来就会详细讲解,首先复习一下hmm的前后向算法,就不难理解这句话。
首先的需要了解前后向算法:具体连接链接为https://www.cnblogs.com/pinard/p/6955871.html为了能够更好的与本例子结合说明,就链接进行说明,在隐马尔科夫链过程是为了求解也就是在已知模型,求解观测概率,才会用到前后想算法,在本算法上我们已知的是时间序列T的神经网络输出,作为隐藏状态,那么实际labeling就是hmm观察序列概率。这个具有相似的场景,接下来如果用暴力求解,我们可以列举出长度威T的所有隐状态序列,在ctc中可以暴力罗列出所有的的路径。但是hmm多了一个发射概率,也就是基于当前状态下的观测概率,也就是分布求出这些隐藏序列与观测序的联合概率,就容易求出边缘分布概率,也就是对固定观测序列O对应每一个隐状态序列的概率求和既是。针对ctc就是固定每一个实际标签对应每一个神经网络输出的序列的概率求和。
首先介绍暴力求解方法,确定任意隐藏序列出现的概率为:,出现的概率为:,如果在ctc中就是,对于hmm固定的隐状态序列,要求的观测序列出现的概率是,也就是基于隐状态的条件下的观测概率,在ctc中对应的观测序列就是,而隐状态到是通过映射过来的,具体看论文,已经讲述过了。
接下来就是前想算法,是一个动态规划的思想,定义为序列t时刻隐状态为,并且观测序列的概率为前向概率表示为:
()
在ctc中
区别在于可以认为ctc只有隐状态序列的概率。我们递推t+1时刻各个隐状态的前向概率,如图:
我们可以看出基于时刻t的各个隐藏状态的前向概率,再乘以对应状态的转移概率,即就是在时刻t观测序列为,并且t时刻隐状态为,t+1时刻为的概率。如果将t时刻所有状态转移到t+1时刻的i状态的求和即,,就是在时刻t观测序列为,t+1时刻为的概率,进一步t+1时刻的观测概率只依赖于t+1时刻的隐状态,
就是t+1时刻观测到的概率,注意在hmm中所有隐状态到任意观测状态都有发射概率,这是ctc与hmm不同之处。
针对hmm的前向算法则有
输入为模型,观测序列为
求观测序列概率
计算时刻1的各个隐藏状态的前向概率:
,意思就是在第一时刻每一个状态都有发射到观测状态
的概率,
2)然后递推出2,3,...T时刻的前向概率:
意思就是t+1时刻状态为i的且观测状态为o(t+1)的概率是t时刻所有状态转移到t+1时刻状态为i的概率求和。
3)所以最中结果为:
后向概率同理,就不再解释,具体请看https://www.cnblogs.com/pinard/p/6955871.html讲解的非常详细。基本结合了hmm算法的前后向算法结合两者不同进行讲解,解析来继续讲解ctc的前后向算法过程。
假设一个实际label,定义一个前向算法变量这个表示是label,也就是前向计算出了从1到s所有实际label的路径概率,当前搜索路径实在时刻t,公式表示如下:
公式后边应该就是暴力求解的方法与等价。根据hmm的前后向算法可以由和递归求得,原因也比较简单,在t-1时刻只有两种状态,要么t-1步已经能够通过映射到了实际标记的,那么t时刻要么是blank或者是S步的标记。另外一种可能是t-1时刻到(s-1)步,t时刻走到s步的标记,所以有以上两种情况递归得到。
为了使得输出路径含有blank,就更改labels序列为,把blank添加到开始/结束和每一个label之间。则的长度就变成了,为了计算的前向概率,我们考虑的情况包括,非blank与blank之间的转换以及两个非blank之间的转换,也存在以blank开始(b)或者以第一个标注开始。
对给定规则的初始化如下:
注意此时的s代表的就hi是序列的第s步的序列标注。那么初始化概率就容易理解了。表示时间t=1时刻为blank的概率,也可直接跳到的第二步直接是实际序列标注的概率为,其他任意的s步都为0,很容易理解,意思就是如果跳过实际标记那么就不是这个整体序列标记,举个例子比如,我现在要求的是序列为=(abbacd)的概率,如果第一个a跳过,那就不是序列标记了。
通过递归表示如下:
为了解释以上公式我们需要把论文中的图翻出来如下:
CTCconnectionist temporal classfication: labelling unsegmented sequence data with recurrent(一)相关推荐
- signature=fc89d4352b6699754c14ce282ec75426,Method for Assembly of Nucleic Acid Sequence Data
摘要: The present invention relates to a method for assembly of nucleic acid sequence data comprising ...
- Conditional Random Fields:ProbabilisticModels for Segmenting and Labeling Sequence Data
Conditional Random Fields:Probabilistic Models for Segmenting and Labeling Sequence Data 条件随机场:对于段落和 ...
- 解决BLAST Database error: Error pre-fetching sequence data
1.背景: 下载Uniprot数据库中的蛋白质序列到本机,使用该文件创建BLAST的搜索数据库,然后使用blastp命令在数据库中搜索. 2.错误 按照blast手册上的指导,为了加快搜索的过程,使用 ...
- 论文学习12-Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data(CRF
文章目录 abstract 1.introduction 1.2 条件模型 2.标签偏差问题 3.CRF 提出条件随机场CRF abstract 我们提出了条件随机场,这是一个建立概率模型来分割和标记 ...
- Visual Causality Analysis of Event Sequence Data
论文传送门 作者 同济大学 Zhuochen Jin Shunan Guo Nan Chen Nan Cao 斯图加特大学 Daniel Weiskopf 北卡罗来纳大学教堂山分校 David Got ...
- 一文读懂CRNN+CTC(Connectionist Temporal Classification)文字识别
先总结一把CTC,下面文档太长: CTC是一种Loss计算方法,用CTC代替Softmax Loss,TF和pytorch都有对CTC的实现,从而解决OCR或者语音识别中序列对齐的问题.CTC特点: ...
- CTC介绍(connectionist temporal classification论文翻译)
1.摘要 我基本是基于论文<Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Rec ...
- 联结主义时间分类(Connectionist temporal classification)的论文笔记
前言: { 最近在github上更新了一些代码,但没在这里更新文章,这次就在这写一篇论文的阅读笔记. 论文是<Connectionist temporal classification: Lab ...
- Connectionist Temporal Classification(CTC)、音识别模型小型综述和一个简易的语音识别模型的tensorflow实现
CTC是一种端到端的语音识别技术,他避免了需要字或者音素级别的标注,只需要句子级别的标注就可以进行训练,感觉非常巧妙,也很符合神经网络浪潮人们的习惯.特别是LSTM+CTC相较于之前的DNN+HMM, ...
- 吴恩达deeplearning.ai系列课程笔记+编程作业(15)序列模型(Sequence Models)-第三周 序列模型和注意力机制
第五门课 序列模型(Sequence Models) 第三周 序列模型和注意力机制(Sequence models & Attention mechanism) 文章目录 第五门课 序列模型( ...
最新文章
- 怎么修改与服务器的操作系统,怎么修改与服务器的操作系统
- HTMLTestRunner 为什么用PyCharm(Eclipse)执行测试成功但无法生成报告
- 回顾国产手机4年沉浮,仍然只是靠这三招翻身
- 解决:pycharm中动画函数animation.FuncAnimation不起作用
- 程序猿眼里的高并发架构
- python文本筛选html_python 正则表达式过滤文本中的html标签 源代码解析
- newton法分形图
- Sound Ventures斥资百万美元举行NFT竞赛活动
- html绘制城堡,HTML5动画 - 山谷城堡
- Algorithm——何为算法?
- ssm教师教学评价系统(ssm教学评价系统教师ssm学生评教系统)JSP网上评教系统jsp评教系统
- 外卖类应用的竞争与趋势
- VirtualBox 新建虚拟机
- 观天涯kk大神10年帖子有感
- matlab 向量的基本运算
- Unity-TextMeshPro如何扩展材质实现字体Face+Outline流光效果
- 删除SQL表中的某一列
- ping命令的常用参数
- wxml 点击图片下载_跟着做,零基础也能做出自己的小程序
- hashmap和数组哪个速度快
热门文章
- 2021年6月1日大学化学无机原理(12)——第六章四个量子数、多电子的核外排布。
- springboot+微信小程序基于微信小程序的高校学生疫情在校封闭管理系统毕业设计源码240904
- 固态硬盘打开计算机就死机,SSD死机卡顿怎么办 固态硬盘使用详解
- 中小型企业基于大数据技术的项目实践
- win10系统小键盘数字键不能用怎么办
- linux怎么看本机ip,linux下查看本机IP的两种方法
- 怎么看电脑的hdmi是输出还是输入_笔记本hdmi接口是输入还是输出
- 学习笔记 Tianmao 篇 OkHttp 网络的使用的简单封装 获取Json用GSON来解析
- 谈谈对内存管理子系统的理解
- 爬sobooks电子书并把电子书的信息记录到mysql中