第十二章 應用 (開篇引言)

重點摘要: 本章旨在介紹如何使用深度學習來解決計算機視覺、語音識別、自然語言處理以及其他商業領域中的應用。首先將討論在許多最重要的 AI 應用中所需的大規模神經網路的實現。接著,回顧深度學習已經成功應用的幾個特定領域。儘管深度學習的一個目標是設計能夠處理各種任務的算法,但截至目前,深度學習的應用仍然需要一定程度的特化。例如,計算機視覺中的任務對每一個樣本都需要處理大量的輸入特征(像素),而自然語言處理任務的每一個輸入特征都需要對大量的可能值(詞匯表中的詞)建模。

Q: 本章將涵蓋深度學習在哪幾個主要應用領域的實例?

A: 本章將涵蓋深度學習在計算機視覺、語音識別、自然語言處理以及其他商業領域的應用實例。

Q: 為什麼說即使深度學習的目標是設計通用算法,目前的應用仍然需要一定程度的特化?請舉例說明。

A: 因為不同領域的數據和任務具有不同的特性和挑戰。 * 計算機視覺: 任務通常需要處理大量的像素級輸入特征,對空間結構和局部模式敏感。 * 自然語言處理: 輸入特征(如詞語)的可能取值空間非常大(整個詞匯表),需要模型能夠處理序列信息和語義關係。 這種特化體現在模型架構的選擇、輸入數據的預處理方式以及特定任務的損失函數設計等方面。

Q: 本章將首先討論實現大規模神經網路的哪些方面?

A: 本章將首先討論在許多最重要的 AI 應用中所需的大規模神經網路的實現,這可能包括硬件設施、軟件框架以及訓練大規模模型的策略。


12.1 大規模深度學習

重點摘要: 深度學習的基本思想基於聯結主義:儘管機器學習模型中單個生物性的神經元或者說是單個特征不是智能的,但是大量的神經元或者特征作用在一起往往能夠表現出智能。我們必須著重強調神經元數量必須很大這個事實。相比 20 世紀 80 年代,如今神經網路的精度以及處理任務的複雜度都有一定提升,其中一個關鍵的因素就是網路規模的巨大提升。人工神經網路的規模也僅和昆蟲的神經系統差不多。由於規模的大小對於神經網路來說至關重要,因此深度學習需要高性能的硬件設施和軟件實現。


12.1.1 快速的 CPU 實現

重點摘要: 傳統的神經網路是用單台機器的 CPU 來訓練的。如今,這種做法通常被視為是不可取的。現代通常使用 CPU 或者許多台機器的 CPU 連接在一起進行計算。在這種昂貴配置之前,為論證無法承擔神經網路所需的巨大計算量,研究者們付出了巨大的努力。 儘管實現高效的數值代碼已超出本書的討論範圍,但仍需強調通過設計一些特定於 CPU 的操作可以大大提升效率。例如,在 2011 年,最好的 CPU 在訓練神經網路時使用定點運算比浮點運算跑得更快。通過調整定點運算的實現方式,Vanhoucke et al. (2011) 獲得了 3 倍於一個強浮點運算系統的速度。因為各個新型 CPU 都有各自不同的特性,所以有時候採用浮點運算實現會更快。一條重要的準則是,通過特殊設計的數值運算,我們可以獲得巨大的回報。除了選擇定點運算或者浮點運算以外,其他的策略還包括了如通過優化數據結構避免高速緩存缺失、使用向量指令等。

Q: 為什麼說傳統的單 CPU 訓練神經網路的做法在現代通常是不可取的?

A: 因為現代深度學習模型通常規模巨大(包含大量參數和層),訓練數據集也非常龐大。單台 CPU 的計算能力難以在合理的時間內完成這些大規模模型的訓練。

Q: 為了提升 CPU 上神經網路訓練的效率,研究者們探索了哪些策略?

A: 策略包括:

  1. 使用多 CPU 或多機 CPU 集群: 通過並行計算來加速訓練。
  2. 特定於 CPU 的操作優化:
    • 定點運算 vs. 浮點運算: 在某些情況下(如早期的 CPU 架構),精心設計的定點運算可能比浮點運算更快。
    • 優化數據結構: 減少高速緩存未命中 (cache misses),提高數據訪問效率。
    • 使用向量指令 (Vector Instructions): 利用 CPU 的 SIMD (Single Instruction, Multiple Data) 能力來並行處理數據。
    • 特殊設計的數值運算: 針對特定計算(如矩陣乘法)進行高度優化。

Q: Vanhoucke et al. (2011) 的研究表明了什麼關於 CPU 實現的結論?

A: 他們的研究表明,通過精心調整定點運算的實現方式,可以在訓練神經網路時獲得比標準浮點運算系統快數倍(其實驗中達到 3 倍)的速度。這強調了針對特定硬件特性進行數值優化可以帶來顯著的性能提升。


