第十五章 表示學習 (開篇引言)

2017-07-07

Representation Learning

https://www.youtube.com/watch?v=MA52s5dQaGY

重點摘要: 本章首先討論表示學習是什麼意思,以及表示的概念如何有助於深度框架的設計。接著探討學習算法如何在不同任務中共享統計信息,包括使用無監督任務中的信息來完成監督任務。共享表示有助於處理多模式或多領域,或是將已學到的知識遷移到樣本很少或沒有,但任務表示依然存在的任務上。最後,探討表示學習成功的原​​因,從分佈式表示 (Hinton et al., 1986) 和深度表示的理論優勢,以及生成過程潛在假設的更一般概念,特別是觀測數據的基本成因。 許多信息處理任務可能非常容易,也可能非常困難,這取決於信息是如何表示的。例如,對於人類而言,可以直接使用阿拉伯數字進行加減法,但若使用羅馬數字,則問題變得困難。一個好的表示可以使後續的學習任務更容易。 在機器學習中,表示學習的目標是找到一種好的數據表示,使得後續的分類或其他任務更容易。監督學習訓練的模型,其內部隱藏層(特別是接近頂層的隱藏層)的表示能夠更加容易地完成訓練任務。

Q: 什麼是「表示學習」的核心思想?

A: 表示學習的核心思想是學習數據的良好表示(或特徵),使得後續的學習任務(如分類、回歸、聚類等)更容易解決或性能更好。一個好的表示能夠捕捉數據中的本質結構和有用信息。

Q: 為什麼說數據的「表示」方式對信息處理任務的難易程度有很大影響?請舉例說明。

A: 因為不同的表示方式會以不同的方式組織和呈現信息。一個好的表示可以使數據中的相關模式更突出,無關信息被抑制,從而簡化後續的處理。 例子: * 數字表示: 使用阿拉伯數字進行算術運算(如210除以6)比使用羅馬數字(如CCX除以VI)要容易得多,儘管它們表示相同的數值。 * 圖像像素 vs. 特徵: 直接使用圖像的原始像素值進行對象識別可能很困難,但如果能將圖像轉換為包含邊緣、角點、紋理等信息的特徵表示,識別任務就會變得更容易。

Q: 在監督學習的深度神經網路中,哪一部分可以被視為學習到的「表示」?

A: 在監督學習的深度神經網路中,模型的各個隱藏層(特別是那些接近輸出層的頂層隱藏層)的激活可以被視為數據的學習到的表示。這些隱藏層被訓練來提取對完成最終任務(如分類)有用的特徵。


15.1 貪心逐層無監督預訓練

重點摘要: 無監督預訓練在深度神經網路的復興上起到了關鍵的、歷史性的作用,它使研究者首次可以訓練不含諸如卷積或者循環網路這類特殊結構的深度監督網路。這個過程最初稱為無監督預訓練 (unsupervised pretraining),或者更精確地,貪心逐層無監督預訓練 (greedy layer-wise unsupervised pretraining)。 這是一個過程,它是一個無監督學習,嘗試獲取輸入分佈的形狀(表示如何有助於另一個任務,具有相同輸入域的監督學習)的典型示例。貪心逐層無監督預訓練依賴於單層表示學習算法,例如 RBM、單層自編碼器、稀疏編碼模型或其他學習潛在表示的模型。每一層使用無監督學習預訓練,將前一層的輸出作為輸入,輸出數據的新表示。這個新的表示(或者和其他變量比如要預測類別的關係)可能比原始表示更簡單。 算法 15.1 描述了貪心逐層無監督預訓練的協定:初始化一個淺層學習器 L,使用訓練集學習一個表示函數 f。然後,原始輸入數據 X 是第一個,並且 f^(1)(X) 是第一個隱藏層的輸出。在執行精調的情況下,我們使用學習者 T,並使用初始函數 f,輸入樣本 X(以及在監督精調下關聯的目標 Y),並返回回歸細調函數。階段數為 m。 儘管無監督的貪心逐層訓練過程早已被用來規避監督問題中深度神經網路難以優化的問題 (Fukushima, 1975),但深度學習的復興始於 2006 年,源於發現這種貪心學習過程能夠為多層聯合訓練過程找到一個好的初始值,甚至可以成功訓練全連接的結構。 「貪心 (greedy)」指的是它是一個貪心算法,它優化每一塊(解決方案的每一個部分,每一層解決一個部分,而不是聯合優化所有部分)。它被稱為「逐層的 (layer-wise)」,是因為這些塊是網路中的層。

Q: 什麼是貪心逐層無監督預訓練?它的基本流程是怎樣的?

