一.寫在前面
本節所講的內容主要是討論如何進一步提高通過機器學習獲得fbest的准確度使其更進一步接近ftrue,為了解決這個問題我們必須先明確我們學習得到的fbest的誤差來自於哪里。這里先提一下誤差的主要兩個來源分別是bias和variance,即偏差和方差,換句話說當你想進一步提高你模型的精確度的時候你可以分析你所設計模型的誤差是主要來自bias還是variance,然后有針對的去改進來進一步的提高模型的精度。
二.bias和variance
那么究竟什么是bias什么是variance?這里你可以想象一下你手持一把desert eagle來打靶,那么你能否命中靶心主要取決兩點,第一你是否有瞄准靶心,第二你開槍之后的子彈是否受到風速、槍械、溫度等因素的影響而導致無法做到瞄哪子彈就打到哪。上面的這個例子,靶心就是我們最終想要模擬得到的ftrue,而你每往靶子上開的一槍就是你通過機器學習獲得的fbest,bias就是你持槍所瞄准的點和靶心的差距,variance就是你所開出的槍受到風速等因素的影響而產生的偏差。現在我們來看一張圖2-1。
圖2-1 bias和variance
圖中的藍色點就是你通過機器學習得到的fbest,多次對不同的數據進行學習就可以得到多個這樣的藍色點,對這些藍色點取平均值就是你次打靶所瞄准的點,該點與靶心的距離就是bias,而某一射擊的藍色點與本次射擊所瞄准點間的距離就是variance。可以看到當bias和variance都很小時即圖片的左上角的效果,藍色的點均分布在靶心附近學習的效果很好。
了解了什么時bias和variance之后我們就應該考慮一下各種模型的bias和variance是怎么樣的,這里先講結論,越為復雜的模型一般它的variance也會大一些,對應的越為簡單的模型其bias也會更大一些。這里還是舉上一節中的神奇寶貝的例子,我們在一次的模型下進行了100次的學習分別得到100個fbest同樣的在五次的模型下也進行了100次學習分別得到100個fbest,對這些函數進行繪圖得到圖2-2
圖2-2 各模型的variance
可以看出五次項的函數分布更為分散而一次項函數分布的相對更為集中,這種分散和集中就是variance大小的體現,為了進一步理解越為復雜的函數variance越大這個概念,可以做一個極端假設,設想一個最為簡單的常數函數f=c,則這個函數的分布是不會分散的它的variance=0。看過variance的例子我們再來看一下bias的例子,例子如圖2-3
圖2-3 各模型的bias
圖中紅色的線是代表做的一次學習得到的fbest,藍色的線是所有fbest的平均favg,黑色的線是ftrue,可以按看出五次的favg與ftrue更為接近,這里的接近程度就是對bias大小的描述。至於為什么復雜的函數的bias會更小,這里給出一種解釋,我們知道更為復雜的model它所對應的函數池能表征的范圍更大,也就更有可能能夠包含到ftrue,所以函數池里的函數平均之后也就離ftrue更為接近,相對的簡單的model它所對應的函數池中可能根本沒有包含到ftrue,所以它再怎么平均距離ftrue都是遠的。
三.過擬合和欠擬合
以上講述了誤差來源bias和variance,現在從這兩個的角度來理解一下過擬合和欠擬合這兩種現象。簡單來說當誤差主要是來自於variance時會導致過擬合而當誤差主要來自於bias時則會導致欠擬合,之前講過過擬合的基本概念,這里再解釋一下啊所謂的欠擬合underfitting,直觀來說就是模型的表達能力不足而導致模型在訓練集上的表現較差。現在來看一張圖3-1
圖3-1overfitting和underfitting
從圖中可以看出當誤差主要來自於variance時,達到一定程度后就會導致過擬合的現象,而當誤差主要來自bias時,達到一定程度時就會導致欠擬合的現象,所以在選擇模型時需要綜合考慮二者選擇合適的模型。
四、解決方案
4.1 解決誤差主要來自於bias
前面已經講過產生這種誤差的主要原因時因為模型太過簡單,所以相應的要解決就必須重新設計你的模型,這主要有兩種措施,第一種考慮更多的特征,即將更多的變量的引入你的模型中考慮更多可能影響到你模型的因素,第二種設計更復雜的模型,比方說原先使用的是一次的模型,現在考慮使用二次、三次或者更高次的模型來表達
4.2 解決誤差主要來自於variance
前面已經講過產生這種誤差的主要原因是模型表達的能力過強與所給出的數據量不符合,導致模型記住了所有的數據而不是學習到的,所以相應的措施從數據量的角度有兩種,第一種給出更多的測試數據,讓模型進行學習,這種方式十分有效,但其實這種方法在實際運用中並不一定能夠做到,因為往往數據不是那么好獲得的。第二種就是正則化regularization,這種方式在上一遍文章種有提到過,就是在損失函數后面添加了一個新的項,為什么這種方式可以降低variance的誤差,直觀的來說使用正則化讓曲線變的更加平滑,也就是更具集中,不會因數據中的部分雜質而產生劇烈波動。具體效果如圖4-1
圖4-1 正則化
觀察下方的三張圖,第一張是沒有使用正則化的效果圖,第二、三張是使用了正則化的程度不同的效果圖,可以看出很明顯的曲線變得更為集中,有利於減小來自variance的誤差,但要注意適度,一旦正則化過度將會大幅度提高bias的誤差,如何理解呢,簡單的說就是你弱化了模型的表達,可能導致模型對應的函數池的范圍大幅度下降從而沒有包含到ftrue,所以需要在這二者之中找到平衡。
五、寫在最后
本節的關鍵在於理解誤差的來源,理解bias和variance的概念和對應的減小措施,去尋找bias和variance之間的平衡,這里補充一下視頻中還提到了N-fold的交叉驗證,有興趣的同學可以自己去了解一下,我這里簡單提一下,其實這個問題我在這個系列的第二節的寫在最后提到過,就是為了解決模型在測試集上得到的准確率比在實際應用中模型准確率來的低的原因,主要就是因為訓練集中的數據發生了泄露,而N-fold的交叉驗證的方式可以解決這個問題,它將訓練集中的數據進行划分,分為訓練和驗證,經過訓練和驗證集后的模型,再到測試集上進行測試其得到的結果就能較好的反應在實際應用中的效果。