97视频在线观看免费高清完整版在线观看-69精品人人人人-爱的色放3-亚洲黄色一区-亚洲精品视频免费在线观看-男人天堂免费视频-久久久社区-日韩综合一区二区-色撸撸在线-蝌蚪av-国产乱淫视频-男生尿隔着内裤呲出来视频-人操人操-欧美鲁鲁-免费视频99-3级av-中国一级大黄大黄大色毛片-久久久欧美精品-99精品在线看-色峰视频-印度毛茸茸-国产福利毛片-国产极品999-69日韩-天天综合网国产

星空人工智能技術(shù)網(wǎng)

RNN網(wǎng)絡(luò)的原理

新的算法理論不斷涌現(xiàn)的同時(shí),各種深度學(xué)習(xí)框架也不斷出現(xiàn)在人們視野,比如Torch,Caffe等等。TensorFlow是Google開發(fā)的第二代機(jī)器學(xué)習(xí)系統(tǒng),于2015年底開源,成為了新一代流行的機(jī)器學(xué)習(xí)的算法框架。這一章節(jié)我們將學(xué)習(xí)循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的基本原理。循環(huán)神經(jīng)網(wǎng)絡(luò)(RecurrentNeuralNetworks,RNNs)已經(jīng)在眾多自然語言處理(NaturalLanguageProcessing,NLP)中取得了巨大成功以及廣泛應(yīng)用。
PS:是因?yàn)樽罱鼇砹说鄱荚趯?dǎo)師那里做畢設(shè),是利用CNN做信息隱藏的,后期會(huì)公布源碼。帝都真的是人才濟(jì)濟(jì),沒有真的本事可能真的沒有辦法在這個(gè)宇宙世界中心混下去。,愿和大家共同成長,共同進(jìn)步。
RNNs的基本介紹

