iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0

前言

昨天提到了一個被廣泛應用的模型架構 CNN ,CNN因為他優異的表現被廣泛應用於圖像處理、物體檢測與影像分類等任務。但是當我們處理帶有時間依賴性或順序關係的數據時,CNN的問題就顯現出來了。
在這些情況下,RNN 提供了一種更合適的解決方法,所以今天我們就會來了解RNN是甚麼囉!!

什麼是RNN?

循環神經網路(Recurrent Neural Network, RNN),之所以被叫做循環,是因為他存在這個特性(廢話),以一個例子來說,當我們在讀文章的時候,我們並不會每讀一個字就完全忘記前面的內容,我們應該會記住之前讀過的字或是句子,然後根據這些已知資訊來理解接下來的內容。

但是傳統的神經網路並不會這樣,而RNN卻是可以做到的。

所以RNN是一種用於處理序列數據的神經網路結構,適合處理與時間或順序相關的問題。與傳統前饋神經網路(如多層感知器,MLP)不同,RNN具有記憶能力,能夠利用先前輸入的信息來影響後續的輸出。

循環神經網路怎麼運作

接續上面的閱讀文章來說每次讀一個字(輸入),網路會根據已經讀過的內容(之前的隱藏狀態)來理解當前字的意義,之後,RNN 會把當前字的資訊和之前的資訊一起「記住」,並傳遞給下一個Time Step(下一個字)。

Time Step 是指在處理時間序列或序列數據時,每一個離散的時間點或輸入步驟。這個概念在像 循環神經網路(RNN) 這樣的模型中非常重要,因為它們通常是逐步處理數據的,並根據過去的時間點來做出當前的決策。

  • 為什麼叫做「循環」?
    • 因為在每個Time Step,網路都會把它現在的狀態(記憶)傳回到自己,然後再用這個更新過的狀態來處理下一個輸入。這個過程就像是不斷地重複自己,處理一個接著一個的輸入,形成了循環。
    • 具體來說,這裡的「循環」是指:當前的輸入會結合之前的隱藏狀態來產生一個新的隱藏狀態。
    • 這個新的隱藏狀態會再被用來處理下一個輸入,並且每次處理輸入都會重複這個過程。
  • 一個簡單的流程來幫助我們理解:
    • 首先我們看到「貓」這個詞(當前輸入),我們的腦袋會記住「貓」這個資訊(隱藏狀態)。
    • 下一個詞是「跑」(下一個輸入),我們會結合之前「貓」的資訊來理解「貓在跑」。
    • 再下一個詞是「得很快」,你會根據前面的資訊理解「貓跑得很快」。
      RNN 也是類似的處理方式,這樣的記憶能力和信息處理方式就是它「循環」的原因。

現在我們來看看這張圖片。
image

  • 單個 RNN 單元
    • 圖中最左邊的綠色方框代表一個 RNN 單元,這是 RNN 的核心計算單位。
    • https://ithelp.ithome.com.tw/upload/images/20240924/201592252FcnuW1QAM.png :表示在time step t的輸入數據。這可能是一個數字、一個單詞向量,或其他序列數據中的一部分。
    • ℎ:表示這個單元的內部狀態或隱藏層狀態。它會在每個time step更新,並保留序列的歷史訊息。
    • U、W、V:是 RNN 的權重矩陣,用來進行數據的計算與傳遞。
      • U:與輸入 https://ithelp.ithome.com.tw/upload/images/20240924/201592252FcnuW1QAM.png 相連的權重矩陣。
      • W:與前一個隱藏狀態 https://ithelp.ithome.com.tw/upload/images/20240924/20159225LfKaBv4Pv6.png 相連的權重矩陣。
      • V:隱藏狀態到輸出層的權重矩陣。
  • RNN在每個time step處理當前輸入https://ithelp.ithome.com.tw/upload/images/20240924/201592252FcnuW1QAM.png ,並更新隱藏狀態https://ithelp.ithome.com.tw/upload/images/20240924/20159225ayQRuVOGFW.png ,然後根據這些隱藏狀態生成輸出https://ithelp.ithome.com.tw/upload/images/20240924/20159225it3i1U7FN0.png
  • RNN 的強大之處在於它能夠通過隱藏狀態傳遞信息,使得序列中前後的數據可以相互影響。

RNN的缺點

聽起來RNN好像很厲害,在處理時間序列資料和時間依賴性問題上有很大的優勢,但其實他也有很明顯的缺點,這些缺點限制了他在某些應用中的表現。

  1. 梯度消失與梯度爆炸
    • 梯度消失:當 RNN 處理長序列數據時,隨著time step的增加,反向傳播的梯度會逐漸變小,最終導致模型無法有效學習序列中遠端訊息的影響。這意味著 RNN 對於較長的依賴關係(例如,句子開頭的資料對句子結尾的影響)無法捕捉。
    • 梯度爆炸:在一些情況下,梯度可能變得非常大,導致網路的參數更新異常,使得網路不穩定。
    • 這兩個問題使得 RNN 在處理長序列資料時,訓練變得困難,並且模型的學習效果不好。
  2. 難以捕捉長期依賴關係
    • RNN 的記憶範圍有限,隨著time step的增加,遠端的歷史訊息對當前輸出的影響會越來越小。因此,RNN 難以處理那些依賴於長期上下文的任務。例如,在一篇長文章中,前幾段的信息可能對最後的總結非常重要,但 RNN 很難有效捕捉這種長期依賴。

而這個問題可以透過RNN的變形來解決,也就是LSTM來解決,那甚麼是LSTM,我們明天就會一起來探討LSTM囉。


上一篇
[Day 15] 卷積神經網路:影像識別的核心技術初探
下一篇
[Day 17] LSTM:突破RNN限制的長短期記憶網路
系列文
深度學習的學習之旅:從理論到實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言