【機器學習】關於機器學習的一些基礎問題

1、過擬合與欠擬合

什麼是擬合?擬合是指你逼近目標函數的遠近程度。機器學習中的擬合,可以分爲過擬合和欠擬合兩種。

圖1(迴歸問題的三種擬合狀態):欠擬合--正常擬合--過擬合

  • 過擬合over-fitting

所謂過擬合,其實就是訓練的模型在訓練樣本中表現得過於優越,近乎完美的預測/區分了所有的數據,但是在驗證數據集以及測試數據集中表現不佳。在性能的角度上講,過擬合就是協方差過大(variance is large),同樣在測試集上的損失函數(cost function)會表現得很大。

過擬合會使模型變得複雜,並儘可能擬合訓練集,造成在訓練集上的準確率特別高,這裏就會有一個問題就是:訓練集是不靠譜的,其中有容錯的數據。直接點,訓練集中特別是十幾萬的數據,會有髒數據,這些髒數據也成爲負樣本,會造成模型訓練有誤差,模型在訓練的時候並不清楚那些是髒數據,它只會不停的去擬合這些數據,所以過擬合的模型在訓練集上準確率特別高,但訓練集其實只是整個數據集中的一部分,其包含兩部分特徵,一部分是整個數據集共有的特徵,一部分是訓練集自身共有的特徵,當過擬合時,模型學到的是這兩部分的特徵,此時拿模型去在測試集上測試時,因爲測試集不包含訓練集自身共有的特徵,所以測試集在模型上就不會取得很好的效果。

  • 欠擬合under-fitting

相對於過擬合,欠擬合稍微比較和理解一些。所謂欠擬合,其實就是模型的擬合程度不夠,泛化性能差,在訓練集上表現效果差,沒有充分的利用數據,預測的準確度低。欠擬合在訓練集上的準確率不高,同時在測試集上的準確率也不高,這樣如何訓練出來的模型也得不到較好的效果。

  • 如何判斷過擬合還是欠擬合

可以通過繪製損失函數隨數據集增加的學習曲線來判斷過擬合還是欠擬合。

模型欠擬合(高偏差),是指擁有足夠的訓練樣本時,訓練誤差和測試誤差都很高,並且訓練誤差約等於測試誤差。

模型過擬合(高方差),是指隨着訓練樣本的增加,訓練誤差在增加,測試誤差在減少,但訓練誤差遠遠小於測試誤差。

注:準備幾個不同時間窗口、不同範圍的訓練集和測試集,然後在不同數據集裏分別對模型進行交叉驗證,這是工業界判斷模型欠擬合或過擬合的最常用方法。

  • 如何防止過擬合

過擬合問題的根本原因是特徵維度過多,導致擬合的函數完美的經過訓練集,但是對新數據的預測結果則較差。

解決過擬合的方法:

(1)減少特徵維度,可以人工選擇保留的特徵,或者模型選擇算法。

(2)正則化:正則化是指在優化目標函數或代價函數是,在目標函數後面加上一個正則項。通過正則項來影響模型的複雜度。

(3)數據集擴增:即需要得到更多的符合要求的數據,讓訓練集中的噪音數據佔比越來越小,這樣噪音對模型的影響就較小,可以防止模型過擬合。

(4)模型選擇:挑選相對簡單的模型進行訓練,對模型中的參數、訓練層數等做限制。

  • 如何解決欠擬合

欠擬合的問題比較好理解,根本的原因是特徵維度過少,導致擬合的函數無法滿足訓練集,誤差較大。

解決欠擬合的方法:

(1)增加訓練數據:讓模型學習的更充分一些。

(2)增加特徵維度:即添加新特徵,從業務思路上構造新特徵是最重要的優化措施。

(3)優化算法:提升模型複雜度。


2、梯度與學習率

  • 什麼是梯度?

梯度的本意是一個向量(矢量),表示某一函數在該點處的方向導數沿着該方向取得最大值,即函數在該點處沿着該方向(此梯度的方向)變化最快,變化率最大(爲該梯度的模)。簡單的說,梯度不是一個實數,而是一個向量,即有大小又有方向。

在微積分裏面,對多元函數的參數求∂偏導數,把求得的各個參數的偏導數以向量的形式表示出來,就是梯度。比如函數f(x,y), 分別對x,y求偏導數,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T。對於在點(x0,y0)的具體梯度向量就是(∂f/∂x0, ∂f/∂y0)T,或者▽f(x0,y0)。如果是3個參數的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z)T,以此類推。

  • 梯度的幾何意義

梯度向量的意義從幾何意義上講,就是函數變化增加最快的地方。具體來說,對於函數f(x,y),在點(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增加最快的地方。或者說,沿着梯度向量的方向,更加容易找到函數的最大值。反過來說,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度減少最快,也就是更加容易找到函數的最小值。

  • 梯度下降法及相關概念

在機器學習算法中,在最小化損失函數時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函數,和模型參數值。反過來,如果我們需要求解損失函數的最大值,這時就需要用梯度上升法來迭代了。

梯度下降法和梯度上升法是可以互相轉化的。比如我們需要求解損失函數f(θ)的最小值,這時我們需要用梯度下降法來迭代求解。但是實際上,我們可以反過來求解損失函數 -f(θ)的最大值,這時梯度上升法就派上用場了。

監督式學習通過定義一個模型,並根據訓練集上的數據估計最優參數。梯度下降法是一個廣泛被用來最小化模型誤差的參數優化算法。梯度下降法通過多次迭代,並在每一步中最小化成本函數(cost function)來估計模型的參數(weights)。

步長(Learning rate):步長也叫學習率,決定了在梯度下降迭代的過程中,每一步沿梯度負方向前進的長度。學習率決定了參數移動到最優值的速度快慢。如果學習率過大,那麼參數更新的幅度就非常大,很可能會越過最優值,導致網絡收斂到局部最優點;如果學習率過小,會導致網絡loss下降非常慢,優化的效率可能過低,長時間算法無法收斂。

學習率的選擇策略在網絡的訓練過程中是不斷在變化的,在剛開始的時候,參數比較隨機,所以我們應該選擇相對較大的學習率,這樣loss下降更快;當訓練一段時間之後,參數的更新就應該有更小的幅度,所以學習率一般會做衰減,衰減的方式也非常多,比如到一定的步數將學習率乘上0.1,也有指數衰減等。

梯度下降算法中使用學習率更新參數向量:

\theta =\theta -\eta \cdot \frac{\partial L(\theta )}{\partial \theta }

特徵(feature):特徵指的是樣本中輸入部分,與特徵對應的是樣本的label,以二分類爲例,正樣本label=1,負樣本label=0。

假設函數(hypothesis function):在監督學習中,爲了擬合輸入樣本,而使用的假設函數,記爲ℎ?(?)。比如對於單個特徵的m個樣本(?(?),?(?))(?=1,2,...?),可以採用擬合函數如下: ℎ?(?)=?0+?1?hθ(x)=θ0+θ1x。

損失函數(loss function):爲了評估模型擬合的好壞,通常用損失函數來度量擬合的程度。損失函數極小化,意味着擬合程度最好,對應的模型參數即爲最優參數。

關於梯度下降法的具體細節,可以參考這篇博客:梯度下降小結


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章