• 预备知识
  • 摘要
  • 标签错误率
  • CTC
    • 从输出到标签
    • 构建分类器
  • 参考资料

最近在看手势识别相关论文,在看到一篇论文的时候发现了LSTM+CTC能够解决数据预分割的问题。于是抱着学习的心态这篇论文《Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks》。所以本片博客的内容主要是基于论文以及斯坦福PhD的一篇博客,以及自己的一些理解。

预备知识

在看懂CTC之前需要了解隐马尔可夫模型和EM算法。其实CTC里面的思想和HMM很相似,但是又有所区别,如果搞懂了HMM,那么对于CTC的理解就会轻松很多。如果有对HMM不太懂的可以参考我前面几篇博客。

EM算法(Expectation maximization algorithm)

隐马尔科夫模型一(概念理解)

隐马尔可夫模型二(公式推导)

摘要

首先我们要搞清楚为什么要发明CTC,对于真实世界的序列学习任务,数据往往含有噪声和没有预先分割。RNN是一个强大的序列学习模型,但是需要对数据进行预先处理,所以有了CTC我们就能够提升RNN的性能。下面结合论文

标签错误率

首先文章定义了一个标签错误率(label error rate)来进行度量。其中xxx和z" role="presentation">zzz分别表示的是输入序列和标签序列,S′S′S'是一个(x,z)(x,z)(x,z)的序列集合而|S′||S′||S'|表示序列的对数,就是里面有多少对(x,z)(x,z)(x,z)。

其中ED(p,q)ED(p,q)ED(p,q)表示编辑距离,其中p,qp,qp,q表示的是两个序列。编辑距离的意思是其中ppp经过插入删除和替换字符等基本操作转换成序列q" role="presentation">qqq的操作数。

CTC

从输出到标签

对于一个给定长度为TTT的输入序列x" role="presentation">xxx,定义一个RNN。并且定义yyy为RNN对应的输出,将ykt" role="presentation">ytkykty_k^t定义为在ttt时刻观测到标签k" role="presentation">kkk的概率。并且定义了一个新的标签集合L′=L∪{blank}L′=L∪{blank}L'=L\cup \{blank\},即在原始标签集合的基础上加上一个空白标签。

其中ππ\pi表示的是有RNN的输出组成的序列路径。而πtπt\pi_t则是对应于ttt时刻的RNN的输出,例如此时的输出为a。

接下来是定义一个多对一的映射β" role="presentation">ββ\beta,将输出路径映射到标签上,其中输出路径长度要大于或者等于标签长度。具体做法是通过移除路径中重复的标签和空白格。举一个简单的例子:β(a−aab−)=β(−aa−abb−)=aabβ(a−aab−)=β(−aa−abb−)=aab\beta(a-aab-)=\beta(-aa-abb-)=aab。其实这一步涉及到输入X=(x1,x2,..,xT)X=(x1,x2,..,xT)X=(x_1,x_2,..,x_T)和输出Y=(y1,y2,...,yM)Y=(y1,y2,...,yM)Y=(y_1,y_2,...,y_M)的对齐,具体的规则其实论文里面讲解得不是很清楚,后来看参考文献2才明白具体做法。

在下图中,第一行表示的是输入x,然后将重复标签合并,并且删除空白,最后就能够得到hello

并且如果YYY中同一行有两个连续并且相同的字母,表示在输入的时候两个连续字母之间一定有一个空白符ε" role="presentation">εε\varepsilon,以l为例。接下来我们来看一些有效对齐和无效对齐。

CTC对齐有一些显著的特性。 首先,X和Y之间允许的对齐是单调的。 如果我们前进到下一个输入,我们可以保持相应的输出相同或前进到下一个输入。 第二个属性是X到Y的对齐是多对一的。 一个或多个输入元素可以对齐到一个输出元素,但反过来不成立。 这意味着第三个属性:Y的长度不能大于X的长度。

目标函数:

即对应每一步概率pt(at|X)pt(at|X)p_t(a_t|X)的乘积。

然后令l=β(π)l=β(π)l=\beta(\pi),最后求出求出标签对应路径的概率之和,要知道为什么这么做可以看一下HMM模型三个问题中的第三个问题。所以有:

构建分类器

这一步实际作用是解码。对于输出结果的分类应该是输入序列对应的最优可能的标签。其中h(x)h(x)h(x)表示的是分类结果,即在输入为xxx时,最有可能的标签序列l" role="presentation">lll。

这一步和HMM一样,也分为两种方法,一种是Best path decoding,另一种方法是prefix search decoding。

Best path decoding是基于一个假设,最有可能的输出序列对应最有可能的标签。

其中π∗π∗\pi^*表示最有可能的路径。其实就是穷举遍历求最大值,缺点在于计算量比较大,还有可能找不到最佳结果,基于前面的假设。

prefix search decoding是基于前向后向算法的改进。其标签序列对应HMM里面的状态序列。任意状态之间是可以相互转换的,由隐马尔可夫链决定转换成功率。而标签序列是有顺序的,所以只能从一个转换到下一个,而不能从下一个状态回到上一个状态。如图所示。只能先a后b,而不能先b后a。

下面我们具体看看约束规则。

首先我们定义αs,tαs,t\alpha_{s,t}在序列中ttt时刻出现s" role="presentation">sss的概率。

对于ys=ys−2ys=ys−2y_s=y_{s-2}:

对于ys−1=ε,yt2≠ytys−1=ε,yt2≠yty_{s-1}=\varepsilon,y_{t_2}\not= y_{t}

其实统一起来就是

αt(s)=p(zs|X)(αt−1(s)+αt−1(s−1)+δt−1(s−2))αt(s)=p(zs|X)(αt−1(s)+αt−1(s−1)+δt−1(s−2))

\alpha_t(s)=p(z_s|X)(\alpha_{t-1}(s)+\alpha_{t-1}(s-1)+\delta_{t-1}(s-2))