A: 貪心逐層無監督預訓練是一種訓練深度神經網路的方法,它包含以下步驟:

  1. 逐層訓練: 一次訓練網路的一層。
  2. 無監督: 每一層的訓練都是無監督的,即它試圖學習輸入數據的表示,而不使用任何標籤信息。常用的單層無監督學習算法包括 RBM、自編碼器等。
  3. 貪心: 每一層的參數在訓練後被固定下來,然後其輸出作為下一層的輸入進行訓練。這個過程是貪心的,因為它獨立地優化每一層,而不是聯合優化整個深層網路。
  4. 預訓練: 這個逐層的無監督訓練過程被視為「預訓練」,其目的是為後續的監督學習(精調)提供一個好的參數初始值。

Q: 為什麼貪心逐層無監督預訓練在深度學習的早期發展中扮演了重要角色?

A: 在深度學習的早期(約2006年左右),直接訓練深度神經網路(特別是全連接的)非常困難,常常會遇到梯度消失/爆炸、陷入差的局部最優等問題。貪心逐層無監督預訓練被發現是一種有效的方法,可以為深層網路的參數找到一個較好的初始區域。從這個好的初始點開始,後續的監督學習(精調)就更容易成功,並且能夠訓練出性能更好的深度模型。

Q: 「貪心」和「逐層」在這个術語中分別指什麼?

A:


15.1.1 何時以及為何無監督預訓練有效?

重點摘要: 無監督預訓練的有效性並非普遍適用,其效果取決於多種因素。

Q: 無監督預訓練在哪些情況下可能特別有效?

A: 無監督預訓練可能在以下情況下特別有效:

  1. 標註數據稀少,但有大量未標註數據: 無監督預訓練可以利用大量未標註數據來學習輸入數據的內在結構和有意義的表示,這些表示隨後可以用於只有少量標註數據的監督學習任務。
  2. 深度網路的優化困難: 對於非常深的網路,無監督預訓練可以將參數初始化到一個更容易進行監督學習優化的區域,有助於避免梯度消失/爆炸或陷入差的局部最優。
  3. 作為一種正則化: 預訓練階段學習到的表示往往能捕捉輸入數據的統計規律,這可以引導監督學習階段找到更具有泛化能力的解。
  4. 當輸入分佈的結構與目標任務相關時: 如果學習輸入分佈的表示(無監督任務)所提取的特徵對最終的監督任務(如分類)是有用的,那麼預訓練效果會更好。

Q: 無監督預訓練的有效性是否總是得到保證?為什麼?

A: 不,無監督預訓練的有效性並非總是得到保證。原因包括:

  1. 任務不相關: 無監督預訓練學習到的表示是為了捕捉輸入數據的整體結構(例如,為了能夠重構輸入)。如果這些特徵與最終的監督任務所需的特徵不相關,那麼預訓練可能沒有幫助,甚至可能有害。
  2. 數據集特性: 對於某些數據集,直接進行監督學習可能已經足夠好,無監督預訓練帶來的改進可能微乎其微。
  3. 現代優化技術的發展: 隨著更好的優化器、初始化方法、激活函數和正則化技術的出現,直接端到端訓練深度監督模型的成功率大大提高,降低了對無監督預訓練的依賴。

Q: 為什麼說無監督預訓練可以作為一種「預處理」步驟,將參數初始化到一個「好的區域」?

A: 「好的區域」指的是參數空間中一個更容易通過監督學習(如梯度下降)找到良好解(即泛化能力強的局部最優或全局最優)的區域。無監督預訓練通過學習輸入數據的內在結構,使得網路的初始權重能夠提取一些有意義的底層和中層特徵。從這些有意義的特徵出發,監督學習階段更容易學習到與任務相關的高層特徵,而不是從完全隨機的、可能導致優化困難的參數點開始。


15.2 遷移學習和領域自適應

重點摘要: 表示學習的另一個重要應用是遷移學習 (transfer learning)領域自適應 (domain adaption)

Q: 什麼是遷移學習?它的核心思想是什麼?

A: 遷移學習是一種機器學習方法,它將在一個「源」任務上學到的知識(例如,學到的特徵表示、模型參數)遷移或應用到一個不同但相關的「目標」任務上。 核心思想是,許多現實世界的任務之間存在共性,因此在一個任務上學到的通用知識或表示可以幫助改善在另一個任務(特別是數據較少的任務)上的學習性能。

Q: 領域自適應與一般的遷移學習有何區別?

A: 領域自適應可以看作是遷移學習的一種特殊情況。

Q: 在圖像識別任務中,遷移學習通常是如何應用的?

A: 一種常見的做法是:

  1. 選擇一個在非常大規模的圖像數據集(如 ImageNet,包含百萬級圖像和上千個類別)上預訓練好的深度卷積神經網路(如 VGG, ResNet, Inception)。
  2. 對於新的目標任務(例如,特定種類花卉的分類,可能只有少量訓練圖像),可以:
    • 作為特徵提取器: 固定預訓練模型的卷積層參數,將這些層的輸出作為固定長度的特徵向量,然後在這個特徵之上訓練一個新的、簡單的分類器(如 SVM 或邏輯回歸)。
    • 精調 (Fine-tuning): 將預訓練模型的參數作為初始值,然後在目標任務的數據上繼續訓練整個網路(或部分層),通常使用較小的學習率。

