-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
循環(huán)神經(jīng)網(wǎng)絡(luò)應(yīng)用舉例(循環(huán)神經(jīng)網(wǎng)絡(luò)應(yīng)用舉例分析)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于循環(huán)神經(jīng)網(wǎng)絡(luò)應(yīng)用舉例的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)簡介
循環(huán)神經(jīng)網(wǎng)絡(luò)英文名稱為 ( Recurrent Neural Network, RNN ),其通過使用帶自反饋的神經(jīng)元,能夠處理任意長度的 時序 數(shù)據(jù)。
給定輸入時序序列
式中, 表示一段時序數(shù)據(jù), 為時間長度
以一段英文段落為例,其時序數(shù)據(jù)可以表示為:
若是一段視頻,將其每一幀通過CNN網(wǎng)絡(luò)處理得到相應(yīng)的編碼向量
循環(huán)神經(jīng)網(wǎng)絡(luò)通過以下公式更新隱藏層的活性值
循環(huán)神經(jīng)網(wǎng)絡(luò)圖示
RNN的基本模型如下圖所示,為便于理解,圖中將RNN的模型展開,按照時序方向?qū)ζ淝跋騻鞑チ鞒踢M行介紹
RNN的基本模型
利用數(shù)學(xué)表達式整個過程可以變得更加清晰,RNN的前向傳播公式如下:
將上述過程整合到一個RNN cell中,可以表示為如下圖所示的過程:
RNN的前向傳播示意圖
缺陷:
沒有利用到模型后續(xù)的信息,可以通過雙向RNN網(wǎng)絡(luò)進行優(yōu)化
RNN主要有兩種計算梯度的方式:隨時間反向傳播(BPTT)和實時循環(huán)學(xué)習(xí)法(RTRL)算法
本文中主要介紹隨時間反向傳播的方法 ( BackPropagation Through Time )
RNN的損失函數(shù)與任務(wù)有關(guān),對于同步的序列對序列任務(wù),其loss可以用交叉熵公式表示
然后通過BPTT算法便可以進行梯度的反向傳播計算
梯度爆炸的解決方法:梯度修剪
梯度消失的解決方法:增加長程依賴 LSTM,GRU
GRU的基本思路:增加相關(guān)門(Relate Gate)和更新門(Update Gate),進而使得RNN單元具有記憶能力
首先從數(shù)學(xué)角度對GRU的前向傳播過程進行介紹,具體公式如下:
公式中各變量的含義:
將上述數(shù)學(xué)公式轉(zhuǎn)化為圖像,可得
GRU Cell的前向傳播流程
LSTM意為長短時記憶網(wǎng)絡(luò) (Long Short-Term Memory Network,LSTM) ,可以有效地解決簡單神經(jīng)網(wǎng)絡(luò)的梯度消失和爆炸問題
在LSTM中,與GRU主要有兩點不同
同樣,先從數(shù)學(xué)公式入手,對LSTM的前向傳播過程進行了解
基于數(shù)學(xué)公式的過程,可將LSTM CELL的前向傳播過程總結(jié)為(圖片借用于nndl):
LSTM Cell的前向傳播示意圖
從上圖中可以看出,LSTM在前向傳播的過程中傳輸了兩個狀態(tài):內(nèi)部狀態(tài) 以及外部狀態(tài) ,在整個傳播過程中 外部狀態(tài)(隱狀態(tài)) 每個時刻都會被重寫,因此可以看作一種 短時記憶 ,而 內(nèi)部狀態(tài) 可以在某個時刻捕捉一些關(guān)鍵信息,并將此信息保存一段時間間隔,可以看作一種 長時記憶 (長的短時記憶)
此外,在LSTM網(wǎng)絡(luò)初始化訓(xùn)練的時候,需要手動將遺忘門的數(shù)值設(shè)置的大一些,否則在參數(shù)初始化的時候,遺忘門的數(shù)據(jù)會被初始化為一個很小的值,前一時刻的內(nèi)部狀態(tài) 大部分都會丟失,這樣網(wǎng)絡(luò)很難獲取到長距離的依賴信息,并且相鄰時間間隔的梯度會非常小,導(dǎo)致 梯度彌散 問題,因此遺忘門的 偏置變量 的初始值 一般很大,取 1或2
將 設(shè)置為1即可,但是長度非常的大的時候會造成記憶單元的飽和,降低性能
三個門不僅依賴于 和 ,也依賴于
將兩者合并為一個門,即:
首先,我們要理解什么是深層的RNN,對于單個的RNN cell,若將其在時間維度上展開,其深度與時間維度的長度成正比,但若將一個RNN cell看作為單個從 的映射函數(shù),則單個cell實際上是很淺顯的一層,因此深層循環(huán)神經(jīng)網(wǎng)絡(luò)要做的就是把多個RNN cell組合起來,換句話說,就是增加從輸入 到輸出 的路徑,使得網(wǎng)絡(luò)的深度更深。
如何增加從輸入 到輸出 的路徑呢?兩種途徑:
堆疊循環(huán)神經(jīng)網(wǎng)絡(luò)示意圖
將網(wǎng)絡(luò)帶入到實際應(yīng)用場景中:假如我們要翻譯一段句子
在這里,is和are實際上是由后面的Lucy和they所決定的,而這種單向的按照時序進行傳播的方式?jīng)]有利用到后面的信息。因此誕生了雙向循環(huán)網(wǎng)絡(luò)
雙向循環(huán)神經(jīng)網(wǎng)絡(luò)示意圖
雙向循環(huán)神經(jīng)網(wǎng)絡(luò)實際上就是簡單的雙層循環(huán)神經(jīng)網(wǎng)絡(luò),只不過第二層網(wǎng)絡(luò)的傳播方式為按時序的逆向傳播,其傳播公式為:
二、145自然語言處理進階手冊--循環(huán)神經(jīng)網(wǎng)絡(luò)
循環(huán)神經(jīng)網(wǎng)絡(luò)是一個有向循環(huán)的過程,“有向”是因為朝著序列方依次輸入各序列成分以及上一步的輸出成分,“循環(huán)”是因為每個序列成分進行運算的參數(shù)是一致的,因為它對數(shù)據(jù)的每個輸入執(zhí)行相同的功能,而當(dāng)前輸入的輸出取決于上一步的計算。
與前饋神經(jīng)網(wǎng)絡(luò)不同, 循環(huán)神經(jīng)網(wǎng)絡(luò)可以使用其內(nèi)部狀態(tài)(隱狀態(tài))來處理輸入序列。這使它們適用于諸如語音、文本等序列數(shù)據(jù)。而在其他神經(jīng)網(wǎng)絡(luò)中,所有輸入都是彼此獨立的。但是在循環(huán)神經(jīng)網(wǎng)絡(luò)中,所有輸入都是相互關(guān)聯(lián)的,如下圖所示為基本的循環(huán)神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu): Vanilla RNN。
循環(huán)神經(jīng)網(wǎng)絡(luò)每一步的輸出都包含了前面步驟的信息,因此具備記憶功能,而記憶功能是解讀語境的關(guān)鍵。比如,對于“小梅很喜歡吃桔子,她不喜歡吃蘋果”這句話,如果逐詞輸入輸出但是缺少記憶性,我們只能解析出一個個獨立詞所表達的意思,反之,在具備記憶的情況下,當(dāng)看到桔子時,可知其不僅僅指“水果的概念”,而是“一個人喜歡的食物對象”。因此循環(huán)神經(jīng)網(wǎng)絡(luò)很適合處理序列間存在聯(lián)系的場景。
上圖中展示了一個最基本最簡單的單向循環(huán)神經(jīng)網(wǎng)絡(luò),實際上根據(jù)需求可以在此基礎(chǔ)上有所改進。如可以將單向序列行進的網(wǎng)絡(luò)改為雙向循環(huán)神經(jīng)網(wǎng)絡(luò),因為很多時候,對于一個序列,元素之間的影響可以是雙向的,即從前往后以及從后往前。還是以“小梅很喜歡吃桔子,她不喜歡吃蘋果”為例,如果從后往前看,先看過“她不喜歡吃蘋果”,再看到“桔子”,也能大概知道“桔子”可能和“一個人的喜好”相關(guān)。所以,雙向循環(huán)神經(jīng)網(wǎng)絡(luò)能夠提供更豐富的信息。
而在事實應(yīng)用中,Vanilla RNN 并不常用,這是因為其在梯度下降過程中,存在累乘項及激活函數(shù)的值域?qū)е碌奶荻认Ш捅▎栴},也就是說,訓(xùn)練 Vanilla RNN 是一項非常困難的任務(wù),無法處理很長的序列,獲取不到遠距離的信息。
長短期記憶(LSTM)網(wǎng)絡(luò)是 Vanilla RNN 的修改版,該網(wǎng)絡(luò)由 Hochreiter & Schmidhuber (1997) 引入,并有許多人對其進行了改進和普及,可以更輕松地記住序列中的更長距離的過去數(shù)據(jù),通過特制的門控結(jié)構(gòu)改變了梯度更新的表達式,從而緩解了梯度消失問題(梯度爆炸可通過梯度裁剪解決)。LSTM 非常適合對序列數(shù)據(jù)進行分類,標(biāo)注和預(yù)測。 LSTM 基本結(jié)構(gòu)如下:
LSTM 的核心是細胞狀態(tài),用貫穿細胞的水平線表示。細胞狀態(tài)像傳送帶一樣,貫穿整個細胞卻只有很少的分支,這樣能保證信息穩(wěn)定地流過整個網(wǎng)絡(luò),就好比人的記憶狀態(tài)能夠貫穿人的一生。
以上便是 LSTM 的內(nèi)部結(jié)構(gòu),通過門控狀態(tài)來控制傳輸狀態(tài),記住對任務(wù)關(guān)鍵的信息,忘記不重要的信息;而不像普通的 RNN 那樣只僅有一種記憶疊加的簡單方式,可針對更長的文本。但同時也因為引入了很多內(nèi)容,導(dǎo)致參數(shù)變多,也使得訓(xùn)練難度加大了很多。因此很多時候我們往往會使用效果和 LSTM 相當(dāng),但參數(shù)更少的 GRU 來構(gòu)建大訓(xùn)練量的模型。
在 PyTorch 中直接調(diào)用 nn.LSTM() 便能獲取已構(gòu)建好的 LSTM 層結(jié)構(gòu),首先介紹其參數(shù)。
input_size: 表示的是輸入的數(shù)據(jù)維數(shù)。
hidden_size: 表示的是輸出維數(shù)。
num_layers: 表示堆疊幾層的 LSTM,默認是 1。
bias: True 或者 False,決定是否使用 bias,默認為 True。
batch_first: 如果為 True, 接受的數(shù)據(jù)輸入是 (batch_size,seq_len,input_size),如果為 False,則為 (seq_len,batch_size,input_size),默認為 False。
dropout: 表示除了最后一層之外都引入一個 dropout。
bidirectional: 表示雙向 LSTM,默認為 False。
接下來介紹 LSTM 的輸入與輸出。
輸入包括:
input: 表示輸入數(shù)據(jù),其維度為 (seq_len,batch_size,input_size)。
h_0: 初始隱狀態(tài),維度為 (num_layers*num_directions,batch_size,hidden_size),num_layers 表示 LSTM 的層數(shù),num_directions 在 LSTM 為單向時為 1,雙向時為 2,非必須輸入,網(wǎng)絡(luò)會提供默認初始狀態(tài)。
c_0: 初始的細胞狀態(tài),維度與 h_0 相同,非必須,網(wǎng)絡(luò)會提供默認初始狀態(tài)。
輸出包括:
output: 最后輸出,維度為 (seq_len, batch_size, num_directions * hidden_size)。
h_n: 最后時刻的輸出隱藏狀態(tài),維度為 (num_layers * num_directions, batch_size, hidden_size)。
c_n: 最后時刻的輸出單元狀態(tài),維度與 h_n 相同。
定義 LSTM 層:
接下來定義輸入,輸入數(shù)據(jù)大小應(yīng)為 (seq_len,batch_size,input_size):
在 LSTM 層中輸入 x,觀察輸出:
由于 num_layers 和 num_directions 均為 1,因此 h, c 的第一維度為 num_layers*num_directions = 1。
在處理文本數(shù)據(jù)進行諸如文本分類等任務(wù)時,一般在循環(huán)神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上加詞向量層以及最后的輸出層作為整體的神經(jīng)網(wǎng)絡(luò)模型,典型構(gòu)架如下:
初始化 LSTM 模型:
定義輸入,查看輸出:
輸出大小為 2*3,即 batch_size * output_size。
三、神經(jīng)網(wǎng)絡(luò)簡述
機器學(xué)習(xí)中談?wù)摰纳窠?jīng)網(wǎng)絡(luò)是指“神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)”,或者說,是機器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)這兩個學(xué)科領(lǐng)域的交叉部分[1]。
在這里,神經(jīng)網(wǎng)絡(luò)更多的是指計算機科學(xué)家模擬人類大腦結(jié)構(gòu)和智能行為,發(fā)明的一類算法的統(tǒng)稱。
神經(jīng)網(wǎng)絡(luò)是眾多優(yōu)秀仿生算法中的一種,讀書時曾接觸過蟻群優(yōu)化算法,曾驚訝于其強大之處,但神經(jīng)網(wǎng)絡(luò)的強大,顯然蟻群優(yōu)化還不能望其項背。
A、起源與第一次高潮。有人認為,神經(jīng)網(wǎng)絡(luò)的最早討論,源于現(xiàn)代計算機科學(xué)的先驅(qū)——阿蘭.圖靈在1948年的論文中描述的“B型組織機器”[2]。二十世紀(jì)50年代出現(xiàn)了以感知機、Adaling為代表的一系列成功,這是神經(jīng)網(wǎng)絡(luò)發(fā)展的第一個高潮[1]。
B、第一次低谷。1969年,馬文.明斯基出版《感知機》一書,書中論斷直接將神經(jīng)網(wǎng)絡(luò)打入冷宮,導(dǎo)致神經(jīng)網(wǎng)絡(luò)十多年的“冰河期”。值得一提的是,在這期間的1974年,哈佛大學(xué)Paul Webos發(fā)明BP算法,但當(dāng)時未受到應(yīng)有的重視[1]。
C、第二次高潮。1983年,加州理工學(xué)院的物理學(xué)家John Hopfield利用神經(jīng)網(wǎng)絡(luò),在旅行商問題上獲得當(dāng)時最好結(jié)果,引起轟動;Rumelhart等人重新發(fā)明了BP算法,BP算法迅速走紅,掀起神經(jīng)網(wǎng)絡(luò)第二次高潮[1]。
D、第二次低谷。二十世紀(jì)90年代中期,統(tǒng)計學(xué)習(xí)理論和支持向量機興起,較之于這些算法,神經(jīng)網(wǎng)絡(luò)的理論基礎(chǔ)不清晰等缺點更加凸顯,神經(jīng)網(wǎng)絡(luò)研究進入第二次低谷[1]。
E、深度學(xué)習(xí)的崛起。2010年前后,隨著計算能力的提升和大數(shù)據(jù)的涌現(xiàn),以神經(jīng)網(wǎng)絡(luò)為基礎(chǔ)的“深度學(xué)習(xí)”崛起,科技巨頭公司谷歌、Facebook、百度投入巨資研發(fā),神經(jīng)網(wǎng)絡(luò)迎來第三次高潮[1]。2016年3月9日至15日,Google人工智能程序AlphaGo對陣韓國圍棋世界冠軍李世乭,以4:1大比分獲勝,比眾多專家預(yù)言早了十年。這次比賽,迅速在全世界經(jīng)濟、科研、計算機產(chǎn)業(yè)各領(lǐng)域掀起人工智能和深度學(xué)習(xí)的熱烈討論。
F、展望。從幾個方面討論一下。
1)、近期在Google AlphaGo掀起的熱潮中,民眾的熱情與期待最大,甚至有少許恐慌情緒;計算機產(chǎn)業(yè)和互聯(lián)網(wǎng)產(chǎn)業(yè)熱情也非常巨大,對未來充滿期待,各大巨頭公司對其投入大量資源;學(xué)術(shù)界的反應(yīng)倒是比較冷靜的。學(xué)術(shù)界的冷靜,是因為神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò)的理論基礎(chǔ)還沒有出現(xiàn)長足的進步,其缺點還沒有根本改善。這也從另一個角度說明了深度神經(jīng)網(wǎng)絡(luò)理論進步的空間很大。
2)、"當(dāng)代神經(jīng)網(wǎng)絡(luò)是基于我們上世紀(jì)六十年代掌握的腦知識。"關(guān)于人類大腦的科學(xué)與知識正在爆炸式增長。[3]世界上很多學(xué)術(shù)團隊正在基于大腦機制新的認知建立新的模型[3]。我個人對此報樂觀態(tài)度,從以往的仿生算法來看,經(jīng)過億萬年進化的自然界對科技發(fā)展的促進從來沒有停止過。
3)、還說AlphaGo,它并不是理論和算法的突破,而是基于已有算法的工程精品。AlhphaGo的工作,為深度學(xué)習(xí)的應(yīng)用提供了非常廣闊的想象空間。分布式技術(shù)提供了巨大而廉價的計算能力,巨量數(shù)據(jù)的積累提供了豐富的訓(xùn)練樣本,深度學(xué)習(xí)開始騰飛,這才剛剛開始。
一直沿用至今的,是McChlloch和Pitts在1943年依據(jù)腦神經(jīng)信號傳輸結(jié)構(gòu)抽象出的簡單模型,所以也被稱作”M-P神經(jīng)元模型“。
其中,
f函數(shù)像一般形如下圖的函數(shù),既考慮階躍性,又考慮光滑可導(dǎo)性。
實際常用如下公式,因形如S,故被稱作sigmoid函數(shù)。
把很多個這樣的神經(jīng)元按一定層次連接起來,就得到了神經(jīng)網(wǎng)絡(luò)。
兩層神經(jīng)元組成,輸入層接收外界輸入信號,輸出層是M-P神經(jīng)元(只有輸出層是)。
感知機的數(shù)學(xué)模型和單個M-P神經(jīng)元的數(shù)學(xué)模型是一樣的,如因為輸入層只需接收輸入信號,不是M-P神經(jīng)元。
感知機只有輸出層神經(jīng)元是B-P神經(jīng)元,學(xué)習(xí)能力非常有限。對于現(xiàn)行可分問題,可以證明學(xué)習(xí)過程一定會收斂。而對于非線性問題,感知機是無能為力的。
BP神經(jīng)網(wǎng)絡(luò)全稱叫作誤差逆?zhèn)鞑?Error Propagation)神經(jīng)網(wǎng)絡(luò),一般是指基于誤差逆?zhèn)鞑ニ惴ǖ亩鄬忧梆伾窠?jīng)網(wǎng)絡(luò)。這里為了不占篇幅,BP神經(jīng)網(wǎng)絡(luò)將起篇另述。
BP算法是迄今最為成功的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法,也是最有代表性的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法。BP算法不僅用于多層前饋神經(jīng)網(wǎng)絡(luò),還用于其他類型神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。
RBF網(wǎng)絡(luò)全程徑向基函數(shù)(Radial Basis Function)網(wǎng)絡(luò),是一種單隱層前饋神經(jīng)網(wǎng)絡(luò),其與BP網(wǎng)絡(luò)最大的不同是采用徑向基函數(shù)作為隱層神經(jīng)元激活函數(shù)。
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional neural networks,簡稱CNNs)是一種深度學(xué)習(xí)的前饋神經(jīng)網(wǎng)絡(luò),在大型圖片處理中取得巨大成功。卷積神經(jīng)網(wǎng)絡(luò)將起篇另述。
循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks,RNNs)與傳統(tǒng)的FNNs不同,RNNs引入定向循環(huán),能夠處理那些輸入之間前后關(guān)聯(lián)的問題。RNNs已經(jīng)在眾多自然語言處理(Natural Language Processing, NLP)中取得了巨大成功以及廣泛應(yīng)用[5]。RNNs將起篇另述。[5]
[1]、《機器學(xué)習(xí)》,周志華著
[2]、《模式識別(第二版)》,Richard O.Duda等著,李宏東等譯
[3]、《揭秘IARPA項目:解碼大腦算法或?qū)氐赘淖儥C器學(xué)習(xí)》,Emily Singerz著,機器之心編譯出品
[4]、圖片來源于互聯(lián)網(wǎng)
[5]、 循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN, Recurrent Neural Networks)介紹
四、循環(huán)神經(jīng)網(wǎng)絡(luò)模型,seq2seq模型理解
循環(huán)神經(jīng)網(wǎng)絡(luò)與一般神經(jīng)網(wǎng)絡(luò)的區(qū)別:
1、樣本數(shù)據(jù)區(qū)別
循環(huán)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù)的基本單位是num_steps,num_steps個樣本作為一組,num_steps個樣本有先后順序。
數(shù)據(jù)的shape: batch_size,num_step,num_features
訓(xùn)練數(shù)據(jù)的生成方式有:隨機采樣和相鄰采樣
2、網(wǎng)絡(luò)結(jié)構(gòu)的區(qū)別
在一個num_steps為一組的數(shù)據(jù)中,上一個樣本的輸出(歷史信息),作為下一輸入的一部分。
第一個的輸入是歷史信息是state,人工初始化
RNN與LSTM的區(qū)別 :
RNN之將上一個輸出(H)作為下一個樣本的輸入信息,一個訓(xùn)練單元有兩個輸入Xt和Ht-1
LSTM在RNN的基礎(chǔ)上增加了state變量(C),一個訓(xùn)練單元有三個輸入Xt,Ct-1,Ht-1
RNN圖示:
LSTM圖示:
seq2seq模型理解:
seq2seq是encoder-decoder結(jié)構(gòu)的實例
encoder的作用是從輸入序列提取出context信息,也就是lstm網(wǎng)絡(luò)的最后一個state(h,c)
decoder的作用是以encoder得到的context信息作為initial-state,以<start>作為X1,預(yù)測序列,直到輸出<end>
以上就是關(guān)于循環(huán)神經(jīng)網(wǎng)絡(luò)應(yīng)用舉例相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
周圍循環(huán)是指什么(周圍循環(huán)是指什么循環(huán))
杭州補貼等待兌付什么意思(杭州補貼一直在等待兌付和兌付循環(huán))
水循環(huán)景觀設(shè)計策略有哪些(水循環(huán)景觀設(shè)計策略有哪些方面)