循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN):如何處理自然語言?

0 評(píng)論 4160 瀏覽 15 收藏 12 分鐘

上文介紹了卷積神經(jīng)網(wǎng)絡(luò)(CNN)的基礎(chǔ)概念,今天我們來介紹可以處理自然語言等序列數(shù)據(jù)的循環(huán)神經(jīng)網(wǎng)絡(luò)。

循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是一種強(qiáng)大的神經(jīng)網(wǎng)絡(luò)模型,它能夠處理序列數(shù)據(jù),如時(shí)間序列數(shù)據(jù)或自然語言。

當(dāng)然傳統(tǒng)的RNN同樣存在梯度消失和梯度爆炸的問題,這限制了其在處理長序列時(shí)的性能,而優(yōu)化后的長短期記憶(LSTM)和門控循環(huán)單元(GRU)可以有效的解決這些問題。

一、基本原理

在處理序列數(shù)據(jù)時(shí),我們通常希望能夠考慮到序列中的元素之間的依賴關(guān)系。例如,在處理自然語言時(shí),一個(gè)詞的含義可能依賴于它前面的詞。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)無法處理這種依賴關(guān)系,因?yàn)樗鼈冊(cè)谔幚砻總€(gè)元素時(shí)都是獨(dú)立的。這就是我們需要RNN的原因。

RNN是一種遞歸的神經(jīng)網(wǎng)絡(luò),它的輸出不僅取決于當(dāng)前輸入,還取決于過去的輸入。這是通過在網(wǎng)絡(luò)中添加循環(huán)連接來實(shí)現(xiàn)的,使得信息可以在網(wǎng)絡(luò)中流動(dòng)。

這種結(jié)構(gòu)讓RNN能夠處理序列數(shù)據(jù),并考慮到序列中的元素之間的依賴關(guān)系。

具體來說,假設(shè)我們有一個(gè)序列$x_0, x_1, …, x_t$,RNN會(huì)在每個(gè)時(shí)間步$t$接收當(dāng)前的輸入$x_t$和前一時(shí)間步的隱藏狀態(tài)$h_{t-1}$,然后計(jì)算出當(dāng)前的隱藏狀態(tài)$h_t$和輸出$y_t$。

這個(gè)過程可以用以下公式表示:

$h_t = f(W_{hh}h_{t-1} + W_{xh}x_t)$

$y_t = W_{hy}h_t$

其中,$W_{hh}$, $W_{xh}$和$W_{hy}$是網(wǎng)絡(luò)的權(quán)重,$f$是激活函數(shù)。

這個(gè)過程會(huì)在整個(gè)序列上重復(fù),每個(gè)時(shí)間步都會(huì)更新隱藏狀態(tài)和輸出。這樣,每個(gè)時(shí)間步的輸出都會(huì)考慮到當(dāng)前輸入和所有過去的輸入,從而能夠捕捉到序列中的依賴關(guān)系。

映射到一個(gè)自然語言句子,每個(gè)時(shí)間步的輸入是句子中的一個(gè)詞。在處理每個(gè)詞時(shí),RNN不僅會(huì)考慮到這個(gè)詞,還會(huì)考慮到這個(gè)詞前面的所有詞。這樣,RNN就能夠理解句子的語義,從而能夠進(jìn)行諸如情感分析或機(jī)器翻譯等任務(wù)。

假設(shè)我們正在處理一個(gè)情感分析任務(wù),我們的目標(biāo)是根據(jù)電影評(píng)論的文本來判斷評(píng)論的情感是正面的還是負(fù)面的。我們的輸入是一個(gè)詞序列,例如 “這部電影不好看”。