12.1.2 GPU 實現

重點摘要: 許多現代神經網路的實現基於圖形處理器 (Graphics Processing Unit, GPU)。GPU 最初是為圖形應用而開發的專用硬件組件,其大規模並行架構使其非常適合深度學習中的計算密集型任務(主要是大量的矩陣和向量運算)。 與 CPU 相比,GPU 通常擁有更多的計算核心(但每個核心相對簡單),並且具有更高的內存帶寬。這使得 GPU 能夠同時執行大量並行計算。NVIDIA 的 CUDA 平台和相關的編程語言(如 CUDA C)使得開發者能夠利用 GPU 的並行計算能力進行通用計算。 將深度學習算法移植到 GPU 上可以帶來顯著的加速,尤其是在訓練大規模模型時。需要仔細設計內存訪問模式(例如,使用合併內存訪問, coalesced memory access)以充分發揮 GPU 的性能。

Q: 什麼是 GPU?它最初是為了解決什麼問題而設計的?

A: GPU 是圖形處理器 (Graphics Processing Unit) 的縮寫。它是一種專門設計用來執行與圖形渲染相關的大量並行計算的硬件。它最初是為了加速計算機遊戲和其他圖形密集型應用中的圖像生成和處理而設計的。

Q: 相比於 CPU,GPU 在架構上有哪些主要特點使其適合深度學習計算?

A:

  1. 大規模並行架構: GPU 通常包含數百甚至數千個較小的計算核心,可以同時執行大量並行計算。而 CPU 的核心數量較少,但每個核心更強大,更擅長執行複雜的串行任務。
  2. 高內存帶寬: GPU 通常配備高帶寬的內存,能夠快速地讀寫大量數據,這對於處理大規模矩陣和向量運算是至關重要的。
  3. 針對並行優化: GPU 的設計目標是最大化吞吐量(單位時間內完成的工作量),而不是像 CPU 那樣側重於最小化單個任務的延遲。

Q: 什麼是 CUDA?它在 GPU 計算中扮演什麼角色?

A: CUDA (Compute Unified Device Architecture) 是由 NVIDIA 開發的一個並行計算平台和編程模型。它允許軟件開發者使用 C、C++、Fortran 等編程語言來利用 NVIDIA GPU 的並行計算能力執行通用計算(而不僅僅是圖形處理)。CUDA 提供了一套 API、庫和工具,使得在 GPU 上編寫和優化高性能並行程序成為可能。在深度學習領域,CUDA 是實現 GPU 加速的關鍵技術之一。

Q: 為了在 GPU 上獲得最佳性能,需要注意哪些內存訪問模式?

A: 需要注意合併內存訪問 (coalesced memory access)。當 GPU 上的多個線程(通常組織成一個 warp)同時訪問內存時,如果它們訪問的是連續的、對齊的內存地址,那麼這些訪問可以被合併成一次或少數幾次內存事務,從而最大限度地利用內存帶寬。如果內存訪問是分散的、非對齊的,則會導致多次低效的內存事務,顯著降低性能。


12.1.3 大規模的分佈式實現

重點摘要: 當單台機器的計算資源(即使是多 GPU)仍然有限時,需要將訓練或推斷任務分佈到多台機器上進行。分佈式實現主要有兩種策略:

Q: 什麼是數據並行 (data parallelism)?它是如何工作的?

A: 數據並行是一種分佈式訓練策略。其工作方式如下:

  1. 模型複製: 在每個工作節點(例如,一台機器或一個 GPU)上都保存一份完整的模型副本。
  2. 數據劃分: 將整個訓練數據集劃分為多個不相交的子集(小批量數據)。
  3. 並行計算梯度: 每個工作節點在其分配到的數據子集上獨立地進行前向傳播和反向傳播,計算出模型參數的梯度。
  4. 梯度同步/聚合: 所有工作節點計算出的梯度被收集起來,通過某種方式進行聚合(例如,求平均或求和)。
  5. 參數更新: 使用聚合後的梯度來更新全局的模型參數。這個更新後的參數再分發回各個工作節點,開始下一輪迭代。

Q: 什麼是模型並行 (model parallelism)?它適用於什麼情況?

A: 模型並行是另一種分佈式訓練策略。其工作方式是將單個非常大的模型本身的不同部分(例如,不同的層或層內的不同組件)分配到不同的工作節點上。 它適用於以下情況: * 模型過大: 當模型的大小超過了單個計算設備(如 GPU)的內存容量時,無法將整個模型放入單個設備中。 * 計算依賴性: 模型中的某些計算部分可以自然地劃分並在不同設備上並行執行,然後再匯總結果。

