無需手工設計,從零開始搜尋損失函式

機器之心發表於2021-03-31

近年來,自動機器學習(AutoML)在模型結構、訓練策略等眾多深度學習領域取得了進展。然而,損失函式作為深度學習模型訓練中不可或缺的部分,仍然缺乏良好的探索。目前,多數研究工作仍然使用交叉熵損失(Cross-Entropy Loss)、範數損失(L1/L2 Loss)來監督網路訓練。儘管這類損失函式在多數情況下可以取得不錯的效果,但它們與網路在測試時使用的評估指標之間大多存在差異,而這種差異會對模型訓練效果造成損傷。


目前對於損失函式進行改進的工作可以分為兩類:

  • 手工設計。手工設計損失函式依賴於設計者對特定任務和評價指標的專業知識和理解,因此很難在不同任務上進行推廣。

  • 自動設計。自動設計損失函式的工作嘗試自動搜尋較優的損失函式,但當前的工作都僅僅關注於某個特定任務(如語義分割)或特定評價指標(如mAP),對特定情形進行了針對性設計,因此其可推廣性也存在疑問。


為了儘可能減少針對各種任務設計合適的損失函式時所需的人力成本,來自香港中文大學、商湯科技等機構的研究者設計了一個通用的損失函式搜尋框架AutoLoss-Zero。為了確保通用性,該方法的搜尋空間由一些基本的數學運算組成,而不包括對於某個評價指標的針對性設計。由於此類搜尋空間中有效的損失函式十分稀疏,研究者提出了高效且通用的拒絕機制和梯度等價性檢測,以提高搜尋的效率。給定任意任務和評價指標,AutoLoss-Zero可以以合理的開銷(4張V100,48h內)從隨機初始化開始,搜尋到與手工設計的損失函式表現相似或更優的損失函式
 

無需手工設計,從零開始搜尋損失函式


論文地址:https://arxiv.org/abs/2103.14026

該研究的主要貢獻包括:

  • AutoLoss-Zero是首個通用於各種任務的損失函式搜尋框架,其搜尋空間由基本數學運算構成,無需先驗知識,可以極大地減少損失函式設計所需的人力。該研究在多項計算機視覺任務(目標檢測語義分割例項分割姿態估計)上驗證了AutoLoss-Zero的有效性;

  • 該研究提出了高效的拒絕機制,從而快速地篩選掉絕大多數沒有希望的損失函式。同時,該研究提出了一個基於梯度的等價性檢測,以避免對於彼此等價的損失函式進行重複的評估;

  • 實驗表明,該方法搜尋出的損失函式可以很好地遷移到不同資料集和網路結構上。


搜尋空間

該研究首先定義了搜尋目標。給定任意任務上的評價指標 ξ ,該方法嘗試搜尋一個最優的損失函式  L(y ̂,y;N_ω ),其中N_ω表示引數為ω的網路,y ̂表示網路的預測,y表示網路的訓練目標。因此,搜尋目標可以表示為一個巢狀最佳化(nested optimization):

無需手工設計,從零開始搜尋損失函式



其中最佳化目標 f(L;ξ) 表示損失函式 L 在評價指標 ξ 上的得分,ω^* (L) 表示使用損失函式L訓練的網路引數,E(⋅) 表示數學期望,S_train 和S_eval 表示搜尋過程中使用的訓練集和驗證集

該搜尋空間由一些基礎的數學運算組成,這個集合稱為 H,如下表所示。

無需手工設計,從零開始搜尋損失函式

表1. 搜尋空間候選運算

該方法將損失函式表示為一個計算圖 G。G 是一個有根樹(rooted tree),其中葉子節點表示損失函式的輸入(即網路預測 y ^和訓練目標 y),根節點表示損失函式的輸出 o,其他的中間節點從表中的數學運算裡取樣得到。此外,該方法還新增一個常數 1 作為損失函式的候選輸入,以增加其表示能力。在整個運算圖內,所有的張量(tensor)都保持同樣的形狀 (N,C,H,W),分別代表(batch, channel, height, width)四個維度的尺寸。計算圖 G 的輸出 o 會被融合(aggregate)為最終的損失值:
 

無需手工設計,從零開始搜尋損失函式


在一些任務中,損失函式由多個分支組成(如目標檢測中的分類和邊框迴歸分支)。在這種情況下,我們將每個分支表示為一個獨立的計算圖 G,並將它們的損失值求和作為最終的損失值。搜尋對所有的分支同時進行。

搜尋演算法

