深度学习
  • 前言
  • 第一章:经典网络
    • ImageNet Classification with Deep Convolutional Neural Network
    • Very Deep Convolutional Networks for Large-Scale Image Recognition
    • Going Deeper with Convolutions
    • Deep Residual Learning for Image Recognition
    • PolyNet: A Pursuit of Structural Diversity in Very Deep Networks
    • Squeeze-and-Excitation Networks
    • Densely Connected Convolutional Networks
    • SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
    • MobileNet v1 and MobileNet v2
    • Xception: Deep Learning with Depthwise Separable Convolutions
    • Aggregated Residual Transformations for Deep Neural Networks
    • ShuffleNet v1 and ShuffleNet v2
    • CondenseNet: An Efficient DenseNet using Learned Group Convolution
    • Neural Architecture Search with Reinforecement Learning
    • Learning Transferable Architectures for Scalable Image Recognition
    • Progressive Neural Architecture Search
    • Regularized Evolution for Image Classifier Architecture Search
    • 实例解析:12306验证码破解
  • 第二章:自然语言处理
    • Recurrent Neural Network based Language Model
    • Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation
    • Neural Machine Translation by Jointly Learning to Align and Translate
    • Hierarchical Attention Networks for Document Classification
    • Connectionist Temporal Classification : Labelling Unsegmented Sequence Data with Recurrent Neural Ne
    • About Long Short Term Memory
    • Attention Is All you Need
    • BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
  • 第三章:语音识别
    • Speech Recognition with Deep Recurrent Neural Network
  • 第四章:物体检测
    • Rich feature hierarchies for accurate object detection and semantic segmentation
    • Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
    • Fast R-CNN
    • Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
    • R-FCN: Object Detection via Region-based Fully Convolutuional Networks
    • Mask R-CNN
    • You Only Look Once: Unified, Real-Time Object Detection
    • SSD: Single Shot MultiBox Detector
    • YOLO9000: Better, Faster, Stronger
    • Focal Loss for Dense Object Detection
    • YOLOv3: An Incremental Improvement
    • Learning to Segment Every Thing
    • SNIPER: Efficient Multi-Scale Training
  • 第五章:光学字符识别
    • 场景文字检测
      • DeepText: A Unified Framework for Text Proposal Generation and Text Detection in Natural Images
      • Detecting Text in Natural Image with Connectionist Text Proposal Network
      • Scene Text Detection via Holistic, Multi-Channel Prediction
      • Arbitrary-Oriented Scene Text Detection via Rotation Proposals
      • PixelLink: Detecting Scene Text via Instance Segmentation
    • 文字识别
      • Spatial Transform Networks
      • Robust Scene Text Recognition with Automatic Rectification
      • Bidirectional Scene Text Recognition with a Single Decoder
      • multi-task learning for text recognition with joint CTC-attention
    • 端到端文字检测与识别
      • Reading Text in the Wild with Convolutional Neural Networks
      • Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Framework
    • 实例解析:字符验证码破解
    • 二维信息识别
      • 基于Seq2Seq的公式识别引擎
      • Show and Tell: A Neural Image Caption Generator
      • Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
  • 第六章:语义分割
    • U-Net: Convolutional Networks for Biomedical Image Segmentation
  • 第七章:人脸识别
    • 人脸检测
      • DenseBox: Unifying Landmark Localization with End to End Object Detection
      • UnitBox: An Advanced Object Detection Network
  • 第八章:网络优化
    • Batch Normalization
    • Layer Normalization
    • Weight Normalization
    • Instance Normalization
    • Group Normalization
    • Switchable Normalization
  • 第九章:生成对抗网络
    • Generative Adversarial Nets
  • 其它应用
    • Holistically-Nested Edge Detection
    • Image Style Transfer Using Convolutional Nerual Networks
    • Background Matting: The World is Your Green Screen
  • Tags
  • References
由 GitBook 提供支持
在本页
  • 简介
  • 算法详解
  • 1.1 对齐
  • 1.2 损失函数
  • 1.3 预测
  • CTC的特征

这有帮助吗?

  1. 第二章:自然语言处理

Connectionist Temporal Classification : Labelling Unsegmented Sequence Data with Recurrent Neural Ne

上一页Hierarchical Attention Networks for Document Classification下一页About Long Short Term Memory

最后更新于4年前

这有帮助吗?

本文主要参考自Hannun等人在distill.pub发表的文章(),感谢Hunnun等人对CTC的梳理。

简介

在语音识别中,我们的数据集是音频文件和其对应的文本,不幸的是,音频文件和文本很难再单词的单位上对齐。除了语言识别,在OCR,机器翻译中,都存在类似的Sequence to Sequence结构,同样也需要在预处理操作时进行对齐,但是这种对齐有时候是非常困难的。如果不使用对齐而直接训练模型时,由于人的语速的不同,或者字符间距离的不同,导致模型很难收敛。

