細品 - 過擬合與模型選擇*
欠擬合和過擬合
欠擬合是指模型不能很好的捕獲到數據特征,不能很好的擬合數據,學習能力底下。解決方法:增加模型的復雜度
過擬合是指模型不僅僅學習了數據集中的有效信息,也學習到了其中的噪音數據,使得模型在訓練集上的表現非常好,但是對於測試集的預測效果很差。解決方案:
(1) 導致過擬合的一個原因可能是由於數據不純、包含大量的噪聲數據,這時候我們需要重新清洗數據。
(2) 增加訓練數據的樣本量
(3) 采用正則化方法,降低模型參數復雜度(參數大小和參數量),從而降低模型復雜度
(4) 神經網絡中常采用dropout方法:在訓練的時候讓神經元以一定的概率不工作。
如何判斷你的模型是欠擬合還是過擬合?通常的做法就是將你的訓練數據集拆分成訓練集和驗證集,通過觀察訓練誤差和驗證誤差的情況來判斷模型對訓練數據的擬合情況。
正則化
監督學習問題無非就是在規則化參數的同時最小化誤差。最小化誤差是為了讓我們模型更好的擬合數據,而規則化參數是為了防止模型對數據的過分擬合。前面我們也提到,當我們的模型處於過擬合時,我們可以通過在模型損失函數上添加正則化項,用於控制模型參數的復雜度,從而得到更為簡單的參數,獲得更為理想的模型。可見,正則化的一個根本目的就是使我們可以選擇出那種既能夠很好的擬合數據,相對來說又最簡單的模型。
線性回歸正則化後的表達式為:
這裏的代表正則化系數,是我們常說的正則化項,正則化項常用的形式有哪些呢?
該範數表示的是參數向量中非0元素的個數。這時候我們可以試想我們用範數正則化一個參數矩陣的話,就相當於讓中值為0元素非常多,也就是讓參數矩陣稀疏。
該範數表示的是參數向量中各元素絕對值之和。範數也稱為稀疏規則算子。我們試想用範數正則化一個參數向量的話,就相當於讓中每一個元素都很小甚至是等於0。
那問題來了Question1:範數為什麽可以實現稀疏?
加入範數後的代價函數可以表示為無約束形式
最小化又等價於約束問題下最小化
這裏我們假設參數向量只有兩個元素,我們可以在一個平面上畫出
我們知道等高線越向外損失越大(凸函數),約束在圖上可以表示為如圖的正方形,兩圖形的第一個交點就是代價函數取最小時的情形。兩圖形第一個交點相交於正方形頂角上的概率遠遠大於相交於其他位置的概率(很明顯)。頂點坐標只有一個參數不為0,另一個參數為0,也就是更加容易產生稀疏。在更高維的情況下也是如此,因此會使得參數更多的為0,只是又較少的一部分不為0。的這種特性使它可以應用於特征選擇。
前面我們也提了範數也可以實現稀疏,那問題又來了Question2:為什麽實現稀疏上基本上是使用範數而很少使用範數呢?這主要有兩個原因:
(1) 範數很難優化求解
(2) 範數是範數的最優凸近似,並且範數更容易優化求解
範數是參數向量中各元素的平方和再開平方。在防止過擬合問題上範數被廣泛的應用。
那麽問題來了Question1:是什麽使得它可以非常好的解決過擬合問題呢?我們再來試想:若我們最小化正則項,會使得參數向量發生什麽樣的變化? 會使得參數向量的每一個元素都很小,都接近於0,而非等於0(與最大的不同),這樣就成功的降低了模型參數復雜度,從而避免了過擬合現象的出現。那麽問題又來了Question2:為什麽會使得參數元素都趨向於0,而非等於0呢?我們像那樣給出代價函數的約束等價問題:
該約束問題在圖形上的表示,如下:
與不同,的約束條件表示為一個圓形,兩個圖形的第一個交點大多不會出現在非坐標軸上,因為要想交於坐標軸那麽的圓心也必須在坐標軸上,這種情況是很少發生的,故不會擁有的那種使得參數大部分都是0的特性。而最小化正則就會使得參數元素都很小,也就是都趨於0。
總結:會趨向於產生少量的特征,而其他特征的參數(權值)都為0,可以用來做特征選擇; 而會選擇更多的特征,這些特征的參數都趨於0,廣泛應用與過擬合問題。
補充:其實除了有防止過擬合的特性,它還可以使得梯度下降的求解過程變得穩定而迅速,這又是如何實現的呢?
我們前面給出了加入正則項和後的線性回歸代價函數的表示形式:
我們對其求導後得到了梯度下降的權值更新公式:
這時我們發現中的是第j個參數的符號,是個定值; 而中的是變得。故,正則化後的參數更新速度會隨著參數的更新而變動,參數大更新快,參數小更新慢,所以它會進一步優化梯度下降的求解。
細品 - 過擬合與模型選擇*