標籤:

語音識別CTC演算法中,最後一個公式如何推導?

論文為 Alex Grave的Connectionist Temporal Classification: Labelling Unsegmented
Sequence Data with Recurrent Neural Networks 。

鏈接為

http://www.cs.toronto.edu/~graves/icml_2006.pdf

式子左邊為最大似然目標函數O對於輸出層輸入的偏導數,右邊為輸出層的真實輸出ytk與後面那一坨預測輸出的差值,文章將這個式子描述為網路在backword propagation中的錯誤信號,我理解就是梯度。

如果有人看過這篇論文的話,求問這個等式如何推導出來的?

坐等大神


剛剛真的去推了一遍 XD

首先把符號整理一下:

  • 整個推導過程中,涉及的時間下標都是t,所以這個t就省略不寫了。

  • 最後的結果中,alpha, eta是戴帽子的,它們跟不戴帽子的alpha, eta差一個係數。但結果中的求和式(相當於在分子上)里的alpha, eta戴帽子,分母上的Z展開后里面的alpha, eta也戴帽子,於是帽子就可以抵消了。
  • 去掉帽子後,Z跟上文 (14) 式中的p(mathbf{l}|mathbf{x})(以下簡記作p)就變成了同一個式子。

再看 (15) 式,它長這樣:

我們把求和號外面分母上的兩個y_k拿一個到求和號裡面,讓它跟Z的表達式更像一些。

(其實這個麻煩就是因為eta的定義包括了t時刻,如果像 HMM 里那樣把eta定義成從t+1時刻開始的累乘,求和號裡面就不用除以y_k了)

然後定義sum_{s in lab(mathbf{l}, k)} frac{alpha_t(s) eta_t(s)} {y_k^t} = s_k,於是有p = Z = 	extstylesum_k s_kpartial p / partial y_k = s_k / y_k

然後我們來處理u_k。文章中說u_k是 unnormalized output,我推測它應該是這個意思:y_k = exp(u_k) / 	extstylesum_j exp(u_j)

由此式容易求得partial y_j / partial u_k = y_j (delta_{jk} - y_k),其中delta_{jk}j=k時取 1,其它時候取 0。

下面推導 (16) 式:

frac{partial O}{partial u_k} = sum_j frac{partial O}{partial y_j} frac{partial y_j}{partial u_k} \
= sum_j frac{partial (-ln p)}{partial y_j} frac{partial y_j}{partial u_k} \
= - frac{1}{p} sum_j frac{partial p}{partial y_j} frac{partial y_j}{partial u_k} \
= - frac{1}{Z} sum_j frac{s_j}{y_j} cdot y_j (delta_{jk} - y_k) \
= - frac{1}{Z} (s_k - sum_j s_j y_k) \
= y_k - frac{s_k}{Z}

這正是原文中的 (16) 式。

這個結果似乎可以直觀理解。y_k(實際上是y_k^t)是僅觀察t時刻輸出層時,輸出符號k的概率;s_k/Z是從整體上看,所有路徑中,在t時刻輸出符號k的那些所佔的概率比例。當網路參數取最優值時,梯度等於 0,即y_k = s_k / Z,也就是說這兩個東西應該相等,也就是局部和整體一致(?)。


好久沒看了,剛才看 @王贇 Maigo 對ctc中的錯誤寫了一篇文章,拿出來再過一遍,還算比較好理解,具體實現的話估計還有很多細節需要注意。有錯誤還望大神指出,有些地方理解的不是很透


推薦閱讀:

同是兩小時的錄音,能否對比哪個交談更多?能否數據化對比?
為什麼一般語音識別系統要選擇25毫秒或25.6毫秒為一個標準幀長?
前向後向演算法和baum-welch演算法區別是什麼?
準備學習研究一下語音識別 請問有哪些值得推薦的書籍 論文 及開源庫?
政府監控私人電話,記錄的主要是哪些信息?

TAG:語音識別 |