59 雙向循環(huán)神經(jīng)網(wǎng)絡(luò)【動(dòng)手學(xué)深度學(xué)習(xí)v2】

雙向循環(huán)神經(jīng)網(wǎng)絡(luò)
- 對(duì)于序列來講,通常假設(shè)的目標(biāo)是:在給定觀測(cè)的情況下(如在時(shí)間序列的上下文中或語言模型的上下文中),對(duì)下一個(gè)輸出進(jìn)行建模。雖然這是一個(gè)典型的場(chǎng)景,但并不是唯一的
- 對(duì)于序列模型來講,可以從前往后看,也可以從后往前看,在某些情況下是可以的,有的情況下是不行的
隱馬爾可夫模型中的動(dòng)態(tài)規(guī)劃
假設(shè)有一個(gè)隱變量模型:在任意時(shí)間步 t ,假設(shè)存在某個(gè)隱變量 ht ,通過概率 P(xt | ht) 控制觀測(cè)到的 xt。此外,任何 ht -> h(t+1) 轉(zhuǎn)移都是由一些狀態(tài)轉(zhuǎn)移概率 P(h(t+1) | ht)給出,則這個(gè)概率圖模型就是一個(gè)隱馬爾可夫模型(hidden Markov model,HMM)

雙向模型

- 在循環(huán)神經(jīng)網(wǎng)絡(luò)中,只有一個(gè)在前向模式下“從第一個(gè)次元開始運(yùn)行”的循環(huán)神經(jīng)網(wǎng)絡(luò)。如果想要循環(huán)網(wǎng)絡(luò)獲得與隱馬爾可夫模型類似的前瞻能力,只需要增加一個(gè)“從最后一個(gè)詞元開始從后向前運(yùn)行”的循環(huán)神經(jīng)網(wǎng)絡(luò)。
- 雙向循環(huán)神經(jīng)網(wǎng)絡(luò)的架構(gòu)與隱馬爾可夫模型中的動(dòng)態(tài)規(guī)劃的前向和后向遞歸沒有太大的區(qū)別,主要的區(qū)別在于:隱馬爾科夫模型中的方程具有特定的統(tǒng)計(jì)意義,而雙向循環(huán)神經(jīng)網(wǎng)絡(luò)只能當(dāng)作是通用的、可學(xué)習(xí)的函數(shù)(這種轉(zhuǎn)變集中體現(xiàn)了現(xiàn)代深度網(wǎng)絡(luò)的設(shè)計(jì)原則: 首先使用經(jīng)典統(tǒng)計(jì)模型的函數(shù)依賴類型,然后將其參數(shù)化為通用形式。)
- ?雙向循環(huán)神經(jīng)網(wǎng)絡(luò) P1 - 01:26?
- 雙向循環(huán)神經(jīng)網(wǎng)絡(luò)的隱藏層中有兩個(gè)隱狀態(tài)(前向隱狀態(tài)和反向隱狀態(tài),通過添加反向傳遞信息的隱藏層來更靈活地處理反向傳遞的信息):以輸入 X1 為例,當(dāng)輸入 X1 進(jìn)入到模型之后,當(dāng)前的隱藏狀態(tài)(右箭頭,前向隱狀態(tài))放入下一個(gè)時(shí)間步的狀態(tài)中去;X2 更新完隱藏狀態(tài)之后,將更新后的隱藏狀態(tài)傳遞給 X1 的隱藏狀態(tài)(左箭頭,反向隱狀態(tài)),將兩個(gè)隱藏狀態(tài)(前向隱狀態(tài)和反向隱狀態(tài))合并在一起,就得到了需要送入輸出層的隱狀態(tài) Ht (在具有多個(gè)隱藏層的深度雙向循環(huán)神經(jīng)網(wǎng)絡(luò)中,則前向隱狀態(tài)和反向隱狀態(tài)這兩個(gè)隱狀態(tài)會(huì)作為輸入繼續(xù)傳遞到下一個(gè)雙向?qū)樱ň哂卸鄠€(gè)隱藏層的深度雙向循環(huán)神經(jīng)網(wǎng)絡(luò)其實(shí)就是多個(gè)雙向隱藏層的疊加)),最后輸出層計(jì)算得到輸出 Ot