Q: 什麼是異步隨機梯度下降 (ASGD)?它與同步 SGD 有何不同?它有哪些優缺點?

A: 異步隨機梯度下降 (ASGD) 是一種在分佈式環境中進行隨機梯度下降的方法。


12.1.4 模型壓縮

重點摘要: 在許多商業應用中,推斷算法的運行時間和內存開銷非常重要,尤其是在資源受限的設備(如移動設備)上部署模型時。模型壓縮 (model compression) 旨在減小已訓練好的大型深度學習模型的尺寸和計算複雜度,同時盡可能保持其性能。 常用策略包括:

Q: 什麼是模型壓縮?為什麼它在深度學習的實際應用中很重要?

A: 模型壓縮是指一系列旨在減小預訓練好的深度學習模型的尺寸(存儲空間)和/或計算複雜度(推斷時間)的技術,同時盡可能保持其原始性能(如準確性)。 它在實際應用中很重要,因為: 1. 資源受限的部署環境: 許多應用場景(如移動設備、嵌入式系統)的計算資源、內存和功耗都非常有限,無法直接部署大型的深度學習模型。 2. 推斷延遲: 對於實時應用(如自動駕駛、實時語音識別),模型的推斷速度至關重要。壓縮後的模型通常具有更低的推斷延遲。 3. 帶寬和存儲成本: 較小的模型更容易通過網絡傳輸和存儲。

Q: 請列舉幾種常見的模型壓縮技術。

A: 常見的模型壓縮技術包括:

  1. 權重剪枝 (Weight Pruning): 移除模型中冗餘或不重要的權重(例如,將絕對值較小的權重設為零),然後可能對模型進行微調。
  2. 量化 (Quantization): 將模型中的權重和/或激活值從高精度浮點數(如 32 位)轉換為低精度表示(如 8 位整型、4 位甚至二值/三值)。
  3. 知識蒸餾 (Knowledge Distillation): 訓練一個較小的「學生」模型,使其不僅學習真實標籤,還學習模仿一個更大的、性能更好的「教師」模型的輸出(包括其預測的類別機率分佈,即軟標籤)。
  4. 低秩分解 (Low-Rank Factorization): 將模型中的大型權重矩陣(特別是全連接層的)分解為多個秩較低的矩陣的乘積,從而減少參數數量。
  5. 緊湊網絡架構設計 (Compact Network Design): 直接設計本質上參數更少、計算更高效的網絡結構,例如 MobileNets 中的深度可分離卷積,或 SqueezeNet 中的 fire module。

Q: 知識蒸餾是如何工作的?它為什麼能幫助訓練更小的模型?

A: 知識蒸餾的工作原理是:

  1. 首先,有一個預訓練好的、大型且性能良好的「教師」模型。
  2. 然後,訓練一個較小的「學生」模型。學生模型的訓練目標不僅僅是擬合真實的硬標籤(one-hot 編碼的類別),還包括擬合教師模型輸出的「軟標籤」。
  3. 「軟標籤」通常是教師模型在 softmax 層輸出的類別機率分佈。這些軟標籤攜帶了比硬標籤更豐富的信息,例如不同錯誤類別之間的相似性(例如,教師模型可能認為一張「寶馬」的圖片有 0.7 的機率是「寶馬」,0.2 的機率是「奔馳」,0.1 的機率是「卡車」,這比簡單地標記為「寶馬」提供了更多信息)。 通過學習模仿教師模型的軟輸出,學生模型可以從教師模型中「蒸餾」出其學到的知識和泛化能力,從而使得一個更小的模型也能達到接近(甚至有時超過,如果教師模型過擬合)教師模型的性能。

12.1.5 動態結構

重點摘要: 傳統神經網路的結構在訓練和推斷時通常是固定的。動態結構 (dynamic structure) 允許網路結構根據輸入數據進行調整。

Q: 什麼是神經網路的「動態結構」?它與傳統的靜態結構有何不同?

A:

Q: 「條件計算 (conditional computation)」是如何實現動態結構的?它有什麼潛在的好處?

A: 條件計算是指網路中的某些部分(例如,特定的隱藏單元、層或整個子網路)只有在滿足某些條件時才被激活並參與計算,否則它們保持非活動狀態。這些條件通常由輸入數據本身或網路中間層的激活來決定(例如,通過一個「門控」網路)。 潛在的好處包括: 1. 計算效率: 對於某些輸入,如果只有一部分網路被激活,可以顯著減少總的計算量。 2. 模型容量的有效利用: 允許模型擁有非常大的總容量(許多參數),但對於每個特定輸入,只使用其一小部分,從而實現了計算效率和模型表達能力的平衡。 3. 特化: 網路的不同部分可以特化於處理不同類型或不同方面的輸入。

Q: 什麼是「專家混合 (Mixture of Experts, MoE)」模型?它是如何利用動態結構的?

A: 專家混合 (MoE) 模型是一種集成學習方法,它包含:

  1. 多個「專家」子網路: 每個專家子網路都是一個(通常是較小的)神經網路,可能擅長處理特定類型的輸入數據或執行特定子任務。
  2. 一個「門控」網路 (Gating Network): 門控網路接收輸入數據,並為每個專家子網路輸出一系列「權重」或「概率」。這些權重決定了對於當前輸入,每個專家的輸出應該在多大程度上貢獻給最終的整體輸出。 MoE 利用動態結構的方式是,門控網路根據輸入動態地選擇或加權不同的專家。對於不同的輸入,可能激活不同的專家組合,或者給予不同專家不同的重要性。這允許模型學習一個更靈活、適應性更強的整體函數。

12.1.6 深度網路的專用硬件實現

重點摘要: 隨著深度學習模型的複雜性和計算需求的增加,出現了專門為加速深度學習計算而設計的硬件。

Q: 除了通用的 CPU 和 GPU,還有哪些類型的專用硬件被用於加速深度學習計算?請簡述其特點。

A:

  1. ASIC (Application-Specific Integrated Circuit,專用集成電路):
    • 特點: 專為特定應用(如深度學習模型的訓練或推斷)而從頭設計和製造的芯片。它們通常能夠為目標應用提供最高的性能和最佳的能效比。Google 的 TPU (Tensor Processing Unit) 就是一個著名的例子。
    • 優點: 性能高,能效好。
    • 缺點: 設計和製造成本高,開發週期長,一旦製造完成其功能就固定了,缺乏靈活性。
  2. FPGA (Field-Programmable Gate Array,現場可編程門陣列):
    • 特點: 一種半定制電路,它包含大量可配置的邏輯單元和可編程的內部連線。用戶可以通過編程來配置 FPGA 實現特定的數字電路功能。
    • 優點: 提供了比 ASIC 更高的靈活性(可以在部署後重新編程以適應算法的變化或新的需求),開發週期相對較短,性能通常優於 CPU/GPU(對於某些特定優化的任務)。
    • 缺點: 相對於 ASIC,其性能和能效可能稍遜一籌(因為可編程性帶來了一些開銷),編程和設計的門檻較高。

Q: 專用硬件(如 ASIC 和 FPGA)在設計上通常會針對深度學習的哪些方面進行優化?

A: 專用硬件通常會針對以下方面進行優化:

  1. 計算密集型操作: 對深度學習中頻繁使用的大規模運算(如矩陣乘法、向量點積、卷積運算)進行硬件級加速。
  2. 數據流和內存訪問: 優化數據在芯片內部和芯片與內存之間的流動路徑,減少數據搬運開銷,提高內存帶寬利用率。
  3. 數值精度: 可能支持或專門優化低精度運算(例如,8 位整型、16 位半精度浮點數,甚至更低的精度),因為許多深度學習模型在低精度下仍能保持較好的性能,而低精度運算可以顯著提高計算吞吐量並降低功耗。
  4. 並行性: 設計大規模並行處理單元,以充分利用深度學習算法中固有的數據並行性和模型並行性。
  5. 能效: 特別關注在提供高性能的同時降低功耗,這對於移動設備和大規模數據中心的部署都非常重要。

接下來的章節 (12.2 計算機視覺, 12.3 語音識別, 12.4 自然語言處理, 12.5 其他應用) 由於內容較為具體且可能非常長,我將採用稍微簡潔一些的摘要方式,但仍然會努力抓住核心內容和 Q&A。


12.2 計算機視覺

重點摘要: 計算機視覺是深度學習應用最活躍的領域之一。深度學習在圖像分類、對象檢測、圖像分割、圖像生成等任務上取得了巨大成功。


12.2.1 預處理

重點摘要: 圖像預處理是計算機視覺流程中的重要一步,旨在將原始圖像轉換為更適合神經網路處理的形式。

Q: 在計算機視覺中,對圖像進行預處理的常見步驟有哪些?它們各自的目的是什麼?

A: 常見的預處理步驟包括:

  1. 大小調整 (Resizing) 和裁剪 (Cropping):
    • 目的: 將不同尺寸的輸入圖像轉換為神經網路期望的固定輸入尺寸。裁剪可以用於提取圖像的感興趣區域或作為數據增強的一種手段。
  2. 歸一化 (Normalization):
    • 零中心化 (Zero-centering): 從每個像素值中減去數據集的平均像素值(或每個通道的平均值)。
      • 目的: 使得數據的均值為零,有助於優化。
    • 標準化 (Standardization): 在零中心化後,再將每個像素值除以數據集的標準差(或每個通道的標準差)。
      • 目的: 使得數據的均值為零,標準差為一,有助於使不同尺度的特征具有可比性,並可能加速學習。
    • 對比度歸一化 (Contrast Normalization): 例如 GCN 或 LCN。
      • 目的: 消除或減弱圖像中由於光照變化引起的對比度差異,使得模型對光照變化更魯棒。
  3. 數據增強 (Data Augmentation): (嚴格來說這不是對單個圖像的預處理,而是擴展訓練集的方法,但常與預處理一起討論)
    • 目的: 通過對現有訓練圖像進行各種隨機變換(如翻轉、旋轉、縮放、顏色抖動等)來人工增加訓練數據的數量和多樣性,以提高模型的泛化能力和魯棒性。