CTC(Connectionist Temporal Classification)是一种避开输入与输出的一种方式,是非常适合语音识别或者OCR这种应用的。

对比传统的分类方法,时序分类有如下难点:

算法详解

1.1 对齐

这个问题有两个缺点:

  1. 不能处理有连续重复字符出现的情况,例如单词“HELLO”,按照上面的算法,输出的是“HELO”而非“HELLO”。

这种对齐方式有三个特征:

1.2 损失函数

上图分成两种情况

Case 1:

Case 2:

1.3 预测

求解最可能的输出有两种方案,一种是Greedy Search,第二种是beam search

1.3.1 Greedy Search

每个时间片均取该时间片概率最高的节点作为输出:

这个方法最大的缺点是忽略了一个输出可能对应多个对齐方式.

1.3.2 Beam Search

Beam Search是寻找全局最优值和Greedy Search在查找时间和模型精度的一个折中。一个简单的beam search在每个时间片计算所有可能假设的概率,并从中选出最高的几个作为一组。然后再从这组假设的基础上产生概率最高的几个作为一组假设,依次进行,直到达到最后一个时间片,下图是beam search的宽度为3的搜索过程,红线为选中的假设。

CTC的特征

  1. 条件独立:CTC的一个非常不合理的假设是其假设每个时间片都是相互独立的,这是一个非常不好的假设。在OCR或者语音识别中,各个时间片之间是含有一些语义信息的,所以如果能够在CTC中加入语言模型的话效果应该会有提升。

给定输入序列X=[x1,x2,...,xT]X=[x_1,x_2,...,x_T]X=[x1​,x2​,...,xT​]以及对应的标签数据Y=[y1,y2,..,yU]Y=[y1,y2,..,yU]Y=[y1,y2,..,yU],例如语音识别中的音频文件和文本文件。我们的工作是找到X到Y的一个映射,这种对时序数据进行分类的算法叫做Temporal Classification。

XXX和YYY的长度都是变化的;

XXX和YYY的长度是不相等的;

对于一个端到端的模型,我们并不希望手动设计XXX和YYY之间的对齐。

CTC提供了解决方案,对于一个给定的输入序列X,X,X, CTC给出所有可能的Y的输出分布。根据这个分布,我们可以输出最可能的结果或者给出某个输出的概率。

损失函数:给定输入序列XXX,我们希望最大化Y的后验概率P(Y∣X)P(Y|X)P(Y∣X), P(Y∣X)P(Y|X)P(Y∣X)应该是可导的,这样我们能执行梯度下降算法;

测试:给定一个训练好的模型和输入序列XXX,我们希望输出概率最高的YYY:

Y∗=argmaxYp(Y∣X)Y^* = argmax_Y p(Y|X)Y∗=argmaxY​p(Y∣X)

当然,在测试时,我们希望Y∗Y^*Y∗能够尽快的被搜索到。

给定输入XXX,CTC输出每个可能输出及其条件概率。问题的关键是CTC的输出概率是如何考虑XXX和YYY之间的对齐的,这种对齐也是构建损失函数的基础。所以,首先我们分析CTC的对齐方式,然后我们在分析CTC的损失函数的构造。

需要注意的是,CTC本身是不需要对齐的,但是我们需要知道XXX的输出路径和最终输出结果的对应关系,因为在CTC中,多个输出路径可能对应一个输出结果,举例来理解。例如在OCR的任务中,输入XXX是含有“CAT”的图片,输出YYY是文本[C, A, T]。将X分割成若干个时间片,每个时间片得到一个输出,一个最简答的解决方案是合并连续重复出现的字母,如图2.

几乎不可能将XXX的每个时间片都和输出Y对应上,例如OCR中字符的间隔,语音识别中的停顿;

为了解决上面的问题,CTC引入了空白字符ϵ\epsilonϵ,例如OCR中的字符间距,语音识别中的停顿均表示为ϵ\epsilonϵ。所以,CTC的对齐涉及去除重复字母和去除ϵ\epsilonϵ两部分,如图3。

XXX与YYY之间的时间片映射是单调的,即如果XXX向前移动一个时间片,YYY保持不动或者也向前移动一个时间片;

XXX与YYY之间的映射是多对一的,即多个输出可能对应一个映射,反之则不成立,所以也有了特征3;

XXX的长度大于等于YYY的长度。

CTC的时间片的输出和输出序列的映射如图4:

也就是说,对应标签YYY,其关于输入XXX的后验概率可以表示为所有映射为YYY的路径之和,我们的目标就是最大化YYY关于x=yx = yx=y的后验概率P(Y∣X)P(Y|X)P(Y∣X)。假设每个时间片的输出是相互独立的,则路径的后验概率是每个时间片概率的累积,公式及其详细含义如图5。

