本篇筆記主要記錄及推導Andrew NG的Machine Learning課程中出現的公式。
我們假設對於任意的分類、聚類、迴歸等問題在自然界中總是存在一個精確的模型與之相對應,接下來我們要做的就是根據獲取的樣本來反推並確定這個模型。由於我們畢竟無法遍歷這個問題所有的情況,所以我們只能根據獲取的樣本去儘可能接近的確定這個模型。
公式化上面這段描述,問題對應的模型就藏在假設空間(Hypothesis)
hθ(x)
中,我們需要通過觀測樣本,確定其中的
θ
值。在確定
θ
值的過程中,定義一個損失函數(Cost Function)
J(θ)
,如果我們獲取的樣本在某一個參數
θ
時使損失值達到最小,即表示當前
θ
值確定的模型可以使預測值很接近觀察值。那麼這個模型就是我們需要尋找的。
對於監督學習,我們要做的就是確定目標函數,損失函數,然後通過樣本訓練,得到損失值最小的那一組參數值,用該參數值代入目標函數,即可得到對應問題的模型。
一、線性迴歸模型
1、單一變量的線性迴歸模型
目標函數:
hθ(x)=θ0+θ1x
損失函數:
J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2
公式說明:
hθ(x(i)):第i個樣本
y(i):第i個樣本對應的實際值
接下來的目標就是找到一組參數值,使得損失函數值最小,即
minimizeθ0,θ1J(θ0,θ1)
求損失函數最小值時,使用梯度下降(Gradient descent)的方法。在微積分中我們學過梯度,梯度方向是函數值下降最快的方向,所以在梯度下降方法中,我們分別求
θ0和θ1
的偏導數,然後用該導數值更新參數值。
}repeat until convergence{θj:=θj−α∂∂θjJ(θ0,θ1)(for j = 1 and j = 0)(7)
說明,上面公式中的
:=
表示賦值的意思,如果直接寫a = 1
可能會被誤理解爲判斷a
是否等於1
。
求損失函數
J(θ0,θ1)
對
θ0
和
θ1
的偏導數,
∂∂θ0J(θ0,θ1)=1m∑i=1m(hθ(x(i))−y(i))∂∂θ1J(θ0,θ1)=1m∑i=1m(hθ(x(i))−y(i))x(i)
使用偏導數公式對上式展開。
}repeat until convergence{θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))θ1:=θ1−α1m∑i=1m(hθ(x(i))−y(i))x(i)(8)
2、多變量線性迴歸模型
上一節的模型中只有一個指標
x
,理解了線性迴歸模型及其尋找最優化參數的過程。接下來將該思路應用到多變量模型中。
(1)目標函數
hθ(x)=θ0x0+θ1x1+θ2x2+⋯+θnxn
上式中的
x1,x2,⋯,xn
都是給定樣本中的指標,其中
x0=1
是人爲增加的。
如果將目標函數使用向量表示,
hθ(x)=θTx
(2)損失函數
J(θ)=12m∑i=1m(hθ(x(i))−y(i))2
(3)梯度下降
}repeat until convergence{θj:=θj−α∂∂θjJ(θ)(for j = 0 ,⋯, n)(9)
分別對
θ0,θ1,θ2
求偏導數並進行展開,如下所示
θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))θ1:=θ1−α1m∑i=1m(hθ(x(i))−y(i))x(i)1θ2:=θ2−α1m∑i=1m(hθ(x(i))−y(i))x(i)2⋯
(4)公式法
如果我們將目標函數向量化,
TXTθ=y
,需要求解其中的
θ
,
Xθ=yXTXθ=XTyθ=(XTX)−1XTy
這裏需要說明一下,
θ,y,X
分別代表的含義。在本文中,向量都是小寫字母表示,並且都是列向量,即
n∗1
維。矩陣的維度
m∗n
表示有
m
行
n
列。那麼上式中,我們假設
m=4
,
n=5
其中包括
x0
,給出一組示例數據
x01111x1210414161534852x25332x31221x445403036y460232315178
對應的
X
爲,每個
x(i)
表示一行數據的話:
X=⎡⎣⎢⎢⎢⎢11112104141615348525332122145403036⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢(x(1))T(x(2))T(x(3))T(x(4))T⎤⎦⎥⎥⎥⎥
對應的
y
爲:
y=⎡⎣⎢⎢⎢⎢460232315178⎤⎦⎥⎥⎥⎥
對應的
θ
爲:
θ=⎡⎣⎢⎢⎢⎢θ0θ1θ2θ3⎤⎦⎥⎥⎥⎥
二、邏輯迴歸模型
1、邏輯迴歸模型
上面的線性迴歸模型輸出結果爲連續值,如果我們面對的是一個分類模型,比如判斷是否爲垃圾郵件,或者其他的分類問題時,就不能直接使用線性迴歸模型了。
邏輯迴歸模型是在線性迴歸模型上的一個演變,它通過一個邏輯函數可以將線性迴歸模型的輸出結果轉變爲0或1的離散輸出。
(1)邏輯函數
即Logistic Function,也稱爲Sigmoid Function,如下所示,
g(z)=11+e−z
對應的函數圖形爲:

從圖中可以看到,橫軸是連續取值,但是縱軸上的取值範圍被限制在0和1之間,Sigmoid函數可以將連續值轉變爲0或1的離散值。
如果將上面的邏輯函數
g(z)
應用在線性迴歸模型的輸出函數
hθ(x)
上,就可以得到本節所講的邏輯迴歸模型。
(2)目標函數
hθ(x)=11+e−θTx
當
y=1
時,
hθ(x)
的值,可以理解爲是對當前樣本
x
,在參數
θ
的情況下被預測爲1的概率。即
P(y=1|x,θ)=hθ(x)=11+e−θTx
(3)損失函數
在前面的線性迴歸模型中,損失函數如下
J(θ)=12m∑i=1m(hθ(x(i))−y(i))2=1m∑i=1m12(hθ(x(i))−y(i))2
上式第二行中將
12
向後移動到求和項中,如果將求和項中整體定義爲
Cost(hθ(x),y)=12(hθ(x(i))−y(i))2
,
那麼線性迴歸的損失函數可以寫成
J(θ)=1m∑i=1mCost(hθ(x),y)Cost(hθ(x),y)=12(hθ(x(i))−y(i))2
線性迴歸使用的是平方損失,如果我們直接將平方損失函數應用到邏輯迴歸模型中,最終得到的
J(θ)
可能如下圖所示,