Q: 全局對比度歸一化 (GCN) 和局部對比度歸一化 (LCN) 有何不同?它們各自適用於什麼情況?

A:

Q: 什麼是數據集增強?它為什麼對訓練計算機視覺模型有益?

A: 數據集增強是一種通過對現有的訓練樣本應用各種隨機變換來人工生成新的訓練樣本的技術。這些變換應該保持原始標籤的有效性。 它對訓練計算機視覺模型有益,因為: 1. 增加訓練數據量: 深度學習模型通常需要大量數據才能很好地泛化。數據增強可以在不實際收集更多數據的情況下擴大訓練集的規模。 2. 提高模型的泛化能力: 通過向模型展示同一對象的更多不同視角、光照條件、姿態等變體,可以幫助模型學習到對這些變化更魯棒的特征,從而提高其在未見過數據上的泛化性能。 3. 減少過擬合: 數據增強相當於向訓練過程引入了一種噪聲或正則化,有助於防止模型過度擬合訓練數據中的特定細節。


由於後續的 12.3 (語音識別) 和 12.4 (自然語言處理) 以及 12.5 (其他應用) 內容非常豐富且專業性強,且 OCR 文本的排版和結構在這些部分變得更為複雜,直接進行非常細致的逐小子節摘要和 Q&A 可能會非常耗時且容易出錯。

我建議針對這些應用章節,採取稍微宏觀一些的處理方式:

  1. 對每個大的應用領域(如語音識別、NLP)做一個總體的重點摘要。
  2. 針對該領域內提到的一些關鍵技術或模型(如 HMM-GMM, 深度神經網路在聲學/語言模型中的應用, n-gram, RNN, LSTM, 注意力機制等)進行簡要的 Q&A。

如果您同意這種方式,我可以繼續。或者,如果您希望對特定的小節進行深入處理,請告知我。


以下是根據上述建議,對後續應用章節的處理:


12.3 語音識別

重點摘要: 深度學習極大地推動了自動語音識別 (ASR) 的發展。傳統的 ASR 系統通常基於隱馬爾可夫模型 (HMM) 和高斯混合模型 (GMM) 的組合(HMM-GMM)。HMM 用於建模語音的時間序列結構(例如,音素序列),而 GMM 用於對給定 HMM 狀態的聲學特征(如 MFCC)進行建模。 深度學習的引入主要體現在:

Q: 在傳統的自動語音識別 (ASR) 系統中,HMM 和 GMM 各自扮演什麼角色?

A:

Q: 深度神經網路 (DNN) 是如何被應用於改進傳統 ASR 系統中的聲學模型的?

A: DNN 主要被用來替代傳統 HMM-GMM 系統中的 GMM 部分,作為聲學模型。具體來說:

  1. DNN(通常是前饋的多層感知機,或更近期的循環神經網路如 LSTM)的輸入是聲學特征(例如,MFCC 加上其上下文窗口)。
  2. DNN 的輸出層(通常使用 softmax)預測對應於 HMM 狀態(或上下文相關的音素狀態,即 triphone states)的後驗機率 P(HMM state | acoustic features)。 相比於 GMM,DNN 能夠學習更複雜的、非線性的聲學特征與 HMM 狀態之間的映射關係,並且可以更好地利用更廣泛的上下文信息,從而顯著提高了聲學模型的準確性。這種系統通常被稱為 HMM-DNN 混合系統。

Q: 什麼是端到端 (end-to-end) 的語音識別模型?它與傳統的 HMM-DNN 混合系統有何不同?

A: 端到端的語音識別模型試圖直接將原始的聲學輸入序列(例如,語音波形或頻譜圖)映射到最終的文本輸出序列(例如,詞語序列),而不需要像傳統系統那樣將問題分解為聲學模型、發音模型和語言模型等獨立的、需要分別訓練的組件,也不需要明確的音素級別的對齊。


由於自然語言處理 (NLP) 內容非常廣泛,我將選擇其中幾個核心概念進行重點摘要和 Q&A。


12.4 自然語言處理

重點摘要: 自然語言處理 (NLP) 是深度學習取得重大突破的另一個重要領域。深度學習方法被廣泛應用於各種 NLP 任務,如語言建模、機器翻譯、情感分析、問答系統等。

