到目前為止,我們的序列學(xué)習(xí)任務(wù)的工作示例是語言建模,我們的目標(biāo)是在給定序列中所有先前標(biāo)記的情況下預(yù)測下一個(gè)標(biāo)記。在這種情況下,我們只希望以左向上下文為條件,因此標(biāo)準(zhǔn) RNN 的單向鏈接似乎是合適的。然而,還有許多其他序列學(xué)習(xí)任務(wù)上下文,在這些上下文中,在向左和向右上下文的每個(gè)時(shí)間步調(diào)整預(yù)測是非常好的。例如,考慮詞性檢測。在評(píng)估與給定詞相關(guān)的詞性時(shí),為什么我們不應(yīng)該考慮兩個(gè)方向的上下文?
另一項(xiàng)常見任務(wù)(通常在針對(duì)感興趣的實(shí)際任務(wù)微調(diào)模型之前用作預(yù)訓(xùn)練練習(xí))是屏蔽文本文檔中的隨機(jī)標(biāo)記,然后訓(xùn)練序列模型以預(yù)測缺失標(biāo)記的值。請(qǐng)注意,根據(jù)空白后面的內(nèi)容,缺失標(biāo)記的可能值會(huì)發(fā)生顯著變化:
-
我是
___
。 -
我
___
餓了。 -
我
___
餓了,我能吃半頭豬。
在第一句話中,“快樂”似乎是一個(gè)可能的候選者。“不”和“非常”這兩個(gè)詞在第二句中似乎說得通,但“不”與第三句似乎格格不入。
幸運(yùn)的是,一種簡單的技術(shù)可以將任何單向 RNN 轉(zhuǎn)換為雙向 RNN (Schuster 和 Paliwal,1997)。我們簡單地實(shí)現(xiàn)兩個(gè)單向 RNN 層,它們以相反的方向鏈接在一起并作用于相同的輸入(圖 10.4.1)。對(duì)于第一個(gè) RNN 層,第一個(gè)輸入是x1最后的輸入是 xT,但是對(duì)于第二個(gè) RNN 層,第一個(gè)輸入是 xT最后的輸入是x1. 為了產(chǎn)生這個(gè)雙向 RNN 層的輸出,我們只需將兩個(gè)底層單向 RNN 層的相應(yīng)輸出連接在一起。
正式地為任何時(shí)間步長t,我們考慮一個(gè)小批量輸入 Xt∈Rn×d(示例數(shù)量: n,每個(gè)示例中的輸入數(shù)量:d) 并令隱藏層激活函數(shù)為?. 在雙向架構(gòu)中,這個(gè)時(shí)間步長的前向和后向隱藏狀態(tài)是H→t∈Rn×h 和H←t∈Rn×h,分別在哪里h是隱藏單元的數(shù)量。前向和后向隱藏狀態(tài)更新如下:
權(quán)重在哪里 Wxh(f)∈Rd×h,Whh(f)∈Rh×h,Wxh(b)∈Rd×h,?and?Whh(b)∈Rh×h, 和偏見bh(f)∈R1×h和 bh(b)∈R1×h都是模型參數(shù)。
接下來,我們連接前向和后向隱藏狀態(tài)
評(píng)論
查看更多