iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
生成式 AI

《AI 新手到職場應用:深度學習 30 天實戰》系列 第 21

認識時間序列與文字:RNN 的核心概念

  • 分享至 

  • xImage
  •  

在前幾天,我們專注在處理圖片的神經網路,尤其是 CNN 如何幫助我們從圖片中找出特徵。

但世界上的資料並不只有圖片,還有許多與「時間」或「順序」密切相關的訊號,
例如股市的走勢、語音訊號,甚至是我們日常的文字句子。

這些資料有一個共通點:
它們不是單一靜態的輸入,而是一段「序列」,每個元素之間往往有上下文的關聯。
而為了處理這類資料,研究者提出了一種特別的神經網路結構

  • 循環神經網路(Recurrent Neural Network, RNN)。

今天的學習中,我們就來專心研究關於RNN的資訊,我們為什麼需要他?
他在我們的使用中扮演了什麼角色?


什麼是 RNN?

RNN,全名 Recurrent Neural Network(遞迴神經網路),是一種專門設計來處理序列資料的神經網路。
它和一般的神經網路不同,最大特色是擁有「循環結構」。
這種循環讓網路在處理當前輸入時,能同時參考前一步驟的資訊,形成一種「記憶」效果。
我們也就可以說,RNN 能理解資料之間的前後關係,而不只是單一片段。

我們再舉個範例來說,如果要讓模型理解一句話:「我今天很開心」,
傳統神經網路只會單獨看「今天」或「開心」這些詞,但 RNN 則會把「我」「今天」「很」這些前文保留下來,
讓「開心」的判斷更合理。

這種設計,使得 RNN 特別適合應用在語音辨識、語言翻譯、文字生成,
甚至股價預測等需要考慮時間與順序的任務。


RNN 的核心概念:記憶與上下文

RNN 的最大特色在於,它不只看「當下」的輸入,
還能保留「過去」的資訊,並且將這些歷史內容一併考慮進去。

RNN 有一個「隱藏狀態(hidden state)」,這個狀態能記住之前時間步驟的內容。
當新的輸入到來時,模型會把它與隱藏狀態融合,決定新的輸出。

假設我們要讓模型完成一句話 —「西瓜是綠色的」。當模型讀到「西瓜」時,它會把這個詞存進記憶。
接下來讀到「是」時,它會參考剛剛記住的「西瓜」,進一步推測合理的延續。
最後,它有很大機率會輸出「綠色」,因為「西瓜」和「綠色」在上下文中有自然的連結。
這就是 RNN 能處理上下文語意的直觀原因。


RNN 的結構與資料流

在結構上,RNN 其實和一般神經網路很相似:
都有輸入層隱藏層輸出層

但不同的是,RNN 的隱藏層會「遞迴」接收自己在前一時間步的輸出,這形成一個環狀的訊息流。
因此,輸入不再是孤立的,而是與之前的步驟有連結。

數學上,如果我們用 xt 表示當前時間步的輸入,ht 表示隱藏狀態,那麼它的更新公式大致可以寫成:

https://vocus.cc/article/678c898cfd897800012d7158
https://ithelp.ithome.com.tw/upload/images/20250929/20169196c0RhPybCnt.png