Q: 什麼是詞嵌入 (word embedding)?它為什麼對自然語言處理很重要?

A: 詞嵌入是將詞典中的每個詞語映射到一個低維、稠密的實值向量的技術。這些向量被訓練來捕捉詞語的語義和句法信息。 它之所以重要,是因為: 1. 克服 one-hot 編碼的缺點: 傳統的 one-hot 編碼詞表示維度高(等於詞典大小)、稀疏,並且無法表示詞語之間的相似性(任意兩個不同詞的 one-hot 向量都是正交的)。 2. 捕捉語義相似性: 在詞嵌入空間中,語義上相似的詞語(例如,「國王」和「女王」,「狗」和「貓」)的向量在空間中會比較接近(例如,餘弦相似度高或歐氏距離近)。 3. 作為神經網路的輸入: 詞嵌入向量可以作為神經網路模型的輸入,使得模型能夠處理文本數據並利用詞語的語義信息。 4. 泛化能力: 模型可以利用詞嵌入空間中詞語之間的關係來進行泛化。例如,如果模型學會了處理「蘋果」,它可能更容易處理語義上相似的「梨」。

Q: 神經語言模型 (NLM) 相較於傳統的 n-gram 語言模型有哪些主要優勢?

A:

  1. 處理更長的上下文依賴: N-gram 模型只能考慮前面固定 n-1 個詞的上下文。而基於 RNN(特別是 LSTM 或 GRU)的神經語言模型理論上可以捕捉任意長度的歷史上下文信息(儘管實踐中也存在長程依賴問題)。
  2. 更好的平滑 (Smoothing): N-gram 模型在處理未在訓練數據中出現過的 n-gram 時會遇到數據稀疏問題,需要複雜的平滑技術。神經語言模型由於其分布式表示和連續的參數空間,通常具有更好的內在平滑能力,對未見過的詞序列也能給出合理的機率。
  3. 利用詞語相似性: 神經語言模型使用詞嵌入作為輸入,因此可以利用詞語之間的語義相似性。如果兩個詞在語義上相似,它們的詞嵌入也相似,模型更容易將在一個詞的上下文中學到的知識泛化到另一個相似詞的上下文中。N-gram 模型則將每個詞視為獨立的符號,無法利用這種相似性。
  4. 性能通常更好: 在許多標準的語言建模任務上,神經語言模型(尤其是基於 RNN 的)的性能(如困惑度 perplexity)通常顯著優於 n-gram 模型。

Q: 什麼是序列到序列 (Seq2Seq) 模型?它通常包含哪兩個主要組件?注意力機制在其中扮演什麼角色?

A: 序列到序列 (Seq2Seq) 模型是一種神經網路架構,用於處理輸入是一個序列而輸出也是一個序列的任務,且輸入序列和輸出序列的長度可能不同。 它通常包含兩個主要組件,都是循環神經網路 (RNN): 1. 編碼器 (Encoder): 讀取整個輸入序列,並將其壓縮成一個固定長度的上下文向量(context vector)或稱為「思想向量 (thought vector)」。這個向量被期望能捕捉輸入序列的語義信息。 2. 解碼器 (Decoder): 以編碼器輸出的上下文向量作為初始狀態(或輸入的一部分),然後逐個生成輸出序列中的元素。 注意力機制 (Attention Mechanism) 在 Seq2Seq 模型中扮演的角色是: 在傳統的 Seq2Seq 模型中,編碼器將整個輸入序列壓縮成單個固定長度的上下文向量。對於長輸入序列,這個單一向量很難有效地承載所有重要信息,導致性能下降。 注意力機制允許解碼器在生成輸出序列的每一步時,都能夠「回看」並「關注」輸入序列的不同部分。具體來說,在生成每個輸出詞時,解碼器會計算輸入序列中每個時間步的隱藏狀態與解碼器當前隱藏狀態之間的「相關性」或「注意力權重」。然後,基於這些權重對輸入序列的隱藏狀態進行加權求和,得到一個針對當前輸出詞的、動態的上下文向量。這個動態的上下文向量隨後被用於預測下一個輸出詞。 注意力機制使得模型能夠選擇性地關注輸入序列中的相關信息,而不是依賴於一個固定的、可能信息不足的上下文向量,從而顯著提高了 Seq2Seq 模型(尤其是在長序列任務如機器翻譯中)的性能。

Q: 預訓練語言模型(如 BERT, GPT)的核心思想是什麼?它們是如何改變自然語言處理領域的?