上面的CTC算法存在性能问题,对于一个时间片长度为TTT的NNN分类任务,所有可能的路径数为TNT^NTN,在很多情况下,这几乎是一个宇宙级别的数字,用于计算Loss几乎是不现实的。在CTC中采用了动态规划的思想来对查找路径进行剪枝,算法的核心思想是如果路径π1\pi_1π1​和路径π2\pi_2π2​在时间片t之前的输出均相等,我们就可以提前合并他们,如图6。

其中,横轴的单位是XXX的时间片,纵轴的单位是YYY插入ϵ\epsilonϵ的序列Z。例如对于单词“ZOO”,插入ϵ\epsilonϵ后为:

Z={ϵ,Z,ϵ,O,ϵ,O,ϵ}Z = \{\epsilon, Z, \epsilon, O, \epsilon, O, \epsilon\}Z={ϵ,Z,ϵ,O,ϵ,O,ϵ}

我们用αs,t\alpha_{s,t}αs,t​表示路径中已经合并的在横轴单位为t,纵轴单位为s的节点。根据CTC的对齐方式的三个特征,输入有9个时间片,标签内容是“ZOO”,P(Y∣X)P(Y|X)P(Y∣X)的所有可能的合法路径如下图

如果αs,t=ϵ\alpha_{s,t} = \epsilonαs,t​=ϵ, 则αs,t\alpha_{s,t}αs,t​只能由前一个空格αs−1,t−1\alpha_{s-1,t-1}αs−1,t−1​或者其本身αs,t−1\alpha_{s,t-1}αs,t−1​得到,如果αs,t\alpha_{s,t}αs,t​不等于ϵ\epsilonϵ,但是αs,t\alpha_{s,t}αs,t​为连续字符的第二个,即αs=αs−2\alpha_{s} = \alpha_{s-2}αs​=αs−2​,则αs,t\alpha_{s,t}αs,t​只能由前一个空格αs−1,t−1\alpha_{s-1,t-1}αs−1,t−1​或者其本身αs,t−1\alpha_{s,t-1}αs,t−1​得到,而不能由前一个字符得到,因为这样做会将连续两个相同的字符合并成一个。pt(zs∣X)p_t(z_s | X)pt​(zs​∣X)表示在时刻t输出字符zsz_szs​的概率。

α(s,t)=(α(s,t−1)+α(s−1,t−1))⋅pt(zs∣X)\alpha(s,t) = (\alpha(s,t-1) + \alpha(s-1, t-1))\cdot p_t(z_s | X)α(s,t)=(α(s,t−1)+α(s−1,t−1))⋅pt​(zs​∣X)

如果αs,t\alpha_{s,t}αs,t​ 不等于ϵ\epsilonϵ,则αs,t\alpha_{s,t}αs,t​可以由αs,t−1\alpha_{s,t-1}αs,t−1​,αs−1,t−1\alpha_{s-1,t-1}αs−1,t−1​以及格αs−2,t−1\alpha_{s-2,t-1}αs−2,t−1​得来,可以表示为:

α(s,t)=(α(s,t−1)+α(s−1,t−1)+α(s−2,t−1))⋅pt(zs∣X)\alpha(s,t) = (\alpha(s,t-1) + \alpha(s-1, t-1) + \alpha(s-2, t-1))\cdot p_t(z_s | X)α(s,t)=(α(s,t−1)+α(s−1,t−1)+α(s−2,t−1))⋅pt​(zs​∣X)

从图7中我们可以看到,合法路径有两个起始点,合法路径的概率p(Y∣X)p(Y|X)p(Y∣X)是两个final nodes的概率之和。

现在,我们已经可以高效的计算损失函数,下一步的工作便是计算梯度用于训练模型。由于P(Y∣X)P(Y|X)P(Y∣X)的计算只涉及加法和乘法,因此其一定是可导函数,进而我们可以使用SGD优化模型。

对于数据集DDD,模型的优化目标是最小化负对数似然

∑(X,Y)∈D−logp(Y∣X)\mathop{\sum}_{(X,Y)\in D} -logp(Y|X)∑(X,Y)∈D​−logp(Y∣X)

当我们训练好一个RNN模型时,给定一个输入序列XXX,我们需要找到最可能的输出,也就是求解

Y∗=arg⁡max⁡Yp(Y∣X)Y^* = \mathop{\arg\max}_Y p(Y|X)Y∗=argmaxY​p(Y∣X)

A∗=arg⁡max⁡A∏t=1Tpt(at∣X)A^* = \mathop{\arg\max}_A \prod_{t=1}^T p_t(a_t | X)A∗=argmaxA​∏t=1T​pt​(at​∣X)

单调对齐:CTC的另外一个约束是输入XXX与输出YYY之间的单调对齐,在OCR和语音识别中,这种约束是成立的。但是在一些场景中例如机器翻译,这个约束便无效了。

多对一映射:CTC的又一个约束是输入序列XXX的长度大于标签数据YYY的长度,但是对于YYY的长度大于XXX的长度的场景,CTC便失效了。

https://distill.pub/2017/ctc/