Q: 什麼是零樣本學習 (zero-shot learning)?它如何實現對未見過類別的識別?

A: 零樣本學習是指模型能夠識別在訓練階段從未見過的類別的樣本。 它通常通過以下方式實現: 1. 學習一個從輸入特徵到一個共享的語義嵌入空間 (semantic embedding space) 的映射。 這個語義空間可以是基於詞向量(如 Word2Vec, GloVe)、屬性描述或其他形式的類別的語義表示。 2. 為每個類別(包括未見過的類別)獲取其在該語義嵌入空間中的表示。 3. 在預測時,將輸入樣本映射到語義嵌入空間,然後找到與其最接近的(已知的或未見過的)類別的語義表示。 關鍵在於模型學習到的不是直接從輸入到類別標籤的映射,而是到一個能夠表示類別之間語義關係的共享空間的映射。


15.3 半監督解釋因果關係

重點摘要: 表示學習的一個重要問題是「什麼原因使得一個表示比另一個表示更好?」一個假設是,理想表示中的特徵應該對應於觀測數據的潛在成因,特別是那些在不同任務或領域之間共享的特徵。

Q: 為什麼說一個好的表示應該對應於觀測數據的「潛在成因」?

A: 因為觀測數據通常是由一些更基本、更獨立的潛在因素或過程相互作用產生的。如果一個表示能夠捕捉到這些潛在的成因,並且將它們解耦開來(即表示的不同部分對應不同的獨立成因),那麼這個表示:

  1. 更具有可解釋性: 我們可以理解表示的每個部分對應現實世界中的什麼因素。
  2. 更具有泛化能力: 這些潛在成因可能在不同的數據點、任務或領域之間是共享的,因此基於這些成因的表示更容易泛化。
  3. 更魯棒: 如果表示捕捉到了本質的成因,那麼它可能對輸入數據中一些與任務無關的表面變化不那麼敏感。

Q: 半監督學習如何幫助學習與數據潛在成因相關的表示?

A: 半監督學習結合了未標註數據和少量標註數據。

Q: 什麼是「解耦表示 (disentangled representation)」?它為什麼是理想的?

A: 解耦表示是指一種數據表示,其中單個潛在單元(或維度)對數據變化的單個生成因素敏感,而對其他因素相對不敏感。也就是說,表示的不同部分控制著數據的不同獨立變化維度。 它之所以理想,是因為: * 可解釋性強: 每個潛在單元都有明確的語義含義。 * 易於控制和操作: 可以通過修改表示的特定部分來有針對性地改變生成數據的某個屬性。 * 有利於遷移和泛化: 如果潛在因素是通用的,那麼解耦的表示更容易遷移到新的任務或領域。


15.4 分佈式表示

重點摘要: 分佈式表示 (Distributed Representation) 指的是數據的表示由許多特徵同時激活來形成,並且每個特徵可以參與到多個不同數據的表示中。這與局部表示 (localist representation) 或符號表示 (symbolic representation) 相對,後者通常是 one-hot 編碼,即只有一個單元激活來表示一個概念。

Q: 什麼是分佈式表示?它與局部表示(如 one-hot 編碼)有何主要區別?

A:

Q: 相較於局部表示,分佈式表示有哪些主要優勢?

A:

  1. 指數級的表示能力: 使用 n 個二值特徵的分佈式表示可以潛在地表示 2^n 種不同的模式或概念。而 n 個單元的局部表示(如 one-hot)只能表示 n 個不同的概念。這使得分佈式表示在表示大量、複雜的概念時更為緊湊和高效。
  2. 更好的泛化能力: 由於特徵可以在不同的概念之間共享,模型可以利用已經學到的關於某些概念的知識來推斷或學習關於新的、共享某些特徵的概念。這有助於模型對未見過的數據或概念進行泛化。
  3. 更豐富的相似性度量: 在分佈式表示空間中,概念之間的相似性可以通過其共享的特徵數量或其表示向量之間的距離來度量,這比局部表示中簡單的「相同/不同」更為細膩。

Q: 為什麼說許多表示學習算法可以被看作是學習一種線性因子模型?

A: 許多表示學習算法(如 PCA、因子分析、稀疏編碼、某些類型的自編碼器、RBM 等)的目標可以被解釋為找到一組潛在的「因子」或「基向量」,使得觀測數據可以被近似地表示為這些因子的線性組合。這些潛在因子通常是分佈式的,即一個數據點由多個因子共同作用來表示,而一個因子也可能參與到多個不同數據點的表示中。學習這些因子以及它們如何組合來重構數據,就是這些算法的核心。