A: 預訓練語言模型的核心思想是:

  1. 大規模無監督預訓練: 首先在非常大規模的、多樣化的無標註文本語料上訓練一個通用的深度神經網路模型(通常是基於 Transformer 架構)。預訓練的任務通常是自監督的,例如:
    • 掩碼語言模型 (Masked Language Model, MLM): 隨機遮蔽輸入文本中的一些詞,然後讓模型預測這些被遮蔽的詞(類似於完形填空)。BERT 使用這種方式。
    • 下一句預測 (Next Sentence Prediction, NSP): 給定兩個句子,讓模型判斷第二個句子是否是第一個句子的合理後續。BERT 也使用了這個輔助任務。
    • 標準語言模型 (Causal Language Model): 給定前面的詞,預測下一個詞。GPT 系列使用這種方式。 通過這些預訓練任務,模型被迫學習到豐富的詞彙知識、句法結構、語義信息以及一定的世界知識。
  2. 下游任務微調 (Fine-tuning): 將預訓練好的模型(其參數)作為初始模型,然後在特定的下游 NLP 任務(如文本分類、問答、命名實體識別等)的少量標註數據上進行微調。在微調階段,通常會對預訓練模型的參數進行少量調整,或者在其頂部添加一個小的、任務特定的輸出層。 它們改變自然語言處理領域的方式是:
    • 顯著提升性能: 預訓練語言模型在幾乎所有 NLP 基準任務上都取得了當時最先進 (state-of-the-art) 的結果,大幅提升了 NLP 系統的性能。
    • 降低對大量標註數據的依賴: 由於模型已經從大規模無標註數據中學到了豐富的語言知識,對於許多下游任務,只需要少量標註數據進行微調就能達到很好的效果。
    • 促進了 NLP 領域的「ImageNet 時刻」: 類似於計算機視覺領域 ImageNet 預訓練模型的成功,預訓練語言模型為 NLP 提供了一種強大的、可遷移的基礎模型,使得研究者和開發者可以更容易地構建高性能的 NLP 應用。
    • 催生了新的研究方向和應用: 例如,基於預訓練模型的文本生成、對話系統、知識推理等。

12.5 其他應用

重點摘要: 除了計算機視覺、語音識別和自然語言處理,深度學習還被應用於許多其他領域。


12.5.1 推薦系統

重點摘要: 推薦系統是信息技術中機器學習的主要應用之一,旨在向用戶推薦他們可能感興趣的項目(如商品、電影、新聞)。

Q: 推薦系統的主要目標是什麼?它通常基於哪兩種主要的推薦策略?

A: 推薦系統的主要目標是預測用戶對物品(如商品、電影、音樂、新聞等)的偏好,並向用戶展示他們最有可能感興趣的物品,以提升用戶體驗、增加用戶參與度或促進銷售。 它通常基於以下兩種主要的推薦策略: 1. 協同過濾 (Collaborative Filtering): 這種策略基於「物以類聚,人以群分」的思想。它利用大量用戶的歷史行為數據(如評分、購買記錄、瀏覽歷史等)來發現: * 相似的用戶: 找到與當前用戶具有相似偏好的其他用戶,然後將這些相似用戶喜歡但當前用戶尚未接觸過的物品推薦給當前用戶(基於用戶的協同過濾)。 * 相似的物品: 找到與當前用戶過去喜歡的物品相似的其他物品,然後將這些相似物品推薦給當前用戶(基於物品的協同過濾)。 2. 基於內容的過濾 (Content-Based Filtering): 這種策略基於物品本身的屬性或內容以及用戶對這些屬性的偏好來進行推薦。例如,如果一個用戶過去喜歡科幻電影,系統就會推薦其他具有科幻屬性的電影。

Q: 什麼是矩陣分解 (matrix factorization)?它在協同過濾推薦系統中是如何應用的?

A: 矩陣分解是一種將一個給定的矩陣分解為兩個或多個(通常是低秩的)矩陣的乘積的技術。 在協同過濾推薦系統中,通常有一個非常大的、稀疏的「用戶-物品交互矩陣」(例如,行代表用戶,列代表物品,矩陣中的元素可以是評分、購買指示符等)。矩陣分解的目標是學習兩個低維的潛在因子矩陣: * 用戶潛在因子矩陣 (User latent factor matrix) P: 每一行代表一個用戶的潛在特徵向量。 * 物品潛在因子矩陣 (Item latent factor matrix) Q: 每一列(或行,取決於定義)代表一個物品的潛在特徵向量。 使得它們的乘積 P * Q^T(或類似形式)能夠近似原始的用戶-物品交互矩陣。也就是說,用戶 u 對物品 i 的預測評分可以通過其潛在因子向量 p_uq_i 的內積來計算:r̂_ui = p_u · q_i。 這些潛在因子可以被認為是捕捉了用戶偏好和物品屬性的一些隱含維度(例如,電影的類型偏好、演員偏好等)。

Q: 深度學習是如何被應用於推薦系統的?它相比傳統方法有哪些潛在優勢?