不同于傳統(tǒng)的FNNs(Feed-forward Neural Networks,前向反饋神經(jīng)網(wǎng)絡(luò)),RNNs引入了定向循環(huán),能夠處理那些輸入之間前后關(guān)聯(lián)的問題。定向循環(huán)結(jié)構(gòu)如下圖所示:
TensorFlow79
RNNs的目的使用來處理序列數(shù)據(jù)。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節(jié)點(diǎn)是無連接的。但是這種普通的神經(jīng)網(wǎng)絡(luò)對(duì)于很多問題卻無能無力。例如,你要預(yù)測(cè)句子的下一個(gè)單詞是什么,一般需要用到前面的單詞,因?yàn)橐粋€(gè)句子中前后單詞并不是獨(dú)立的。RNNs之所以稱為循環(huán)神經(jīng)網(wǎng)路,即一個(gè)序列當(dāng)前的輸出與前面的輸出也有關(guān)。具體的表現(xiàn)形式為網(wǎng)絡(luò)會(huì)對(duì)前面的信息進(jìn)行記憶并應(yīng)用于當(dāng)前輸出的計(jì)算中,即隱藏層之間的節(jié)點(diǎn)不再無連接而是有連接的,并且隱藏層的輸入不僅包括輸入層的輸出還包括上一時(shí)刻隱藏層的輸出。理論上,RNNs能夠?qū)θ魏伍L度的序列數(shù)據(jù)進(jìn)行處理。但是在實(shí)踐中,為了降低復(fù)雜性往往假設(shè)當(dāng)前的狀態(tài)只與前面的幾個(gè)狀態(tài)相關(guān),下圖便是一個(gè)典型的RNNs:
TensorFlow80
TensorFlow81
循環(huán)神經(jīng)網(wǎng)絡(luò)進(jìn)行展開成一個(gè)全神經(jīng)網(wǎng)絡(luò)RNNs包含輸入單元(Inputunits),輸入集標(biāo)記為{x0,x1,…,xt,xt+1,…},而輸出單元(Outputunits)的輸出集則被標(biāo)記為{y0,y1,…,yt,yt+1.,..}。RNNs還包含隱藏單元(Hiddenunits),我們將其輸出集標(biāo)記為{s0,s1,…,st,st+1,…},這些隱藏單元完成了最為主要的工作。你會(huì)發(fā)現(xiàn),在圖中:有一條單向流動(dòng)的信息流是從輸入單元到達(dá)隱藏單元的,與此同時(shí)另一條單向流動(dòng)的信息流從隱藏單元到達(dá)輸出單元。在某些情況下,RNNs會(huì)打破后者的限制,引導(dǎo)信息從輸出單元返回隱藏單元,這些被稱為“BackProjections”,并且隱藏層的輸入還包括上一隱藏層的狀態(tài),即隱藏層內(nèi)的節(jié)點(diǎn)可以自連也可以互連。例如,對(duì)一個(gè)包含5個(gè)單詞的語句,那么展開的網(wǎng)絡(luò)便是一個(gè)五層的神經(jīng)網(wǎng)絡(luò),每一層代表一個(gè)單詞。對(duì)于該網(wǎng)絡(luò)的計(jì)算過程如下:
1.xt表示第t,t=1,2,3…步(step)的輸入。比如,x1為第二個(gè)詞的one-hot向量(根據(jù)上圖,x0為第一個(gè)詞)。
PS:使用計(jì)算機(jī)對(duì)自然語言進(jìn)行處理,便需要將自然語言處理成為機(jī)器能夠識(shí)別的符號(hào),加上在機(jī)器學(xué)習(xí)過程中,需要將其進(jìn)行數(shù)值化。而詞是自然語言理解與處理的基礎(chǔ),因此需要對(duì)詞進(jìn)行數(shù)值化,詞向量便是一種可行又有效的方法。何為詞向量,即使用一個(gè)指定長度的實(shí)數(shù)向量v來表示一個(gè)詞。有一種種最簡單的表示方法,就是使用One-hotvector表示單詞,即根據(jù)單詞的數(shù)量|V|生成一個(gè)|V|*1的向量,當(dāng)某一位為一的時(shí)候其他位都為零,然后這個(gè)向量就代表一個(gè)單詞。缺點(diǎn)也很明顯:
  • 由于向量長度是根據(jù)單詞個(gè)數(shù)來的,如果有新詞出現(xiàn),這個(gè)向量還得增加
  • 主觀性太強(qiáng)
  • 多單詞,人工打labor并且adapt,很不方便
  • 難以計(jì)算單詞之間的相似性
    現(xiàn)在有一種更加有效的詞向量模式,該模式是通過神經(jīng)網(wǎng)或者深度學(xué)習(xí)對(duì)詞進(jìn)行訓(xùn)練,輸出一個(gè)指定維度的向量,該向量便是輸入詞的表達(dá)。如word2vec。
    2.st為隱藏層的第t步的狀態(tài),它是網(wǎng)絡(luò)的記憶單元。st根據(jù)當(dāng)前輸入層的輸出與上一步隱藏層的狀態(tài)進(jìn)行計(jì)算。st=f(Uxt+Wst−1),其中f一般是非線性的激活函數(shù),如tanh或ReLU,在計(jì)算s0時(shí),即第一個(gè)單詞的隱藏層狀態(tài),需要用到s−1,但是其并不存在,在實(shí)現(xiàn)中一般置為0向量。
    3.ot是第t步的輸出,如下個(gè)單詞的向量表示,ot=softmax(Vst)。
    注意
    1.你可以認(rèn)為隱藏層狀態(tài)st是網(wǎng)絡(luò)的記憶單元.st包含了前面所有步的隱藏層狀態(tài)。而輸出層的輸出ot只與當(dāng)前步的st有關(guān),在實(shí)踐中,為了降低網(wǎng)絡(luò)的復(fù)雜度,往往st只包含前面若干步而不是所有步的隱藏層狀態(tài)。
    2.在傳統(tǒng)神經(jīng)網(wǎng)絡(luò)中,每一個(gè)網(wǎng)絡(luò)層的參數(shù)是不共享的。而在RNNs中,每輸入一步,每一層各自都共享參數(shù)U,V,W。其反應(yīng)者RNNs中的每一步都在做相同的事,只是輸入不同,因此大大地降低了網(wǎng)絡(luò)中需要學(xué)習(xí)的參數(shù);這里并沒有說清楚,解釋一下,傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的參數(shù)是不共享的,并不是表示對(duì)于每個(gè)輸入有不同的參數(shù),而是將RNN是進(jìn)行展開,這樣變成了多層的網(wǎng)絡(luò),如果這是一個(gè)多層的傳統(tǒng)神經(jīng)網(wǎng)絡(luò),那么xt到st之間的U矩陣與xt+1到st+1之間的U是不同的,而RNNs中的卻是一樣的,同理對(duì)于s與s層之間的W、s層與o層之間的V也是一樣的。
    3.上圖中每一步都會(huì)有輸出,但是每一步都要有輸出并不是必須的。比如,我們需要預(yù)測(cè)一條語句所表達(dá)的情緒,我們僅僅需要關(guān)系最后一個(gè)單詞輸入后的輸出,而不需要知道每個(gè)單詞輸入后的輸出。同理,每步都需要輸入也不是必須的。RNNs的關(guān)鍵之處在于隱藏層,隱藏層能夠捕捉序列的信息。
