導航:首頁 > 網路問題 > 循環神經網路應用在哪些方面

循環神經網路應用在哪些方面

發布時間:2022-09-23 11:32:10

A. 入門 | 一文簡述循環神經網路

入門 | 一文簡述循環神經網路

本文簡要介紹了什麼是循環神經網路及其運行原理,並給出了一個 RNN 實現示例。

什麼是循環神經網路(RNN)?它們如何運行?可以用在哪裡呢?本文試圖回答上述這些問題,還展示了一個 RNN 實現 demo,你可以根據自己的需要進行擴展。

循環神經網路架構

基礎知識。Python、CNN 知識是必備的。了解 CNN 的相關知識,是為了與 RNN 進行對比:RNN 為什麼以及在哪些地方比 CNN 更好。

我們首先從「循環」(Recurrent)這個詞說起。為什麼將其稱為循環?循環的意思是:

經常或重復出現

將這類神經網路稱為循環神經網路是因為它對一組序列輸入重復進行同樣的操作。本文後續部分將討論這種操作的意義。

我們為什麼需要 RNN?

也許你現在想的是,已經有像卷積網路這樣表現非常出色的網路了,為什麼還需要其他類型的網路呢?有一個需要用到 RNN 的特殊例子。為了解釋 RNN,你首先需要了解序列的相關知識,我們先來講一下序列。

序列是相互依賴的(有限或無限)數據流,比如時間序列數據、信息性的字元串、對話等。在對話中,一個句子可能有一個意思,但是整體的對話可能又是完全不同的意思。股市數據這樣的時間序列數據也是,單個數據表示當前價格,但是全天的數據會有不一樣的變化,促使我們作出買進或賣出的決定。

當輸入數據具有依賴性且是序列模式時,CNN 的結果一般都不太好。CNN 的前一個輸入和下一個輸入之間沒有任何關聯。所以所有的輸出都是獨立的。CNN 接受輸入,然後基於訓練好的模型輸出。如果你運行了 100 個不同的輸入,它們中的任何一個輸出都不會受之前輸出的影響。但想一下如果是文本生成或文本翻譯呢?所有生成的單詞與之前生成的單詞都是獨立的(有些情況下與之後的單詞也是獨立的,這里暫不討論)。所以你需要有一些基於之前輸出的偏向。這就是需要 RNN 的地方。RNN 對之前發生在數據序列中的事是有一定記憶的。這有助於系統獲取上下文。理論上講,RNN 有無限的記憶,這意味著它們有無限回顧的能力。通過回顧可以了解所有之前的輸入。但從實際操作中看,它只能回顧最後幾步。

本文僅為了與人類大體相關聯,而不會做任何決定。本文只是基於之前關於該項目的知識做出了自己的判斷(我甚至尚未理解人類大腦的 0.1%)。

何時使用 RNN?

RNN 可用於許多不同的地方。下面是 RNN 應用最多的領域。

1. 語言建模和文本生成

給出一個詞語序列,試著預測下一個詞語的可能性。這在翻譯任務中是很有用的,因為最有可能的句子將是可能性最高的單片語成的句子。

2. 機器翻譯

將文本內容從一種語言翻譯成其他語言使用了一種或幾種形式的 RNN。所有日常使用的實用系統都用了某種高級版本的 RNN。

3. 語音識別

基於輸入的聲波預測語音片段,從而確定詞語。

4. 生成圖像描述

RNN 一個非常廣泛的應用是理解圖像中發生了什麼,從而做出合理的描述。這是 CNN 和 RNN 相結合的作用。CNN 做圖像分割,RNN 用分割後的數據重建描述。這種應用雖然基本,但可能性是無窮的。

5. 視頻標記

可以通過一幀一幀地標記視頻進行視頻搜索。

深入挖掘

本文按照以下主題進行。每一部分都是基於之前的部分進行的,所以不要跳著讀。

前饋網路循環網路循環神經元基於時間的反向傳播(BPTT)RNN 實現

前饋網路入門

前饋網路通過在網路的每個節點上做出的一系列操作傳遞信息。前饋網路每次通過每個層直接向後傳遞信息。這與其他循環神經網路不同。一般而言,前饋網路接受一個輸入並據此產生輸出,這也是大多數監督學習的步驟,輸出結果可能是一個分類結果。它的行為與 CNN 類似。輸出可以是以貓狗等作為標簽的類別。

前饋網路是基於一系列預先標注過的數據訓練的。訓練階段的目的是減少前饋網路猜類別時的誤差。一旦訓練完成,我們就可以用訓練後的權重對新批次的數據進行分類。

一個典型的前饋網路架構

還有一件事要注意。在前饋網路中,無論在測試階段展示給分類器的圖像是什麼,都不會改變權重,所以也不會影響第二個決策。這是前饋網路和循環網路之間一個非常大的不同。

與循環網路不同,前饋網路在測試時不會記得之前的輸入數據。它們始終是取決於時間點的。它們只會在訓練階段記得歷史輸入數據。

循環網路

也就是說,循環網路不僅將當前的輸入樣例作為網路輸入,還將它們之前感知到的一並作為輸入。

我們試著建立了一個多層感知器。從簡單的角度講,它有一個輸入層、一個具備特定激活函數的隱藏層,最終可以得到輸出。

多層感知器架構示例

如果在上述示例中的層數增加了,輸入層也接收輸入。那麼第一個隱藏層將激活傳遞到下一個隱藏層上,依此類推。最後到達輸出層。每一個隱藏層都有自己的權重和偏置項。現在問題變成了我們可以輸入到隱藏層嗎?

每一層都有自己的權重(W)、偏置項(B)和激活函數(F)。這些層的行為不同,合並它們從技術層面上講也極具挑戰性。為了合並它們,我們將所有層的權重和偏置項替換成相同的值。如下圖所示:

現在我們就可以將所有層合並在一起了。所有的隱藏層都可以結合在一個循環層中。所以看起來就像下圖:

我們在每一步都會向隱藏層提供輸入。現在一個循環神經元存儲了所有之前步的輸入,並將這些信息和當前步的輸入合並。因此,它還捕獲到一些當前數據步和之前步的相關性信息。t-1 步的決策影響到第 t 步做的決策。這很像人類在生活中做決策的方式。我們將當前數據和近期數據結合起來,幫助解決手頭的特定問題。這個例子很簡單,但從原則上講這與人類的決策能力是一致的。這讓我非常想知道我們作為人類是否真的很智能,或者說我們是否有非常高級的神經網路模型。我們做出的決策只是對生活中收集到的數據進行訓練。那麼一旦有了能夠在合理時間段內存儲和計算數據的先進模型和系統時,是否可以數字化大腦呢?所以當我們有了比大腦更好更快的模型(基於數百萬人的數據訓練出的)時,會發生什麼?

另一篇文章(https://deeplearning4j.org/lstm.html)的有趣觀點:人總是被自己的行為所困擾。

我們用一個例子來闡述上面的解釋,這個例子是預測一系列字母後的下一個字母。想像一個有 8 個字母的單詞 namaskar。

namaskar(合十禮):印度表示尊重的傳統問候或姿勢,將手掌合起置於面前或胸前鞠躬。

如果我們在向網路輸入 7 個字母後試著找出第 8 個字母,會發生什麼呢?隱藏層會經歷 8 次迭代。如果展開網路的話就是一個 8 層的網路,每一層對應一個字母。所以你可以想像一個普通的神經網路被重復了多次。展開的次數與它記得多久之前的數據是直接相關的。

循環神經網路的運作原理

循環神經元

這里我們將更深入地了解負責決策的實際神經元。以之前提到的 namaskar 為例,在給出前 7 個字母後,試著找出第 8 個字母。輸入數據的完整詞彙表是 {n,a,m,s,k,r}。在真實世界中單詞或句子都會更復雜。為了簡化問題,我們用的是下面這個簡單的詞彙表。

在上圖中,隱藏層或 RNN 塊在當前輸入和之前的狀態中應用了公式。在本例中,namaste 的字母 n 前面什麼都沒有。所以我們直接使用當前信息推斷,並移動到下一個字母 a。在推斷字母 a 的過程中,隱藏層應用了上述公式結合當前推斷 a 的信息與前面推斷 n 的信息。輸入在網路中傳遞的每一個狀態都是一個時間步或一步,所以時間步 t 的輸入是 a,時間步 t-1 的輸入就是 n。將公式同時應用於 n 和 a 後,就得到了一個新狀態。

用於當前狀態的公式如下所示:

h_t 是新狀態,h_t-1 是前一個狀態。x_t 是時間 t 時的輸入。在對之前的時間步應用了相同的公式後,我們已經能感知到之前的輸入了。我們將檢查 7 個這樣的輸入,它們在每一步的權重和函數都是相同的。

現在試著以簡單的方式定義 f()。我們使用 tanh 激活函數。通過矩陣 W_hh 定義權重,通過矩陣 W_xh 定義輸入。公式如下所示:

上例只將最後一步作為記憶,因此只與最後一步的數據合並。為了提升網路的記憶能力,並在記憶中保留較長的序列,我們必須在方程中添加更多的狀態,如 h_t-2、h_t-3 等。最後輸出可以按測試階段的計算方式進行計算:

其中,y_t 是輸出。對輸出與實際輸出進行對比,然後計算出誤差值。網路通過反向傳播誤差來更新權重,進行學習。本文後續部分會對反向傳播進行討論。

基於時間的反向傳播演算法(BPTT)

本節默認你已經了解了反向傳播概念。如果需要對反向傳播進行深入了解,請參閱鏈接:?http://cs231n.github.io/optimization-2/?。

現在我們了解了 RNN 是如何實際運作的,但是在實際工作中如何訓練 RNN 呢?該如何決定每個連接的權重呢?如何初始化這些隱藏單元的權重呢?循環網路的目的是要准確地對序列輸入進行分類。這要靠誤差值的反向傳播和梯度下降來實現。但是前饋網路中使用的標准反向傳播無法在此應用。

與有向無環的前饋網路不同,RNN 是循環圖,這也是問題所在。在前饋網路中可以計算出之前層的誤差導數。但 RNN 的層級排列與前饋網路並不相同。

答案就在之前討論過的內容中。我們需要展開網路。展開網路使其看起來像前饋網路就可以了。

展開 RNN

在每個時間步取出 RNN 的隱藏單元並復制。時間步中的每一次復制就像前饋網路中的一層。在時間步 t+1 中每個時間步 t 層與所有可能的層連接。因此我們對權重進行隨機初始化,展開網路,然後在隱藏層中通過反向傳播優化權重。通過向最低層傳遞參數完成初始化。這些參數作為反向傳播的一部分也得到了優化。

展開網路的結果是,現在每一層的權重都不同,因此最終會得到不同程度的優化。無法保證基於權重計算出的誤差是相等的。所以每一次運行結束時每一層的權重都不同。這是我們絕對不希望看到的。最簡單的解決辦法是以某種方式將所有層的誤差合並到一起。可以對誤差值取平均或者求和。通過這種方式,我們可以在所有時間步中使用一層來保持相同的權重。

RNN 實現

本文試著用 Keras 模型實現 RNN。我們試著根據給定的文本預測下一個序列。

代碼地址:?https://gist.github.com/.git?

該模型是 Yash Katariya 建的。我對該模型做了一些細微的改動以適合本文的要求。

B. 是一種處理時序數據的神經網路,常用於語音識別,機器翻譯等領域

LSTM(Long Short-Term Memory)是長短期記憶網路,是一種時間循環神經網路,適合於處理和預測時間序列中間隔和延遲相對較長的重要事件。長短期記憶(Long short-term memory, LSTM)是一種特殊的RNN,主要是為了解決長序列訓練過程中的梯度消失和梯度爆炸問題。簡單來說,就是相比普通的RNN,LSTM能夠在更長的序列中有更好的表現。
LSTM 已經在科技領域有了多種應用。基於 LSTM 的系統可以學習翻譯語言、控制機器人、圖像分析、文檔摘要、語音識別圖像識別、手寫識別、控制聊天機器人、預測疾病、點擊率和股票、合成音樂等等任務。

C. DNN、RNN、CNN分別是什麼意思

DNN(深度神經網路),是深度學習的基礎。

DNN可以理解為有很多隱藏層的神經網路。這個很多其實也沒有什麼度量標准, 多層神經網路和深度神經網路DNN其實也是指的一個東西,當然,DNN有時也叫做多層感知機(Multi-Layer perceptron,MLP)。

從DNN按不同層的位置劃分,DNN內部的神經網路層可以分為三類,輸入層,隱藏層和輸出層,如下圖示例,一般來說第一層是輸出層,最後一層是輸出層,而中間的層數都是隱藏層。

CNN(卷積神經網路),是一種前饋型的神經網路,目前深度學習技術領域中非常具有代表性的神經網路之一。

CNN在大型圖像處理方面有出色的表現,目前已經被大范圍使用到圖像分類、定位等領域中。相比於其他神經網路結構,卷積神經網路需要的參數相對較少,使的其能夠廣泛應用。

RNN(循環神經網路),一類用於處理序列數據的神經網路,RNN最大的不同之處就是在層之間的神經元之間也建立的權連接。

從廣義上來說,DNN被認為包含了CNN、RNN這些具體的變種形式。在實際應用中,深度神經網路DNN融合了多種已知的結構,包含卷積層或LSTM單元,特指全連接的神經元結構,並不包含卷積單元或時間上的關聯。

D. 深度學習的職業發展方向有哪些

當前,人工智慧發展藉助深度學習技術突破得到了全面關注和助力推動,各國政府高度重視、資本熱潮仍在加碼,各界對其成為發展熱點也達成了共識。本文旨在分析深度學習技術現狀,研判深度學習發展趨勢,並針對我國的技術水平提出發展建議。
一、深度學習技術現狀
深度學習是本輪人工智慧爆發的關鍵技術。人工智慧技術在計算機視覺和自然語言處理等領域取得的突破性進展,使得人工智慧迎來新一輪爆發式發展。而深度學習是實現這些突破性進展的關鍵技術。其中,基於深度卷積網路的圖像分類技術已超過人眼的准確率,基於深度神經網路的語音識別技術已達到95%的准確率,基於深度神經網路的機器翻譯技術已接近人類的平均翻譯水平。准確率的大幅提升使得計算機視覺和自然語言處理進入產業化階段,帶來新產業的興起。
深度學習是大數據時代的演算法利器,成為近幾年的研究熱點。和傳統的機器學習演算法相比,深度學習技術有著兩方面的優勢。一是深度學習技術可隨著數據規模的增加不斷提升其性能,而傳統機器學習演算法難以利用海量數據持續提升其性能。二是深度學習技術可以從數據中直接提取特徵,削減了對每一個問題設計特徵提取器的工作,而傳統機器學習演算法需要人工提取特徵。因此,深度學習成為大數據時代的熱點技術,學術界和產業界都對深度學習展開了大量的研究和實踐工作。
深度學習各類模型全面賦能基礎應用。卷積神經網路和循環神經網路是兩類獲得廣泛應用的深度神經網路模型。計算機視覺和自然語言處理是人工智慧兩大基礎應用。卷積神經網路廣泛應用於計算機視覺領域,在圖像分類、目標檢測、語義分割等任務上的表現大大超越傳統方法。循環神經網路適合解決序列信息相關問題,已廣泛應用於自然語言處理領域,如語音識別、機器翻譯、對話系統等。
深度學習技術仍不完美,有待於進一步提升。一是深度神經網路的模型復雜度高,巨量的參數導致模型尺寸大,難以部署到移動終端設備。二是模型訓練所需的數據量大,而訓練數據樣本獲取、標注成本高,有些場景樣本難以獲取。三是應用門檻高,演算法建模及調參過程復雜繁瑣、演算法設計周期長、系統實施維護困難。四是缺乏因果推理能力,圖靈獎得主、貝葉斯網路之父Judea Pearl指出當前的深度學習不過只是「曲線擬合」。五是存在可解釋性問題,由於內部的參數共享和復雜的特徵抽取與組合,很難解釋模型到底學習到了什麼,但出於安全性考慮以及倫理和法律的需要,演算法的可解釋性又是十分必要的。因此,深度學習仍需解決以上問題。
二、深度學習發展趨勢
深度神經網路呈現層數越來越深,結構越來越復雜的發展趨勢。為了不斷提升深度神經網路的性能,業界從網路深度和網路結構兩方面持續進行探索。神經網路的層數已擴展到上百層甚至上千層,隨著網路層數的不斷加深,其學習效果也越來越好,2015年微軟提出的ResNet以152層的網路深度在圖像分類任務上准確率首次超過人眼。新的網路設計結構不斷被提出,使得神經網路的結構越來越復雜。如:2014年穀歌提出了Inception網路結構、2015年微軟提出了殘差網路結構、2016年黃高等人提出了密集連接網路結構,這些網路結構設計不斷提升了深度神經網路的性能。
深度神經網路節點功能不斷豐富。為了克服目前神經網路存在的局限性,業界探索並提出了新型神經網路節點,使得神經網路的功能越來越豐富。2017年,傑弗里辛頓提出了膠囊網路的概念,採用膠囊作為網路節點,理論上更接近人腦的行為,旨在克服卷積神經網路沒有空間分層和推理能力等局限性。2018年,DeepMind、谷歌大腦、MIT的學者聯合提出了圖網路的概念,定義了一類新的模塊,具有關系歸納偏置功能,旨在賦予深度學習因果推理的能力。
深度神經網路工程化應用技術不斷深化。深度神經網路模型大都具有上億的參數量和數百兆的佔用空間,運算量大,難以部署到智能手機、攝像頭和可穿戴設備等性能和資源受限的終端類設備。為了解決這個問題,業界採用模型壓縮技術降低模型參數量和尺寸,減少運算量。目前採用的模型壓縮方法包括對已訓練好的模型做修剪(如剪枝、權值共享和量化等)和設計更精細的模型(如MobileNet等)兩類。深度學習演算法建模及調參過程繁瑣,應用門檻高。為了降低深度學習的應用門檻,業界提出了自動化機器學習(AutoML)技術,可實現深度神經網路的自動化設計,簡化使用流程。
深度學習與多種機器學習技術不斷融合發展。深度學習與強化學習融合發展誕生的深度強化學習技術,結合了深度學習的感知能力和強化學習的決策能力,克服了強化學習只適用於狀態為離散且低維的缺陷,可直接從高維原始數據學習控制策略。為了降低深度神經網路模型訓練所需的數據量,業界引入了遷移學習的思想,從而誕生了深度遷移學習技術。遷移學習是指利用數據、任務或模型之間的相似性,將在舊領域學習過的模型,應用於新領域的一種學習過程。通過將訓練好的模型遷移到類似場景,實現只需少量的訓練數據就可以達到較好的效果。
三、未來發展建議
加強圖網路、深度強化學習以及生成式對抗網路等前沿技術研究。由於我國在深度學習領域缺乏重大原創性研究成果,基礎理論研究貢獻不足,如膠囊網路、圖網路等創新性、原創性概念是由美國專家提出,我國研究貢獻不足。在深度強化學習方面,目前最新的研究成果大都是由DeepMind和OpenAI等國外公司的研究人員提出,我國尚沒有突破性研究成果。近幾年的研究熱點生成式對抗網路(GAN)是由美國的研究人員Goodfellow提出,並且谷歌、facebook、twitter和蘋果等公司紛紛提出了各種改進和應用模型,有力推動了GAN技術的發展,而我國在這方面取得的研究成果較少。因此,應鼓勵科研院所及企業加強深度神經網路與因果推理模型結合、生成式對抗網路以及深度強化學習等前沿技術的研究,提出更多原創性研究成果,增強全球學術研究影響力。
加快自動化機器學習、模型壓縮等深度學習應用技術研究。依託國內的市場優勢和企業的成長優勢,針對具有我國特色的個性化應用需求,加快對深度學習應用技術的研究。加強對自動化機器學習、模型壓縮等技術的研究,加快深度學習的工程化落地應用。加強深度學習在計算機視覺領域應用研究,進一步提升目標識別等視覺任務的准確率,以及在實際應用場景中的性能。加強深度學習在自然語言處理領域的應用研究,提出性能更優的演算法模型,提升機器翻譯、對話系統等應用的性能。
來源:產業智能官
END
更多精彩內容請登錄http://www.innov100.com官方網站
往期精選▼
1. 飲鹿網2018-2019年中國人工智慧產業創新百強榜單發布!
2. 飲鹿網2018-2019年中國人工智慧產業Top20投資機構榜單發布!
3. 飲鹿網2018-2019年中國大數據產業創新百強榜單發布!
4. 飲鹿網2018-2019年中國大數據產業Top20投資機構榜單發布!
5. 飲鹿網2018-2019年中國物聯網產業創新百強榜單發布!
6. 飲鹿網2018-2019年中國5G與物聯網產業TOP20投資機構榜單發布!
7. 飲鹿網2018-2019年中國集成電路產業創新百強榜單發布!
8. 飲鹿網2018-2019年中國集成電路產業Top20投資機構榜單發布!
9. 飲鹿網2018-2019年中國企業服務產業創新百強榜單發布!
10. 飲鹿網2018-2019年中國企業服務產業TOP20投資機構榜單發布!

E. 循環神經網路(RNN)淺析

RNN是兩種神經網路模型的縮寫,一種是遞歸神經網路(Recursive Neural Network),一種是循環神經網路(Recurrent Neural Network)。雖然這兩種神經網路有著千絲萬縷的聯系,但是本文主要討論的是第二種神經網路模型——循環神經網路(Recurrent Neural Network)。

循環神經網路是指一個隨著時間的推移,重復發生的結構。在自然語言處理(NLP),語音圖像等多個領域均有非常廣泛的應用。RNN網路和其他網路最大的不同就在於RNN能夠實現某種「記憶功能」,是進行時間序列分析時最好的選擇。如同人類能夠憑借自己過往的記憶更好地認識這個世界一樣。RNN也實現了類似於人腦的這一機制,對所處理過的信息留存有一定的記憶,而不像其他類型的神經網路並不能對處理過的信息留存記憶。

循環神經網路的原理並不十分復雜,本節主要從原理上分析RNN的結構和功能,不涉及RNN的數學推導和證明,整個網路只有簡單的輸入輸出和網路狀態參數。一個典型的RNN神經網路如圖所示:

由上圖可以看出:一個典型的RNN網路包含一個輸入x,一個輸出h和一個神經網路單元A。和普通的神經網路不同的是,RNN網路的神經網路單元A不僅僅與輸入和輸出存在聯系,其與自身也存在一個迴路。這種網路結構就揭示了RNN的實質:上一個時刻的網路狀態信息將會作用於下一個時刻的網路狀態。如果上圖的網路結構仍不夠清晰,RNN網路還能夠以時間序列展開成如下形式:

等號右邊是RNN的展開形式。由於RNN一般用來處理序列信息,因此下文說明時都以時間序列來舉例,解釋。等號右邊的等價RNN網路中最初始的輸入是x0,輸出是h0,這代表著0時刻RNN網路的輸入為x0,輸出為h0,網路神經元在0時刻的狀態保存在A中。當下一個時刻1到來時,此時網路神經元的狀態不僅僅由1時刻的輸入x1決定,也由0時刻的神經元狀態決定。以後的情況都以此類推,直到時間序列的末尾t時刻。

上面的過程可以用一個簡單的例子來論證:假設現在有一句話「I want to play basketball」,由於自然語言本身就是一個時間序列,較早的語言會與較後的語言存在某種聯系,例如剛才的句子中「play」這個動詞意味著後面一定會有一個名詞,而這個名詞具體是什麼可能需要更遙遠的語境來決定,因此一句話也可以作為RNN的輸入。回到剛才的那句話,這句話中的5個單詞是以時序出現的,我們現在將這五個單詞編碼後依次輸入到RNN中。首先是單詞「I」,它作為時序上第一個出現的單詞被用作x0輸入,擁有一個h0輸出,並且改變了初始神經元A的狀態。單詞「want」作為時序上第二個出現的單詞作為x1輸入,這時RNN的輸出和神經元狀態將不僅僅由x1決定,也將由上一時刻的神經元狀態或者說上一時刻的輸入x0決定。之後的情況以此類推,直到上述句子輸入到最後一個單詞「basketball」。

接下來我們需要關注RNN的神經元結構:

上圖依然是一個RNN神經網路的時序展開模型,中間t時刻的網路模型揭示了RNN的結構。可以看到,原始的RNN網路的內部結構非常簡單。神經元A在t時刻的狀態僅僅是t-1時刻神經元狀態與t時刻網路輸入的雙曲正切函數的值,這個值不僅僅作為該時刻網路的輸出,也作為該時刻網路的狀態被傳入到下一個時刻的網路狀態中,這個過程叫做RNN的正向傳播(forward propagation)。註:雙曲正切函數的解析式如下:

雙曲正切函數的求導如下:

雙曲正切函數的圖像如下所示:

這里就帶來一個問題:為什麼RNN網路的激活函數要選用雙曲正切而不是sigmod呢?(RNN的激活函數除了雙曲正切,RELU函數也用的非常多)原因在於RNN網路在求解時涉及時間序列上的大量求導運算,使用sigmod函數容易出現梯度消失,且sigmod的導數形式較為復雜。事實上,即使使用雙曲正切函數,傳統的RNN網路依然存在梯度消失問題,無法「記憶」長時間序列上的信息,這個bug直到LSTM上引入了單元狀態後才算較好地解決。

這一節主要介紹與RNN相關的數學推導,由於RNN是一個時序模型,因此其求解過程可能和一般的神經網路不太相同。首先需要介紹一下RNN完整的結構圖,上一節給出的RNN結構圖省去了很多內部參數,僅僅作為一個概念模型給出。

上圖表明了RNN網路的完整拓撲結構,從圖中我們可以看到RNN網路中的參數情況。在這里我們只分析t時刻網路的行為與數學推導。t時刻網路迎來一個輸入xt,網路此時刻的神經元狀態st用如下式子表達:

t時刻的網路狀態st不僅僅要輸入到下一個時刻t+1的網路狀態中去,還要作為該時刻的網路輸出。當然,st不能直接輸出,在輸出之前還要再乘上一個系數V,而且為了誤差逆傳播時的方便通常還要對輸出進行歸一化處理,也就是對輸出進行softmax化。因此,t時刻網路的輸出ot表達為如下形式:

為了表達方便,筆者將上述兩個公式做如下變換:

以上,就是RNN網路的數學表達了,接下來我們需要求解這個模型。在論述具體解法之前首先需要明確兩個問題:優化目標函數是什麼?待優化的量是什麼?

只有在明確了這兩個問題之後才能對模型進行具體的推導和求解。關於第一個問題,筆者選取模型的損失函數作為優化目標;關於第二個問題,我們從RNN的結構圖中不難發現:只要我們得到了模型的U,V,W這三個參數就能完全確定模型的狀態。因此該優化問題的優化變數就是RNN的這三個參數。順便說一句,RNN模型的U,V,W三個參數是全局共享的,也就是說不同時刻的模型參數是完全一致的,這個特性使RNN得參數變得稍微少了一些。

不做過多的討論,RNN的損失函數選用交叉熵(Cross Entropy),這是機器學習中使用最廣泛的損失函數之一了,其通常的表達式如下所示:

上面式子是交叉熵的標量形式,y_i是真實的標簽值,y_i*是模型給出的預測值,最外面之所以有一個累加符號是因為模型輸出的一般都是一個多維的向量,只有把n維損失都加和才能得到真實的損失值。交叉熵在應用於RNN時需要做一些改變:首先,RNN的輸出是向量形式,沒有必要將所有維度都加在一起,直接把損失值用向量表達就可以了;其次,由於RNN模型處理的是序列問題,因此其模型損失不能只是一個時刻的損失,應該包含全部N個時刻的損失。

故RNN模型在t時刻的損失函數寫成如下形式:

全部N個時刻的損失函數(全局損失)表達為如下形式:

需要說明的是:yt是t時刻輸入的真實標簽值,ot為模型的預測值,N代表全部N個時刻。下文中為了書寫方便,將Loss簡記為L。在結束本小節之前,最後補充一個softmax函數的求導公式:

由於RNN模型與時間序列有關,因此不能直接使用BP(back propagation)演算法。針對RNN問題的特殊情況,提出了BPTT演算法。BPTT的全稱是「隨時間變化的反向傳播演算法」(back propagation through time)。這個方法的基礎仍然是常規的鏈式求導法則,接下來開始具體推導。雖然RNN的全局損失是與全部N個時刻有關的,但為了簡單筆者在推導時只關注t時刻的損失函數。

首先求出t時刻下損失函數關於o_t*的微分:

求出損失函數關於參數V的微分:

因此,全局損失關於參數V的微分為:

求出t時刻的損失函數關於關於st*的微分:

求出t時刻的損失函數關於s_t-1*的微分:

求出t時刻損失函數關於參數U的偏微分。注意:由於是時間序列模型,因此t時刻關於U的微分與前t-1個時刻都有關,在具體計算時可以限定最遠回溯到前n個時刻,但在推導時需要將前t-1個時刻全部帶入:

因此,全局損失關於U的偏微分為:

求t時刻損失函數關於參數W的偏微分,和上面相同的道理,在這里仍然要計算全部前t-1時刻的情況:

因此,全局損失關於參數W的微分結果為:

至此,全局損失函數關於三個主要參數的微分都已經得到了。整理如下:

接下來進一步化簡上述微分表達式,化簡的主要方向為t時刻的損失函數關於ot的微分以及關於st*的微分。已知t時刻損失函數的表達式,求關於ot的微分:

softmax函數求導:

因此:

又因為:

且:

有了上面的數學推導,我們可以得到全局損失關於U,V,W三個參數的梯度公式:

由於參數U和W的微分公式不僅僅與t時刻有關,還與前面的t-1個時刻都有關,因此無法寫出直接的計算公式。不過上面已經給出了t時刻的損失函數關於s_t-1的微分遞推公式,想來求解這個式子也是十分簡單的,在這里就不贅述了。

以上就是關於BPTT演算法的全部數學推導。從最終結果可以看出三個公式的偏微分結果非常簡單,在具體的優化過程中可以直接帶入進行計算。對於這種優化問題來說,最常用的方法就是梯度下降法。針對本文涉及的RNN問題,可以構造出三個參數的梯度更新公式:

依靠上述梯度更新公式就能夠迭代求解三個參數,直到三個參數的值發生收斂。

這是筆者第一次嘗試推導RNN的數學模型,在推導過程中遇到了非常多的bug。非常感謝互聯網上的一些公開資料和博客,給了我非常大的幫助和指引。接下來筆者將嘗試實現一個單隱層的RNN模型用於實現一個語義預測模型。

F. 循環神經網路(RNN)簡介

循環神經網路英文名稱為 ( Recurrent Neural Network, RNN ),其通過使用帶自反饋的神經元,能夠處理任意長度的 時序 數據。

給定輸入時序序列

式中, 表示一段時序數據, 為時間長度

以一段英文段落為例,其時序數據可以表示為:

若是一段視頻,將其每一幀通過CNN網路處理得到相應的編碼向量

循環神經網路通過以下公式更新隱藏層的活性值

循環神經網路圖示

RNN的基本模型如下圖所示,為便於理解,圖中將RNN的模型展開,按照時序方向對其前向傳播流程進行介紹

RNN的基本模型

利用數學表達式整個過程可以變得更加清晰,RNN的前向傳播公式如下:

將上述過程整合到一個RNN cell中,可以表示為如下圖所示的過程:

RNN的前向傳播示意圖

缺陷:

沒有利用到模型後續的信息,可以通過雙向RNN網路進行優化

RNN主要有兩種計算梯度的方式:隨時間反向傳播(BPTT)和實時循環學習法(RTRL)演算法

本文中主要介紹隨時間反向傳播的方法 ( BackPropagation Through Time

RNN的損失函數與任務有關,對於同步的序列對序列任務,其loss可以用交叉熵公式表示

然後通過BPTT演算法便可以進行梯度的反向傳播計算

梯度爆炸的解決方法:梯度修剪

梯度消失的解決方法:增加長程依賴 LSTM,GRU

GRU的基本思路:增加相關門(Relate Gate)和更新門(Update Gate),進而使得RNN單元具有記憶能力

首先從數學角度對GRU的前向傳播過程進行介紹,具體公式如下:

公式中各變數的含義:

將上述數學公式轉化為圖像,可得

GRU Cell的前向傳播流程

LSTM意為長短時記憶網路 (Long Short-Term Memory Network,LSTM) ,可以有效地解決簡單神經網路的梯度消失和爆炸問題

在LSTM中,與GRU主要有兩點不同

同樣,先從數學公式入手,對LSTM的前向傳播過程進行了解

基於數學公式的過程,可將LSTM CELL的前向傳播過程總結為(圖片借用於nndl):

LSTM Cell的前向傳播示意圖

從上圖中可以看出,LSTM在前向傳播的過程中傳輸了兩個狀態:內部狀態 以及外部狀態 ,在整個傳播過程中 外部狀態(隱狀態) 每個時刻都會被重寫,因此可以看作一種 短時記憶 ,而 內部狀態 可以在某個時刻捕捉一些關鍵信息,並將此信息保存一段時間間隔,可以看作一種 長時記憶 (長的短時記憶)

此外,在LSTM網路初始化訓練的時候,需要手動將遺忘門的數值設置的大一些,否則在參數初始化的時候,遺忘門的數據會被初始化為一個很小的值,前一時刻的內部狀態 大部分都會丟失,這樣網路很難獲取到長距離的依賴信息,並且相鄰時間間隔的梯度會非常小,導致 梯度彌散 問題,因此遺忘門的 偏置變數 的初始值 一般很大,取 1或2

將 設置為1即可,但是長度非常的大的時候會造成記憶單元的飽和,降低性能

三個門不僅依賴於 和 ,也依賴於

將兩者合並為一個門,即:

首先,我們要理解什麼是深層的RNN,對於單個的RNN cell,若將其在時間維度上展開,其深度與時間維度的長度成正比,但若將一個RNN cell看作為單個從 的映射函數,則單個cell實際上是很淺顯的一層,因此深層循環神經網路要做的就是把多個RNN cell組合起來,換句話說,就是增加從輸入 到輸出 的路徑,使得網路的深度更深。

如何增加從輸入 到輸出 的路徑呢?兩種途徑:

堆疊循環神經網路示意圖

將網路帶入到實際應用場景中:假如我們要翻譯一段句子

在這里,is和are實際上是由後面的Lucy和they所決定的,而這種單向的按照時序進行傳播的方式沒有利用到後面的信息。因此誕生了雙向循環網路

雙向循環神經網路示意圖

雙向循環神經網路實際上就是簡單的雙層循環神經網路,只不過第二層網路的傳播方式為按時序的逆向傳播,其傳播公式為:

G. 循環神經網路 擅長解決什麼樣的問題

RNN建立在與FNN相同的計算單元上,兩者之間區別在於:組成這些神經元相互關聯的架構有所不同。FNN是建立在層面之上,其中信息從輸入單元向輸出單元單向流動,在這些連通模式中並不存在不定向的循環。盡管大腦的神經元確實在層面之間的連接上包含有不定向循環,我們還是加入了這些限制條件,以犧牲計算的功能性為代價來簡化這一訓練過程。因此,為了創建更為強大的計算系統,我們允許RNN打破這些人為設定強加性質的規定:RNN無需在層面之間構建,同時定向循環也會出現。事實上,神經元在實際中是允許彼此相連的。

H. 深度學習的現狀和趨勢

論壇

活動

招聘

專題

打開CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved

搜索博文/帖子/用戶
登錄

喜歡打醬油的老鳥
關注
深度學習技術發展趨勢淺析 轉載
2019-04-09 08:37:11
1點贊

喜歡打醬油的老鳥

碼齡2年

關注
https://mp.weixin.qq.com/s/FtIhKiENv483iHE053RPkg

當前,人工智慧發展藉助深度學習技術突破得到了全面關注和助力推動,各國政府高度重視、資本熱潮仍在加碼,各界對其成為發展熱點也達成了共識。本文旨在分析深度學習技術現狀,研判深度學習發展趨勢,並針對我國的技術水平提出發展建議。

一、深度學習技術現狀

深度學習是本輪人工智慧爆發的關鍵技術。人工智慧技術在計算機視覺和自然語言處理等領域取得的突破性進展,使得人工智慧迎來新一輪爆發式發展。而深度學習是實現這些突破性進展的關鍵技術。其中,基於深度卷積網路的圖像分類技術已超過人眼的准確率,基於深度神經網路的語音識別技術已達到95%的准確率,基於深度神經網路的機器翻譯技術已接近人類的平均翻譯水平。准確率的大幅提升使得計算機視覺和自然語言處理進入產業化階段,帶來新產業的興起。

深度學習是大數據時代的演算法利器,成為近幾年的研究熱點。和傳統的機器學習演算法相比,深度學習技術有著兩方面的優勢。一是深度學習技術可隨著數據規模的增加不斷提升其性能,而傳統機器學習演算法難以利用海量數據持續提升其性能。二是深度學習技術可以從數據中直接提取特徵,削減了對每一個問題設計特徵提取器的工作,而傳統機器學習演算法需要人工提取特徵。因此,深度學習成為大數據時代的熱點技術,學術界和產業界都對深度學習展開了大量的研究和實踐工作。

深度學習各類模型全面賦能基礎應用。卷積神經網路和循環神經網路是兩類獲得廣泛應用的深度神經網路模型。計算機視覺和自然語言處理是人工智慧兩大基礎應用。卷積神經網路廣泛應用於計算機視覺領域,在圖像分類、目標檢測、語義分割等任務上的表現大大超越傳統方法。循環神經網路適合解決序列信息相關問題,已廣泛應用於自然語言處理領域,如語音識別、機器翻譯、對話系統等。

二、深度學習發展趨勢

深度神經網路呈現層數越來越深,結構越來越復雜的發展趨勢。為了不斷提升深度神經網路的性能,業界從網路深度和網路結構兩方面持續進行探索。神經網路的層數已擴展到上百層甚至上千層,隨著網路層數的不斷加深,其學習效果也越來越好,2015年微軟提出的ResNet以152層的網路深度在圖像分類任務上准確率首次超過人眼。新的網路設計結構不斷被提出,使得神經網路的結構越來越復雜。如:2014年穀歌提出了Inception網路結構、2015年微軟提出了殘差網路結構、2016年黃高等人提出了密集連接網路結構,這些網路結構設計不斷提升了深度神經網路的性能。

深度神經網路節點功能不斷豐富。為了克服目前神經網路存在的局限性,業界探索並提出了新型神經網路節點,使得神經網路的功能越來越豐富。2017年,傑弗里•辛頓提出了膠囊網路的概念,採用膠囊作為網路節點,理論上更接近人腦的行為,旨在克服卷積神經網路沒有空間分層和推理能力等局限性。2018年,DeepMind、谷歌大腦、MIT的學者聯合提出了圖網路的概念,定義了一類新的模塊,具有關系歸納偏置功能,旨在賦予深度學習因果推理的能力。

深度神經網路工程化應用技術不斷深化。深度神經網路模型大都具有上億的參數量和數百兆的佔用空間,運算量大,難以部署到智能手機、攝像頭和可穿戴設備等性能和資源受限的終端類設備。為了解決這個問題,業界採用模型壓縮技術降低模型參數量和尺寸,減少運算量。目前採用的模型壓縮方法包括對已訓練好的模型做修剪(如剪枝、權值共享和量化等)和設計更精細的模型(如MobileNet等)兩類。深度學習演算法建模及調參過程繁瑣,應用門檻高。為了降低深度學習的應用門檻,業界提出了自動化機器學習(AutoML)技術,可實現深度神經網路的自動化設計,簡化使用流程。

I. 循環神經網路

為什麼卷積神經網路不會出現嚴重的數值問題呢?
卷積神經網路中每一層的權重矩陣 W 是不同的,並且在初始化時它們是獨立同分布的,因此可以相互抵消,在多層之後一般不會出現嚴重的數值問題。
循環神經網路採用 ReLu 激活函數,只有當 W 的取值在單位矩陣附近時才能取得比較好的效果,因此需要將 W 初始化為單位矩陣。

Seq2Seq 模型最基礎的解碼方法是貪心法,即選取一種度量標准後,每次都在當前狀態下選擇最佳的一個結果,直到結束。貪心法的計算代價低,適合作為基準結果與其他方法相比較。貪心法獲得的是一個局部最優解,由於實際問題的復雜性,該方法往往不能取得最好的結果。
集束搜索: 是一種啟發式演算法,會保存 beam size 個當前的較佳選擇,然後解碼時每一步根據保存的選則進行下一步擴展和排序,接著選擇前 b 個進行保存,循環迭代,知道結束時選擇最佳的一個作為解碼的結果。 b 往往選擇一個適中的范圍,以 8-12 為佳。

Seq2Seq 模型引入注意力機制是為了解決什麼問題?為什麼選用了雙向的循環神經網路模型?
編碼時輸入序列的全部信息壓縮到了一個向量中,隨著序列增長,句子越前面的詞的信息丟失越嚴重。同時,Seq2Seq 模型的輸出序列中,常常會損失部分輸入序列信息,這是解碼時,當前詞及對應的源語言詞的上下文信息和位置信息在編解碼過程中丟失了。 引入注意力機制,解決上述問題 。使用雙向的循環神經網路進行建模,可以獲取前後文的信息。

J. Pytorch_循環神經網路RNN

RNN是Recurrent Neural Networks的縮寫,即循環神經網路,它常用於解決序列問題。RNN有記憶功能,除了當前輸入,還把上下文環境作為預測的依據。它常用於語音識別、翻譯等場景之中。

RNN是序列模型的基礎,盡管能夠直接調用現成的RNN演算法,但後續的復雜網路很多構建在RNN網路的基礎之上,如Attention方法需要使用RNN的隱藏層數據。RNN的原理並不復雜,但由於其中包括循環,很難用語言或者畫圖來描述,最好的方法是自己手動編寫一個RNN網路。本篇將介紹RNN網路的原理及具體實現。

在學習循環神經網路之前,先看看什麼是序列。序列sequence簡稱seq,是有先後順序的一組數據。自然語言處理是最為典型的序列問題,比如將一句話翻譯成另一句話時,其中某個詞彙的含義不僅取決於它本身,還與它前後的多個單詞相關。類似的,如果想預測電影的情節發展,不僅與當前的畫面有關,還與當前的一系列前情有關。在使用序列模型預測的過程中,輸入是序列,而輸出是一個或多個預測值。

在使用深度學習模型解決序列問題時, 最容易混淆的是,序列與序列中的元素 。在不同的場景中,定義序列的方式不同,當分析單詞的感情色彩時,一個單詞是一個序列seq;當分析句子感情色彩時,一個句子是一個seq,其中的每個單詞是序列中的元素;當分析文章感情色彩時,一篇文章是一個seq。簡單地說,seq是最終使用模型時的輸入數據,由一系列元素組成。

當分析句子的感情色彩時,以句為seq,而句中包含的各個單詞的含義,以及單詞間的關系是具體分析的對象,此時,單詞是序列中的元素,每一個單詞又可有多維特徵。從單詞中提取特徵的方法將在後面的自然語言處理中介紹。

RNN有很多種形式,單個輸入單個輸入;多個輸入多個輸出,單個輸入多個輸出等等。

舉個最簡單的例子:用模型預測一個四字短語的感情色彩,它的輸入為四個元素X={x1,x2,x3,x4},它的輸出為單個值Y={y1}。字的排列順序至關重要,比如「從好變壞」和「從壞變好」,表達的意思完全相反。之所以輸入輸出的個數不需要一一對應,是因為中間的隱藏層,變向存儲中間信息。

如果把模型設想成黑盒,如下圖所示:

如果模型使用全連接網路,在每次迭代時,模型將計算各個元素x1,x2...中各個特徵f1,f2...代入網路,求它們對結果y的貢獻度。

RNN網路則要復雜一些,在模型內部,它不是將序列中所有元素的特徵一次性輸入模型,而是每一次將序列中單個元素的特徵輸入模型,下圖描述了RNN的數據處理過程,左圖為分步展示,右圖將所有時序步驟抽象成單一模塊。

第一步:將第一個元素x1的特徵f1,f2...輸入模型,模型根據輸入計算出隱藏層h。

第二步:將第二個元素x2的特徵輸入模型,模型根據輸入和上一步產生的h再計算隱藏層h,其它元素以此類推。

第三步:將最後一個元素xn的特徵輸入模型,模型根據輸入和上一步產生的h計算隱藏層h和預測值y。

隱藏層h可視為將序列中前面元素的特徵和位置通過編碼向前傳遞,從而對輸出y發生作用,隱藏層的大小決定了模型攜帶信息量的多少。隱藏層也可以作為模型的輸入從外部傳入,以及作為模型的輸出返回給外部調用。

本例仍使用上篇中的航空乘客序列數據,分別用兩種方法實現RNN:自己編寫程序實現RNN模型,以及調用Pytorch提供的RNN模型。前一種方法主要用於剖析原理,後一種用於展示常用的調用方法。

首先導入頭文件,讀取乘客數據,做歸一化處理,並將數據切分為測試集和訓練集,與之前不同的是加入了create_dataset函數,用於生成序列數據,序列的輸入部分,每個元素中包括兩個特徵:前一個月的乘客量prev和月份值mon,這里的月份值並不是關鍵特徵,主要用於在常式中展示如何使用多個特徵。

第一步:實現模型類,此例中的RNN模型除了全連接層,還生成了一個隱藏層,並在下一次前向傳播時將隱藏層輸出的數據與輸入數據組合後再代入模型運算。

第二步,訓練模型,使用全部數據訓練500次,在每次訓練時,內部for循環將序列中的每個元素代入模型,並將模型輸出的隱藏層和下一個元素一起送入下一次迭代。

第三步:預測和作圖,預測的過程與訓練一樣,把全部數據拆分成元素代入模型,並將每一次預測結果存儲在數組中,並作圖顯示。

需要注意的是,在訓練和預測過程中,每一次開始輸入新序列之前,都重置了隱藏層,這是由於隱藏層的內容只與當前序列相關,序列之間並無連續性。

程序輸出結果如下圖所示:

經過500次迭代,使用RNN的效果明顯優於上一篇中使用全連接網路的擬合效果,還可以通過調整超參數以及選擇不同特徵,進一步優化。

使用Pytorch提供的RNN模型,torch.nn.RNN類可直接使用,是循環網路最常用的解決方案。RNN,LSTM,GRU等循環網路都實現在同一源碼文件torch/nn/moles/rnn.py中。

第一步:創建模型,模型包含兩部分,第一部分是Pytorch提供的RNN層,第二部分是一個全連接層,用於將RNN的輸出轉換成輸出目標的維度。

Pytorch的RNN前向傳播允許將隱藏層數據h作為參數傳入模型,並將模型產生的h和y作為函數返回值。形如: pred, h_state = model(x, h_state)

什麼情況下需要接收隱藏層的狀態h_state,並轉入下一次迭代呢?當處理單個seq時,h在內部前向傳遞;當序列與序列之間也存在前後依賴關系時,可以接收h_state並傳入下一步迭代。另外,當模型比較復雜如LSTM模型包含眾多參數,傳遞會增加模型的復雜度,使訓練過程變慢。本例未將隱藏層轉到模型外部,這是由於模型內部實現了對整個序列的處理,而非處理單個元素,而每次代入的序列之間又沒有連續性。

第二步:訓練模型,與上例中把序列中的元素逐個代入模型不同,本例一次性把整個序列代入了模型,因此,只有一個for循環。

Pythorch支持批量處理,前向傳遞時輸入數據格式是[seq_len, batch_size, input_dim),本例中輸入數據的維度是[100, 1, 2],input_dim是每個元素的特徵數,batch_size是訓練的序列個數,seq_len是序列的長度,這里使用70%作為訓練數據,seq_len為100。如果數據維度的順序與要求不一致,一般使用transpose轉換。

第三步:預測和作圖,將全部數據作為序列代入模型,並用預測值作圖。

程序輸出結果如下圖所示:

可以看到,經過500次迭代,在前100個元素的訓練集上擬合得很好,但在測試集效果較差,可能存在過擬合。

閱讀全文

與循環神經網路應用在哪些方面相關的資料

熱點內容
網路共享中心沒有網卡 瀏覽:521
電腦無法檢測到網路代理 瀏覽:1374
筆記本電腦一天會用多少流量 瀏覽:578
蘋果電腦整機轉移新機 瀏覽:1376
突然無法連接工作網路 瀏覽:1061
聯通網路怎麼設置才好 瀏覽:1224
小區網路電腦怎麼連接路由器 瀏覽:1036
p1108列印機網路共享 瀏覽:1212
怎麼調節台式電腦護眼 瀏覽:698
深圳天虹蘋果電腦 瀏覽:935
網路總是異常斷開 瀏覽:612
中級配置台式電腦 瀏覽:994
中國網路安全的戰士 瀏覽:630
同志網站在哪裡 瀏覽:1413
版觀看完整完結免費手機在線 瀏覽:1459
怎樣切換默認數據網路設置 瀏覽:1110
肯德基無線網無法訪問網路 瀏覽:1286
光纖貓怎麼連接不上網路 瀏覽:1476
神武3手游網路連接 瀏覽:965
局網列印機網路共享 瀏覽:1000