(來源:https://vocus.cc/article/678c898cfd897800012d7158)


序列任務的類型(mapping)

在實作中,我們常根據「輸入與輸出在時間上的對應關係」把問題分類,
了解這些有助於選模型與 loss 設計。
而根據 input 及 output 的數目,RNN 也可以有很多的變化與應用,
以下就舉出常見的例子供大家參考:

one-to-one:

標準分類(像一張圖片對一個標籤)。

many-to-one:

多個時間步輸入,輸出一個結果(例如情緒分類:一段文字輸出一個情感標籤)。

one-to-many:

單一輸入產生序列輸出(像從一張圖片生成描述句子)。

many-to-many(對齊或非對齊):

輸入序列到輸出序列(機器翻譯、語音轉文字);
若 input/output 同步長度(例如序列標註)可直接對齊,
否則用 seq2seq 結構attention

https://ithelp.ithome.com.tw/upload/images/20250929/20169196KwImLWxtTE.png
(圖片來源:https://hackmd.io/@4XoSjtMaS46Zzn7DwmEIEQ/Syjf9EOPL

透過以上這些靈活的設計,
就讓 RNN 能廣泛應用於語音辨識、文字生成、時間序列預測等不同領域。


RNN 的限制與挑戰

雖然 RNN 在處理序列資料上有它的獨特優勢,但它也存在一些相當明顯的限制與挑戰,
這些問題在實務應用中常常讓模型效果打折扣。
以下我會用比較多譬喻的方式,來談談這些可能會有的問題:

長期依賴問題:

首先我們要談到的是「長期依賴問題」(long-term dependency problem)。
RNN 雖然能記住前面步驟的資訊,但隨著序列變得愈長,早期的訊息會逐漸消失,模型只會保留最近的內容。
如果當你要讓模型理解一句很長的句子:「我昨天在書店買了一本關於人工智慧的書,它的內容非常精彩,尤其是關於神經網路的部分……」,當模型處理到後面「神經網路」這幾個字時,它可能早就忘了前面提到的「人工智慧」。
這樣的情況會導致模型無法準確捕捉長距離的語意關聯。

梯度消失與梯度爆炸:

接著是「梯度消失與梯度爆炸」(vanishing & exploding gradients)。
在訓練 RNN 的過程中,誤差需要一層層往回傳遞(反向傳播),這時候梯度會經過很多次相乘。
如果數值太小,會導致梯度幾乎變成零,模型更新停滯,這就叫做梯度消失;
而如果數值太大,則會導致模型參數劇烈震盪,這就叫做梯度爆炸。
這兩種情況都會讓訓練變得不穩定,甚至完全失敗。
這也是為什麼早期的 RNN 難以處理較長的序列。

計算效率:

再來是關於「計算效率」的挑戰。
由於 RNN 是「逐步」處理輸入,也就是說它要一個接著一個時間點地運算,
而不像 CNN 那樣可以並行處理整張圖片,因此在處理很長的資料序列時,速度會變得非常慢。

過度依賴順序資訊:

最後,還有「過度依賴順序資訊」的問題。RNN 很擅長利用前後文的順序,
但在某些情境中,並不是所有資訊都要強調「時間先後」。
例如在一段文字中,有些詞與詞的關聯不必依賴順序,
而是更廣泛的語意關係。RNN 在這方面表現就不如後來的 Transformer 架構。


RNN 的應用:

RNN 雖然在某些地方逐漸被 Transformer 取代,
但在處理需要「順序資訊」的資料時,依然有許多經典且實用的應用。
以下列出幾個代表性的例子,並附上簡單說明:

自然語言處理(NLP)

RNN 能夠理解文字中的先後關係,例如用於語言模型(預測下一個字或詞)、自動補全、以及機器翻譯。
當如果我輸入「我今天想去」,RNN 可能預測下一個字是「運動」或「看電影」。

語音辨識

語音是一種隨時間變化的訊號,RNN 可以逐步處理聲音片段並將其轉換為文字。這就是像 Siri、Google 助理等語音助理背後的核心技術之一。

時間序列預測

在金融市場,RNN 常被用來分析股價、匯率的過去走勢,並預測未來的變化。天氣預測也是另一個應用,透過歷史資料推估未來的降雨量或溫度。

影片分析

影片是一連串的影像,RNN 能夠捕捉畫面隨時間的變化,進而做出動作辨識。例如判斷某人是在「打籃球」還是「游泳」。

使用者行為預測

在電商或社群平台中,RNN 可以依照使用者過去的操作順序(如點擊、瀏覽或購買紀錄),推測他可能的下一個動作,並提供個人化推薦。

這些應用的共同點,就是「時間順序」或「資料的先後關聯性」很重要。
RNN 善於捕捉這種序列結構,因此能在這些領域發揮作用。


後續的改良與發展:

而為了克服這些問題,研究者在後來提出了改良版本的 RNN,
例如像是 LSTM(長短期記憶網路)和 GRU(門控遞迴單元),它們能更好地捕捉長期依賴關係。

再往後,Transformer 架構更是徹底顛覆了 RNN 的方式:
它完全拋棄「循環」設計,改用注意力機制(Attention)同時考慮整個序列,
讓運算能並行化,大幅加速訓練並提升長期記憶能力。


以上就是我們今天對RNN的介紹了,接下來也會進行實作,敬請期待。

參考資料:
https://hackmd.io/@4XoSjtMaS46Zzn7DwmEIEQ/Syjf9EOPL


上一篇
CNN 實作:打造你的第一個圖片分類器(2/2)
系列文
《AI 新手到職場應用:深度學習 30 天實戰》21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言