RNNs的應(yīng)用
RNNs已經(jīng)被在實(shí)踐中證明對(duì)NLP是非常成功的。如詞向量表達(dá)、語句合法性檢查、詞性標(biāo)注等。在RNNs中,目前使用最廣泛最成功的模型便是LSTMs(LongShort-TermMemory,長短時(shí)記憶模型)模型,該模型通常比vanilla RNNs能夠更好地對(duì)長短時(shí)依賴進(jìn)行表達(dá),該模型相對(duì)于一般的RNNs,只是在隱藏層做了手腳。
語言模型與文本生成(Language Modeling and Generating Text)
給定一個(gè)單詞序列,根據(jù)前面的單詞預(yù)測(cè)每一個(gè)單詞的可能性。然后根據(jù)前面的可能性,語言模型能夠得到一個(gè)語句正確的可能性,這是機(jī)器翻譯的一部分,往往可能性越大,語句越正確。另一種應(yīng)用便是使用生成模型預(yù)測(cè)下一個(gè)單詞的概率,從而生成新的文本根據(jù)輸出概率的采樣。語言模型中,典型的輸入是單詞序列中每個(gè)單詞的詞向量(如One-hotvector),輸出時(shí)預(yù)測(cè)的單詞序列。當(dāng)在對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練時(shí),如果ot=xt+1,那么第t步的輸出便是下一步的輸入。
機(jī)器翻譯(Machine Translation)
機(jī)器翻譯是將一種源語言語句變成意思相同的另一種源語言語句,如將英語語句變成同樣意思的中文語句。與語言模型關(guān)鍵的區(qū)別在于,需要將源語言語句序列輸入后,才進(jìn)行輸出,即輸出第一個(gè)單詞時(shí),便需要從完整的輸入序列中進(jìn)行獲取。機(jī)器翻譯如下圖所示:
TensorFlow82
語音識(shí)別(Speech Recognition)
語音識(shí)別是指給一段聲波的聲音信號(hào),預(yù)測(cè)該聲波對(duì)應(yīng)的某種指定源語言的語句以及該語句的概率值。
圖像描述生成 (Generating Image Descriptions)
圖像描述生成就是給定一張圖像,利用RNN自動(dòng)生成描述這張圖像的文字內(nèi)容
具體如下:
TensorFlow83
涉及到神經(jīng)網(wǎng)絡(luò),自然語言處理等方方面面的知識(shí)。
訓(xùn)練RNNs的原理
對(duì)于RNN是的訓(xùn)練和對(duì)傳統(tǒng)的ANN訓(xùn)練一樣。同樣使用BP誤差反向傳播算法,不過有一點(diǎn)區(qū)別。如果將RNNs進(jìn)行網(wǎng)絡(luò)展開,那么參數(shù)W,U,V是共享的,而傳統(tǒng)神經(jīng)網(wǎng)絡(luò)卻不是的。并且在使用梯度下降算法中,每一步的輸出不僅依賴當(dāng)前步的網(wǎng)絡(luò),并且還以來前面若干步網(wǎng)絡(luò)的狀態(tài)。比如,在t=4時(shí),我們還需要向后傳遞三步,已經(jīng)后面的三步都需要加上各種的梯度。該學(xué)習(xí)算法稱為BackpropagationThroughTime(BPTT)。但在vanillaRNNs訓(xùn)練中,BPTT無法解決長時(shí)依賴問題(即當(dāng)前的輸出與前面很長的一段序列有關(guān),一般超過十步就無能為力了),因?yàn)锽PTT會(huì)帶來所謂的梯度消失或梯度爆炸問題(thevanishing/explodinggradientproblem)。當(dāng)然,有很多方法去解決這個(gè)問題,如LSTMs便是專門應(yīng)對(duì)這種問題的。
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)反向傳播算法(BPTT)理解
循環(huán)神經(jīng)網(wǎng)絡(luò)的前向傳播算法:
TensorFlow84
RNN中前一時(shí)刻到當(dāng)前時(shí)刻只有一個(gè)權(quán)重矩陣,該權(quán)重矩陣與時(shí)間并沒有什么關(guān)系。整個(gè)前向傳播算法與BP網(wǎng)絡(luò)的前向傳播算法的差別是多了一個(gè)前一時(shí)刻隱藏層的信息而已。在我們這邊的前向傳播算法可能與大家平時(shí)看到的會(huì)有點(diǎn)出入,因?yàn)檫@個(gè)前向傳播算法將傳播過程中的各個(gè)階段都拆分開來表示。在進(jìn)入激活函數(shù)前先用額外的兩個(gè)變量表示,分別是進(jìn)入隱藏層激活函數(shù)e前的和進(jìn)入輸出層激活函數(shù)g前的。
RNN的輸入數(shù)據(jù)與其他神經(jīng)網(wǎng)絡(luò)如DNN的輸入數(shù)據(jù)不同的是,RNN的輸入數(shù)據(jù)樣本不能打亂,必須按時(shí)間進(jìn)行輸入,而其他的神經(jīng)網(wǎng)絡(luò)輸入數(shù)據(jù)可以打亂。所RNN與其他神經(jīng)網(wǎng)絡(luò)的前向傳播算法和反向傳播算法的實(shí)現(xiàn)其實(shí)并沒有什么特別之處,只是多了幾個(gè)變量。因此RNN的關(guān)于時(shí)間的t循環(huán)可以看做,第t個(gè)訓(xùn)練樣本(或者第t個(gè)批量訓(xùn)練樣本),但是一定要保持先后順序,不然學(xué)習(xí)出來的可能沒有什么用處。
接下來給出BPTT算法:
TensorFlow85
LSTM(Long Short-Term Memory)長短期記憶網(wǎng)絡(luò)
原生的RNN會(huì)遇到一個(gè)很大的問題,叫做 The vanishing gradient problem for RNNs,也就是后面時(shí)間的節(jié)點(diǎn)對(duì)于前面時(shí)間的節(jié)點(diǎn)感知力下降,也就是記憶遺失,RNN解決這個(gè)問題用到的就叫LSTM,拿個(gè)小本子把事記上,好記性不如爛筆頭嘛,所以LSTM引入一個(gè)核心元素就是Cell。
Long Short Term 網(wǎng)絡(luò)—— 一般就叫做LSTM ——是一種 RNN 特殊的類型,可以學(xué)習(xí)長期依賴信息。
所有RNN都具有一種重復(fù)神經(jīng)網(wǎng)絡(luò)模塊的鏈?zhǔn)降男问健T跇?biāo)準(zhǔn)的RNN中,這個(gè)重復(fù)的模塊只有一個(gè)非常簡單的結(jié)構(gòu),例如一個(gè) tanh 層。
TensorFlow86
LSTM同樣是這樣的結(jié)構(gòu),但是重復(fù)的模塊擁有一個(gè)不同的結(jié)構(gòu)。不同于單一神經(jīng)網(wǎng)絡(luò)層,這里是有四個(gè),以一種非常特殊的方式進(jìn)行交互。
TensorFlow87
圖中使用的各種元素的圖標(biāo)
TensorFlow88
在上面的圖例中,每一條黑線傳輸著一整個(gè)向量,從一個(gè)節(jié)點(diǎn)的輸出到其他節(jié)點(diǎn)的輸入。粉色的圈代表 pointwise的操作,諸如向量的和,而黃色的矩陣就是學(xué)習(xí)到的神經(jīng)網(wǎng)絡(luò)層。合在一起的線表示向量的連接,分開的線表示內(nèi)容被復(fù)制,然后分發(fā)到不同的位置。
LSTM 的核心思想
LSTM 的關(guān)鍵就是細(xì)胞狀態(tài),水平線在圖上方貫穿運(yùn)行。細(xì)胞狀態(tài)類似于傳送帶。直接在整個(gè)鏈上運(yùn)行,只有一些少量的線性交互。信息在上面流傳保持不變會(huì)很容易。
TensorFlow89
LSTM有通過精心設(shè)計(jì)的稱作為“門”的結(jié)構(gòu)來去除或者增加信息到細(xì)胞狀態(tài)的能力。門是一種讓信息選擇式通過的方法。他們包含一個(gè) sigmoid 神經(jīng)網(wǎng)絡(luò)層和一個(gè) pointwise 乘法操作。
TensorFlow90
Sigmoid 層輸出 0 到 1 之間的數(shù)值,描述每個(gè)部分有多少量可以通過。0 代表“不許任何量通過”,1 就指“允許任意量通過”!LSTM 擁有三個(gè)門,來保護(hù)和控制細(xì)胞狀態(tài)。
逐步理解LSTM
在我們 LSTM 中的第一步是決定我們會(huì)從細(xì)胞狀態(tài)中丟棄什么信息。這個(gè)決定通過一個(gè)稱為忘記門層完成。該門會(huì)讀取 h_{t-1} 和 xt,輸出一個(gè)在 0 到 1 之間的數(shù)值給每個(gè)在細(xì)胞狀態(tài) C{t-1} 中的數(shù)字。1 表示“完全保留”,0 表示“完全舍棄”
TensorFlow91
下一步是確定什么樣的新信息被存放在細(xì)胞狀態(tài)中。這里包含兩個(gè)部分。第一,sigmoid 層稱 “輸入門層”決定什么值我們將要更新。然后,一個(gè)tanh層創(chuàng)建一個(gè)新的候選值向量,\tilde{C}t,會(huì)被加入到狀態(tài)中。
TensorFlow92
現(xiàn)在是更新舊細(xì)胞狀態(tài)的時(shí)間了,C
{t-1} 更新為 C_t。
我們把舊狀態(tài)與 f_t 相乘,丟棄掉我們確定需要丟棄的信息。接著加上 i_t * \tilde{C}_t。這就是新的候選值,根據(jù)我們決定更新每個(gè)狀態(tài)的程度進(jìn)行變化。
TensorFlow93
最終,我們需要確定輸出什么值。這個(gè)輸出將會(huì)基于我們的細(xì)胞狀態(tài),但是也是一個(gè)過濾后的版本。首先,我們運(yùn)行一個(gè) sigmoid 層來確定細(xì)胞狀態(tài)的哪個(gè)部分將輸出出去。接著,我們把細(xì)胞狀態(tài)通過 tanh 進(jìn)行處理(得到一個(gè)在-1到1之間的值)并將它和sigmoid門的輸出相乘,最終我們僅僅會(huì)輸出我們確定輸出的那部分。
TensorFlow94

星空人工智能技術(shù)網(wǎng) 倡導(dǎo)尊重與保護(hù)知識(shí)產(chǎn)權(quán)。如發(fā)現(xiàn)本站文章存在版權(quán)等問題,煩請(qǐng)30天內(nèi)提供版權(quán)疑問、身份證明、版權(quán)證明、聯(lián)系方式等發(fā)郵件至1851688011@qq.com我們將及時(shí)溝通與處理。!:首頁 > 新聞 » RNN網(wǎng)絡(luò)的原理

()
分享到:

相關(guān)推薦

留言與評(píng)論(共有 0 條評(píng)論)
   
驗(yàn)證碼: