模型的泛化能力
機器學習的目标是發現模式(pattern)。
是以這需要确定模型是真正發現了泛化的模式還是簡單的記住了資料。
先講個小故事,我們大三那年參加比賽,用機器學習寫了個語言識别,雖然準确率很低,隻有50%。當時比賽一個評委不信那是機器學習寫的,一口咬定我們是寫的資料庫比對……
泛化和記住資料有什麼差別呢?
就好像給AB兩個學生一堆數學資料讓他學習。期末考試的時候,如果出原題,兩個人都能答100分,這個你沒辦法差別他們學的好壞。但是如果重新出題,A不及格B90分,那你就可以确定:A隻是死記硬背記住原題,而B是真正地了解了解題思路。
A就是記住資料,B就是泛化。
訓練誤差和泛化誤差
訓練誤差(training error)是指:我們的模型在訓練資料集上計算得到的誤差。
泛化誤差(generalization error)是指:當我們将模型應用在同樣從原始樣本的分布中抽取的無限多的資料樣本時,我們模型誤差的期望。
泛化誤差我們無法準确計算,因為面對未知的期末考試題,你永遠不可能知道自己能得幾分。
模型複雜性
訓練樣本可以了解為給你多少學習資料。而模型規模可以了解為你的背題能力。記住是背題能力不是了解能力。現在可以認為$背題能力+了解能力=1$。當你的精力都去背題了,你就無暇顧及去了解了。
當我們的訓練樣本和模型規模相比對的時候,我們或許能可以讓訓練誤差和泛化誤差相接近。
但是當模型過于複雜而樣本很少的時候,我們預計訓練誤差會下降,但泛化誤差會增大。(過拟合)
就相當于你都去背題了,面對原題答得很好。但是了解能力不行,不出原題你就分很低。
影響模型泛化的因素
- 可調整參數的數量。當可調整參數的數量很大時,模型往往更容易過拟合。
- 參數采用的值。當權重的取值範圍較大時,模型可能更容易過拟合。
- 訓練樣本的數量。即使你的模型很簡單,也很容易過拟合隻包含一兩個樣本的資料集。而過拟合一個有數百萬個樣本的資料集則需要一個極其靈活的模型。
縮小訓練誤差和泛化誤差的差異
為了縮小訓練和測試性能之間的差距。其實作實來講,欠拟合和過拟合我們更應該考慮怎麼防止過拟合。是以這個标題就可以改為怎麼防止過拟合。
-
針對可調整參數的數量:
可調參數數量越多就是模型越複雜。維持模型的簡單性就是模型以較小次元的形式出現。選擇模型的時候要選擇适宜次元的模型。
- 訓練樣本的數量。這個和第一個一樣,針對訓練樣本規模選擇合适的模型。
-
參數采用的值:
另一個簡單性就是限制參數的取值範圍,那就涉及到正則化。
- 補充:還有另一個角度,是保持平滑性,即函數不應該對其輸入的微小變化敏感。即dropout。
正則化 | 權重衰退推導
這一部分我是參考的《動手學深度學習》。原書寫的是weight decay,也就是權重衰退,我是自己把标題加了正則化。因為我入門看的是吳恩達,李沐老師講了半天之後我發現?恩?不是和吳恩達講正則化那部分講的同一個東西嗎,是以我就自己加上了正則化。
不過這裡用到的$L_2$範數隻是正則化的一種。
在訓練參數化機器學習模型時,權重衰減(通常稱為$L_2$正則化)是最廣泛使用的正則化的技術之一。
就是給損失函數加上其權重的$L_2$範數,将原來的訓練目标最小化訓練标簽上的預測損失,調整為最小化預測損失和懲罰項之和。
為了讓求導之後更好看,我們也給正則項前變加上二分之一。
$$
L(\mathbf{w}, b) + \frac{\lambda}{2} |\mathbf{w}|^2
$$
其中
$$
L(\mathbf{w}, b) = \frac{1}{n}\sum_{i=1}^n \frac{1}{2}\left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right)^2.
$$
對mini-batch來說權重更新過程如下:
$$
\begin{aligned} \mathbf{w} \leftarrow \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_{\mathbf{w}} l^{(i)}(\mathbf{w}, b) = \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \mathbf{x}^{(i)} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right)\end{aligned}
$$
推導一下:
$L_2$範數為$|w|_2$簡寫為$|w|$。$|w|^2$就是其平方。
$$
\begin{aligned}
&\because|w|=|w|{2}=\sqrt{w{1}^{2}+w_{2}^{2}+\cdots+w_{n}^{2}}=\sqrt{\sum_{i=1}^{n} w_{i}^{2}} \
&\therefore|w|^{2}=\sum_{i=1}^{n} w_{i}^{2}
\end{aligned}
$$
對$|w|^{2}$ 求導:
$$
\frac{\partial|w|^{2}}{\partial w}=2 \sum_{j=1}^{n} w_{i}
$$
帶入到mini-batch的權重更新:
$$
\begin{aligned}
&w-\frac{\eta}{|B|}\left(\sum_{i \in B} x^{(i)}\left(w^{\top} x^{(i)}+b-y^{(i)}\right)+\frac{\lambda}{2} \cdot 2 \sum_{i \in B} w^{(i)}\right)\
&=w-\frac{\eta}{|B|}\left(\sum_{i \in B} x^{(i)}\left(w
^{\top} x^{(i)}+b-y^{(i)}\right)+\lambda \sum_{i \in B} w^{(i)}\right)\
&=w-\eta \lambda w-\frac{\eta}{|B|} \sum_{i \in B} x^{(i)}\left(w
^{\top} x^{(i)}+b-y^{(i)}\right)
\end{aligned}
$$
即:
$$
\begin{aligned}
\mathbf{w} & \leftarrow \left(1- \eta\lambda \right) \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \mathbf{x}^{(i)} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right).
\end{aligned}
$$
dropout
接模型泛化的補充“平滑性”。**
平滑性,即函數不應該對其輸入的微小變化敏感。
也就是說一個好的模型需要對輸入資料的擾動魯棒。分為以下兩個方面。
1. 使用有噪音的資料等價于Tikhonov正則
1995年,克裡斯托弗·畢曉普證明了具有輸入噪聲的訓練等價于Tikhonov正則化[
Neural Networks for Pattern Recognition
]
《深度學習》第七章的7.5寫:對于某些模型而言,向輸入添加方差極小的噪聲等價于對權重施加範數懲罰(Bishop,1995a, b)。
- Tikhonov正則化(吉洪諾夫正則化)
作為最小二乘方法的代價函數 $\frac{1}{2}|\boldsymbol{A} \boldsymbol{x}-\boldsymbol{b}|{2}^{2}$ 的改進, Tikhonov于 1963 年提出使 用正則化最小二乘代價函數
$$
J(x)=\frac{1}{2}\left(|A x-b|{2}^{2}+\lambda|x|_{2}^{2}\right)
$$
式中 $\lambda \geqslant 0$ 稱為正則化參數 (regularization parameters)。
- 也就是說對輸入添加極小的噪聲可以認為和$L_2$正則化是一樣的。也就是上一節的内容。
2. 丢棄法:在層之間加入噪音
在一般情況下,噪聲被添加到隐藏單元時魯棒性會更加強大。向隐藏單元添加噪聲就是Dropout算法的主要發展方向。
在2014年,斯裡瓦斯塔瓦等人[
Dropout: a simple way to prevent neural networks from overfitting
]結合畢曉普的想法,并将其應用于到網絡的内部層之間。在訓練過程中,在計算後續層之前向網絡的每一層注入噪聲。他們意識到,當訓練一個有多層的深層網絡時,注入噪聲隻會在輸入-輸出映射上增強平滑性。
這種方法之是以被稱為dropout ,因為我們從表面上看是在訓練過程中丢棄(drop out)一些神經元。 在整個訓練過程的每一次疊代中,dropout包括在計算下一層之前将目前層中的一些節點置零。
在每次訓練疊代中,産生擾動點$\mathbf{x}'$。并要求$E[\mathbf{x}'] = \mathbf{x}$。(E是期望)
在标準dropout正則化中,通過按保留(未丢棄)的節點的分數進行歸一化來消除每一層的偏差。如下所示:
$$
\begin{aligned}
h' =
\begin{cases}
0 & \text{ 機率為 } p \
\frac{h}{1-p} & \text{ 其他情況}
\end{cases}
\end{aligned}
$$
根據設計,期望值保持不變,即$E[h'] = h$。
比如:$\begin{aligned}
E\left[x_{i}'\right] &=p \cdot 0+(1-p) \frac{x_{i}}{1-p} =x_{i}
\end{aligned}$
實踐中的dropout
$$
\begin{aligned}
&\mathbf{h} =\sigma\left(\mathbf{W}{1} \mathbf{x}+\mathbf{b}{1}\right) \\
&\mathbf{h}^{\prime}=\operatorname{dropout}(\mathbf{h}) \\
&\mathbf{o} =\mathbf{W}{2} \mathbf{h}^{\prime}+\mathbf{b}{2} \\
&\mathbf{y} =\operatorname{softmax}(\mathbf{o})
\end{aligned}
$$