RNN是怎麼從單層網路一步一步構造的?
一、從單層網路談起
在學習RNN之前,首先要了解一下最基本的單層網路,它的結構如圖:
輸入是x,經過變換Wx+b和啟用函式f得到輸出y。相信大家對這個已經非常熟悉了。
二、經典的RNN結構(N vs N)
在實際應用中,我們還會遇到很多序列形的資料:
如:
1.自然語言處理問題。x1可以看做是第一個單詞,x2可以看做是第二個單詞,依次類推。
2.語音處理。此時,x1、x2、x3……是每幀的聲音訊號。
3.時間序列問題。例如每天的股票價格等等。
序列形的資料就不太好用原始的神經網路處理了。為了建模序列問題,RNN引入了隱狀態h(hidden state)的概念,h可以對序列形的資料提取特徵,接著再轉換為輸出。
先從h1的計算開始看:
圖示中記號的含義是:
a)圓圈或方塊表示的是向量。
b)一個箭頭就表示對該向量做一次變換。如上圖中h0和x1分別有一個箭頭連線,就表示對h0和x1各做了一次變換。
在很多論文中也會出現類似的記號,初學的時候很容易搞亂,但只要把握住以上兩點,就可以比較輕鬆地理解圖示背後的含義。
h2的計算和h1類似。要注意的是,在計算時,每一步使用的引數U、W、b都是一樣的,也就是說每個步驟的引數都是共享的,這是RNN的重要特點,一定要牢記。
依次計算剩下來的(使用相同的引數U、W、b):
我們這裡為了方便起見,只畫出序列長度為4的情況,實際上,這個計算過程可以無限地持續下去。
我們目前的RNN還沒有輸出,得到輸出值的方法就是直接通過h進行計算:
正如之前所說,一個箭頭就表示對對應的向量做一次類似於f(Wx+b)的變換,這裡的這個箭頭就表示對h1進行一次變換,得到輸出y1。
剩下的輸出類似進行(使用和y1同樣的引數V和c):
OK!大功告成!這就是最經典的RNN結構,我們像搭積木一樣把它搭好了。它的輸入是x1, x2, .....xn,輸出為y1, y2, ...yn,也就是說,輸入和輸出序列必須要是等長的。
由於這個限制的存在,經典RNN的適用範圍比較小,但也有一些問題適合用經典的RNN結構建模,如:
1.計算視訊中每一幀的分類標籤。因為要對每一幀進行計算,因此輸入和輸出序列等長。
2.輸入為字元,輸出為下一個字元的概率。這就是著名的Char RNN(詳細介紹請參考:The Unreasonable Effectiveness of Recurrent Neural Networks,Char RNN可以用來生成文章、詩歌,甚至是程式碼。此篇部落格裡有自動生成歌詞的實驗教程《基於torch學汪峰寫歌詞、聊天機器人、影象著色/生成、看圖說話、字幕生成》)。
三、N VS 1
有的時候,我們要處理的問題輸入是一個序列,輸出是一個單獨的值而不是序列,應該怎樣建模呢?實際上,我們只在最後一個h上進行輸出變換就可以了:
這種結構通常用來處理序列分類問題。如輸入一段文字判別它所屬的類別,輸入一個句子判斷其情感傾向,輸入一段視訊並判斷它的類別等等。
四、1 VS N
輸入不是序列而輸出為序列的情況怎麼處理?我們可以只在序列開始進行輸入計算:
還有一種結構是把輸入資訊X作為每個階段的輸入:
下圖省略了一些X的圓圈,是一個等價表示:
這種1 VS N的結構可以處理的問題有:
1.從影象生成文字(image caption),此時輸入的X就是影象的特徵,而輸出的y序列就是一段句子
2.從類別生成語音或音樂等
五、N vs M
下面我們來介紹RNN最重要的一個變種:N vs M。這種結構又叫Encoder-Decoder模型,也可以稱之為Seq2Seq模型。
原始的N vs N RNN要求序列等長,然而我們遇到的大部分問題序列都是不等長的,如機器翻譯中,源語言和目標語言的句子往往並沒有相同的長度。
為此,Encoder-Decoder結構先將輸入資料編碼成一個上下文向量c:
得到c有多種方式,最簡單的方法就是把Encoder的最後一個隱狀態賦值給c,還可以對最後的隱狀態做一個變換得到c,也可以對所有的隱狀態做變換。
拿到c之後,就用另一個RNN網路對其進行解碼,這部分RNN網路被稱為Decoder。具體做法就是將c當做之前的初始狀態h0輸入到Decoder中:
還有一種做法是將c當做每一步的輸入:
由於這種Encoder-Decoder結構不限制輸入和輸出的序列長度,因此應用的範圍非常廣泛,比如:
機器翻譯。Encoder-Decoder的最經典應用,事實上這一結構就是在機器翻譯領域最先提出的
文字摘要。輸入是一段文字序列,輸出是這段文字序列的摘要序列。
閱讀理解。將輸入的文章和問題分別編碼,再對其進行解碼得到問題的答案。
語音識別。輸入是語音訊號序列,輸出是文字序列。
何之源,
https://zhuanlan.zhihu.com/p/28054589。
題目來源:
七月線上官網(https://www.julyedu.com/)——面試題庫——面試大題——深度學習 第31題。
RNN是深度學習的基礎,而深度學習又是機器學習的一個分支。深度學習除了可以學習特徵和任務之間的關聯以外,還能自動從簡單特徵中提取更加複雜的特徵。深度學習演算法可以從資料中學習更加複雜的特徵表達,使得最後一步權重學習變得更加簡單且有效。
為了幫助大家系統地學習機器學習課程的相關知識,我們特意推出了機器學習集訓營系列課程。迄今為止,「機器學習集訓營」已經舉辦了四期,每一期都湧現出了不少優秀offer,特別是上一期很多同學從Java、Android、iOS等傳統IT行業成功轉行轉型轉崗AI拿到年薪三四十萬,部分甚至超過四十萬拿到五十萬。
本第五期,在第四期的基礎上,除了繼續維持“入學測評、直播答疑、佈置作業、階段考試、畢業考核、一對一批改、線上線下結合、CPU&GPU雙雲平臺、組織比賽、面試輔導、就業推薦”十一位一體的教學模式,本期特地推出機器學習工程師聯合認證。且線下在北京、上海、深圳、廣州、杭州、瀋陽、濟南、鄭州、成都的基礎上,新增武漢、西安兩個線下點,十一城同步開營。
此外,本期依然沿用前四期線上線下相結合的授課方式,加強專案實訓的同時引入線下BAT專家面對面、手把手的教學方式;突出BAT級工業專案實戰輔導 + 一對一面試求職輔導,並提供一年GPU雲實驗平臺免費使用,精講面試考點。讓每一位學員不用再為遇到問題沒人解答,缺乏實戰經驗以及簡歷上沒有專案經驗,面試屢屢遭拒而發愁。
本期限150個名額,歷時3個月,10多個BAT級工業專案,保障每一位學員所學更多、效率更高、收穫更大。
機器學習集訓營 第五期 課程詳情可點選文末“閱讀原文”進行檢視,或者加微信客服:julyedukefu_02進行諮詢。
掃碼加客服微信
相關文章
- 一步一步構建你的網路層-TCP篇TCP
- 一步一步構建你的iOS網路層 - HTTP篇iOSHTTP
- 簡單的RNN和BP多層網路之間的區別RNN
- 網路連線總超時?從四層模型上解析網路是怎麼連線的模型
- 從爬蟲到機器學習預測,我是如何一步一步做到的?爬蟲機器學習
- retrofit第一步拆解 -- 構造者模式模式
- 從網路架構方面簡析迴圈神經網路RNN架構神經網路RNN
- 分享我這8年,是如何一步一步走向架構師的架構
- 一步一步構建自己的簡單日曆控制元件 MySimpleCalendar控制元件
- 網際網路是怎麼連起來的?一文讀懂網路5層結構模型模型
- TensorFlow 一步一步實現卷積神經網路卷積神經網路
- 詳細展示RNN的網路結構RNN
- 一步一步,看圖理解長短期記憶網路與門控迴圈網路
- 理解生成對抗網路,一步一步推理得到GANs(二)
- 理解生成對抗網路,一步一步推理得到GANs(一)
- 網際網路常用設計模式——通往架構師的第一步設計模式架構
- js 真的是一步一步手寫promiseJSPromise
- 一步一步實現單身狗雨
- 網際網路是如何一步步將我們“劫持”的?——資訊圖
- Tomcat中的類是怎麼被一步步載入的?Tomcat
- CNN、RNN、DNN的內部網路結構有什麼區別?CNNRNNDNN
- 雲資料中心網路架構是怎麼融合的架構
- 分享我這8年(目前在阿里就職),是如何一步一步走向架構師的阿里架構
- 大型區域網一步到位的網路管理方案
- excel返回上一步的快捷鍵是什麼 excel如何前進到下一步Excel
- 開啟NLP新時代的BERT模型,是怎麼一步步封神的?模型
- 求助高手,下一步該怎麼走?
- setContentView是如何一步一步被顯示出來的?View
- Laravel 的 CSRF - 白名單底層是怎麼實現的Laravel
- 網路是七層、五層還是四層?
- 【React Native】從原始碼一步一步解析它的實現原理React Native原始碼
- 一步一步實現現代前端單元測試前端
- 一步一步搭建Flutter開發架子-網路請求,非同步UI更新封裝Flutter非同步UI封裝
- 我是如何一步一步做介面測試的一些感悟
- Anti-Tech論 | 技術是如何一步一步腐蝕思想的?
- 帶你一步一步手寫一個簡單的Spring MVCSpringMVC
- 【一步一步瞭解你——泛型的應用(機房重構)】泛型
- 我是怎麼一步步用go找出壓測效能瓶頸Go