- 實(shí)現(xiàn):將輸入復(fù)制一遍,一份用于做前向的時(shí)候,正常的隱藏層會(huì)得到一些輸出;另一份用于做反向的時(shí)候,反向的隱藏層會(huì)得到另外一些輸出,然后進(jìn)行前后順序顛倒。將正向輸出和顛倒順序后的反向輸出進(jìn)行合并(concat),就能得到最終的輸出了
模型的計(jì)算代價(jià)及其應(yīng)用
雙向循環(huán)神經(jīng)網(wǎng)絡(luò)的一個(gè)關(guān)鍵特性是:使用來自序列兩端的信息來估計(jì)輸出
- 使用過去和未來的觀測(cè)信息來預(yù)測(cè)當(dāng)前的觀測(cè),因此并不適用于預(yù)測(cè)下一個(gè)詞元的場(chǎng)景,因?yàn)樵陬A(yù)測(cè)下一個(gè)詞元時(shí),并不能得知下一個(gè)詞元的下文,因?yàn)椴粫?huì)得到很好的精度
- 如果使用雙向循環(huán)神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)下一個(gè)詞元,盡管在訓(xùn)練的時(shí)候能夠利用所預(yù)測(cè)詞元過去和未來的數(shù)據(jù)(也就是所預(yù)測(cè)詞元的上下文)來估計(jì)所預(yù)測(cè)的詞元,但是在測(cè)試的時(shí)候,模型的輸入只有過去的數(shù)據(jù)(也就是所預(yù)測(cè)詞所在位置之前的信息),所以會(huì)導(dǎo)致精度很差
此外,雙向循環(huán)神經(jīng)網(wǎng)絡(luò)的計(jì)算速度非常慢
- 主要原因是網(wǎng)絡(luò)的前向傳播需要在雙向?qū)又羞M(jìn)行前向和后向遞歸,并且網(wǎng)絡(luò)的反向傳播也以依賴于前向傳播的結(jié)果,因此梯度求解將有一個(gè)非常長(zhǎng)的鏈
雙向?qū)釉趯?shí)際中的時(shí)用的比較少,僅僅應(yīng)用于部分場(chǎng)合:
- 填充缺失的單詞
- 詞元注釋(如命名實(shí)體識(shí)別)
- 作為序列處理流水線中的一個(gè)步驟對(duì)序列進(jìn)行編碼(如機(jī)器翻譯)
訓(xùn)練

推理

- 雙向 LSTM 不適合做推理,幾乎不能用于預(yù)測(cè)下一個(gè)詞,因?yàn)闉榱说玫诫[藏狀態(tài) H ,既要看到它之前的信息,又要看到之后的信息,因?yàn)樵谕评淼臅r(shí)候沒有之后的信息,所以是做不了推理的
- 雙向循環(huán)神經(jīng)網(wǎng)絡(luò)主要的作用是對(duì)句子做特征提取,比如在做翻譯的時(shí)候,給定一個(gè)句子去翻譯下一個(gè)句子,那么可以用雙向循環(huán)神經(jīng)網(wǎng)絡(luò)來做已給定句子的特征提??;或者是做改寫等能夠看到整個(gè)句子的應(yīng)用場(chǎng)景下,做整個(gè)句子的特征提取
總結(jié)
1、雙向循環(huán)神經(jīng)網(wǎng)絡(luò)通過反向更新的隱藏層來利用方向時(shí)間信息
2、在雙向循環(huán)神經(jīng)網(wǎng)絡(luò)中,每個(gè)時(shí)間步的隱狀態(tài)由當(dāng)前時(shí)間步的前后數(shù)據(jù)同時(shí)決定
3、雙向循環(huán)神經(jīng)網(wǎng)絡(luò)與概率圖模型中的“前向-后向”算法具有相似性
4、雙向循環(huán)神經(jīng)網(wǎng)絡(luò)主要用于序列編碼和給定雙向上下文的觀測(cè)估計(jì),通常用來對(duì)序列抽取特征、填空,而不是預(yù)測(cè)未來
5、由于梯度鏈更長(zhǎng),因此雙向循環(huán)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練代價(jià)非常高
Q&A
- 1、雙向 RNN ,反向的初始 hidden state 是什么?
- ?QA P3 - 00:00?
- 2、LSTM 為什么要分 C 和 H?
- ?QA P3 - 00:26?
- 3、時(shí)間序列預(yù)測(cè),也用雙向的嗎?這個(gè)能從后往前看嗎,不太理解
- ?QA P3 - 00:43?
- 4、雙向循環(huán)神經(jīng)網(wǎng)絡(luò),在正向和反向之間有權(quán)重關(guān)系嗎?
- ?QA P3 - 01:03?
- 5、隱藏層和隱含馬爾科夫有什么關(guān)系?
- ?QA P3 - 01:41?
- 6、正向和反向是同一組權(quán)重 W ,還是不同的?
- ?QA P3 - 02:41?
- 7、美國(guó)其他公司在 AI 方面,哪個(gè)比較強(qiáng)?
- ?QA P3 - 03:01?
- 8、隱藏層是不是可以設(shè)兩個(gè) 256 ?
- ?QA P3 - 03:35?
- 9、雙向是否可以深度雙向?
- ?QA P3 - 03:58?
----end----
其他參考:
1、《動(dòng)手學(xué)深度學(xué)習(xí)》,PPT,https://courses.d2l.ai/zh-v2/assets/pdfs/part-3_7.pdf
2、《動(dòng)手學(xué)深度學(xué)習(xí)》,教材,https://zh-v2.d2l.ai/chapter_recurrent-modern/bi-rnn.html