iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
AI & Data

AI 再次入門到進階系列 第 15

【Day15】RNNs的演變,算法,程式碼實現(LSTM,GRU)(二)

  • 分享至 

  • xImage
  •  

前面的內容請至【Day14】RNNs的演變,算法,程式碼實現(一)

2.LSTM

2.1.算法簡單描述

LSTM(長短期記憶網絡)是一種特殊類型的循環神經網絡(RNN),專門設計用於解決長序列中的長期依賴問題。傳統的RNN在處理長序列時會遇到梯度消失或梯度爆炸的問題,這使得網絡難以學習和記憶遠距離的依賴關係。LSTM通過引入一種叫做“門”的機制來解決這個問題。

LSTM的組成部分

一個LSTM單元主要由以下幾個部分組成:

  • 遺忘門(Forget Gate): 決定哪些信息從單元狀態(Cell State)中丟棄。
  • 輸入門(Input Gate): 決定哪些新信息將存儲在單元狀態中。
  • 單元狀態(Cell State): LSTM的“記憶”部分,存儲了過去的信息。
  • 輸出門(Output Gate): 根據單元狀態和當前輸入,決定輸出什麼信息。

LSTM的工作原理

遺忘門: LSTM首先決定要從單元狀態中丟棄哪些信息。這是通過一個sigmoid層完成的,它查看當前輸入和上一個隱藏狀態,並輸出一個在0到1之間的數值給每個在單元狀態中的數字。1表示“完全保留”,0表示“完全丟棄”。

https://ithelp.ithome.com.tw/upload/images/20230920/20092056aWqhYCDokH.png
輸入門: LSTM然後決定將哪些新信息存儲在單元狀態中。這分為兩步。首先,一個sigmoid層決定哪些值將更新。然後,一個tanh層創建一個新的候選值向量,可能會添加到狀態中。

https://ithelp.ithome.com.tw/upload/images/20230920/20092056g0BaNSgvqx.png

更新單元狀態: 現在,可以使用遺忘門的輸出和輸入門的輸出來更新單元狀態。

https://ithelp.ithome.com.tw/upload/images/20230920/200920566xhf3DYzhl.png
輸出門: 最後,決定輸出什麼值。輸出依賴於單元狀態,但是是一個過濾後的版本。首先,運行一個sigmoid層來決定單元狀態的哪個部分將輸出。然後,將單元狀態通過tanh(將值推到-1和1之間)並將它與sigmoid門的輸出相乘,以便只輸出決定輸出的部分。

https://ithelp.ithome.com.tw/upload/images/20230920/20092056em2HH7aP77.png

這些步驟共同使LSTM能夠在長序列中有效地學習長期依賴。

2.2.程式碼範例(TensorFlow)

這邊請直接點擊Colab查看

3.GRU

3.1.算法簡單描述

GRU原理

GRU(門控遞歸單元,Gated Recurrent Unit)是一種用於遞歸神經網絡(RNN)的特殊類型的激活單元。GRU 是由 Cho 等人在 2014 年提出的,旨在解決傳統 RNN 在處理長序列時面臨的梯度消失和梯度爆炸問題。

基本結構

GRU 的基本結構包括兩個門:

  1. 更新門(Update Gate):決定何時更新隱藏狀態。
  2. 重置門(Reset Gate):決定隱藏狀態在多大程度上應該保留之前的信息。

數學公式

以下是 GRU 的數學表示:

https://ithelp.ithome.com.tw/upload/images/20230920/20092056jN3PLSdSAA.png

其中,σ 是 Sigmoid 激活函數,tanh 是雙曲正切激活函數,∗ 表示逐元素乘法。

工作原理

  1. 更新門:決定了當前輸入和過去的隱藏狀態應該在多大程度上影響當前的隱藏狀態。
  2. 重置門:用於決定過去的隱藏狀態在多大程度上應該與當前的輸入交互。
  3. 候選隱藏狀態:是基於當前輸入和過去隱藏狀態(經過重置門調整)的一個新的隱藏狀態。
  4. 最終隱藏狀態:是基於更新門、候選隱藏狀態和過去隱藏狀態的一個加權平均。

優點

  • 相對於傳統的 RNN,GRU 能更好地捕捉長距離依賴。
  • 計算複雜性較 LSTM 稍低,因為它只有兩個門。

應用場景

GRU 常用於自然語言處理(NLP)、時間序列分析、語音識別等任務。

LSTM 和 GRU的主要區別

門的數量:

  • LSTM 有三個門:遺忘門、輸入門和輸出門。
  • GRU 只有兩個門:更新門和重置門。

隱藏狀態和單元狀態:

  • LSTM 有兩種狀態:隱藏狀態和單元狀態。
  • GRU 只有一種狀態:隱藏狀態。

計算複雜性:

  • LSTM 的結構較為複雜,因此計算成本較高。
  • GRU 的結構較為簡單,因此計算成本較低。

參數數量:

  • LSTM 有更多的參數,因此需要更多的訓練時間。
  • GRU 有較少的參數,因此訓練速度可能較快。

長距離依賴:

  • LSTM 通常更擅長捕捉長距離依賴。
  • GRU 在某些情況下可能無法捕捉到非常長的依賴。

應用場景:

  • LSTM 常用於更複雜的序列預測問題。
  • GRU 則常用於較短的序列或者計算資源有限的情況。

訓練效率:

  • 由於 GRU 有較少的參數和簡單的結構,它通常更容易訓練。
  • LSTM 由於有更多的參數和複雜的結構,可能需要更多的訓練時間。

3.2.程式碼範例(TensorFlow)

這邊請直接點擊Colab查看

4.其他(如Bidirectional RNN, Attention-based RNN等)

雙向 RNN (Bidirectional RNN)

與單向 RNN 不同,雙向 RNN 在兩個方向上都有信息流動:一個從輸入到輸出,另一個從輸出到輸入。這使得網絡能夠有更全面的了解上下文信息,通常會產生更好的性能。這種類型的 RNN 常用於自然語言處理(NLP)和語音識別等任務。

Attention-based RNN

注意力機制允許 RNN 專注於輸入序列的特定部分,而不是整個固定大小的上下文。這在機器翻譯或問答系統中特別有用,其中輸入和輸出序列的長度可能會變化。注意力機制通常與 LSTM 或 GRU 結合使用。

五.參考:

1.https://www.kaggle.com/code/hassanamin/time-series-analysis-using-lstm-keras/notebook


關於之後的鐵人賽:

我在跑完幾個算法的範例之後,剩下的幾天會專注於建立幾個Github上面的玩具項目。目前希望最少做兩個玩具項目,一個是物件辨識,一個是大模型相關的。

30天之後大概也會每週做一個玩具項目。

大模型相關的也會參考這本書:https://intro-llm.github.io/

大模型的玩具項目,我是希望能觸及到大模型相關的所有知識跟實作。

物件辨識也是希望能做到程式那在手機上聽到訊息後透過鏡頭分辨物體然後判斷熱量或價格這類的。

另外,有時間NLP方面的可能就看 Stanford CS224N: NLP with Deep Learning 補強基礎。

不過目前大概就是以實作玩具以及能拿來面試的項目為主,我自己覺得我一次能做好一件事就很好了。


上一篇
【Day14】RNNs的演變,算法,程式碼實現(一)
下一篇
【Day16】大語言模型的基礎:Transformer(ㄧ)
系列文
AI 再次入門到進階30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言