CTCLoss原理解读

一、本文参考

根据重要性排名

【Learning Notes】CTC 原理及实现_MoussaTintin的博客-CSDN博客_ctc实现

白话CTC(connectionist temporal classification)算法讲解_罗罗可爱多的博客-CSDN博客_ctc 算法

CTC Loss原理 - 知乎

二、CTC的作用概述

-------------------------------------------------------新版解读方式----------------------------------------------------

特征x经过DNN之后,再经过softmax层,得到后验概率y矩阵,维度为m*T(m为车牌总字符数,T为车牌长度)。

假设知道每一时刻的车牌标签,即训练样本x和z’

如果z=[nihao],则z’=[nnniiihhhaaaooo]

于是目标函数为:

上式对求导,发现当时有值,其他均为0。所以在每一时刻t,目标只与是相关的。

如果训练数据每个t都标记过则训练过程简单很多,但实际上每个t标记过的数据非常稀少。CTC可以做到不用逐个t标记来为数据做训练。

L表示所有车牌字符集合

Π=(π1, π2, … , πn)表示一条由L中元素组成的长度为T的路径

B表示简单的压缩(连续相同的字符归一)

如果一条路径π有B(π)=(n, I, h, a, o),则认为是正确的车牌。

每一条路径π的概率:

在车牌没有对齐的情况下,目标函数为多条π(B(π)=z)的路径概率之和,即:

CTC的训练过程是通过调整w使得值最大。

因为:

所以只要得到即可反向传播得到

对于两条路径q和r,在每一个点上路径只能向右或向下移动。假设有两条路径均经过这点,则在目标函数的连加项中,可以剔除掉与无关的项。

设q和r为与相关的两条路径,用A1与B1分别表示q在之前和之后的部分,用A2与B2分别表示r在之前和之后的部分。可以发现A1B2和A2B1也是可得到的两条路径。

这四条路径的概率:

A1OB1+A1OB2+A2OB1+A2OB2

=A1O(B1+B2)+A2O(B1+B2)

=(A1+A2)O(B1+B2)

所以可以发现,该值为(前置项) (后置项),则:

定义α14(h)=(前置项)yh14,可以发现α14(h)可由α13(h)或α13(i)递推得到。

α14(h)=(α13(h) +α13(i)) yh14.

即每个值都可由上一时刻的一个或两个值得到。

同理,β14(h)=(β15(h) +β15(a)) yh14.

所以,

所以,

得到此值后,即可根据反向传播进行训练。

-------------------------------------------------------旧版解读方式----------------------------------------------------

CTC(connectionist Temporal Classification)连接时序分类。

 

以语音识别为例,以一段”你好”的语音为例,经过MFCC特征提取后产生30帧,每帧含有12个特征,即。经过DNN后得到后验概率,矩阵里面每一列之和为1(softmax之和为1)。

我们希望在最后的softmax矩阵中使得生成”nihao”的所有路径的概率最大。

因此在音素没有对齐的情况下,目标函数应该为中所有元素的概率之和。即:

其中z为目标音素的扩展版字符集。

CTC的训练过程是通过调整w值使得值最大,计算过程如下:

因此,只要得到,即可根据反向传播,得到

解读如下:

正向:输入的x经过神经网络后得到y,计算p(z|y)的值

反向:p(z|y)对上一层的输出y求导,然后y再对x求导就得到了w的值

三、CTCLoss原理

1、aligh-free变长映射

ocr或者语音序列学习任务一般是多对多的映射关系,语音识别中好几帧对应若干音节或者字符,并且每个输入和输出之间也没有清楚的对应关系。

CTC引入一个特殊blank字符解决多对一映射问题。

扩展原始词表 L 为 L′=L∪{blank}L′=L∪{blank}。对输出字符串,定义操作 B:

1)合并连续的相同符号;

2)去掉 blank 字符

2、定义

(1)表示在第t个时间,类别为k的softmax值。

神经网络层最终输出的为softmax矩阵,也即后验概率矩阵y

(2)表示路径集合,l为路径字符集

(3)和大多数有监督学习一样,CTC使用最大似然标准进行训练

在给定输入情况下,输出路径的概率为:

所有路径,我们的目标是p(l|x)越大越好。

在t点k类别时

3、前向-后向的缘由

假设有2条路径在t时刻经过k类别,如下所示:

定义F1为从第1时间点到t时间点的路径概率积的值,F1‘为从第1时间点到t-1时间点的路径概率积的值。,类似的B1定义为:

为什么不直接定义F1为从第1点到第t-1点的概率之积?因为此时F1没有固定唯一的终点,从没有固定的起点到没有固定的终点,是不能这么定义的,定义时至少有一个明确的起点或者终点。

此时通过以上2条路径可以衍生出4条路径:

对t时刻k类别的p(l|x)继续计算如下:

用​ α 来表示forward的部分,​ β 表示backward的部分,上式继续计算如下:

最后得到:

反向传播求导如下:

除法的求导公式如下:

于是:

因为中包含,所以对其求导后再乘以,就又得到了

L中可能包含多个k字符,它们计算的梯度要进行累加

优化似然函数取对数,于是:

4、forward和backward的递推关系

都有对应的初始化值和递推关系如下:

末尾带有blank和不带有blank都是正确的,最后可以得到似然 p(l|x)=αT(|l′|)+αT(|l′|−1)。

四、解码

训练好的模型用新的样本输入来预测对应的输出字符串,这个过程是解码的过程。

按照最大似然准则,最优的解码结果为:

求该解可用贪心搜索算法和束搜索算法。

1、贪心搜索

贪心搜索就是每个时间t中都选择概率最高的那个分类组成最后的路径。

2、束搜索

贪心搜索只能找出局部最优的一条路径,而束搜索是找出局部最优的N条路径,N是束宽(beam size)。

假如取beam size为2,

第1个时间点找到最优的两个是AC

第2个时间点,通过A遍历所有类别,通过C遍历所有类别,在上述2个类别的值中找到最优的两个是AB和CE

第3个时间点,通过AB遍历所有类别,通过CE遍历所有类别,在上述2个类别的值中找到最优的两个是ABD和CED。

计算时间复杂度,假如beam size为k,时间段为T,类别为N,则时间复杂度为:T*N*k

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值