机器学习概念 — 监督学习、无监督学习、半监督学习、强化学习、欠拟合、过拟合、后向传播、损失和优化函数、计算图、正向传播、反向传播
1. 監督學習和無監督學習
監督學習 ( Supervised Learning ) 和無監督學習 ( Unsupervised Learning ) 是在機器學習中經常被提及的兩個重要的學習方法。
假如有一堆由蘋果和梨混在一起組成的水果,需要設計一個機器對這堆水果按蘋果和梨分類,但是這個機器現在并不知道蘋果和梨是什么樣的,所以我們首先要拿一堆蘋果和梨的照片,告訴機器蘋果和梨分別長什么樣;經過多輪訓練后,機器已經能夠準確地對照片中的水果類別做出判斷,并且對蘋果和梨的特征形成自己的定義;之后我們讓機器對這堆水果進行分類,看到這堆水果被準確地按類別分開。這就是一個監督學習的過程。
如果我們沒有拿蘋果和梨的照片對機器進行系統訓練,機器也不知道蘋果和梨長什么樣,而是直接讓機器對這一堆水果進行分類,則機器能夠根據自己的“直覺”將這一堆水果準確地分成兩類。這就是一個無監督學習的過程,說明機器自己總結出了蘋果和梨的特征,該過程看起來更貼近我們所設想的人工智能技術。
1.1 監督學習
監督學習定義:
提供一組輸入數據和其對應的標簽數據,然后搭建一個模型,讓模型在通過訓練后準確地找到輸入數據和標簽數據之間的最優映射關系,在輸入新的數據后,模型能夠通過之前學到的最優映射關系,快速地預測出這組新數據的標簽。
在實際應用中有兩類問題使用監督學習的頻次較高,這兩類問題分別是回歸問題和分類問題:
- 回歸問題 (
Regression)
回歸問題就是使用監督學習的方法,讓我們搭建的模型在通過訓練后建立起一個連續的線性映射關系,主要有以下兩點:
- 通過提供數據訓練模型,讓模型得到映射關系并能對新的輸入數據進行預測;
- 我們得到的映射模型是線性連續的對應關系;
應用的機器學習方法為線性回歸。
- 分類問題(
Classfication)
分類問題就是讓我們搭建的模型在通過監督學習之后建立起一個離散的映射關系。分類模型和回歸問題在本質上有很大的不同,它依然需要使用提供的數據訓練模型讓模型得到映射關系,并能夠對新的輸入數據進行預測,不過最終得到的映射模型是一種離散的對應關系。
應用的機器學習方法為邏輯回歸。
邏輯回歸(Logistic Regression)是機器學習一個最基本也是最常用的算法模型。與線性回歸不同的是,邏輯回歸主要用于對樣本進行分類。
因此,邏輯回歸的輸出是離散值。對于二分類問題,通常我們令正類輸出為 1,負類輸出為 0。例如一個心臟病預測的問題:根據患者的年齡、血壓、體重等信息,來預測患者是否會有心臟病,這就是典型的邏輯回歸問題。
1.2 無監督學習
無監督學習定義:
提供一組沒有任何標簽的輸入數據,將其在我們搭建好的模型中進行訓練,對整個訓練過程不做任何干涉,最后得到一個能夠發現數據之間隱藏特征的映射模型,使用這個映射模型能夠實現對新數據的分類,這就是一個無監督學習的過程。無監督學習主要依靠模型自己尋找數據中隱藏的規律和特征,人工參與的成分遠遠少于監督學習的過程。
使用無監督學習實現分類的算法又叫作聚類。這里需要特別注意和有監督學習里的分類的區別:
- 分類問題是我們已經知道了有哪幾種類別;
- 而聚類問題,是我們在分析數據之前其實是不知道有哪些類別的。
即分類問題是在己知答案里選擇一個,而聚類問題的答案是未知的,需要利用算法從數據里挖掘出數據的特點和結構。
1.3 半監督學習
半監督學習( Semi-Supervised Learning,SSL)是模式識別和機器學習領域研究的重點問題,是監督學習與無監督學習相結合的一種學習方法。半監督學習使用大量的未標記數據,以及同時使用標記數據,來進行模式識別工作。當使用半監督學習時,將會要求盡量少的人員來從事工作,同時,又能夠帶來比較高的準確性,因此,半監督學習目前正越來越受到人們的重視。
在此學習方式下,輸入數據部分被標識,部分沒有被標識,這種學習模型可以用來進行預測,但是模型首先需要學習數據的內在結構以便合理的組織數據來進行預測。
1.4 強化學習
又稱再勵學習、評價學習,是一種重要的機器學習方法,在這種學習模式下,輸入數據作為對模型的反饋,不像監督模型那樣,輸入數據僅僅是作為一個檢查模型對錯的方式,在強化學習下,輸入數據直接反饋到模型,模型必須對此立刻作出調整。常見的應用場景包括動態系統以及機器人控制等。常見算法包括 Q-Learning 以及時間差學習(Temporal difference learning)。
2. 欠擬合和過擬合
可以將搭建的模型是否發生欠擬合或者過擬合作為評價模型的擬合程度好壞的指標。
欠擬合和過擬合的模型預測新數據的準確性都不理想,其最顯著的區別
- 擁有欠擬合特性的模型對已有數據的匹配性很差,不過對數據中的噪聲不敏感;
- 而擁有過擬合特性的模型對數據的匹配性太好,所以對數據中的噪聲非常敏感。
2.1 欠擬合
在解決欠擬合問題時,主要從以下三方面著手:
-
增加特征項:
在大多數情況下出現欠擬合是因為我們沒有準確地把握數據的主要特征,所以我們可以嘗試在模型中加入更多的和原數據有重要相關性的特征來訓練搭建的模型,這樣得到的模型可能會有更好的泛化能力。
-
構造復雜的多項式:
這種方法很容易理解,我們知道一次項函數就是一條直線,二次項函數是一條拋物線,一次項和二次項函數的特性決定了它們的泛化能力是有局限性的,如果數據不在直線或者拋物線附近,那么必然出現欠擬合的情形,所以我們可以通過增加函數中的次項來增強模型的變化能力,從而提升其泛化能力。
-
減少正則化參數:
正則化參數出現的目的其實是防止過擬合情形的出現,但是如果我們的模型已經出現了欠擬合的情形,就可以通過減少正則化參數來消除欠擬合。
2.2 過擬合
解決的過擬合問題,則主要從以下三方面著手:
-
增大訓練的數據量:
在大多數情況下發生過擬合是因為我們用于模型訓練的數據量太小,搭建的模型過度捕獲了數據的有限特征,這時就會出現過擬合,在增加參與模型訓練的數據量后,模型自然就能捕獲數據的更多特征,模型就不會過于依賴數據的個別特征。
-
采用正則化方法:
正則化一般指在目標函數之后加上范數,用來防止模型過擬合的發生,在實踐中最常用到的正則化方法有 L0 正則、L1 正則和 L2 正則。
-
Dropout方法:
Dropout方法在神經網絡模型中使用的頻率較高,簡單來說就是在神經網絡模型進行前向傳播的過程中,隨機選取和丟棄指定層次之間的部分神經連接,因為整個過程是隨機的,所以能有效防止過擬合的發生。
3. 后向傳播
深度學習中的后向傳播主要用于對我們搭建的模型中的參數進行微調,在通過多次后向傳播后,就可以得到模型的最優參數組合。
深度神經網絡中的參數進行后向傳播的過程其實就是一個復合函數求導的過程。
復合函數對各個變量求導的值就作為后向傳播的微調值。
4. 損失和優化
深度神經網絡中的損失用來度量我們的模型得到的預測值和數據真實值之間的差距,也是一個用來衡量我們訓練出來的模型泛化能力好壞的重要指標。
模型預測值和真實值的差距越大,損失值就會越高,這時我們就需要通過不斷地對模型中的參數進行優化來減少損失;同理,預測值和真實值的差距越小,則說明我們訓練的模型預測越準確,具有更好的泛化能力。
二分類問題的解決過程中計算模型的真實值和預測值之間損失值的方法有很多,而進行損失值計算的函數叫作損失函數;
同樣,對模型參數進行優化的函數也有很多,這些函數叫作優化函數。
4.1 損失函數
列舉三種在深度學習實踐中經常用到的損失函數,分別是均方誤差函數、均方根誤差函數和平方絕對誤差函數。
- 均方誤差函數
均方誤差(Mean Square Error,簡稱 MSE)函數計算的是預測值與真實值之差的平方的期望值,可用于評價數據的變化程度,其得到的值越小,則說明模型的預測值具有越好的精確度。均方誤差函數的計算如下:
M S E=\frac{1}{N} \sum_{i=1}^{N}\left(y_{\mathrm{true}}^{i}-y_{\mathrm{pred}}^{i}\right)^{2}
其中,ypred 表示模型的預測值,ytrue 表示真實值,它們的上標 i 用于指明是哪個真實值和預測值在進行損失計算。
- 均方根誤差函數
均方根誤差(Root Mean Square Error,簡稱 RMSE)在均方誤差函數的基礎上進行了改良,計算的是均方誤差的算術平方根值,其得到的值越小,則說明模型的預測值具有越好的精確度。均方根誤差函數的計算如下:
R M S E=\sqrt{\frac{1}{N} \sum_{i=1}^{N}\left(y_{\text { true }}^{i}-y_{\text { pred }}^{i}\right)^{2}}
3. 平均絕對誤差函數
平均絕對誤差(Mean Absolute Error,MAE)計算的是絕對誤差的平均值,絕對誤差即模型預測值和真實值之間的差的絕對值,能更好地反映預測值誤差的實際情況,其得到的值越小,則說明模型的預測值具有越好的精確度。平均絕對誤差函數如下:
M A E=\frac{1}{N} \sum_{i=1}^{N}\left|\left(y_{\text { true }}^{i}-y_{\text { pred }}^{i}\right)\right|
4.2 優化函數
在實踐操作中最常用到的是一階優化函數,一階優化函數在優化過程中求解的是參數的一階導數,這些一階導數的值就是模型中參數的微調值。
梯度其實就是將多元函數的各個參數求得的偏導數以向量的形式展現出來,也叫作多元函數的梯度。
例如,三元函數 f(x,y,z) 的梯度為:
\left(\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z}\right)
5. 計算圖
每次迭代訓練,神經網絡模型主要分成兩個步驟:正向傳播( Forward Propagation )和反向傳播(Back Propagation )。
正向傳播就是計算損失函數過程,反向傳播就是計算參數梯度過程。
龐大的神經網絡,如何有效地進行正向傳播和反向傳播,如何計算參數梯度?我將通過介紹計算圖( Computation graph )的概念,來幫大家輕松理解整個過程。
舉個簡單的例子,輸入參數有三個,分別是 a、b、c,損失函數可表示成 J(a,b,c)=(2a+b)c。令 a = 3,b = 4,c = 5,對應的 J = (2x3+4)x5=50。
5.1 正向傳播
正向傳播過程,我們將 J 的表達式進行拆分,例如使用 u = 2a,v = u + b,J = vc。拆分后的每個單運算都構成一個 “ 節點 ”,如下圖中的矩形方框所示。下面的這張圖就是計算圖。該計算圖中包含了三個節點,分別對應 u = 2a,v = u + b,J = vc。這樣,我們就把正向傳播過程進行了拆分,每個節點對應一個運算。
5.1 反向傳播
反向傳播過程,這部分是最重要也是最難的部分。J 如何對參數 a、b、c 求導?方法是利用偏導數的思想,分別依次對各個節點 J、v、uJ、v、u 求導,然后再順序對各參數求導。整個過程如下圖紅色箭頭所示,與黑色箭頭方向(正向傳播)正好相反。
以上就是利用計算圖對各參數求導的整個過程。
這個例子非常簡單,參數很少,損失函數也不復雜。可能我們沒有明顯看到計算圖在正向傳播和反向傳播的優勢。但是,深度學習模型中,網絡結構很深,光是參數就可能有數十萬、百萬的,損失函數也非常復雜。
這時候,利用計算圖中的節點技巧,可以大大提高網絡的訓練速度。值得一提的是現在很多的深度學習框架,例如 PyTorch 和 TensorFlow 都是利用計算圖對參數進行求導的。
參考資料:
https://gitbook.cn/gitchat/column/5b447b698b5d4b11e880d287/topic/5b447e688b5d4b11e880d42f
總結
以上是生活随笔為你收集整理的机器学习概念 — 监督学习、无监督学习、半监督学习、强化学习、欠拟合、过拟合、后向传播、损失和优化函数、计算图、正向传播、反向传播的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《题山石榴花》第一句是什么
- 下一篇: 机器学习数学 — 初等函数求导