1、監督學習
監督學習利用大量的標注數據來訓練模型,模型的預測和數據的真實標簽產生損失(把標簽數值化?)后進行反向傳播(計算梯度、更新參數),通過不斷的學習,最終可以獲得識別新樣本的能力。
2、無監督學習
無監督學習不依賴任何標簽值,通過對數據內在特征的挖掘,找到樣本間的關系,比如聚類相關的任務。
有監督和無監督最主要的區別在於模型在訓練時是否需要人工標注的標簽信息。
無監督學習中被廣泛采用的方式是自動編碼器(autoencoder)。例如,MNIST的60000張0-9的圖片,把label摘掉,就是無監督學習的數據,AE生成的偽標簽就是x自身。
編碼器將輸入的樣本映射到隱層向量,解碼器將這個隱層向量映射回樣本空間。我們期待網絡的輸入和輸出可以保持一致(理想情況,無損重構),同時隱層向量的維度遠遠小於輸入樣本的維度,以此達到了降維的目的,利用學習到的隱層向量(代替原始的輸入樣本)再進行聚類等任務時將更加的簡單高效。對於如何學習隱層向量的研究,可以稱之為表征/表示學習(Representation Learning)。但這種簡單的編碼-解碼結構仍然存在很多問題,基於像素的重構損失通常假設每個像素之間都是獨立的,從而降低了它們對相關性或復雜結構進行建模的能力。尤其使用 L1 或 L2 損失來衡量輸入和輸出之間的差距其實是不存在語義信息的,而過分的關注像素級別的細節而忽略了更為重要的語義特征。對於自編碼器,可能僅僅是做了維度的降低而已,我們希望學習的目的不僅僅是維度更低,還可以包含更多的語義特征,讓模型懂的輸入究竟是什么,從而幫助下游任務。而自監督學習最主要的目的就是學習到更豐富的語義表征。
參考2作者認為:真正的無監督學習應該不需要任何標注信息,通過挖掘數據本身蘊含的結構或特征,開完成相關任務,大體可以包含三類:1)聚類(k-means,譜聚類等) 2)降維(線性降維:PCA、ICA、LDA、CCA等;非線性降維:ISOMAP、KernelPCA等;2D降維:2D-PCA)3)離散點檢測(比如基於高斯分布或多元高斯分布的異常檢測算法)。
3、半監督學習
無監督學習只利用未標記的樣本集進行學習;
監督學習則只利用標記的樣本集進行進行學習。
3.1、半監督的理論概述
半監督有兩個樣本集,一個有標記,一個沒有標記:Labled={(xi,yi)};Unlabled={xj},並且數量上L<<U。
- 單獨使用有標記樣本,我們能夠生產有監督分類算法
- 單獨使用無標記樣本,我們能夠生產無監督聚類算法
- 兩者使用,我們希望在1中加入無標記樣本,增強有監督分類的效果;同樣,我們希望在2中加入有標記樣本,增強無監督聚類的效果
一般而言,半監督側重於在有監督的分類算法中加入無標記樣本來實現半監督分類,也就是在1中加入無標記樣本,增強分類效果。
3.2、motivation
- 有標記樣本難以獲取:需要專門的人員,特別的設備,額外的開銷......
- 無標記的樣本相對而言是很廉價的
3.3、半監督學習與直推式學習的區別
3.4、半監督學習算法分類
1、self-training(自訓練算法)
2、generative models生成模型
3、SVMs半監督支持向量機
4、graph-based methods圖論方法
5、multiview learning 多視角算法
........
1、self-training(自訓練算法):
兩個樣本集合:Labled={(xi,yi)};Unlabled={xj},並且數量上L<<U。
Repeat:
- 用L生成分類策略F;
- 用F分類U,計算誤差
- 選取U的子集u,即誤差小的,加入標記。L=L+u;
重復上述步驟,直到U為空集。
上面的算法中,L通過不斷在U中,選擇表現良好的樣本加入,並且不斷更新子集的算法F,最后得到一個最優的F。
Self-training的一個具體實例:最近鄰算法
記d(x1,x2)為兩個樣本的歐式距離,執行如下算法:
Repeat:
- 用L生成分類策略F;
- 選擇x = argmin d(x,x0)。 其中x∈U,min x0∈L。也就是選擇離標記樣本最近的無標記樣本。
- 用F給x定一個類別F(x).
- 把(x,F(x))加入L中
重復上述步驟,直到U為空集.
上面算法中,也就是定義了self-training的”誤差最小”,也就是用歐式距離來定義”表現最好的無標記樣本”,再用F給個標記,加入L中,並且也動態更新F。
4、自監督學習
自監督學習主要是利用輔助任務(pretext)從大規模的無監督數據中挖掘自身的監督信息,通過這種構造的監督信息對網絡進行訓練,從而可以學習到對下游任務有價值的表征。(也就是說自監督學習的監督信息不是人工標注的,而是算法在大規模無監督數據中自動構造監督信息,來進行監督學習或訓練。因此,大多數時候,我們稱之為無監督預訓練方法或無監督學習方法,嚴格上講,他應該叫自監督學習)。
原文作者:自編碼器個人認為可以算作無監督學習,也可以算作自監督學習,個人更傾向於后者。不過原文作者把自編碼器看作是無監督學習方法,並將其與自監督學習方法相區分,具體區別如上文所示:自編碼器,可能僅僅是做了維度的降低而已,我們希望學習的目的不僅僅是維度更低,還可以包含更多的語義特征,讓模型懂的輸入究竟是什么,從而幫助下游任務。而自監督學習最主要的目的就是學習到更豐富的語義表征。
對於自監督學習來說,存在三個挑戰:
- 對於大量的無標簽數據,如何進行表征/表示學習?
- 從數據的本身出發,如何設計有效的輔助任務 pretext?
- 對於自監督學習到的表征,如何來評測它的有效性?
對於第三點,評測自監督學習的能力,主要是通過 Pretrain-Fintune 的模式。我們首先回顧下監督學習中的 Pretrain - Finetune 流程:我們首先從大量的有標簽數據上進行訓練,得到預訓練的模型,然后對於新的下游任務(Downstream task),我們將學習到的參數(比如輸出層之前的層的參數)進行遷移,在新的有標簽任務上進行「微調」,從而得到一個能適應新任務的網絡。
自監督的 Pretrain - Finetune 流程:首先從大量的無標簽數據中通過 pretext 來訓練網絡(自動在數據中構造監督信息),得到預訓練的模型,然后對於新的下游任務,和監督學習一樣,遷移學習到的參數后微調即可。所以自監督學習的能力主要由下游任務的性能來體現。
4.1、自監督學習的主要方法
自監督學習的方法主要可以分為 3 類:1. 基於上下文(Context based) 2. 基於時序(Temporal Based)3. 基於對比(Contrastive Based)
補充1:Pretext task(surrogate task),前置任務,代理任務、輔助任務
Pretext可以理解為是一種為達到特定訓練任務而設計的間接任務。比如,我們要訓練一個網絡來對ImageNet分類,可以表達為 ,我們的目的其實是獲得具有語義特征提取/推理能力的
。我們假設有另外一個任務(也就是pretext),它可以近似獲得這樣的
,比如,Auto-encoder(AE),表示為:
。為什么AE可以近似
呢?因為AE要重建
就必須學習
中的內在關系,而這種內在關系的學習又是有利於我們學習
的。這種方式也叫做預訓練,為了在目標任務上獲得更好的泛化能力,一般還需要進行fine-tuning等操作。
Pretext任務可以進一步理解為:對目標任務有幫助的輔助任務。而這種任務目前更多的用於所謂的Self-Supervised learning,即一種更加寬泛的無監督學習。這里面涉及到一個很強的動機:訓練深度學習需要大量的人工標注的樣本,這是費時耗力的。而自監督的提出就是為了打破這種人工標注樣本的限制,目的是在沒有人工標注的條件下也能高效的訓練網絡,自監督的核心問題是如何產生偽標簽(Pseudo label),而這種偽標簽的產生是不涉及人工的,比如上述的AE的偽標簽就是 自身。這里舉幾個在視覺任務里常用的pretext task幾種偽標簽的產生方式:

1.2 Colorization(圖片上色)


1.4 Jigsaw Puzzle/Context Prediction(關系預測/上下文預測)

補充2:預訓練模型
- 預訓練模型就意味着把人類的語言知識,先學了一個東西,然后再代入到某個具體任務,就順手了,就是這么一個簡單的道理。
- 預訓練的意思就是提前已經給你一些初始化的參數,這個參數不是隨機的,而是通過其他類似數據集上面學得的,然后再用你的數據集進行學習,得到適合你數據集的參數,隨機初始化的話,的確不容易得到結果,但是這個結果是因為速度太慢,而不是最終的結果不一樣。
- 預訓練模型就是一些人用某個較大的數據集訓練好的模型(這種模型往往比較大,訓練需要大量的內存資源),你可以用這些預訓練模型用到類似的數據集上進行模型微調。就比如自然語言處理中的bert。
- 已經使用公開數據集訓練過的checkpoints,往往這些數據集比較大可以有效的提取特征。
補充3:
參考1:半監督學習(一)
參考2:自監督學習 | (1) Self-supervised Learning入門