該方法使用進化演算法對損失函式進行搜尋。圖1為整個搜尋演算法的流程圖。

無需手工設計,從零開始搜尋損失函式

圖 1. 搜尋演算法流程圖

在搜尋初始化階段,我們首先隨機生成 K(預設K=20)個損失函式作為初始種群。此後,每一次更新隨機取樣當前種群內 T(預設T=5%)比例的損失函式,並對其中在代理任務上得分最高的一個進行變異(mutation),得到後代個體,並加入種群。在種群的更新過程中,只有最新的 P=2500 個個體會被保留。

由於搜尋空間中有效的損失函式十分稀疏,儘管代理任務相對於最終的網路訓練已經相當簡化,但對於每個候選的損失函式都進行代理任務上的評估,時間成本仍然是不可接受的。為此,研究者設計了一個損失函式拒絕機制(loss-rejection protocol),對候選的損失函式進行初步篩選。在損失函式的隨機生成和變異過程中,如果候選子代個體無法透過篩選,則重新進行隨機生成/變異,直到得到可以透過篩選的損失函式,用於代理任務上的評估。此外,該方法在對候選的損失函式進行評估前,會先檢測其是否與已評估過的損失函式等價(gradient-equivalence-check strategy),若等價則跳過代理任務的網路訓練,複用之前相同個體的分數。

接下來,我們來看下搜尋演算法中的幾個關鍵部分。

隨機初始化

損失函式隨機初始化的過程如圖2所示。計算圖無需手工設計,從零開始搜尋損失函式從根節點開始,遞迴地從候選運算集合 H 中隨機取樣運算子作為其子節點。每個節點的子節點數由這個節點所代表的運算的運算元決定。該方法固定隨機初始化的計算圖深度為 D(預設D=3),在當前節點深度達到 D 後,其從候選的輸入集合 {y ^,y,1} 中有放回地隨機取樣子節點,這些子節點即為計算圖的葉子節點。

無需手工設計,從零開始搜尋損失函式

圖2. 損失函式隨機初始化

變異

基於該研究提出的損失函式表示形式,研究者定義了三種不同的變異型別:插入(Insertion),刪除(Deletion)及替換(Replacement)。三種變異型別的示意圖如圖3所示。
 

無需手工設計,從零開始搜尋損失函式

圖3. 變異型別

在每次產生子代的過程中,存在10%的機率不進行變異,而直接複製父代個體。此外,為了鼓勵演算法進行探索,在變異時,損失函式有50%的機率被重新隨機初始化。

損失函式拒絕機制

搜尋的目標是找到可以儘可能最大化評價指標ξ的損失函式 L。基於此,研究者提出一個損失函式L和評價指標ξ之間的相關性分數 g(L;ξ),來衡量一個損失函式對評價指標進行最佳化的能力。

該研究從訓練資料集中隨機選擇 B 個樣本(在實驗中統一使用B=5),使用一個隨機初始化的網路 N_(ω_0 ) 對這 B 個樣本進行計算,並將網路預測 y ^ 和對應的訓練目標 y 儲存下來,記作 {(y ^_b,y_b )}_(b=1)^B。接下來,透過梯度下降的方式,使用候選的損失函式 L(y ^,y) 對網路預測 y ^ 直接進行最佳化,並計算最佳化結果 y ^* 在評價指標 ξ上的得分,即

無需手工設計,從零開始搜尋損失函式


g(L;ξ) 即為最佳化結果相對於初始預測的提升。這個分數越高,意味著損失函式對評價指標的最佳化能力越強。因此,該研究設定了一個閾值 η(實驗中預設η=0.6),相關性分數 g(L;ξ) 低於此閾值的損失函式被認為是沒有希望(unpromising)的,會被直接拒絕。在此過程中並沒有網路計算的參與,而是直接對輸入進行最佳化,這使得該損失函式拒絕機制十分高效。實驗表明,在一個 GPU 上,每分鐘可以篩選 500~1000 個候選損失函式。這大大提高了演算法探索搜尋空間的能力。

梯度等價性檢測

為了避免對於相互等價的損失函式進行重複的代理任務評估,對於每個評估過的損失函式,該方法記錄其相對於上文「損失函式拒絕機制」中使用的B個樣本的梯度的二範數,即無需手工設計,從零開始搜尋損失函式。若兩個損失函式對於這B個樣本,其梯度二範數均相同(取兩位有效數字),則我們認為這兩個損失函式是等價的,並將較早的損失函式的代理任務分數複用於新的損失函式

實驗

