CTC 介紹

[論文]CTC——Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks

http://blog.csdn.net/App_12062011/article/details/76886954

寫在前面——最近在看Seq2Seq的問題,發現目前比較好的LSTM+CTC的組合,所以找了下06年ICML的原始論文。細節部分還沒看完,後續會再重讀一遍,補上一些自己的理解。對應的工具使用可以看下Mxnet中rnn下面的warpctc的例子(驗證碼OCR識別),是mxnet裏嵌入了百度的warpctc工具做的,但在安裝captcha的時候費了不少時間。主要是build PIL時的依賴比較多,在build前最好build_ext -i一下,看下需要的依賴是不是都安裝好了。

論文地址

icml2006

摘要:

許多真實世界中的序列學習任務,往往需要從噪聲和未格式化的數據上,預測序列的label。例如,在語音識別中,一個聲音信號被轉換成words或者是sub-word單元。RNN是序列學習的一個強大的模型。但是,它要求預先分割(pre-segmented)的訓練數據,通過後處理將模型輸出轉換爲label序列,因此它的應用受到較大的限制。這篇文章提出了一個新的RNN訓練方法,支持直接對未分割的序列上預測label。在TIMIT語料上,對比了HMM和HMM-RNN構成Baseline的效果。

一、介紹

label未分割的序列數據是一個普遍存在序列學習任務。尤其是在感知任務中,比如手寫識別、語音識別、手勢識別等,這些場景中噪聲、真實輸入數據流將被離散字符label表達,例如letters或者words。

目前,圖模型例如HMM、CRF以及它們的變體,在序列label領域都是很有影響力的框架。雖然在很多問題上,這些方法都得到了很好的證明,但是他們仍然存在缺陷:

1)他們往往需要大量的任務相關的知識,例如涉及HMM的狀態模型,或者選擇CRF的輸入特徵。

2)他們往往依賴顯示的模型假設,來保證推理inference容易處理,例如HMM的觀察獨立性假設。

3)對於標準的HMM,訓練是生成式的,但是序列標註任務是判別式的。

在另外一方面,RNN模型在輸入和輸出的表達選擇外,對數據不需要任何的先驗知識prior knowledge。並且,通過判別式的方式訓練,內部internal狀態提供了強大且通用的機制來建模時間序列。此外,它對時間temporal和空間spatial上的噪聲表現出魯棒性。

但是,到目前爲止,我們還不能將RNN直接應用到序列標註任務上。問題在於,標準的neural network的目標函數,是在訓練序列的每個節點上,單獨定義的。換句話說,RNN只能被用來處理一系列獨立label分類任務。這意味着,訓練數據必須是預先分割的,網絡輸出必須經過後處理來給出最終的label序列。

目前,序列label任務裏最有效的使用RNN的方法,是與HMM結合在一起,構成所謂的Hybrid方法(Bourlard&Morgan;Bengio)。Hybrid系統使用HMM來建模數據中的long-range序列結構,使用neural nets來提供局部分類能力。HMM部分可以在訓練過程中自動的分割segment序列,將網絡分類轉換成標籤序列label sequence。但是,同樣繼承了HMM的缺點,hybrid系統沒有充分利用RNN在序列模型上的潛力。

這篇文章提出了使用RNN標註序列數據的新方法,避免了對訓練數據預先分隔以及輸出後處理的要求,僅採用一個單獨的網絡架構建模對序列的全部方面進行建模。最基本的思路是將網絡輸出解釋爲,在給定輸入下,所有可能對應的label序列上的一個概率分佈。給定這個分佈,目標函數可以是直接最大化正確label的概率。因爲目標函數是可導的,網絡可以通過標準的BP方法來訓練(Werbos,1990)。

文章後續章節中,我們把未分割的數據序列的label任務,看成是時序分類temporal classification(Kadous,2002),把RNN的使用稱爲CTC(connectionist temporal classification)。與之相比,把輸入序列上each time-step或者frame的獨立label任務,稱爲framewise classification。

下一個章節給出了temporal分類的數據公式,定義了本文使用的誤差度量方法。第3節描述了輸出表示,允許使用RNN完成temporal 分類。第4節中解釋了CTC網絡如何訓練。第5節比較了CTC和hybrid以及HMM系統。第6節討論了CTC與其他temporal分類的一些關鍵區別,以及未來工作的規劃。第7節是論文結尾。

二、時序分類Temporal classification

S代表訓練集合,符合分佈Dx×z。輸入空間X=(Rm)*,代表m維具有真實值的向量,構成的序列的集合。目標空間Z=L*,代表標籤Label的有限字符集合構成的序列的集合。一般來說,我們把L*中的元素看做是label序列或標籤。S中的每個樣本構成一個序列對(x,z)。目標序列Z=(z1,..zu)的長度至多與輸入序列X=(x1,…,xt)等長,即U≤T。由於輸入和目標序列一般都是不等長的,因此沒有先驗的方法可以對齊。

我們的目的是利用S來訓練一個時序分類h:X->X,對未知的輸入序列分類,最小化一些任務對應的誤差量化指標。

1、標籤錯誤率Label Error Rate

