ANN:DNN结构演进History—LSTM_NN
前言
??????? ? 語音識別和動作識別(Action、Activities)? 等一些時序問題,通過微分方式可以視為模式識別方法中的變長模式識別問題。語音識別的基元為音素、音節(jié),字母和句子模式是在時間軸上的變長序列;Action的基元為Pose,action的識別為pose的時間序列模式。
???????? 我們跟隨時間的腳步,試圖解釋現(xiàn)在、理解過去、甚至預(yù)測未來........ 在概率分析的層面,RNN通過循環(huán)結(jié)構(gòu)展開處理變長問題,對不同的長度訓(xùn)練不同的概率模型,并以參數(shù)的形式存儲在網(wǎng)絡(luò)中,成為天生適合處理時序分析的復(fù)雜模型。
多層網(wǎng)絡(luò)
??????? 一部分最成功的深度學(xué)習(xí)方法涉及到對人工神經(jīng)網(wǎng)絡(luò)的運(yùn)用。人工神經(jīng)網(wǎng)絡(luò)受到了1959年由諾貝爾獎得主大衛(wèi)·休伯爾(David H. Hubel)和托斯坦·威澤爾(Torsten Wiesel)提出的理論啟發(fā)。休伯爾和威澤爾發(fā)現(xiàn),在大腦的初級視覺皮層中存在兩種細(xì)胞:簡單細(xì)胞和復(fù)雜細(xì)胞,這兩種細(xì)胞承擔(dān)不同層次的視覺感知功能。受此啟發(fā),許多神經(jīng)網(wǎng)絡(luò)模型也被設(shè)計(jì)為不同節(jié)點(diǎn)之間的分層模型[12]。
??????? 福島邦彥提出的新認(rèn)知機(jī)引入了使用無監(jiān)督學(xué)習(xí)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)。燕樂存將有監(jiān)督的反向傳播算法應(yīng)用于這一架構(gòu)[13]。事實(shí)上,從反向傳播算法自20世紀(jì)70年代提出以來,不少研究者都曾試圖將其應(yīng)用于訓(xùn)練有監(jiān)督的深度神經(jīng)網(wǎng)絡(luò),但最初的嘗試大都失敗。賽普·霍克賴特(Sepp Hochreiter)在其博士論文中將失敗的原因歸結(jié)為梯度消失,這一現(xiàn)象同時在深度前饋神經(jīng)網(wǎng)絡(luò)和遞歸神經(jīng)網(wǎng)絡(luò)中出現(xiàn),后者的訓(xùn)練過程類似深度網(wǎng)絡(luò)。在分層訓(xùn)練的過程中,本應(yīng)用于修正模型參數(shù)的誤差隨著層數(shù)的增加指數(shù)遞減,這導(dǎo)致了模型訓(xùn)練的效率低下[14][15]。
??????? 賽普·霍克賴特和于爾根·施密德胡伯提出的長短期記憶神經(jīng)網(wǎng)絡(luò)(long short term memory,LSTM)[16]。2009年,在ICDAR 2009舉辦的連筆手寫識別競賽中,在沒有任何先驗(yàn)知識的情況下,深度多維長短期記憶神經(jīng)網(wǎng)絡(luò)取得了其中三場比賽的勝利[17][18]。
??????? 斯文·貝克提出了在訓(xùn)練時只依賴梯度符號的神經(jīng)抽象金字塔模型,用以解決圖像重建和人臉定位的問題[19]。
??????? 參考文章:DNN結(jié)構(gòu)演進(jìn)之RNN?? ,作為預(yù)備材料。 ??
摘要??
?????? RNN通過引入神經(jīng)元定向循環(huán)用于處理邊變長問題,由此被稱為遞歸網(wǎng)絡(luò); ? ? ? 再通過其他神經(jīng)元(如果有自我連接則包括自身)的輸入和當(dāng)前值的輸入,進(jìn)行加權(quán)求和(logit)之后重新計(jì)算出新的行為,保存之前記憶。???? 通過時間軸展開成類似于FNN的新構(gòu)架,因此可以使用BP算法進(jìn)行網(wǎng)絡(luò)訓(xùn)練;?????? 而根據(jù)時間展開長序列會產(chǎn)生極深FNN,容易產(chǎn)生梯度的消失與爆炸問題,因此引入了LSTM-長短期記憶,保持一個常數(shù)誤差流,以此保證梯度的不會爆炸消失;?????? 用于恒穩(wěn)誤差,通常使用一個門單元進(jìn)行誤差流控制。...
??????? 最初的RNN并沒有從反傳函數(shù)的角度去考慮梯度消失問題,而是從結(jié)構(gòu)上引入“直連”結(jié)構(gòu),冀希望于此從概率分析的角度來緩沖深度網(wǎng)絡(luò)的參數(shù)反傳的“消失”和“爆炸”問題。
?
LSTM網(wǎng)絡(luò)
???? ? 下文是轉(zhuǎn)自與百度貼吧的文章:http://tieba.baidu.com/p/3405569985??????????????????? ???????????????????????????
?????? BPTT很好理解,說是RNN,其實(shí)可以理解為每層權(quán)重相同的 feed forward BP,每層都用時間點(diǎn)上的label來訓(xùn)練,每層的誤差都反傳,這樣就還原為了標(biāo)準(zhǔn)BP網(wǎng)絡(luò)
???????
??????? 然后就會面臨BP網(wǎng)絡(luò)的經(jīng)典問題,即Exponential Error Decay,誤差傳4層就傳沒了(這是普遍的深度網(wǎng)絡(luò)的梯度消失問題)!這個東西的具體解釋見 Hochreiter,Bengio, Frasconi,(2001) Gradient flow in recurrent nets: The difficulty of learning long-term dependencies 。 ??????? 鏈接:http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=3D5F45337EDCE4B9A70877162000D39F?doi=10.1.1.24.7321&rep=rep1&type=pdf
??????? 為了解決這個問題而發(fā)明了LSTM,目的是為了將這些反傳的誤差保存起來( 類似于隔層網(wǎng)絡(luò)直連,用于傳遞常數(shù)誤差 ),它純粹是為了解決BPTT中的 Exponential Error Decay 的問題,也能同時降低梯度爆炸的風(fēng)險(xiǎn)。
LSTM-Cell
???????核心部件(下圖紅圓)叫做error carousel(誤差傳送帶),就是一個最簡單的RNN積分器;除了這部分以外還有兩個網(wǎng)絡(luò)來控制紅色部分的輸入輸出,分別稱為in和out,用來控制紅色部分在何時存取動機(jī)。 ????? (摘自wikipedia:however, when error values are back-propagated from the output, the error becomes trapped in the memory portion of the block. This is referred to as an "error carousel", which continuously feeds error back to each of the gates until they become trained to cut off the value. Thus, regular backpropagation is effective at training an LSTM block to remember values for very long durations.)??
?感覺即是專門嫁接在BPTT網(wǎng)絡(luò)中的用來存儲長程(lag)誤差的,由神經(jīng)網(wǎng)絡(luò)控制的存儲設(shè)備.........(存儲直連誤差)..........
?????
?????? 一大堆LSTM可以共用一些 IN/OUT?Gate
???????
??????? 在Time Series Prediction (如語音識別,reinforcement learning)中,LSTM中的IN gate神經(jīng)網(wǎng)絡(luò)需要識別出哪些時間窗上的表征是重要的(只有重要的特征誤差才是值得保留的),然后把這些表征存到積分器里面;OUT gate神經(jīng)網(wǎng)絡(luò)需要識別出在哪些時間窗上需要輸出這些存儲的表征;僅此而已............
一個簡單的例子
梯度爆炸/消失問題
????? 文章的第三部分簡單分析了BPTT的梯度消失問題,具體細(xì)節(jié)要看他們之前的文章
????? 公式(1)的意思是,在時間t上的神經(jīng)元u的誤差,反傳到時間t-q的神經(jīng)元v上衰減了多少
????? 公式(2)是通式
從后面的分析可以看出,????? 當(dāng)這一坨大于1.0的時候,誤差會隨傳播深度指數(shù)爆炸,導(dǎo)致神經(jīng)網(wǎng)絡(luò)權(quán)重震蕩而無法收斂:
? and
???? 而當(dāng)這一坨小于1.0的時候,誤差會指數(shù)衰減,導(dǎo)致神經(jīng)網(wǎng)絡(luò)參數(shù)反傳更新極慢:
? and
后面更細(xì)節(jié)的分析我就不看了,其實(shí)了解到這里已經(jīng)夠了。以上是對BPTT的分析。
———...................———我是華麗的————.................————分割線————..................————
constant error flow
以下是LSTM的解決策略,使這一坨全都固定在1,這樣就會出現(xiàn)一個constant error flow,作者稱為“90年代最偉大的發(fā)現(xiàn)”
and
積分得到這個:
and
因此輸入輸出函數(shù)必須是:f(x)=x。
雖然自己對自己的權(quán)重被封死了,但這樣誤差就能穿越時空往回傳了,并且增加了IN和OUT兩個網(wǎng)絡(luò)來控制。
完畢..............
僅看LSTM的實(shí)施步驟是超級簡單的,這些數(shù)學(xué)推倒只是告訴我們?yōu)槭裁匆@樣做......................
??
問題、疑問?
?????? 好吧,終于算是認(rèn)同這個模型了。從BPTT的角度來看,強(qiáng)行設(shè)定一些神經(jīng)元的自連接權(quán)重為1 ,并取消和其它神經(jīng)元的連接權(quán)重,使得他們的貢獻(xiàn)相當(dāng)于直接穿過時間作用到輸出上,故誤差反向傳播時是一階的,不存在衰減或爆炸問題。如果換種理解方式,這本質(zhì)上是在用神經(jīng)網(wǎng)絡(luò)訓(xùn)練一個有限狀態(tài)機(jī),加入權(quán)重為1的積分器使得可以接受類似A*B*C....的正則語言,也就是說在關(guān)鍵字符中間插入若干任意字符不影響輸出結(jié)果,故具有長時記憶效果。
現(xiàn)在我還存有幾點(diǎn)問題:
?????? 1.那怎么訓(xùn)練呢?
???????2.為什么我們不直接采用延時機(jī)制實(shí)現(xiàn)constant error flow?
????? ? ? ?? 我的看法:延時和臨時存儲本質(zhì)上是一樣的,都是把歷史數(shù)據(jù)直接當(dāng)作當(dāng)前數(shù)據(jù)輸入,使得誤差反向傳播只是一階。但臨時存儲是可以控制的,而延時長度暫時不知如何靈活控制。
???????3.從有限狀態(tài)機(jī)的角度來看,LSTM分辨一定的語言至少需要多少神經(jīng)元?
???????4.從動力系統(tǒng)的角度分析是否更簡單?2回復(fù):
???????2. 延時就是指net_j(t)=求和W_ijτ * x_i(t-τ) ;
???????3. 不一定,比如要設(shè)計(jì)一個只需分辨是否1*0的狀態(tài)機(jī),*為任意字串,那么只許3個單元就可以了,而這樣只需3個單元的狀態(tài)機(jī)卻可以識別任意有限長度的字串,所以并不是詞向量維度越高需要越多的神經(jīng)元。直觀感覺是取決于需要分辨的字串總數(shù)(分類類別數(shù)),但又和字串之間的關(guān)聯(lián)也有關(guān),所以不知道怎么分析。
???????4.看到一篇從動力系統(tǒng)分析TDNN的(就是2說的延時)paper,貌似不能用來分析LSTM= =。
3回復(fù)? :
???????"延時的意思就是把時間當(dāng)作空間處理?"--反正我也是這么理解的,按理說直接把時間當(dāng)做空間處理不會有問題,但經(jīng)過LSTM這個理論洗腦后我開始明白時間比空間更具有長程關(guān)聯(lián)(跨度大的統(tǒng)計(jì)/重要特征-好吧,這詞好像是我造的?),而且分布密度低,所以雖然TDNN也可以處理時間序列,但是為了密度極低的長程關(guān)聯(lián)要花費(fèi)的代價實(shí)在太高,而且隨著跨度的增加要不停增加神經(jīng)元(LSTM不一定,因?yàn)殚L程特征相比來講極少,增加的神經(jīng)元數(shù)不必正比于跨度的增加)。要彌補(bǔ)TDNN這一點(diǎn)也不是沒有辦法,粗略的想了想還是挺麻煩的。
注:
???????說統(tǒng)計(jì)/重要特征,是因?yàn)長STM貌似沒有統(tǒng)計(jì)學(xué)習(xí)過程,而只有最小化誤差的過程,我希望它能學(xué)到統(tǒng)計(jì)特征但事實(shí)上它只能學(xué)到用來減小誤差的特征。但我覺得只需要在前面加DL即可,彌補(bǔ)它的統(tǒng)計(jì)能力,主要針對短程統(tǒng)計(jì)特征(好比圖片中的小線條,邊邊角角)
..................................................
LSTM用于語音識別-關(guān)于 LSTM+CTC 背景知識
?????? 2015 年,百度公開發(fā)布的采用神經(jīng)網(wǎng)絡(luò)的 LSTM+CTC 模型大幅度降低了語音識別的錯誤率。采用這種技術(shù)在安靜環(huán)境下的標(biāo)準(zhǔn)普通話的識別率接近 97%。
???? CTC 是 Connectionist Temporal Classification 的縮寫,詳細(xì)的論文介紹見論文 “Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks”
??? CTC 的計(jì)算實(shí)際上是計(jì)算損失值的過程,就像其他損失函數(shù)一樣,它的計(jì)算結(jié)果也是評估網(wǎng)絡(luò)的輸出值和真實(shí)差多少。
聲音波形示意圖
在開始之前,需要對原始聲波進(jìn)行數(shù)據(jù)處理,輸入數(shù)據(jù)是提取過聲學(xué)特征的數(shù)據(jù),以幀長 25ms、幀移 10ms 的分幀為例,一秒鐘的語音數(shù)據(jù)大概會有 100 幀左右的數(shù)據(jù)。
采用 MFCC 提取特征,默認(rèn)情況下一幀語音數(shù)據(jù)會提取 13 個特征值,那么一秒鐘大概會提取 100*13 個特征值。用矩陣表示是一個 100 行 13 列的矩陣。
把語音數(shù)據(jù)特征提取完之后,其實(shí)就和圖像數(shù)據(jù)差不多了。只不過圖像數(shù)據(jù)把整個矩陣作為一個整體輸入到神經(jīng)網(wǎng)絡(luò)里面處理,序列化數(shù)據(jù)是一幀一幀的數(shù)據(jù)放到網(wǎng)絡(luò)處理。
如果是訓(xùn)練英文的一句話,假設(shè)輸入給 LSTM 的是一個 100*13 的數(shù)據(jù),發(fā)音因素的種類數(shù)是 26(26 個字母),則經(jīng)過 LSTM 處理之后,輸入給 CTC 的數(shù)據(jù)要求是 100*28 的形狀的矩陣(28=26+2)。其中 100 是原始序列的長度,即多少幀的數(shù)據(jù),28 表示這一幀數(shù)據(jù)在 28 個分類上的各自概率。在這 28 個分類中,其中 26 個是發(fā)音因素,剩下的兩個分別代表空白和沒有標(biāo)簽。
設(shè)計(jì)的基本網(wǎng)絡(luò)機(jī)構(gòu)
原始的 wav 文件經(jīng)過聲學(xué)特征提取變成 N*13,N 代表這段數(shù)據(jù)有多長,13 是每一幀數(shù)據(jù)有多少特征值。N 不是固定的。然后把 N*13 矩陣輸入給 LSTM 網(wǎng)絡(luò),這里涉及到兩層雙向 LSTM 網(wǎng)絡(luò),隱藏節(jié)點(diǎn)是 40 個,經(jīng)過 LSTM 網(wǎng)絡(luò)之后,如果是單向的,輸出會變成 40 個維度,雙向的就會變成 80 個維度。再經(jīng)過全連接,對這些特征值分類,再經(jīng)過 softmax 計(jì)算各個分類的概率。后面再接 CDC,再接正確的音素序列。
真實(shí)的語音識別環(huán)境要復(fù)雜很多。實(shí)驗(yàn)中要求的是標(biāo)準(zhǔn)普通話和安靜無噪聲的環(huán)境。
如果對代碼講解(詳細(xì)代碼講解請點(diǎn)擊視頻)感興趣的話,可以復(fù)制鏈接中的代碼:https://github.com/thewintersun/tensorflowbook/tree/master/Chapter6
運(yùn)行結(jié)果如下:
???? 參考:基于RNN的語音識別技術(shù)
總結(jié)
以上是生活随笔為你收集整理的ANN:DNN结构演进History—LSTM_NN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 影视大全app怎么没有倍速
- 下一篇: 得到怎么取消自动续费