【网络结构】小议如何跳出魔改网络结构的火坑
公眾號關注?“ML_NLP”
設為 “星標”,重磅干貨,第一時間送達!
機器學習算法與自然語言處理出品
@公眾號原創專欄作者 縱橫
知乎專欄 |?機器不學習
引言
0202 年,CV 領域已經相當內卷。知乎上,如何設計一個網絡擬合 xx 函數的討論層出不窮(e.g. 判斷一個數是奇數還是偶數、能否被 n 整除);學術上,為了補充訓練集中缺少的先驗信息網絡結構被修改的搖搖欲墜:為了學習位置信息(距離較遠的內容信息)各種?Attention?層出不窮;為了應對旋轉(形變)信息,?STN?被嫁接在混亂的拓撲圖中;對于?low-level?的任務,手動計算一個先驗的濾波器都不足為怪;對于?high-level?的任務,GCN?開始被廣泛用于捕捉樣本間(流形)上的關聯關系;就在前幾天的 AAAI 上,老爺子還老當力壯,想要通過?capsule 網絡改善 CNN 的種種弊病......
在這種內卷情況下,和 CV 領域頭部的大佬直接拼刺刀著實有些困難。畢竟,(虛假的)idea 好想但是不好 work。那么如何跳出魔改網絡結構的火坑呢?正如一個人有兩條腿走路,CV?領域也有模型和數據兩條腿。魔改模型不行,我們可以魔改數據集(跳入魔改數據集的火坑)!
回到 10 年前,特征工程總比魔改 SVM?更直觀和有效,魔改數據集、在數據集中添加任務需要的先驗知識,比魔改模型結構更容易出成果(至少在競賽和我的部分科研實踐中如此)。結合目前?self-supervise?和?semi-supervise?的發展,這里總結一些魔改數據集的 baseline idea,祝大家論文年年有,今年尤其多~
自監督學習
在數據集中,標簽的數量和標簽蘊含的信息往往是有限的。例如,在 ImageNet 上進行圖像分類任務時,標簽能夠為模型提供圖片的類別信息,即,這張圖片是貓還是狗。但是,標簽并沒有顯式地指明,這張圖片表現的是一只白色的貓還是一只黃色的貓,是一只正面拍攝的貓還是一只側面拍攝的貓,貓的眼睛在貓的鼻子上面還是貓的鼻子下面等等。
對此,自監督希望充分利用數據的自身信息,根據圖像的結構或者特性,人為構造標簽進行訓練(這個過程被稱為 pretext 訓練)。pretext 訓練完后,再讓模型在有監督的數據集上 fine-tune,完成相關任務。其實質是,盡可能人為地利用圖像,學習圖像中隱含的本質特征。再用這種本質特征作為先驗知識,指導學習相關任務。
目前,現有工作一般是基于“剔除-重構”策略構造標簽的。模型學習需要圖像中某方面特征時,就將該部分特征從原圖中剔除掉作為標簽,再將被剔除掉部分特征的圖像作為模型的輸入,訓練模型重構被剔除的部分(標簽),從而學習到該方面的先驗知識。
LeCun 在 Energy-Based Self-Supervised Learning 中提到的“剔除-重構”策略目前自監督學習的發展已經遠超 LeCun 當時的總結,異彩紛呈~這里介紹一些常用的先驗知識學習方法:
顏色信息(Image Colorization)
高分辨率信息(Image Superresolution)
相對位置(內容)信息(Image Inpainting / Context Prediction / Image Jigsaw Puzzle)
形變信息(Geometric Transformation Recognition)
關聯信息(Image Clustering)
1. 顏色信息(Image Colorization)
要想學習物體的顏色作為下游任務的先驗知識,我們只需要在原圖的基礎上剔除顏色信息,將原圖灰度化生成灰度圖,再訓練模型根據灰度圖重構原圖。這種策略在 Image Colorization 任務中很常見。
現有工作一般先對圖像進行灰度化。
學習顏色信息 step 1:在原圖的基礎上剔除顏色信息之后使用 Auto-Encoder 模型,將灰度圖作為輸入重構彩色圖。在訓練時,將重構的彩色圖與原圖的 MSE(L2 距離)作為損失函數,優化 Auto-Encoder 。
在訓練過程中,Auto-Encoder 能夠掌握圖像中物體的顏色信息,例如,天會被涂上藍色,山會被涂成綠色,雪會被涂成白色。Encoder 和 Decoder 都可以用在下游任務中取得較好的效果。
學習顏色信息 step 2:訓練 Auto-Encoder 根據灰度圖重構原圖[1] Colorful Image Colorization
[2] Real-Time User-Guided Image Colorization with Learned Deep Priors
[3] Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image Colorization with Simultaneous Classification
2. 高分辨率信息(Image Superresolution)
要想學習物體的高分辨率信息(細節信息)作為下游模型的先驗知識,我們只需要在原圖的基礎上剔除細節信息,將原圖縮放成小圖,并訓練模型根據小圖重構原圖。這種策略在 Image Superresolution 任務中很常見。
現有工作一般使用雙線性差值對圖像進行縮放,得到原圖和其對應的小圖(縮略圖)。
學習高分辨率信息 step 1:在原圖的基礎上剔除細節信息之后使用 GAN 模型,將小圖作為輸入重構高分辨率圖像。在訓練時,將重構的高分辨率圖像與原圖的 MSE(L2 距離)、內容損失(Content Loss)和對抗損失作為生成器的損失函數,將二分類損失作為判別器的損失函數,將生成器和判別器進行對抗訓練。
在訓練過程中,生成器能夠掌握圖像中物體的細節信息,生成逐漸清晰的圖像;判別器能夠掌握一張圖片的細節信息是否準確,判別生成圖像和原圖的差異。生成器和判別器都可以用在下游任務中取得較好的效果。
學習高分辨率信息 step 2:訓練 SRGAN 根據灰度圖重構原圖[4] Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
3. 相對位置(內容)信息(Image Inpainting / Context Prediction / Image Jigsaw Puzzle)
圖像中物體的上下文信息、或是不同物體的相對位置信息、亦或是遠距離物體的相關性在計算機視覺中扮演著重要的角色。在魔改網絡結構時,為了學習這些信息,我們往往會設計各種 Attention 模塊。在自監督學習中,我們可以顯式地讓模型學習這些信息。目前,比較常見又(我認為)有效的策略有三類。
第一種,要想學習物體的內容信息作為下游模型的先驗知識,我們只需要在原圖的基礎上剔除某塊物體或區域,只保該留物體或區域的上下文,并訓練模型根據上下文重構原圖。這種策略在 Image Inpainting 任務中很常見。
現有工作一般先從圖像中隨機選擇(或者通過物體檢測選擇)一塊區域摳出。
學習物體的內容信息 step 1:在原圖的基礎上剔除物體或區域之后使用 GAN 模型,將圖像中摳出一塊區域所得的殘留圖(區域出現的上下文)作為輸入,訓練模型修復出完整圖像。在訓練時,使用對抗損失作為生成器的損失函數,使用二分類損失作為判別器的損失函數,對生成器和判別器進行對抗訓練。
學習物體的內容信息 step 2:訓練 GAN 根據上下文重構原圖(被剔除的物體或區域)
[5] Context encoders: Feature learning by inpainting
第二種方法認為物體中不同局部的相對位置比紋理更能表達內容信息。例如,我們在觀察狗的時候,會發現狗的頭總在狗的身體上方。假如一種生物的身體在頭的上方,那么這種生物肯定不是狗。要想學習這種物體隱含的相對位置信息,我們只需要在原圖的基礎上提取一個局部內連續的 9 塊區域(一個中心區域及其 8 個方向的相鄰區域),保區域內的紋理信息,并訓練模型根據紋理預測區域在中心區域的哪個方向。這種策略在 Context Prediction 任務中很常見。
現有工作一般是將圖像中物體所在區域切分成 9 個 Patch,記錄 8 個 Patch 與中心 Patch 的相對位置關系(如下圖,1 對應左上)。
學習物體內含的相對位置信息 step 1:原圖的基礎上剔除物體或區域中包含的相對位置信息之后使用 CNN-based 的分類器,將中心區域和某一塊相鄰區域作為輸入,用共享權重的特征提取器分別提取特征,合并兩區域的特征并通過 MLP 輸出相鄰區域相對中心區域的方向(例如 6 是下)。在訓練時,使用多分類損失作為損失訓練分類器學習相對位置信息。
學習物體內含的相對位置信息 step 2:訓練 CNN 根據紋理重構相對位置信息[6] Unsupervised Visual Representation Learning by Context Prediction
第三種,同樣是學習物體內含的相對位置信息,我們還可以將原圖切分成 9 塊區域進行隨機打亂,并訓練模型預測這 9 塊區域被打亂的方式屬于哪種情況。這種策略在 Image Jigsaw Puzzle 任務中很常見。
現有工作一般先將圖像分成 9 塊 Patch,定義對 9 塊 Patch 的 64 種打亂方式,每次從 64 種打亂方式里隨機選一種進行打亂。
學習物體內含的相對位置信息 step 1:原圖的基礎上剔除物體或區域中包含的相對位置信息之后使用 CNN-based 的分類器(CFN),將 9 塊 Patch 作為輸入,用共享權重的特征提取器分別提取特征,合并 9 個 Patch 的特征并通過 MLP 輸出打亂的方式屬于 64 種中的哪一種。在訓練時,使用多分類損失作為損失訓練分類器學習相對位置信息。
學習物體內含的相對位置信息 step 2:訓練 CFN 根據紋理重構相對位置信息[7] Unsupervised learning of visual representions by solving jigsaw puzzles
6. 形變信息(Geometric Transformation Recognition)
CNN 有限的旋轉不變性一直飽受研究者的詬病,在一些工作中,學習到物體的旋轉角度顯得十分重要。在魔改網絡結構時,為了學習這些信息,我們往往嫁接 STN 模塊。在自監督學習中,我們可以顯式地讓模型學習這些信息。一些工作提出根據原圖生成不同方向新圖像(當然也可以理解為剔除不同旋轉角度圖像中的旋轉角度得到原圖像),并訓練模型根據新圖像預測旋轉角度。這種策略在 Geometric Transformation Recognition 任務中很常見。
現有工作一般對圖像進行 0、90、180、270 度的旋轉,生成新圖像并記錄對應的旋轉角度。
學習旋轉信息 step 1:原圖的基礎上生成不同方向新圖像之后使用 CNN-based 的分類器,將旋轉后的圖像作為輸入,預測旋轉角度。在訓練時,使用多分類損失作為損失訓練分類器學習旋轉角度信息。
學習旋轉信息 step 2:訓練 CNN 根據新圖像預測旋轉角度[8] Unsupervised Representation Learning by Predicting Image Rotations
7. 關聯信息(Image Clustering)
在訓練 CNN 時,樣本間的關聯關系往往會被忽視,但是在圖像檢索等領域這些關聯關系卻對提高任務精度為重要。在魔改損失函數時,我們可能會用到?metric learning;在魔改網絡結構時,我們會使用?GCN 計算節點之間的相似度進行圖卷積。而在自監督學習中,我們可以顯式地讓模型學習這些信息。
現有工作一般使用聚類算法先對圖像進行聚類,記錄聚類結果并將樣本標注上對應簇的標簽;(當然也可以理解為剔除相關樣本帶來的簇信息)并訓練模型根據圖像預測樣本所屬的簇。相比于任務相關的類別標簽,簇所指向的標簽更符合數據本來的特征(例如真假人臉分類可能會聚簇為男女),粒度可能也更細(例如貓狗分類可能會聚簇成不同顏色的貓狗等)。
學習樣本間的信息 step 1:對圖像進行聚類并記錄聚類結果作為標簽之后使用 CNN-based 的分類器(CFN),圖像作為輸入,預測圖像所屬的簇。在訓練時,使用多分類損失作為損失訓練分類器學習樣本間的模式差異。
學習樣本間的信息 step 2:訓練 CNN 根據圖像預測簇標簽[9] Deep clustering for unsupervised learning of visual features
∞. 時域、頻域上的推廣
上面介紹的工作大多選擇在空間上剔除信息(空域),一些工作還將自監督學習進一步推廣到了時域、頻域甚至熵域。例如,在句子(自然語言處理)中可以打亂詞的順序、或是摳去部分詞匯,再對缺失的信息進行重構;在視頻(視頻分析)中可以打亂幀的順序、或是摳去部分幀,再對缺失的信息進行重構;在音頻(音頻分析)中可以在頻譜圖上摳去部分頻段,再對缺失的信息進行重構等等。此外,自監督在?3D 視覺、醫學圖像、多模式識別等領域似乎也有很大可水的空間(逃
半監督學習
前面我們提到,在數據集中,標簽的數量和標簽蘊含的信息往往是有限的。而自監督希望充分利用數據自身,通過數據自身的結構或者特性,人為構造標簽進行訓練(這個過程被稱為 pretext 訓練)。
另外一些工作提出,在一部分數據集標簽未知的情況下,我們是否能夠根據已知樣本的標簽,人為構造任務相關的標簽(通常被成為代理標簽)進行訓練呢?這就是半監督學習的初衷。
有些同學會說,我們的數據集都是 banchmark,都是有監督的數據集,我們是否還需要半監督方法呢?答案是肯定的。在科研過程中,如果模型在某個數據集上表現尷尬,而創意卻很難割舍,我們(的朋友)往往會選擇擴充數據集構造一個新數據集進行驗證。但是擴充的數據集往往缺少標簽(錢),這時半監督的方法對比不失為一種選擇。即使是在比賽中,外部數據集也經常會被摻雜在任務數據集中提高模型的泛化能力(甚至是在頻譜分類數據集中摻雜 Flickr)。這時的外部數據集八成是沒有任務相關的標簽了,我們就需要半監督學習來救場,生成任務相關的標簽。
根據生成的代理標簽所使用的“指導方向”的不同,這里總結一些半監督學習的方法:
指向臨近的類別(Pseudo Labels / Entropy Minimization / Sharpen)
指向擾動后的自洽(Π-model / Temporal ensembling/ Mean Teacher / UDA)
指向對抗中的自洽(Virtual Adversarial Training)
1. 指向臨近的類別(Pseudo Labels / Entropy Minimization / Sharpen)
如何為沒有標簽的樣本創建一個代理標簽,最簡單的想法是使用模型在有標簽的數據上訓練,進而用該模型預測無標簽樣本所屬的類別,作為該樣本的代理標簽(Pseudo Labels)。例如,模型對某樣本的預測是 20% 的可能是貓,30% 的可能是狗,50% 的可能是蘋果。我們就將該樣本標記為蘋果。在后續的訓練過程中,用蘋果作為標簽指導模型在這張圖片上的分類結果。其本質是將模型預測拉向當前最鄰近的類別(無論是否正確)。
直觀來看,Pseudo Labels?并未改變模型實際的預測類別,只是提高了模型在無監督數據上的自信度(例如,有 50% 可能性是蘋果的圖片被標注為蘋果加入訓練集,模型經過優化后,判斷其為蘋果的可能性進一步提高)。但是,這帶來了兩方面的好處:一方面,模型不僅能夠正確解釋有監督的數據,也能正確解釋部分無監督數據了。另一方面,隨著模型預測自信度的增強,模型會更少地給出模棱兩可的預測,增強模型的魯棒性(49% 是貓 51% 是狗的圖像,圖像稍加變化可能就會改變模型的分類結果;反之則更為穩定)。也有些工作解釋說,強自信度的模型更加關注與個類有關的特征而不是與一些類有關的混合特征(強自信度的模型的分類邊界不會穿過邊際分布的高密度區域)。
熵正則化:熵衡量模型預測結果的自信度、作為正則項迫使模型在無監督的數據上作出低熵預測后續的工作中,又有些人提出,可以通過熵衡量模型預測結果的自信程度,從而通過最小化熵將模型預測拉向當前最鄰近的類別。熵可以理解為系統的混亂程度(來自我的天文學老師),熵越高系統越混亂,事件的隨機性越強(如果 49% 的可能出現貓 51% 的可能出現狗,那么系統中出現貓還是狗基本就不可控了);反之事件的隨機性越弱。因此,這些工作一般在有監督的數據上使用交叉熵作為損失(正常的分類損失),在無監督的數據上使用熵作為正則項,迫使模型在無監督的數據上作出低熵預測。這個正則項非常好實現:
import torch.nn as nn import torch.nn.functional as Fclass EntropyMinimizationLoss(nn.Module):def __init__(self, reduction='mean'):super(EntropyMinimizationLoss, self).__init__()self.reduction = reductiondef forward(self, x):entropy = -1.0 * F.softmax(x, dim=1) * F.log_softmax(x, dim=1)if self.reduction == 'mean':return entropy.mean()if self.reduction == 'sum':return entropy.sum()return entropySharpen:通過銳化人為地降低預測結果的熵另一方面,也有些工作通過顯式的后處理,人為地降低預測結果的熵。這種后處理方式在 MixMatch 中被稱為?Sharpen(銳化)。銳化的過程可以用下式表達:
其中,??為模型預測樣本屬于某一類的概率,?為溫度參數,一般為 2。銳化的實現也很簡單,卻能有效地獲得低熵預測,增強模型對預測結果的自信度:
def sharpen(probabilities, T):if probabilities.ndim == 1:tempered = torch.pow(probabilities, 1 / T)tempered = (tempered/ (torch.pow((1 - probabilities), 1 / T) + tempered))else:tempered = torch.pow(probabilities, 1 / T)tempered = tempered / tempered.sum(dim=-1, keepdim=True)return tempered注:這里我特別把這兩部分代碼寫出來,是因為在最近的 Kaggle 競賽中,(在蛙神的討論中)這些低熵方法(尤其是在 Ensemble 的過程中)取得了不俗的效果(盡管有時候容易被 shake down)。添加到現有模型也比較容易,各位同學取需。
[10] Entropy Minimization vs. Diversity Maximization for Domain Adaptation
[11] MixMatch: A Holistic Approach to Semi-Supervised Learning
2. 指向擾動后的自洽(Π-model / Temporal ensembling/ Mean Teacher / UDA)
也有的工作提出,盡管我們無法得知準確的無監督數據的標簽,但是,針對同一個樣本做不同的輕微擾動,模型得出的預測結果應當是相同的。即增廣后圖像的預測應當與增廣前(或其他增廣方式產生的圖像)的預測結果自洽。這種思路顯著提高了模型在某個方面(取決于擾動的策略)的泛化能力。
現有工作一般使用無標簽數據,經過兩次不同增廣(augment)之后,再使用兩個模型(一般是同一模型結構,使用不同 dropout)分別對對應的變換后的樣本進行預測。因為訓練樣本本質上都是同一樣本的輕微擾動,因此兩個模型輸出的概率分布應該盡可能相同。一般使用 MSE 計算兩個概率分布之間的相似度作為損失,提升模型在不同擾動下的一致性。
Π-model:樣本的不同增廣在經過不同 dropout 的模型后,輸出的概率分布應該盡可能相同在 Π-model 的基礎上,研究者們進一步提出了?Temporal ensembling。在 Π-model 中,我們需要在一迭代時間內產生的圖像的兩種增廣圖像,但實際上并沒有必要,因為這樣一次迭代就需要推理兩次模型,而且由于 batch 有限,生成增廣的概率分布偶然性較大。他們提出,使用時序組合模型,讓來自歷史迭代周期產生的預測結果與當前迭代周期產生的預測結果計算 MSE?進行比較。文中使用上一次迭代周期中的預測結果和當前周期的預測結果的加權和作為歷史迭代周期產生的預測,有效地保留歷史了信息,消除了擾動并穩定了當前值。在此基礎上一些研究者又提出了?Mean Teacher 和 UDA?等模型,盡管圖像增廣的方式、分布差異的度量、模型的 Ensemble?有所差異;但是其核心都是針對擾動的自洽損失。
[12] Temporal Ensembling for Semi-Supervised Learning
[13] Mean teachers are better role models: Weight-averaged consistency targets improve semi-supervised deep learning results
[14] Unsupervised Data Augmentation for Consistency Training
3. 指向對抗中的自洽(Virtual Adversarial Training)
隨著自洽損失被人們廣泛使用,一些工作認識到半監督學習的精髓在于保證不同擾動下模型預測的一致性,而要學習這種一致性就要找到更好添加擾動的策略。人為的數據增廣無法模擬各種復雜情況的輸入,那么能否讓模型學習自適應地添加擾動呢?
虛擬對抗訓練(Virtual Adversarial Training)使用反向傳播和梯度上升來生成噪聲樣本作為擾動后的數據(即,尋找一個與原始樣本十分接近的樣本,使得分類器對其給出與原是樣本一個非常不同的預測)。在得到噪聲樣本后,我們使用原數據上的模型預測結果作為噪聲樣本的學習目標,訓練模型在對抗生成的樣本上仍能保持分類效果;與此同時訓練有標簽的訓練樣本進行正常的分類。這種思路常常被用于對抗樣本生成任務中。
這些工作一般使用分類損失的正梯度方向作為擾動方向(在負梯度方向上模型的損失下降最快,導致正梯度方向上神經網絡的盲區較大),通過在原圖基礎上添加擾動,生成噪聲樣本??。我們希望通過在小范圍內優化噪聲樣本使得加入擾動后的預測與原預測的差異(KL 散度)??盡可能大。在獲得噪聲樣本后,再將噪聲樣本加入訓練集,訓練模型將噪聲樣本的類別預測為原樣本所對應的類別。最終的目標函數可以表示為:
[15] Virtual Adversarial Training: A Regularization Method for Supervised and Semi-Supervised Learning
后記
本文提到的自監督和半監督方法都是較為經典的算法,提供了最基礎的思路和研究方向。近年來的研究不斷在此基礎上交叉(多個基礎思想相結合)、變異(為了解決某個任務痛點進行魔改),新的方法已經屢次刷新 sota,但仍萬變不離其宗。根據我個人的研究進展,在 self-supervise 和 semi-supervise 坑里灌水仍有不小空間,但是由于系統化的理論比較少,我們在選擇灌水方向時往往需要遵循“拆解-組合”(沒錯,多一步拆解)的步驟。即,先將一篇文章中使用的 trick 拆解成不同小 trick,之后通過消融試驗等選擇有效的部分,和其他文章中的拆解出來的 trick 組合。至于有哪些前沿方法可以拆解,直接看 awesome list 和綜述就可以了~
此外,最近還有小伙伴反應由于內卷加劇,trick?撞車的現象嚴重:讀的文獻越來越多之后發現自己的某個 idea 其實就是某篇論文中某 trick 的變形。其實,在 CV 領域,有很多方法都被重新發明了 N 次。不要糾結實質是否相同,踏踏實實的做好試驗講好自己的故事就好了~如果你的解釋正好填補了某個評審的盲區,很可能就會中獎(畢竟現在涌出很多新人評審,他們大多都會比較保守地給 broadline,要是有個 weakly accpt 的話,rebuttal 翻盤的概率還是很高的)。
最后,祝大家逢投必中咯~
[16] Awesome self-supervised learning
[17] A survey on Semi-, Self- and Unsupervised Techniques in Image Classification
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優惠券,請回復“知識星球”喜歡文章,點個在看
總結
以上是生活随笔為你收集整理的【网络结构】小议如何跳出魔改网络结构的火坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何只使用标签来构建一个简单的电影推荐系
- 下一篇: 目前最全:52 个深度学习目标检测模型汇