此分類用於記錄吳恩達深度學習課程的學習筆記。
課程相關信息鏈接如下:
- 原課程視頻鏈接:[雙語字幕]吳恩達深度學習deeplearning.ai
- github課程資料,含課件與筆記:吳恩達深度學習教學資料
- 課程配套練習(中英)與答案:吳恩達深度學習課後習題與答案
本篇為第五課的第一週內容,1.1的內容以及一些基礎的補充。
本週為第五課的第一週內容,與 CV 相對應的,這一課所有內容的中心只有一個:自然語言處理(Natural Language Processing,NLP)。
應用在深度學習裏,它是專門用來進行文本與序列信息建模的模型和技術,本質上是在全連接網絡與統計語言模型基礎上的一次“結構化特化”,也是人工智能中最貼近人類思維表達方式的重要研究方向之一。
這一整節課同樣涉及大量需要反覆消化的內容,橫跨機器學習、概率統計、線性代數以及語言學直覺。
語言不像圖像那樣“直觀可見”,更多是抽象符號與上下文關係的組合,因此理解門檻反而更高。
因此,我同樣會儘量補足必要的背景知識,儘可能用比喻和實例降低理解難度。
本篇的內容關於序列數據和序列模型,是自然語言處理中基礎內容。
1. 序列數據
在 NLP 中,一個最基礎、也最核心的問題是:語言數據,和我們之前見過的數據,有什麼本質不同?
答案可以簡單概括為:它是有順序的。
在機器學習中,我們把 ”順序本身攜帶信息” 的數據稱為序列數據。
最直觀的例子就是一句話,同樣是這幾個詞:
“我 吃 飯”
“飯 吃 我”
包含的詞完全一樣,但表達的含義卻天差地別,這説明:在語言中,信息不僅存在於“有哪些元素”,還存在於“元素出現的順序”。
這與我們之前在 CV 中常見的數據有所不同。
一張圖像在進入模型之前,通常已經被表示為一個固定尺寸的二維像素網格。
無論我們先看左上角還是右下角,整幅圖像的所有信息在輸入時是同時存在的,模型面對的是一個“完整畫面”。
在這種設定下,卷積網絡更關注的是空間結構關係:哪些像素彼此相鄰、哪些局部區域可以組成更高層的形狀。
而語言數據的形式則不同,一句話並不是一個天然的“整體對象”,而是由詞語按順序依次出現的。
簡單來説:在按序建模的假設下,模型對當前詞的理解,往往依賴於之前已經出現的所有詞所構成的上下文。
需要説明的是,這裏的“按順序”並不一定意味着模型必須像人一樣一個詞一個詞地讀。
在後續將要介紹的 Transformer 模型中,整句話的所有詞可以被同時送入模型進行處理,但模型仍然需要通過顯式地引入位置信息,來區分“哪個詞在前、哪個詞在後”。
再打個比方:
圖像更像是一張已經攤開在桌面上的地圖,所有信息一眼都在,模型在處理時不依賴顯式的時間順序,而是直接建模整體的空間結構關係。
而語言更像是一段正在播放的語音或文字流,我們從哪裏聽,哪裏看,結果是截然不同的。
因此,在語言任務中,“先出現什麼、後出現什麼”本身就構成了信息的一部分,而不能被隨意打亂
正因為這種差異,讓CV 模型更擅長處理空間結構與局部模式,而 NLP 模型必須重點解決順序、依賴關係以及上下文記憶的問題。
我們總結語言、語音、時間等序列數據的特徵如下:
- 數據是按順序排列的。
- 當前信息往往依賴於之前已經出現的內容。
- 數據長度通常不固定。
這些特徵決定了:在處理序列數據時,模型必須顯式地考慮順序與上下文,而不能僅把輸入當作一個無序的特徵集合來處理。
2. 序列模型
我們分別看看,如果使用我們已經瞭解過的全連接網絡和卷積網絡來處理序列數據,效果會怎麼樣。
2.1 全連接網絡:無法自然處理“順序”
如果要應用全連接網絡,最直接的想法是: 把一句話中的每個詞表示成向量,再把這些向量拼接成一個長向量,送進全連接網絡。
這種做法在形式上是可行的,但問題也非常明顯:
首先,全連接網絡要求固定長度輸入,而語言序列的長度是天然不固定的。
一句話可以只有幾個詞,也可以非常長。為了滿足輸入要求,我們不得不進行截斷或填充,這本身就引入了額外的工程複雜度。
其次,更關鍵的是:全連接網絡並不具備“順序感知”能力。在它看來,輸入只是一個高維向量,各個維度之間沒有“先後”這一概念。
模型本身並不知道:“這是第一個詞”“這是第三個詞”。
因此,這種處理方式天然忽略了語言中最重要的結構信息——順序與依賴關係。不能用來處理序列數據。
2.2 卷積網絡:擅長局部模式,但缺乏長期依賴
那捲積網絡呢? 既然 CNN 能在圖像中建模局部結構,是否也可以用於序列數據?
答案是:部分可以,但不夠自然。
在序列上使用一維卷積時,卷積核可以捕捉局部連續片段,例如相鄰幾個詞構成的短語或固定搭配。 從這個角度看,CNN 確實能夠建模局部上下文信息。
在這裏,我們需要引入一個概念:感受野(receptive field)。
感受野指的是卷積層中某個神經元能夠“看到”的輸入區域範圍。
打個比方:
- 在圖像中,如果一個卷積神經元的感受野是 \(3\times3\),它只能感知這九個像素的局部信息;
- 類似地,在序列上,一個卷積核的感受野就是它一次性能看到的連續詞的數量。
這就意味着,卷積網絡在處理序列時天然擅長捕捉局部模式或短距離依賴,但如果想讓模型理解“句首的詞”與“句尾的詞”之間的關係,就必須堆疊很多層卷積或人為擴大卷積核範圍,才能覆蓋整個序列。
簡單來説,感受野越大,模型越容易捕捉長距離依賴,但這也帶來了計算和訓練上的問題。
這使得模型: - 對短距離依賴敏感。
- 對長距離依賴不夠高效。
- 並且仍然缺乏一種明確的“時間狀態”概念。
可以這樣理解:
卷積網絡更像是在掃描局部片段,而不是在沿着時間軸逐步理解一句話的發展過程,因此,雖然卷積對序列數據的處理能力強於全連接網絡,但是它仍有所侷限。
2.3 序列模型要解決的核心問題
通過以上對比可以看到,全連接網絡和卷積網絡並不是“不能”處理序列數據,而是處理方式與序列數據的本質存在衝突。
序列數據的核心特點在於:信息是隨順序逐步展開的、當前理解依賴於歷史上下文且序列長度不固定。
因此,我們真正需要的是這樣一類模型: 在處理當前輸入的同時,能夠保留並更新對“過去信息”的表示。
也就是説,序列模型的核心能力並不在於“輸入形式”, 而在於它是否具備一種可隨時間演化的內部狀態,用來承載上下文信息,並參與後續決策。
後續我們將看到的 RNN、LSTM、GRU 以及 Transformer, 雖然實現方式不同,但都圍繞着同一個目標展開: 讓模型在理解當前內容時,不是孤立地“看這一刻”,而是基於整個上下文來判斷。
這就是序列模型所具備的能力。
3. 序列模型的應用領域
序列模型在 NLP 中應用廣泛,但需要注意的是:序列模型不一定要求輸入和輸出都是序列。它的核心能力在於能夠保留上下文信息並處理隨時間展開的數據。只要輸入或輸出中存在序列性質,序列模型就能發揮作用。
從輸入和輸出的角度,可以分為以下幾類情況:
- 序列→序列: 輸入和輸出都是序列,例如機器翻譯。模型需要根據輸入序列的上下文生成對應的輸出序列。
- 序列→標量或類別: 輸入是序列,輸出是單個值或類別,例如情感分析、文本分類。模型需要理解整段序列的語義,並輸出整體判斷。
- 標量或固定輸入→序列: 輸入不是序列,但模型需要生成序列作為輸出,例如文本生成或對話系統中根據提示生成完整回答。
由此可見,序列模型的核心能力不是“必須處理序列輸入或輸出”,而是能夠在處理過程中維護上下文信息。
來看看序列模型的一些常見應用領域:
| 任務 | 輸入類型 | 輸出類型 | 説明 |
|---|---|---|---|
| 文本分類 | 序列 | 類別 | 如情感分析、新聞分類,理解整段文本並輸出單一標籤 |
| 命名實體識別 (NER) | 序列 | 序列 | 對每個詞進行標註,如“人名”“地名”等 |
| 機器翻譯 | 序列 | 序列 | 將源語言句子轉換為目標語言句子 |
| 文本生成 | 序列或標量 | 序列 | 根據輸入文本或提示生成完整文本 |
| 語音識別 | 序列 | 序列 | 將語音信號轉為文字序列 |
| 問答系統 | 序列 | 序列或標量 | 根據問題生成答案,答案可以是短文本或單一類別 |
| 時間序列預測 | 序列 | 序列或標量 | 如股價預測,根據歷史序列預測未來數值 |
通過這個分類,可以清晰地看到:序列模型的核心是處理順序和上下文,不必限制輸入輸出都為序列。只要有序列信息存在,它就可以發揮價值。
4. 總結
| 概念 | 原理 | 比喻 |
|---|---|---|
| 序列數據 | 數據元素按順序排列,當前理解依賴歷史上下文,長度不固定 | 圖像像攤開的地圖,一眼可見整體;語言像正在播放的語音或文字流,需要順序感知 |
| 全連接網絡處理序列 | 只能接受固定長度輸入,無法天然感知順序 | 只是把所有詞拼成一個長向量,模型看不到先後順序 |
| 卷積網絡處理序列 | 能捕捉局部連續模式(短距離依賴),感受野有限,長距離依賴不高效 | 卷積像掃描局部片段,而不是沿時間軸理解整句話的發展 |
| 感受野 (Receptive Field) | 一個卷積神經元一次能夠看到的輸入區域 | 圖像:3×3像素只能看到局部;序列:卷積核一次看到幾個連續詞 |
| 序列模型核心能力 | 通過可隨時間演化的內部狀態,保留並更新上下文信息,理解當前輸入時考慮歷史信息 | 模型像帶記憶的閲讀者,理解每個詞時參考整段上下文 |
| 輸入/輸出類型靈活性 | 序列模型不要求輸入輸出都為序列,只要一方為序列即可發揮作用 | 輸入是流,輸出是判斷或生成,模型記憶歷史信息 |
| 序列模型應用 | NLP、語音、時間序列等領域,如文本分類、NER、機器翻譯、文本生成、語音識別、問答、時間序列預測 | 依賴上下文信息,模型像“順序感知器”,根據過去信息做當前決策 |