• 预备知识
  • 摘要
  • 标签错误率
  • 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. “万维网之父”发文阐述其下一个网络时代:将数据与应用分离,互联网去中心化正在路上...
  2. 如何将 Nginx 性能提升10倍?这10个“套路”请收好!
  3. 深究AngularJS——过滤器(filter)
  4. Linux同步原语系列-spinlock及其演进优化
  5. jsp点选框_Jsp单选框
  6. 深度学习 循环神经网络RNN
  7. 查看linux jvm使用情况,查看jvm内存使用命令
  8. Python 用 OpenCV 画椭圆 (5)
  9. 余文乐结婚,杜蕾斯文案炸了!
  10. android 信号研究(包括信号图标和信号优化)
  11. 可裂解组织蛋白酶的ADC偶联物-靶向抗体偶联技术
  12. cdma2000解析_CDMA2000 1x EV-DO技术解析
  13. 「ChatGPT」一夜之间“火爆出圈“【杞人忧天 or 未雨绸缪】
  14. 基于JAVA大学生学籍管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
  15. Python爬虫入门实战,图文详细教学,一看就懂
  16. 中科大宣布 Anaconda 镜像无限期停止服务
  17. 怎么用u盘重装系统win11正版,u盘安装win11的方法
  18. fluent旋转机械滑移网格法设置
  19. ER图连接线上加个圆圈什么意思_如何拿链家网的租房数据做些有意思的事情?...
  20. 如何调整chm文字字体大小

热门文章

  1. iview 中 render函数与renderHeader函数
  2. Java基础----Java语言简介
  3. 不仅仅是“屠龙之技”-编译器开发者的精神胜利!
  4. 搜狗输入法android皮肤,搜狗输入法皮肤盒子app
  5. 2020 深圳 Gopher Meetup 上线啦!
  6. android 8.1 9.0 10.0 app应用卸载黑名单
  7. nodejs代码保护方式--加密、混淆、编译、打包成exe
  8. HTML:路径的写法
  9. AST学习笔记 至少入个大门
  10. 总结一下:运维工程师面试的经历及面试相关问题