該研究在語義分割目標檢測例項分割姿態估計等四項計算機視覺任務上從隨機初始化開始進行了搜尋。此外,該研究對搜尋得到的損失函式的泛化性進行了研究,並對前文所提到搜尋演算法中的各項技術對於搜尋效率的影響進行了分析。

語義分割

該研究使用 PASCAL VOC 資料集對語義分割任務中主流的 6 個評價指標進行了搜尋,並使用得到的損失函式對 DeepLab V3+ 網路進行了重新訓練(re-train)。表 2 為該研究的實驗結果。該研究將搜尋得到的損失函式與常見的基於手工設計的損失函式及自動搜尋的損失函式(ASL, Auto Seg-Loss)進行了比較。結果表明,在主流的幾個評價指標上,AutoLoss-Zero 搜尋到的損失函式達到或超過了當前最好的結果,僅在 BIoU 這一指標上略低於為專門關注語義分割任務的 ASL 方法,但也大大超過了現有基於手工設計的損失函式
 

無需手工設計,從零開始搜尋損失函式

表2. 語義分割實驗結果

該研究還對搜尋得到的損失函式的在不同資料集和不同網路結構上的泛化性進行了驗證。表3中,該研究使用ResNet50-DeepLabV3+ 網路在PASCAL VOC上搜尋,並將得到的損失函式應用於不同資料集(Cityscapes)和不同網路結構(PSPNet)。表3中的結果表明,該方法搜尋得到的損失函式具有良好的泛化性。
 

無需手工設計,從零開始搜尋損失函式

表3. 語義分割泛化性

目標檢測

該研究使用 Faster R-CNN 在 COCO 資料集上進行實驗。對於 Faster R-CNN 中的四個損失函式分支(RPN 網路的分類、迴歸,Fast R-CNN 子網路的分類、迴歸),該方法同時進行搜尋。表 4 給出了該方法與常用的 IoULoss、GIoULoss,以及針對目標檢測任務進行損失函式搜尋的工作 CSE-AutoLoss-A 進行比較的 結果。實驗表明,該方法搜尋到的損失函式與這些損失函式表現相似。
 

無需手工設計,從零開始搜尋損失函式

表4. 目標檢測實驗結果

該研究也對目標檢測搜尋得到的損失函式的泛化性進行了實驗。表 5 為實驗結果。
 

無需手工設計,從零開始搜尋損失函式

表5. 目標檢測泛化性

例項分割

該研究使用 Mask R-CNN 在 COCO數 據集上進行實驗,並對五個損失函式分支同時進行搜尋。表 6 表明該方法搜尋到的損失函式與手工設計的損失函式表現相近。
 

無需手工設計,從零開始搜尋損失函式

表 6. 例項分割實驗結果

姿態估計

該研究在 COCO 上對姿態估計任務進行了實驗。表 7 為實驗結果。該研究與姿態估計中常用的均方誤差損失(MSE Loss)進行了比較,實驗表明,AutoLoss-Zero 從零開始搜尋到的損失函式表現略好於 MSE Loss。
 

無需手工設計,從零開始搜尋損失函式

表7. 姿態估計實驗結果

搜尋效率

該搜尋演算法基於進化演算法。為了提高搜尋效率,研究者設計了損失函式拒絕機制(Loss-Rejection Protocol)和梯度等價性檢測(Gradient-Equivalence-Check Strategy)。如圖 4 所示,研究者發現這些模組可以有效地提高搜尋的效率。尤其是在目標檢測任務上,由於同時對 4 個分支進行搜尋,搜尋空間尤為稀疏,這使得在沒有損失函式拒絕機制的情況下,搜尋過程無法在合理的時間內(約 400 次代理任務評估)找到任何分數大於 0 的損失函式。這表明高效的拒絕機制是搜尋有效的關鍵。
 

無需手工設計,從零開始搜尋損失函式

圖4. 搜尋效率對比

研究者在表 8 中進一步分析了各個模組給搜尋效率帶來的提升。“滿血”的 AutoLoss-Zero 可以在 48 小時內(使用 4 塊 V100 GPU)探索超過10^6 個候選損失函式,這使得它可以在龐大而稀疏的搜尋空間內有效地探索。
 

無需手工設計,從零開始搜尋損失函式

表8. 目標檢測任務的搜尋效率分析。(“# Explored Losses”表示演算法在48小時內探索的損失函式數量。“Stop Training for Invalid Loss Values”表示網路在代理任務的前20輪更新內即由於出現NaN或Inf而停止了訓練。)

相關文章