邏輯迴歸模型中使用的是對數損失,定義如下
Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))y=1y=0
可以畫出對數損失函數圖形來看,當
y=1
並且
hθ(x)=1
時,
Cost=0
,當
y=1
並且
hθ(x)→0
時,
Cost→∞
。
y=0
時情況類似。
最後,將邏輯迴歸的對數損失函數進行融合,
Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
將
Cost(hθ(x),y)
代入
J(Θ)
可以得到邏輯迴歸完整的損失函數如下
J(θ)=−1m∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
邏輯迴歸中使用對數損失函數來求解參數,與採用極大似然估計求參數是一致的。
以下爲對數損失函數和極大似然估計的分析過程:
假設樣本服從伯努利分佈(0-1分佈),則有
P(hθ(x)=y)={1−ppn=0n=1
似然函數如下:
L(θ)=∏i=1mP(y=1|xi,θ)yiP(y=0|xi,θ)1−yi
對數似然函數爲:
lnL(θ)=∑i=1m[yiln(P(y=1|xi,θ)+(1−yi)lnP(y=0|xi,θ)]=∑i=1m[yiln(P(y=1|xi,θ)+(1−yi)ln(1−P(y=0|xi,θ))]
根據對數損失函數的定義
Cost(y,p(y|x)=−ylnp(y|x)−(1−y)ln(1−p(y|x))
那麼對於全體樣本,損失函數如下:
Cost(y,p(y|x)=−∑i=1m[yilnp(yi|xi)−(1−yi)ln(1−p(yi|xi))]
可以看到,對數損失函數與上面的極大似然函數本質上是等價的。所以,邏輯迴歸直接採用對數損失函數,與採用極大似然估計是一致的。
(4)梯度下降
接下來使用梯度下降方法求解邏輯迴歸的最佳參數,求解損失函數
J(θ)=−1m∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
的最優解過程如下,
repeat }until convergence{θj:=θj−α∂θJ(θ):=θj−α1m∑i=1m(hθ(x(i))−y(i))x(i)j(10)
以下爲求
∂∂θjJ(θ)
的過程,
以下爲了簡便,將
hθ(x)
記作
h
,那麼
h=11+e−θTx
對
θ
求偏導數如下,
∂∂θh=xe−θTx(1+e−θTx)2=xe−θTx1+e−θTx11+e−θTx=x(1−11+e−θTx)11+e−θTx=x(1−h)h
將
Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
簡記爲
Cost(h,y)=−ylog(h)−(1−y)log(1−h)
那麼
∂∂θCost(h,y)=−y1h∂∂θh−(1−y)11−h(−∂∂θh)=−y1h∂∂θh+(1−y)11−h∂∂θh=−y(1−h)h(1−h)∂∂θh+h(1−y)h(1−h)∂∂θh=−y+yh+h−yhh(1−h)∂∂θh=h−yh(1−h)∂∂θh=h−yh(1−h)xh(1−h)=x(h−y)
將上式代入
J(θ)=1m∑mi=1Cost(hθ(x),y)
,可得到
∂θJ(θ)=1m∑i=1m∂∂θCost(hθ(x),y)=1m∑i=1m(hθ(x(i))−y(i))x(i)
那麼對於梯度下降,
θj:=θj−α∂θJ(θ):=θj−α1m∑i=1m(hθ(x(i))−y(i))x(i)j
因爲
α
是一個常量,並且
1m
對於一個給定的樣本也是一個常量,所以可以將
αm
直接寫成
α
。
三、正則化
1、過擬合
正則化的目的是防止過擬合,當指標較多,並且訓練樣本較少時得到的模型可能會出現過擬合。過擬合從函數圖像上的理解就是,訓練得到的模型完全擬合給定樣本,可能出現對於訓練樣本,損失值爲0,而對於未在訓練樣本中出現過的樣本,誤差會很大。下圖示例了過擬合,

2、線性迴歸模型正則化
圖中藍色線條爲線性迴歸模型的過擬合情況,增加了
θ3x3
和
θ4x4
兩項後,曲線完全擬合給定樣本。而紅色曲線是訓練的比較好的情況。在這裏,我們如果想將
θ3x3
和
θ4x4
從模型中剔除,可以將損失函數進行一定改造,如下所示,
minθ12m∑i=1m(hθ(x(i))−y(i))2+1000θ23+1000θ24
上面這個損失函數中,由於給了
θ3
和
θ4
兩個很大的係數,所以最終得到
θ3
和
θ4
接近於0才能使損失函數值儘可能小。
正則化基本上就是這個過程,會爲除
θ0
之外每個參數值增加一個類似的係數。增加了正則化後的線性迴歸模型損失函數如下,
J(θ)=12m[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθ2j]
3、欠擬合
假如我們給
λ
設置一個很大的參數,可能會出現過擬合的情況,因爲這時候需要得到最小損失值,可能會將所有
θ
全部訓練爲0。可能最終得到的目標函數是
hθ(x)=θ0
,欠擬合的函數圖形如下所示,

4、線性迴歸模型梯度下降
對正則化之後的損失函數進行梯度下降求解參數值的過程如下所示,
repeat }until convergence{θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))x(i)0θj:=θj(1−αλm)−α1m∑i=1m(hθ(x(i))−y(i))x(i)j(11)
這裏更新
θj
時乘以了一個係數
1−αλm
,由於
α,λ,m
都是正數,所以該係數是一個大於零的分數,最終和之前不同的是在更新
θ
值時會逐漸縮小
θ
值。
5、邏輯迴歸模型正則化
邏輯迴歸模型的正則化也是在損失函數最後增加正則項,如下所示,
J(θ)=−1m∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+λ∑j=1nθ2j
6、邏輯迴歸模型梯度下降
repeat }until convergence{θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))x(i)0θj:=θj(1−αλm)−α1m∑i=1m(hθ(x(i))−y(i))x(i)j(12)
7、L1正則
8、L2正則
四、神經網絡
1、神經網絡結構
神經網絡模型是模擬生物神經元,神經網絡中每個節點可以理解成一個變量比如
xi
,不同層之間的連接線可以理解成參數比如
θj
。神經網絡結構如下所示,

上圖中,第一層中的
x1,x2,x3
即前面迴歸模型中見到的樣本各指標值,第一層也被稱爲輸入層,最後一層的輸出就是我們前面介紹到的
hθ(x)
的輸出值,最後一層也被稱爲輸出層。並且在實現神經網絡模型時會爲除輸出層之外的每一層增加一個
x0
或$a_0^{(2)}這麼一個偏置項。
定義幾個概念:
-
a(j)i
,表示第
j
層的第
i
個節點
Θ(j)
,表示從第
j
層到第
j+1
層的參數矩陣,圖中
Θ(1)
是一個
3∗4
的矩陣,3表示下一層(即第2層)有3個節點,4表示本層(即第1層)有4個節點(包含
x0
項)
生物上的神經元之間傳遞的電信號,一般是高低電平,而非一個連續的值。所以在我們的神經網絡中一般會應用一個激活函數
g(x)
,以後未作特殊說明,
g(x)
一般取Sigmoid函數。上圖中神經網絡結構對應的表達式如下
a(2)1=g(Θ(1)10x0+Θ(1)11x1+Θ(1)12x2+Θ(1)13x3)a(2)2=g(Θ(1)20x0+Θ(1)21x1+Θ(1)22x2+Θ(1)23x3)a(2)3=g(Θ(1)30x0+Θ(1)31x1+Θ(1)32x2+Θ(1)33x3)hΘ(x)=a(3)1=g(Θ(2)10a(2)0+Θ(2)11a(2)1+Θ(2)12a(2)2+Θ(2)13a(2)3)
需要注意的是神經網絡並不是如上面示例中只有一箇中間層,而是可以更多,並且每一層的激活函數
g(x)
也可以不相同。
2、神經網絡實現的邏輯功能
這裏用簡單的神經網絡結構示例如何實現
XOR,XNOR,OR,AND,OR
等邏輯操作。
(1)AND
網絡結構如下所示

表達式爲
hΘ(x)=g(−30+20x1+20x2)
(2)OR
網絡結構如下所示

表達式爲
hΘ(x)=g(−10+20x1+20x2)
(3)NOT
網絡結構如下所示

表達式爲
hΘ(x)=g(10−20x1)
(4)XNOR
網絡結構如下所示,要想實現
XNOR
功能,簡單的模型就不能實現了。下面同時使用了
AND,OR,NOT
進行組合,並且構建多層網絡模型才得以實現。

3、損失函數
神經網絡的損失函數如下:
J(\Theta) = -\frac 1m \sum_{i=1}^m\sum_{k=1}^K[y_k^{(i)}log(h_\Theta(x^{(i)})_k) + (1-y_k^{(i)})log(1-(h_\Theta(x^{(i)})_k)] + \frac \lambda {2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_l+1}(\Theta_{ji}^{(l)})^2\tag{1}\label{1}
上式中,
L
表示神經網絡的總層數,
sl
表示第
l
層中神經元的個數(不包括偏置單元)。
hΘ(x)∈RK,(hΘ(x))i=ith output
,其中
K
表示第
K
個節點,那麼
y(i)k
表示對於樣本
i
的第
k
個輸出值。當分析的問題爲二分類問題時,
k=1
,當分析的問題爲多分類問題時,
k
爲對應的分類數。
4、BP算法(Backpropagation Algorithm)
我們需要根據上一節中列舉的損失函數求出全部的
θ
值,得到
minΘJ(Θ)
,接下來用梯度下降求解的話,需要計算
∂∂Θ(l)ijJ(Θ)
。
對於一個包含兩個隱含層的神經網絡結構,給定一組樣本
(x,y)
,可以依次得到每一層相關數據:
\begin{split}
&a^{(1)}=x \\
&z^{(2)}=\Theta^{(1)}a^{(1)} \\
&a^{(2)}=g(z^{(2)}) \ (add a_0^{(2)})\\
&z^{(3)}=\Theta^{(2)}a^{(2)}\\
&a^{(3)}=g(z^{(3)})\ (add a_0^{(3)})\\
&z^{(4)}=\Theta^{(3)}a^{(3)}\\
&a^{(4)}=h_\Theta(x)=g(z^{(4)})
\end{split}\tag{2}\label{2}
根據公式
(1)
,對於二分類的單個樣本,損失函數如下
J(\Theta) = - [ylog(h_\Theta(x)) + (1-y)log(1-(h_\Theta(x))] + \lambda\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_l+1}(\Theta_{ji}^{(l)})^2 \tag{3}\label{3}
以下爲該公式的推導過程
計算
Θ(3)
的梯度,結合公式
(2)
:
\frac {\partial J(\Theta)}{\partial \Theta^{(3)}}=\frac {\partial J(\Theta)}{\partial a^{(4)}}*\frac {\partial a^{(4)}}{\partial z^{(4)}} * \frac {\partial z^{(4)}}{\partial \Theta^{(3)}} \tag{4}\label{4}
如果將式
(4)
中等號右邊前兩項定義爲
δ(4)
,則有
\delta^{(4)}=\frac {\partial}{\partial z^{(4)}}J(\Theta)=\frac {\partial J(\Theta)}{\partial a^{(4)}}*\frac {\partial a^{(4)}}{\partial z^{(4)}}\tag{5}\label{5}
結合
(3)(5)
並且
a(4)=hΘ(x)=g(z(4))
得到如下推導過程: