联接主义时序分类CTC的细致推导(二)

参考:Alex Graves, Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks

模型的训练

数值稳定的前向-后向算法

        由于前向-后向算法中会出现连续的概率值乘法(0,1之间),对长序列来说很容易造成浮点下溢;作者使用了归一化的前向-后向过程。为了不使得各个变量的意义发生混淆我们作一些澄清:(原论文中这几个变量含义模糊,不益理解)

1)\alpha_t(s), t=1,...,T 始终表示通常意义下的前向变量;

2)\tilde{\alpha}_t(s), t=1,...,T 为归一化的前向过程中每个时间步中未规范化的变量;

3)\hat{\alpha}_t(s), t=1,...,T 为归一化的前向过程中每个时间步中对\tilde{\alpha}_t(s)规范化后的变量;

即,我们这样定义归一化的前向过程中的变量:

C_t = \sum_s \tilde{\alpha}_t(s)\quad ,\quad \hat{\alpha}_t(s) = \frac{\tilde \alpha_t(s)}{C_t} \quad ,\quad t \in [1,...,T], \ 1 \le s \le 2N+1

但是注意,当t=1时,有\tilde \alpha_1(s) = \alpha_1(s), 1\le s\le 2N+1成立。

类似地,定义归一化的后向过程变量:

D_t = \sum_s \tilde \beta_t(s)\quad ,\quad \hat{\beta}_t(s) = \frac{\tilde \beta_t(s)}{D_t}\quad ,\quad t \in [T,...,1], \ 1 \le s \le 2N+1

则给定输入序列X的条件下,目标字符串的对数概率可以简单地用C_t表示为:

\log(p(\boldsymbol l|X)) = \sum_{t=1}^{T}\log(C_t) \quad \cdots (1)

这看起来不太明显,我们一步步从最简单的case捋一下:

\begin{aligned}&\hat{\alpha}_1(s) =\frac{ \tilde\alpha_1(s)}{C_1}=\frac{1}{C_1}  \alpha_1(s)\end{aligned}

\begin{aligned}&\hat{\alpha}_2(s) = \frac{ \tilde\alpha_2(s)}{C_2}=\frac{1}{C_2}  \{\sum_{k}\hat{\alpha}_1(k) y^2_{\boldsymbol l^{\prime}_{k}} \}=\frac{1}{C_2C_1}  \{\sum_{k}\alpha_1(k) y^2_{\boldsymbol l^{\prime}_{k}} \}=\frac{1}{C_2C_1}  \alpha_2(s)\end{aligned}

\begin{aligned}\hat{\alpha}_3(s) &= \frac{ \tilde\alpha_3(s)}{C_3}=\frac{1}{C_3}  \{\sum_{k}\hat{\alpha}_2(k) y^3_{\boldsymbol l^{\prime}_{k}} \}=\frac{1}{C_3}  \{\sum_{k} \frac{1}{C_2C_1}  \alpha_2(k) y^3_{\boldsymbol l^{\prime}_{k}}  \}=\frac{1}{C_3C_2C_1}  \alpha_3(s) \\&\ \ \vdots\end{aligned}

到此为止,这足以让你相信我们有下面等式成立:

\begin{aligned}&\hat{\alpha}_t(s)=\frac{1}{\prod_{\tau=1}^{t}C_{\tau}}  \alpha_t(s)\end{aligned} \quad \cdots (2)

同理易证:

\begin{aligned}&\hat{\beta}_t(s)=\frac{1}{\prod_{\tau=t}^{T}D_{\tau}}  \beta_t(s)\end{aligned} \quad \cdots (3)

更严格点,可以用数学归纳法来完成证明,不过这里我不打算这么啰嗦了。对上式两边求和,并利用\hat{\alpha}_t(s)的归一化性质有:

\begin{aligned}&\sum_{s} \frac{1}{\prod_{\tau=1}^{T}C_{\tau}}  \alpha_T(s) =\sum_{s} \hat{\alpha}_T(s)= 1\end{aligned}

这等价于:

\begin{aligned}\sum_s \alpha_T(s) = \prod_{\tau=1}^{T}C_{\tau}\end{aligned}

进而得到目标等式:

\begin{aligned}\log(p(\boldsymbol l|X)) &= \log(\sum_s \alpha_T(s))\\&=\log( \prod_{\tau=1}^{T}C_{\tau})\\&=\sum_{t=1}^{T}\log(C_t)\\\end{aligned}


最大似然训练

由于每条数据(X, \boldsymbol l)之间是独立的,因此我们可以单独对其求导,若使用负对数似然下降法,则我们需要求:

-\frac{\partial \log(p(\boldsymbol l | X))}{\partial y^t_k} = -\frac{1}{p(\boldsymbol l | X)}\frac{\partial p(\boldsymbol l | X)}{\partial y^t_k} \quad \cdots (4)

由于p(\boldsymbol l | X)= \alpha_{T}(\boldsymbol l^{\prime}_N) +  \alpha_{T}(\boldsymbol l^{\prime}_{N-1}),我们已经可以高效地计算出来了。下面来看右半边,由于:

\begin{aligned}\alpha_t(s)\beta_t(s) &=( \sum_{\begin{aligned}  &\mathcal B(\pi_{1:t})=\boldsymbol l_{1:r} \\ & \pi_t = \boldsymbol l^{\prime}_s \end{aligned}} \prod_{\tau=1}^{t} y^{\tau}_{\pi_{\tau}} )( \sum_{\begin{aligned} &\mathcal B(\pi_{t:T})=\boldsymbol l_{r:N} \\ & \pi_t=\boldsymbol l^{\prime}_s \end{aligned}} \prod_{\tau=t}^{T} y^{\tau}_{\pi_{\tau}}) \\&=\sum_{\begin{aligned} &\mathcal B(\pi_{1:T})=\boldsymbol l_{1:N} \\ & \quad \pi_t = \boldsymbol l^{\prime}_s \end{aligned}} y^t_{\pi_t} \prod_{\tau=1}^{T} y^{\tau}_{\pi_{\tau}}\\&= y^t_{\pi_t}  \sum_{\begin{aligned} &\mathcal B(\pi_{1:T})=\boldsymbol l_{1:N} \\ & \quad \pi_t = \boldsymbol l^{\prime}_s \end{aligned}}\prod_{\tau=1}^{T} y^{\tau}_{\pi_{\tau}}\\&= y^t_{\pi_t} p(\boldsymbol l, \pi_t=\boldsymbol l^{\prime}_s| X)\end{aligned}

注:其中的下标r是未经过\epsilon扩展的长度为N的目标字符序列中某个对应的下标。

我们来对上面的推导做一些说明:

1)由于展开式中的每一项都是由满足\mathcal B(\pi_{1:t})=\boldsymbol l_{1:s} \ ,\ \mathcal B(\pi_{t:T})=\boldsymbol l_{s:N} 的两项乘起来的,因此都是一条在时刻t经过字符\boldsymbol l_s的完整路径,且其概率为完整路径的概率乘上一个多出来的项y^t_{\pi_t}

2)由于任何一条满足\mathcal B(\pi_{1:T}) = \boldsymbol l_{1:N}且在时刻t经过字符\boldsymbol l_s的路径都可以被分成\pi_{1:t}\ ,\  \pi_{t:T}两部分,一部分在\mathcal B^{-1}(\boldsymbol l_{1:s})之中,另一部分在\mathcal B^{-1}(\boldsymbol l_{s:N})之中;所以上面的第一步展开式成立;

3)由于y^t_{\pi_t}是所有路径的公因子,因而在上面的第三步可以提到求和号外面;

于是接着对上面公式变形:

\frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}} =   p(\boldsymbol l, \pi_t=\boldsymbol l^{\prime}_s| X)

两边对下标s求和得:

p(\boldsymbol l| X) = \sum_{s=1}^{2N+1} p(\boldsymbol l, \pi_t=\boldsymbol l^{\prime}_s| X) = \sum_{s=1}^{2N+1} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}}

        为了对网络输出y^t_k求导,进而通过经典的反向传播优化网络参数,我们需要考虑在t时刻,经过字符\boldsymbol l_k所有的路径(注意,我们把空白符放到了网络输出层的最后一个输出单元,因而y^t_{1:N}就分别对应着目标字符序列\boldsymbol l_{1:N}t时刻的概率)。如下图(为了简洁,省去了空白符):

图3,对y^t_{之}的梯度有贡献的路径

        因此,我们记lab(\boldsymbol l, k) = \{s: \boldsymbol l^{\prime}_s = k\}为标注字符序列中那些等于网络第k个输出节点所代表的字符(如:上图五角星对应的纵坐标);显然不是每句话都包括所有的字,所以对某句话来说,集合lab(\boldsymbol l, k)仅仅对那些包含在这句话中的字符k才不为空。

        我们来分析:\sum_{s=1}^{2N+1} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}} ,由\alpha_t(s)\beta_t(s)的定义可知,由于\alpha_t(s)\beta_t(s)的展开式中每条路径在任一时刻只能处于L^{\prime}中的一种状态;但是,它们在t时刻的状态已经全部被钳住为\boldsymbol l^{\prime}_s了,所以当s \notin lab(\boldsymbol l,k)时,\frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}} 关于y^t_{k}为常数,可以在求导中忽略。又在 \sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}} 中,y^t_{\pi_t} = y^t_{\boldsymbol l^{\prime}_s} = y^t_{k},所以下面我们直接使用y^t_k代替它们。

        令:\alpha_t(s)\beta_t(s) = \gamma_t(s) (y^t_k)^2,即我们将\alpha_t(s)\beta_t(s)中不包括y^t_k的部分单独提出来记作\gamma_t(s),因而有:

\begin{aligned}\frac{\partial \{ \alpha_t(s)\beta_t(s) / y^t_{\pi_t}\} } {  \partial y^t_k } &= \frac{ \partial \{\gamma_t(s) y^t_{\pi_t}\} } {  \partial y^t_k } \\&=\gamma_t(s)\\&= \frac{\alpha_t(s)\beta_t(s)}{(y^t_s)^2}\end{aligned}

进而有:

\begin{aligned}\frac{\partial \ p(\boldsymbol l | X)}{\partial y^t_k}=  \sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{(y^t_{k})^2} \\\end{aligned}

最后多写一步:

\frac{\partial \log(p(\boldsymbol l | X))}{\partial y^t_k} = \frac{1}{p(\boldsymbol l | X)}\frac{\partial p(\boldsymbol l | X)}{\partial y^t_k}=\frac{1}{\alpha_T(2N+1) + \alpha_T(2N)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{(y^t_{k})^2} \quad \cdots(5)


        在经典的深度学习中,我们都知道corssentropy损失是softmax分类层的最佳伴侣:corssentropy对softmax层的输入的梯度具有异常简洁的形式。但是在这里会怎么样呢?我们尝试直接求CTC损失函数关于softmax输入数据u^t_k的梯度。

        由基本函数的求导中得到的softmax关于其输入的导数可知我们需要分两种情况讨论:

设:y^t_1,...y^t_{|L^{\prime}|} = \text{softmax}(u^t_1,...,u^t_{|L^{\prime}|}),则:

\frac{\partial y^t_j}{ \partial u^t_k }= \begin{cases} -y^t_jy^t_k , &\text{if} \ j\neq k; \\y^t_k(1-y^t_k), &\text{if}\  j = k;\end{cases}

根据求导的链式法则,结合上面(5)式,有:

\begin{aligned}\frac{\partial \log(p(\boldsymbol l | X))}{\partial u^t_k} &= \sum_{j=1}^{|L^{\prime}|} \frac{\partial \log(p(\boldsymbol l|X))}{y^t_j}\frac{\partial y^t_j}{\partial u^t_k}\\&=\sum_{j=1}^{|L^{\prime}|} \{ \frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, j)} \frac{\alpha_t(s)\beta_t(s)}{(y^t_{j})^2} \}\frac{\partial y^t_j}{\partial u^t_k} \\\end{aligned}

在上面求和号中,当j\neq k时:

\sum_{j\ne k} \{ \frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, j)} \frac{\alpha_t(s)\beta_t(s)}{(y^t_{j})^2} \}(-y^t_jy^t_k) =-\sum_{j\ne k} \{ \frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, j)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{j}} \}y^t_k

j = k时:

\{\frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{(y^t_{k})^2} \} y^t_k(1-y^t_k)=\{\frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{k}} \} (1-y^t_k)

综合以上得:

\begin{aligned}\frac{\partial \log(p(\boldsymbol l | X))}{\partial u^t_k} &= -\sum_{j\ne k} \{ \frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, j)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{j}} \}y^t_k +\{\frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{k}} \} (1-y^t_k) \\&=\frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{k}}  -\sum_{j=1}^{|L^{\prime}|} \{ \frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, j)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{j}} \}y^t_k\end{aligned}

注意双重求和具有等价性(仔细看lab(\boldsymbol l, j)的定义):\sum_{j=1}^{|L^{\prime}|} \sum_{s \in lab(\boldsymbol l, j)} = \sum_{s=1}^{2N+1},事实上,比如“普通话识别”任务中,对大多数j来说lab(\boldsymbol l, j) = \emptyset

再考虑到p(\boldsymbol l| X) = \sum_{s=1}^{2N+1} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\boldsymbol l^{\prime}_s}} ,因此上式可化为:(注意下标变化)

\begin{aligned}\frac{\partial \log(p(\boldsymbol l | X))}{\partial u^t_k} &=\frac{1}{p(\boldsymbol l|X)}\sum_{s \in lab(\boldsymbol l, k)} \frac{\alpha_t(s)\beta_t(s)}{y^t_{k}}  - \frac{1}{p(\boldsymbol l|X)}\sum_{s =1}^{2N+1} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\boldsymbol l^{\prime}_s}} y^t_k\\ &=\frac{1}{p(\boldsymbol l|X)y^t_{k}} \{\sum_{s \in lab(\boldsymbol l, k)} \alpha_t(s)\beta_t(s) \} -y^t_k  \quad \cdots (6)\end{aligned}


实际中会使用归一化的前向-后向算法:

将(2)(3)式代入p(\boldsymbol l| X) =\sum_{s=1}^{2N+1} \frac{\alpha_t(s)\beta_t(s)}{y^t_{\pi_t}} ,并记Z_t(s) = \sum_{s=1}^{2N+1} \frac{\hat\alpha_t(s)\hat\beta_t(s)}{y^t_{\boldsymbol l^{\prime}_s}} 得:

\begin{aligned}p(\boldsymbol l| X) &=\sum_{s=1}^{2N+1} \frac{\hat\alpha_t(s)\hat\beta_t(s)\prod_{\tau=1}^{t}C_{\tau}\prod_{\tau=t}^{T}D_{\tau}}{y^t_{\pi_t}} \\&=\{\prod_{\tau=1}^{t}C_{\tau}\prod_{\tau=t}^{T}D_{\tau}\}\sum_{s=1}^{2N+1} \frac{\hat\alpha_t(s)\hat\beta_t(s)}{y^t_{\pi_t}} \\&=Z_t\prod_{\tau=1}^{t}C_{\tau}\prod_{\tau=t}^{T}D_{\tau} \quad \cdots (7)\end{aligned}

将(2)(3)(7)式代入(6)式,由于\prod_{\tau=1}^{t}C_{\tau}\prod_{\tau=t}^{T}D_{\tau}这一项在分子和分母同时出现,并且与求和下标无关,因而可以同时提出到求和号外面,并消去得:

\begin{aligned}\frac{\partial \log(p(\boldsymbol l | X))}{\partial u^t_k} &= -y^t_k + \frac{1}{p(\boldsymbol l|X)y^t_{k}} \{\sum_{s \in lab(\boldsymbol l, k)} \hat\alpha_t(s)\hat\beta_t(s)\prod_{\tau=1}^{t}C_{\tau}\prod_{\tau=t}^{T}D_{\tau} \} \\&=-y^t_k + \frac{1}{Z_t y^t_k} \{\sum_{s \in lab(\boldsymbol l, k)} \hat\alpha_t(s)\hat\beta_t(s)\}\end{aligned}


©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容