A: 深度學習被應用於推薦系統的多個方面:

  1. 學習更複雜的用戶和物品表示: 使用深度神經網路(如多層感知機、自編碼器)來學習用戶和物品的非線性、低維嵌入表示,這些表示可能比傳統矩陣分解的線性潛在因子更能捕捉複雜的特徵。
  2. 建模非線性交互: 傳統的矩陣分解通常使用內積來建模用戶和物品潛在因子之間的交互,這是一種線性交互。深度學習模型可以通過多層非線性變換來學習用戶和物品之間更複雜、更高階的交互模式。
  3. 序列推薦: 利用循環神經網路 (RNN) 或 Transformer 等序列模型來建模用戶的歷史行為序列(如瀏覽歷史、購買序列),並預測用戶下一個可能感興趣的物品或下一步行為。
  4. 融合多源信息: 深度學習模型(尤其是神經網路)具有很強的靈活性,可以方便地將多種類型的輔助信息(如用戶的人口統計學特徵、物品的文本描述、圖像內容、社交網絡信息、上下文信息等)融合到推薦模型中。
  5. 端到端學習: 在某些情況下,可以構建端到端的深度學習推薦系統,直接從原始輸入(如用戶行為日誌、物品元數據)學習到推薦結果,而無需手動進行大量的特徵工程。 潛在優勢:
    • 更強的表達能力: 能夠捕捉更複雜的用戶偏好和物品特性以及它們之間的非線性關係。
    • 更好地處理稀疏數據: 通過學習潛在表示和利用輔助信息,可能更好地處理用戶-物品交互矩陣的稀疏性問題。
    • 更靈活地融合異構信息: 容易集成多種類型的數據來源。
    • 在某些任務上性能更好: 在許多推薦任務的評估指標上(如準確率、召回率、NDCG 等)取得了優於傳統方法的結果。

12.5.2 知識表示、推理和回答

重點摘要: 知識表示與推理 (Knowledge Representation and Reasoning, KRR) 是人工智能的核心領域。深度學習方法被用於學習知識庫中實體和關係的分布式表示(嵌入),以及執行基於這些表示的推理任務。

Q: 什麼是知識圖譜 (Knowledge Graph)?知識圖譜嵌入的目標是什麼?

A:

Q: 知識圖譜嵌入可以用於解決哪些任務?

A:

  1. 鏈接預測 (Link Prediction) / 知識圖譜補全 (Knowledge Graph Completion): 預測知識圖譜中可能存在但尚未明確記錄的鏈接(三元組)。例如,給定頭實體和關係,預測可能的尾實體;或者給定頭實體和尾實體,預測它們之間可能的關係。
  2. 三元組分類 (Triple Classification): 判斷一個給定的三元組是否是真實的。
  3. 實體分類 (Entity Typing): 預測實體的類別或類型。
  4. 關係提取 (Relation Extraction): 從非結構化文本中識別並提取新的實體和關係,用於擴充知識圖譜。
  5. 問答系統: 作為支持基於知識庫的問答系統的基礎。

Q: 機器閱讀理解 (Machine Reading Comprehension, MRC) 任務是什麼?深度學習是如何被應用於解決這個任務的?

A: 機器閱讀理解 (MRC) 任務是指讓機器閱讀一段給定的文本(上下文段落),然後回答關於這段文本的相關問題。問題的答案通常是上下文段落中的一個文本片段 (span-based MRC),或者是從多個選項中選擇 (multiple-choice MRC),或者是自由形式的文本生成 (generative MRC)。 深度學習被廣泛應用於解決 MRC 任務,常見的模型架構通常包含以下組件: 1. 嵌入層 (Embedding Layer): 將問題和上下文段落中的詞語轉換為詞嵌入向量。 2. 編碼層 (Encoding Layer): 使用循環神經網路 (RNN,如 LSTM、GRU) 或 Transformer 來分別對問題和上下文段落進行編碼,得到它們的上下文相關的表示。 3. 交互/注意力層 (Interaction/Attention Layer): 建模問題和上下文之間的交互關係。注意力機制被廣泛用於讓模型在上下文段落中找到與問題最相關的部分。例如,計算問題中的每個詞與上下文中的每個詞之間的相似度,並據此生成上下文感知的問題表示或問題感知的上下文表示。 4. 輸出層 (Output Layer): 根據任務類型設計輸出層。 * 對於抽取式問答(答案是上下文中的一個片段),輸出層通常預測答案在上下文中的起始位置和結束位置。 * 對於多選題,輸出層對每個選項進行評分。 * 對於生成式問答,輸出層是一個基於解碼器的語言模型。 BERT 及其變體等預訓練語言模型在 MRC 任務上取得了非常出色的表現,它們通常在編碼和交互階段發揮核心作用。