δt(s)={αt(s)0ys≠ys−2,ys−1=εSR≤0δt(s)={αt(s)ys≠ys−2,ys−1=ε0SR≤0

\delta_t(s)=\left\{ \begin{array}{rcl} \alpha_t(s) & ,y_{s-1}=\varepsilon}\\ 0 & \end{array} \right.

上面公式就没有按照博客里面的图片,而是与论文里面保持一致。

接下来就是损失函数:

未完待续。。。

参考资料

1.Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks

2.Sequence Modeling With CTC

3.CTC原理

关于CTC模型的理解相关推荐

  1. TensorFlow入门教程(29)车牌识别之使用DenseNet+CTC模型进行文字识别(五)

    # #作者:韦访 #博客:https://blog.csdn.net/rookie_wei #微信:1007895847 #添加微信的备注一下是CSDN的 #欢迎大家一起学习 # 1.概述 前面几讲, ...

  2. 随机森林算法参数解释及调优 转胡卫雄 RF模型可以理解成决策树模型嵌入到bagging框架,因此,我们首先对外层的bagging框架进行参数择优,然后再对内层的决策树模型进行参数择优

    RF参数择优思想:RF模型可以理解成决策树模型嵌入到bagging框架,因此,我们首先对外层的bagging框架进行参数择优,然后再对内层的决策树模型进行参数择优.在优化某一参数时,需要把其他参数设置 ...

  3. 3.7 注意力模型直观理解-深度学习第五课《序列模型》-Stanford吴恩达教授

    注意力模型直观理解 (Attention Model Intuition) 在本周大部分时间中,你都在使用这个编码解码的构架(a Encoder-Decoder architecture)来完成机器翻 ...

  4. [css] 说说你对css盒子模型的理解

    [css] 说说你对css盒子模型的理解 css盒模型由两个盒子组成,外在的控制是否换行的盒子,以及内在的控制元素内容的盒子.比如:display: inline-block, 则它的外在的盒子就是i ...

  5. [css] 说说你对低版本IE的盒子模型的理解

    [css] 说说你对低版本IE的盒子模型的理解 一个CSS盒子由四部分组成,由内到外依次是:content.padding.border.margin.所谓盒子模型定义的是盒子宽高的计算方法,IE盒子 ...

  6. 原创专栏:谈谈我对评分模型的理解

    在准备给FAL的读者朋友们讲讲评分模型之前,我其实是不太想写有关评分模型的相关分享. 一是因为我开始创业后,自身更多关注企业管理与创新发展,评分模型技术关注度不再像以前那么紧密:还有另一个原因是,标准 ...

  7. 机器学习模型的理解(三)

    算法直观与对模型的理解 算法直观与对模型的理解(二) 0. PCA 与 朴素贝叶斯 PCA 作为特征工程的重要技术工具,其降维特性本质上是由特征空间维度的压缩(通过属性列的解耦合)实现的,因此可以认为 ...

  8. 算法直观与对模型的理解(二)

    算法直观与对模型的理解 assumptions 很多机器学习算法以数据的线性可分为基本假设或叫基本前提. Many machine learning algorithms make assumptio ...

  9. 最大熵模型怎么理解?熵是什么??

    最大熵模型怎么理解?熵是什么?? 最大熵模型的理解!以及熵的理解! 前言 一.熵是什么? 二.最大熵原理是什么 三.最大熵模型的定义 前言 最大熵模型在机器学习里面很重要,很重要,很重要(重要的事情说 ...

最新文章

  1. 云领未来,智慧共创 | 德勤咨询获「SAP 中国区2018年度优秀服务合作伙伴」
  2. lucene DocValues——本质是为通过docID查找某field的值
  3. 如何把 Kitten编程猫上开发出来的项目打包成安卓平台上可以安装的apk文件
  4. android毛玻璃遮罩效果_css3毛玻璃效果[模糊图片]
  5. Xamarin效果第二十篇之GIS中加载三维白模
  6. java程序包不存在_idea Error:(3, 32) java: 程序包***不存在的问题
  7. mormot mysql,mORMot 数据库操作
  8. 单片机三种烧录方式ICP、IAP和ISP
  9. 在 MATLAB 或 Python 中使用 ZOS-API 进行光线追跡的批次处理
  10. Chrome浏览器无法访问网页(移动硬盘)
  11. Neo4j 图数据科学应用 - 图目录和图投影(二)
  12. 《领导力21法则》-读书笔记
  13. 云端系统服务器是什么,云端服务器是什么-云端服务器介绍
  14. 洛谷P1039侦探推理题解--zhengjun
  15. 人工智能会为远程学习带来春天吗?
  16. 做柜员还是程序员_放弃月薪2万的程序员,被爸妈喊回家干公务员,看到工资悔不当初...
  17. mysql自定义变量比较大小_MySQL 自定义变量@ 常用案例
  18. 面试送命题,你为什么从上家公司离职?(面试题总结大全)
  19. oh-my-zsh安装教程
  20. MySQL创建无符号整数(int)及取值范围

热门文章

  1. 学习总结-《父与子的编程之旅》chapter 1
  2. 二手新能源车数据爬虫(人人车,第一手车,二手车之家)
  3. 出现ERROR The server quit without updating PID file
  4. 搜狗拼音输入法7.2c正式版(支持win8)_去广告优化版
  5. 初次使用 python poetry 包管理模块踩坑
  6. MUR60120PT-ASEMI整流二极管MUR60120PT
  7. C语言函数大全-- o 开头的函数
  8. Winform使用第三方库控件出现“NoLicenseInformation”或“变量未声明或从未赋值”问题总结
  9. web前端就业怎么样
  10. 投资最重要的事读后感_《投资最重要的事》读后感1800字