在使用RNN處理這個(gè)任務(wù)時(shí),我們首先會(huì)將每個(gè)詞編碼成一個(gè)向量,然后按照序列的順序,依次將每個(gè)詞的向量輸入到RNN中:

  • 在第一個(gè)時(shí)間步,我們將 “這部” 的向量輸入到RNN,RNN會(huì)計(jì)算出一個(gè)隱藏狀態(tài)和一個(gè)輸出。這個(gè)輸出是基于 “這部” 的情感預(yù)測(cè)。
  • 在第二個(gè)時(shí)間步,我們將 “電影” 的向量和第一個(gè)時(shí)間步的隱藏狀態(tài)一起輸入到RNN,RNN會(huì)計(jì)算出一個(gè)新的隱藏狀態(tài)和一個(gè)輸出。這個(gè)輸出是基于 “這部電影” 的情感預(yù)測(cè)。
  • 這個(gè)過程會(huì)在整個(gè)序列上重復(fù),每個(gè)時(shí)間步都會(huì)更新隱藏狀態(tài)和輸出。在最后一個(gè)時(shí)間步,我們將 “好看” 的向量和前一個(gè)時(shí)間步的隱藏狀態(tài)一起輸入到RNN,RNN會(huì)計(jì)算出一個(gè)隱藏狀態(tài)和一個(gè)輸出。這個(gè)輸出是基于整個(gè)序列 “這部電影不好看” 的情感預(yù)測(cè)。

通過這種方式,RNN能夠考慮到整個(gè)序列的信息,從而做出更準(zhǔn)確的情感預(yù)測(cè)。

例如,雖然 “好看” 是一個(gè)正面的詞,但由于前面有一個(gè) “不”,所以整個(gè)序列的情感應(yīng)該是負(fù)面的。RNN能夠捕捉到這種依賴關(guān)系,因此能夠正確地預(yù)測(cè)出這個(gè)序列的情感是負(fù)面的。

總的來說,RNN的基本原理是通過在網(wǎng)絡(luò)中添加循環(huán)連接,使得信息可以在網(wǎng)絡(luò)中流動(dòng),從而能夠處理序列數(shù)據(jù),并考慮到序列中的元素之間的依賴關(guān)系。

二、傳統(tǒng)RNN存在的問題

梯度消失問題:梯度消失問題的具體表現(xiàn)就是RNN只能處理“短期記憶”,無法處理很長的輸入序列。當(dāng)網(wǎng)絡(luò)的深度增加時(shí),通過反向傳播計(jì)算的梯度可能會(huì)變得非常小。這意味著網(wǎng)絡(luò)的權(quán)重更新將會(huì)非常慢,導(dǎo)致訓(xùn)練過程非常困難。在RNN中,由于每個(gè)時(shí)間步的輸出都依賴于前一時(shí)間步的隱藏狀態(tài),因此這個(gè)問題會(huì)更加嚴(yán)重。

具體來說,如果序列很長,那么在反向傳播過程中,梯度需要經(jīng)過很多步的乘法運(yùn)算,這可能導(dǎo)致梯度變得非常小,從而使得權(quán)重更新非常慢。

梯度爆炸問題:與梯度消失問題相反,梯度爆炸是指在訓(xùn)練過程中,梯度可能會(huì)變得非常大,導(dǎo)致權(quán)重更新過大,使得網(wǎng)絡(luò)無法收斂。在RNN中,如果序列很長,那么在反向傳播過程中,梯度可能需要經(jīng)過很多步的乘法運(yùn)算,這可能導(dǎo)致梯度變得非常大,從而使得權(quán)重更新過大,導(dǎo)致網(wǎng)絡(luò)無法收斂。

三、優(yōu)化算法

3.1 長短期記憶(LSTM,Long Short-Term Memory)

LSTM是一種特殊的RNN,它通過引入門控機(jī)制來解決梯度消失和爆炸問題,門控機(jī)制是LSTM用來控制信息流的一種方式。

在LSTM中,每個(gè)單元有一個(gè)記憶細(xì)胞和三種類型的門:

  1. 遺忘門(Forget Gate):決定了哪些信息應(yīng)該被遺忘或者拋棄。
  2. 輸入門(Input Gate):決定了哪些新的信息應(yīng)該被存儲(chǔ)在細(xì)胞狀態(tài)中。
  3. 輸出門(Output Gate):決定了細(xì)胞狀態(tài)中的哪些信息應(yīng)該被讀取和輸出。

每個(gè)門都有一個(gè)sigmoid神經(jīng)網(wǎng)絡(luò)層和一個(gè)點(diǎn)積操作。sigmoid層輸出數(shù)字介于0和1之間,決定了多少量的信息應(yīng)該通過。0表示“讓所有信息都不通過”,1表示“讓所有信息都通過”。

