基於標準優化的監督學習範式#
- 訓練數據 (i=1,...,n)
- Xi: 輸入,協變量;
- Yi: 輸出,標籤
- 模型 fθ(⋅),θ⇐參數
通過經驗風險最小化進行訓練#
θ^=θargminn1i=1∑nltrain(yi,fθ(xi)):
- 選擇一個 θ^,我們可以從數據中學習以最小化某些東西
- l(y,y^) 返回一個實數 :l 是一個損失,將 y 與某些 y^ 的預測進行比較,始終返回一個實數(訓練數據之間的差異,可能是向量或數字),我們可以最小化
真正的目標是在未見過的 X 上的真實世界表現#
數學代理:
- ∃P(X,Y):假設一個概率分佈
- 希望損失 l(Y,fθ(X)) 的 EX,Y(對 X 和 Y 的期望)較低
複雜性#
- 我們無法訪問 P(X,Y)
我們希望在我們未見過的東西上表現良好,我們假設有平均值是有意義的,並且存在某種潛在的分佈,但我們不知道它
解決方案:
- (Xtest,i,Ytest,i)i=1ntest:收集一組保留的測試數據
- 測試錯誤=ntest1i=1∑ntestl(ytest,i,fθ(xtest,i))
我們收集的這個測試集在某種程度上忠實地代表了我們期望在現實世界中看到的東西,我們希望現實世界遵循概率分佈所做的事情,因此我們希望平均和抽樣能給我們一些預測能力,預測實際會發生的事情。
我不知道該怎麼做,我知道怎麼做,所以我就這樣做
- 我們關心的損失 ltrue(⋅,⋅) 與我們的優化器不兼容
你想這樣做,這需要某種方法來計算這個參數是什麼。這是一種算法,他們必須做這項工作,該算法只有在某些事情發生時才能工作。可能你關心的損失不允許它做它需要做的事情。
你實際上關心的是某種不可微分的損失,因為這對你的問題是實際相關的。但你的最小化器將使用導數,因此你會說這行不通。
解決方案:
- ltrain(⋅,⋅):使用一個我們可以處理的替代損失。
經典示例:
-
y∈{貓,狗},ltrue:漢明損失
-
y→R,其中訓練數據映射為:
{貓→−1狗→+1
- ltrain:平方誤差
當我們評估測試錯誤時,我們使用 ltrue。
評估測試錯誤的目的是了解你在現實世界數據上可能表現得多好。這是對已經優化的特定模型進行的評估,測試錯誤上不會發生優化。
你應該知道的示例:
- 二元分類:邏輯損失,鉸鏈損失
- 多類別分類:交叉熵損失
附註:
n1i=1∑nltrue(yi,fθ^(xi)) 在訓練集上進行評估,與 n1i=1∑nltrain(yi,fθ(xi)) 不同
這個對象在實際上對於每個將要處理事情的人來說都是調試。
我們希望使用這個來了解我們是否實際上在優化我們的訓練損失,並看看我們實際上做得如何。因為如果有增長,我會再加一些詞。如果你告訴這個優化的東西和你在朝著的事情之間存在明顯的不匹配,那麼可能有些地方出錯了。
ntest1i=1∑ntestl(ytest,i,fθ(xtest,i))
你希望這是一個忠實的測量,了解事情在實踐中可能如何運作,但如果你看著這個家伙說 ' 哦等等,我應該改變這個,然後你回去說 ' 讓我再看看這個 ',那麼你可能會運行一個優化循環,涉及你作為優化器,實際上你在查看這些保留的數據,而這些數據不再被保留。由於它不再被保留,你可能不會信任事情在實踐中會如何運作。(對過擬合現象的某種看法)
在 n1i=1∑nltrain(yi,fθ(xi)) 上沒有這樣的關心,因為你已經在使用這些數據來評估你做得如何,從你的優化算法的角度來看,它一直在查看它。因此,無論你是否選擇其他視角,都是無成本的。
- 你用你的替代損失運行優化器,並且我們得到了 θ^ 的 “瘋狂” 值,你在優化器上,和 / 或你得到了非常糟糕的測試表現。(對過擬合現象的另一種看法)
解決方案:
- 在訓練期間添加明確的回歸:θ^=θargmin(n1i=1∑nltrain(yi,fθ(xi)))+Rλ(θ),例如,脊回歸:R(θ)=λ∥θ∥2
注意:我們添加了另一個參數 λ。我們如何選擇它?
原生超參數:θ^=θ,λ≥0argmin()
- 將參數分為 “正常參數 θ 和超參數 λ”
“超參數是一個參數,如果你讓優化器隨意使用它,它會變得瘋狂,所以你必須將其分開”
保留額外數據(驗證集),用來優化超參數
>
> > 當你使用驗證集進行超參數優化時,你可能會使用與你用於尋找參數的參數不同的優化器。因此,通常在深度學習的背景下,這個東西總是會是某種變體的梯度下降,我們用來進行這種設置。但是對於超參數設置,你可能會進行暴力網格搜索或基於多臂土匪等相關概念的搜索,或者其他零階優化算法的技術,這將幫助你做到這一點,當然你也可以在某些超參數搜索中使用基於梯度的方法。
所有解決方案:
進一步的複雜性#
通常,優化器可能有自己的可調節旋鈕。在實踐中,作為一個嘗試進行深度學習的人,你將有離散的選擇來選擇使用哪個優化器。
你會看到兩種微妙不同的觀點。
梯度下降是一種迭代優化方法,你在當地進行改進。
你關心的只是你的損失在你所處的參數鄰域中的行為。
所以看看損失在附近的情況。
θt+1=θt+η(−∇θLtrain,θ),Ltrain,θ=n1i=1∑nltrain(yi,fθ(xi))+R(⋅)
這是一個離散時間動態系統
η← "步長"/"學習率" ,這個 η 控制這個系統的穩定性
η 太大,動態變得不穩定(它會振盪)
η 太小,收斂所需的時間太長
Ltrain(θ++Δθ)≈Ltrain(θ+)+"行"∂θ∂Ltrain⌋θ+Δθ
這個 “行” 的轉置稱為梯度