15.5 得益於深度的表示

重點摘要: 深度架構(即多層表示)能夠學習到比淺層架構更抽象、更強大的特徵表示。每一層都以前一層的表示為基礎,學習更複雜的組合和抽象。

Q: 為什麼說深度架構能夠學習到比淺層架構更抽象的表示?

A: 因為深度架構是層次化的。每一層都以前一層學習到的表示(特徵)作為輸入,並對這些特徵進行非線性變換和組合,從而形成更高級別、更抽象的特徵。這個過程逐層進行,使得網路能夠從原始的、低級別的感官輸入(如像素值)逐步提取出對任務有意義的、高度抽象的概念。例如,在圖像處理中,淺層可能檢測邊緣,中層檢測物體部件,高層檢測整個物體。

Q: 深度表示在表示某些複雜函數時,相較於淺層表示有什麼理論上的優勢?

A: 一些理論研究表明,存在某些類型的函數,如果使用深度神經網路(具有多個隱藏層)來表示它們,可能只需要多項式(相對於輸入維度或複雜度)數量的參數和計算單元。然而,如果試圖用淺層神經網路(例如只有一個隱藏層)來表示同樣複雜程度的這些函數,則可能需要指數級數量的參數和計算單元。這意味著對於這些函數類別,深度架構在表示效率上具有根本性的優勢。

Q: 「深度」如何與「分佈式表示」相結合來學習有用的特徵?

A: 每一層深度網路的輸出都可以被看作是一種分佈式表示。深度架構通過堆疊多個這樣的表示層,使得每一層都在前一層分佈式表示的基礎上學習新的、通常更抽象的分佈式表示。這種逐層的、分佈式的特徵提取和組合過程,使得深度網路能夠有效地從原始數據中學習到對複雜任務(如圖像識別、自然語言理解)至關重要的層次化特徵。


15.6 提供發現潛在原因的線索

重點摘要: 表示學習的一個核心目標是發現數據背後的潛在成因或解釋性因素。本節討論了一些有助於模型發現這些潛在原因的通用線索或假設。這些線索通常作為先驗知識或正則化項被納入模型設計和學習過程中。

Q: 為什麼「平滑性」或「局部不變性」被認為是學習良好表示的一個有價值的線索?

A: 「平滑性」假設相似的輸入應該映射到相似的表示,或者說表示函數不應該對輸入的微小擾動過於敏感。「局部不變性」則更強調表示應該對某些與任務無關的局部變化(如圖像中的微小平移、旋轉或光照變化)保持不變。 這些特性之所以有價值,是因為: 1. 提高魯棒性: 使模型對輸入中的噪聲或不重要的變化不那麼敏感。 2. 促進泛化: 如果模型學習到對局部變化不敏感的表示,它更容易將從訓練數據中學到的知識泛化到未見過的、但與訓練數據相似(經過微小變換)的數據上。 3. 簡化決策邊界: 在分類任務中,平滑的表示空間可能使得不同類別之間的決策邊界更簡單、更平滑。

Q: 「層次組織」的假設如何體現在深度學習模型中?

A: 「層次組織」的假設是指現實世界中的概念和特徵通常是以層次化的方式組織的,即簡單的、低級別的特徵組合成更複雜的、高級別的特徵。 深度學習模型(特別是深度神經網路)通過其多層結構天然地體現了這種假設: * 網路的每一層都可以被看作是在學習一個特定抽象級別的特徵表示。 * 較低層次(靠近輸入)的單元學習檢測簡單的局部模式(如圖像中的邊緣、角點)。 * 較高層次的單元則將低層次特徵組合成更複雜、更全局的模式(如物體的部件、完整的物體)。 這種層次化的特徵提取和組合過程使得深度模型能夠有效地學習數據中複雜的層次結構。

Q: 「稀疏性」假設在表示學習中有何作用?它如何幫助學習?

A: 「稀疏性」假設是指對於給定的輸入數據,其潛在表示中只有少數幾個特徵(或因子)是活躍的(即具有非零值),而大多數特徵是不活躍的(值為零或接近零)。 稀疏性在表示學習中的作用包括: 1. 信息瓶頸: 迫使模型只用少數幾個最重要的特徵來表示數據,從而提取更本質、更緊湊的信息。 2. 可解釋性: 稀疏表示中,每個激活的特徵可能對應一個更明確、更可解釋的數據屬性。 3. 計算效率: 處理稀疏向量可能比處理稠密向量更快。 4. 避免過擬合: 作為一種隱式的正則化,有助於模型學習更泛化的特徵。 例如,在稀疏編碼中,通過 L1 正則化來鼓勵潛在表示的稀疏性。


希望這些詳細的摘要和Q&A對您有所幫助!