LSTM通過其門控機(jī)制解決了傳統(tǒng)RNN的梯度消失和爆炸問題,使得LSTM能夠在處理長序列時(shí),避免了梯度消失和梯度爆炸的問題,從而能夠?qū)W習(xí)到長距離的依賴關(guān)系。

下圖是LSTM的原理示意圖,具體原理不在此詳述,感興趣的同學(xué)可以自行查詢一下。

3.2 門控循環(huán)單元(GRU,Gated Recurrent Unit)

GRU是另一種高級(jí)的RNN,與LSTM相比,GRU的結(jié)構(gòu)更簡(jiǎn)單,只有兩種類型的門:

  1. 更新門(Update Gate):決定了在生成新的隱藏狀態(tài)時(shí),應(yīng)該保留多少舊的隱藏狀態(tài)的信息。
  2. 重置門(Reset Gate):決定了在生成新的隱藏狀態(tài)時(shí),應(yīng)該忽略多少舊的隱藏狀態(tài)的信息。

GRU的門機(jī)制使得它在處理長序列時(shí),也能夠?qū)W習(xí)到長距離的依賴關(guān)系。同時(shí),由于它的結(jié)構(gòu)比LSTM更簡(jiǎn)單,所以在某些任務(wù)上,GRU可能會(huì)比LSTM訓(xùn)練得更快,效果也更好。

下圖是LSTM的原理示意圖,具體原理不在此詳述,感興趣的同學(xué)可以自行查詢一下。

3.3 LSTM和GRU的區(qū)別

LSTM和GRU都是RNN的變體,它們都使用了門機(jī)制來控制信息流,但是它們之間還是存在一些區(qū)別的:

  • 門的數(shù)量:LSTM有三個(gè)門(遺忘門,輸入門,輸出門),而GRU只有兩個(gè)門(更新門和重置門)。
  • 狀態(tài)的數(shù)量:LSTM維護(hù)了兩個(gè)狀態(tài),一個(gè)是細(xì)胞狀態(tài),一個(gè)是隱藏狀態(tài)。而GRU只有一個(gè)隱藏狀態(tài)。
  • 復(fù)雜性:由于LSTM有更多的門和狀態(tài),所以它的結(jié)構(gòu)比GRU更復(fù)雜。這可能使得LSTM在訓(xùn)練時(shí)需要更多的計(jì)算資源。
  • 性能:在某些任務(wù)和數(shù)據(jù)集上,GRU可能會(huì)比LSTM訓(xùn)練得更快,效果也更好。
  • 記憶能力:理論上,基于LSTM的設(shè)計(jì)原理,應(yīng)該能夠更好地處理長期依賴問題。

四、應(yīng)用場(chǎng)景

RNN由于其獨(dú)特的循環(huán)結(jié)構(gòu),使其在處理序列數(shù)據(jù)上有著天然的優(yōu)勢(shì),因此被廣泛應(yīng)用于各種序列數(shù)據(jù)的處理。

以下是一些常見的應(yīng)用場(chǎng)景:

  • 語音識(shí)別:用于建模音頻信號(hào)的時(shí)間序列,從而實(shí)現(xiàn)語音識(shí)別。
  • 語言模型:用于預(yù)測(cè)下一個(gè)詞,從而實(shí)現(xiàn)語言模型。這在機(jī)器翻譯,文本生成等任務(wù)中非常有用。
  • 機(jī)器翻譯:用于編碼源語言序列和解碼目標(biāo)語言序列,從而實(shí)現(xiàn)機(jī)器翻譯。
  • 情感分析:用于分析文本的情感,如正面或負(fù)面。
  • 視頻處理:用于處理視頻序列,如動(dòng)作識(shí)別或視頻標(biāo)注。

五、總結(jié)

本文介紹了RNN的基本原理和應(yīng)用場(chǎng)景,它能處理各種序列數(shù)據(jù),同時(shí)也存在梯度消失和爆炸問題,而優(yōu)化后的長短期記憶(LSTM)和門控循環(huán)單元(GRU)可以有效的解決這些問題。

下篇文章,我們會(huì)介紹對(duì)抗神經(jīng)網(wǎng)絡(luò)(GAN),敬請(qǐng)期待。

本文由 @AI小當(dāng)家 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自 Unsplash,基于 CC0 協(xié)議

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒評(píng)論,等你發(fā)揮!