在這篇論文中,錯誤率的度量是比較關鍵的。考慮一個測試集合S`∈Dx×z,定義時序分類h的標籤錯誤率LER(Label error rate)爲:分類結果和目標的平均歸一化編輯距離



ED(p,q)表示p和q兩個序列的編輯距離。例如,將p變爲q需要的最小的插入、替換和刪除數。

對於目標是減少轉換錯誤率的任務(比如語音和手寫識別)來說是最自然的度量方法。

三、CTC——Connectionist Temporal Classification

本節將描述使RNN支持CTC模型所需要的輸出表示。關鍵步驟是將網絡輸出轉換爲一個在label序列上的條件概率分佈。之後對於給定輸入,網絡通過選擇最可能的label來完成分類。

1、從網絡輸出到Labellings

一個CTC網絡具有softmax 輸出層,該層比label集合L多出一個unit。對於|L|個units的觸發被解釋爲在特定的時刻觀察到對應的label的概率,對於多餘的unit的出發被看做觀察到空格或者no label的概率。總的來說,這些輸出定義了將label序列對齊到輸入序列的全部可能方法的概率。任何一個label序列的總概率,可以看做是它的不同對齊形式對應的全部概率累加。

更加正式的,對於一個給定的輸入序列X,長度爲T,定義一個RNN網絡,m個輸入,n個輸出,權重向量w是一個連續映射Nw:(R^m)^T -> (R^n)^T。設Y=Nw(x)爲網絡的輸出序列,y(k,t)表示輸出單元k在t時刻被觸發,被解釋爲在t時刻觀察到label k的概率,這個觀察定義了在字符集合L`=L∪{blank}的長度爲T的序列的集合L`^T的概率分佈。



現在,我們把L`^T中的元素看做路徑paths並且用π表示。公式(2)的假設是,給定網絡的中間狀態(internal state),在不同時刻的網絡輸出是條件獨立的。這保證了輸出層不存在到它自身或者網絡的反饋鏈接。

下一步是定義一個多對一的映射β:L`^T -> L^≤T,其中後者是可能的label序列的集合。我們可以簡單通過刪除全部的blank和重複路徑path中的label來實現,例如β(a-ab-)=β(-aa—abb)=aab

直覺地,這等價於輸出一個新的label,從預測no label變爲預測a label,或者從預測a label到預測另外一個label。參考Figure1



最終,我們用映射β來定義給定一個label序列l∈L^≤T的條件概率:與它對應的全部paths的概率和



2、設計分類器Constructing the Classifier

考慮上述公式,分類器的輸出是對於輸入序列最可能的label序列:



按照HMM的術語,發現label序列的任務被稱爲解碼Decoding。很遺憾,對於我們的系統,找不到一個通用的、易處理的解碼算法。但是下面的兩個近似算法在實際工作中取得了不錯的效果。

1)Best path decoding

假設:the most probable path π will correspond to the most probable labelling h:



π*只是在每個時間片上最活躍輸出的串聯。但是,這個方法不保證能找到the  most probable labelling。

2)Prefix search decoding



通過修改section 4.1裏的forward-backward算法,我們可以高效的計算對於labelling prefixes的連續擴展(successive extensions)的概率。

只要給足夠的時間,prefix search decoding 方法總能找到the most probable labelling。但是,隨着輸入數列長度的增加,需要擴展的最大的前綴prefix數量會指數性的增加。如果輸出概率分佈在mode周圍足夠的peak,這個方法會在合理的時間內收斂。在本文的實驗中,需要一個啓發式方法來保證這個方法可以應用。

觀察到CTC網絡的輸出傾向於被blank分隔開的峯值spikes,我們根據以blank開始和結束,將輸出序列分割成片段。通過選擇邊界點(觀察到blank label的概率大於一定的閾值)來實現上面的分割。之後,我們爲每個片段,獨立的計算the most probable labelling,並且將它們串聯在一起得到最後的分類結果。

在實際中,prefix search 方法與這個啓發式方法配合的比較好,通常效果超過best path decoding。但是在一些情況下,它確實會失敗,例如當同樣的label在邊界點兩邊出現時。

四、網絡訓練Training the Network

目前,我們已經描述了輸出的表示。現在我們來給出訓練CTC網絡的目標函數。

目標函數遵照最大似然原則。最小化目標labellings的最大log似然法概率。權重梯度可以通過標準的BP方法計算。網絡的訓練可以通過任何的基於梯度的優化算法完成。我們從最大化似然概率函數的算法開始。

1、CTC前向-後向算法(The CTC Forward-Backward Algorithm)

對於每個獨立的labellings,我們需要快速的計算對應的條件概率P(l|x)。根據公式(3),這會存在一個問題:累加需要在全部的paths上計算,但通常來說這個數量很大。

幸運的是這個問題可以通過動態規劃算法來解決。和HMM中的forward-backward算法(Rabiner,1989)類似。核心的思路針對一個labelling的全部paths的累加,可以被分解爲以labelling爲前綴的全部path的迭代累加。這個迭代可以通過遞歸的forward-backward變量來快速計算。

(後面主要是實驗部分了,以後Review的時候再細看吧)

發佈了21 篇原創文章 · 獲贊 16 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章