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