CTC Loss 是一種不需要數(shù)據(jù)對(duì)齊的,廣泛用于圖像文本識(shí)別和語(yǔ)音識(shí)別任務(wù)的損失函數(shù)。
論文:《Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks》
《連續(xù)形式的時(shí)序數(shù)據(jù)分類:用遞歸神經(jīng)網(wǎng)絡(luò)標(biāo)記非分段序列數(shù)據(jù)》
論文發(fā)表時(shí)間:ICML 2006
注:這篇博客來(lái)源于本人組會(huì)匯報(bào)時(shí)的文檔,因此很多內(nèi)容是直接從文檔中截圖的。
1、CTC Loss 出現(xiàn)的背景
到目前為止,還不可能將RNN直接應(yīng)用于序列數(shù)據(jù)的標(biāo)記。問(wèn)題在于標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)的目標(biāo)函數(shù)是為訓(xùn)練序列中的每個(gè)點(diǎn)分別定義的,因此RNN只能訓(xùn)練一系列獨(dú)立的標(biāo)簽分類。這意味著訓(xùn)練的序列數(shù)據(jù)必須被預(yù)分段并標(biāo)記。
標(biāo)記未分割序列數(shù)據(jù)是現(xiàn)實(shí)世界序列學(xué)習(xí)中普遍存在的問(wèn)題。這在感知任務(wù)中尤其常見,如圖像文本識(shí)別(OCR)、姿勢(shì)識(shí)別、語(yǔ)音識(shí)別(ASR)。
在這些領(lǐng)域中,所面臨的一個(gè)問(wèn)題是神經(jīng)網(wǎng)絡(luò)的輸出與ground truth的長(zhǎng)度不一致,導(dǎo)致loss難以計(jì)算。
例1:用于圖像文本識(shí)別的CRNN網(wǎng)絡(luò)
考慮一種非常簡(jiǎn)單的方法,通過(guò)將圖片劃分為幾個(gè)豎直方向的圖像,分別識(shí)別每列小圖片中的文字,從而實(shí)現(xiàn)整體文本的識(shí)別。則每一列輸出都需要對(duì)應(yīng)一個(gè)字符元素。用 - 表示blank(空白),預(yù)測(cè)值(-s-t-aatt-e-)和ground truth(state)的長(zhǎng)度不一致,采用常規(guī)的損失函數(shù)(cross entropy、MSE等)計(jì)算時(shí)需要先進(jìn)行對(duì)齊才能計(jì)算損失。
進(jìn)行對(duì)齊就需要在訓(xùn)練之前的數(shù)據(jù)標(biāo)注階段在訓(xùn)練集圖片中標(biāo)記出每個(gè)字符的真實(shí)文本和在圖片中的位置。但在實(shí)際情況中,標(biāo)記這種對(duì)齊樣本非常困難,其工作量非常大。并且由于每張樣本的字符數(shù)量不同,字體樣式不同,字體大小不同,導(dǎo)致每列輸出并不一定能與每個(gè)字符一一對(duì)應(yīng)。
例2:語(yǔ)音識(shí)別
上圖中的語(yǔ)音是HELLO。有人說(shuō)話快,有人說(shuō)話慢。那么如何進(jìn)行語(yǔ)音幀對(duì)齊一直是困擾語(yǔ)音識(shí)別領(lǐng)域的巨大難題。
除了數(shù)據(jù)標(biāo)注的困難導(dǎo)致難以對(duì)齊外,就算對(duì)齊了也存在many to one的問(wèn)題。那么什么是many to one的問(wèn)題呢?解碼器的規(guī)則是將連續(xù)的相同字符合并,以及去掉blank。那么-HEEE-LL-LL-OOOOOOOO-(Mr.Slow)和-HE-L-LOO-(Mr.Fast)都可以解碼為HELLO,與ground truth一致。也就是說(shuō)就算我們將Mr.Slow的label標(biāo)注為-HE-L-LOO------------,盡管這個(gè)label顯然是錯(cuò)誤的,但通過(guò)網(wǎng)絡(luò)訓(xùn)練,Mr.Slow的網(wǎng)絡(luò)預(yù)測(cè)值會(huì)非常接近label,如預(yù)測(cè)值是-H–EE-L-LOO----------。盡管該預(yù)測(cè)值與ground truth差異非常大,但是該預(yù)測(cè)值依然可以解碼為HELLO。顯然這個(gè)情況是我們不希望看到的,也非常不利于網(wǎng)絡(luò)的訓(xùn)練。
由于連續(xù)序列數(shù)據(jù)的對(duì)齊難題,學(xué)者提出了一種對(duì)不需要對(duì)齊的Loss計(jì)算方法:CTC Loss。
CTC Loss被廣泛應(yīng)用于文本識(shí)別和語(yǔ)音識(shí)別中,接下來(lái)根據(jù)語(yǔ)音識(shí)別的例子介紹CTC Loss。
2、CTC Loss 的總體思想
首先要明確CTC Loss的計(jì)算對(duì)象是神經(jīng)網(wǎng)絡(luò)經(jīng)過(guò)softmax歸一化之后的輸出矩陣和ground truth。
CTC Loss 不要求輸出矩陣和ground truth的大小相同。輸出矩陣的維度為N×T,其中N是類別數(shù)(在英文的語(yǔ)音識(shí)別中N=27,即26個(gè)英文字母和blank),T是語(yǔ)音長(zhǎng)度(T個(gè)語(yǔ)音幀)。
3、Forward-Backward 算法
3.1 合法路徑的約束條件
以l=apple為例,按照時(shí)間序列(T=8)展開。B(–ap-ple)=aab對(duì)應(yīng)的路徑為:
為了讓所有的路徑在圖中都有唯一、合法的表示,節(jié)點(diǎn)轉(zhuǎn)換有如下約束:
這些約束規(guī)則導(dǎo)致合法路徑的數(shù)量大大減少。根據(jù)以上約束規(guī)則,所有映射為l=apple的合法路徑為:
3.2 Forward-Backward 算法的數(shù)學(xué)推導(dǎo)
前向和反向過(guò)程的計(jì)算示意圖如下:
示例:
有論文證明,盡管可以通過(guò)并不復(fù)雜的遞歸運(yùn)算得到p(l│x),但這種運(yùn)算無(wú)法避免數(shù)值下溢的問(wèn)題。因此需要考慮其他方法進(jìn)行計(jì)算。
4、CTC 的訓(xùn)練(目標(biāo)函數(shù)求導(dǎo))
公式(13)是forward-backward算法的關(guān)鍵,以T=6,l=ab為例解釋(13):
以單層LSTM作為RNN網(wǎng)絡(luò),RNN-CTC模型的總體結(jié)構(gòu)為:
5、解碼算法
6、CTC Loss 的優(yōu)缺點(diǎn)
CTC最大的優(yōu)點(diǎn)是不需要數(shù)據(jù)對(duì)齊。
CTC的缺點(diǎn)來(lái)源于三個(gè)假設(shè)或約束:
(1)條件獨(dú)立:假設(shè)每個(gè)時(shí)間片都是相互獨(dú)立的,但在OCR或者語(yǔ)音識(shí)別中,相鄰幾個(gè)時(shí)間片中往往包含著高度相關(guān)的語(yǔ)義信息,它們并非相互獨(dú)立的。
(2)單調(diào)對(duì)齊:CTC要求輸入與輸出之間的對(duì)齊是單向的,在OCR和語(yǔ)音識(shí)別中,這種約束是成立的。但是在一些場(chǎng)景中(如機(jī)器翻譯),這個(gè)約束并不成立。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-768287.html
(3)CTC要求是輸入序列的長(zhǎng)度不小于標(biāo)簽數(shù)據(jù)的長(zhǎng)度,反之便無(wú)法使用。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-768287.html
到了這里,關(guān)于CTC Loss 數(shù)學(xué)原理講解:Connectionist Temporal Classification的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!