兩個算法 + 一個網絡 🧐
0. 幾個定義
機器學習 – Machine Learning
第一個定義:在進行特定編程的情況下,給予計算機學習能力的領域
年代近一點的定義:一個程序被認爲能從經驗E 中學習,解決任務T ,達到性能度量值P ,當且僅當,有了經驗E 後,經過P 評判,程序在處理T時的性能有所提升
**監督學習 ** – Supervised Learning
監督學習這個想法是指,我們將教 計算機如何去完成任務 ( 知道數據集的對應的‘正確答案’,數據的標籤、屬性
迴歸問題 - regression problem
: 一系列離散的值,指試着推出一系列連續值的屬性
分類問題 - classification problem
推出一組離散的結果
ex:垃圾郵件問題。如果你有標記好的數據,區別好是垃圾還是非垃圾郵件,我們把這個當作監督學習問題
無監督學習 - Unsupervised Learning
無監督學習中,我們打算讓它自己 進行學習 (沒有任何的標籤或者是有相同的標籤或者就是沒標籤,只有一個數據集,別的什麼不知道
聚類算法 - Clustering Algorithm
: 把數據分成不同的簇
ex:新聞事件分類的例子:成千上萬的新聞被歸集成不同類:如 疫情新聞、人聲分離
1. 線性迴歸 - Linear Regression
單變量線性迴歸 - Linear Regression with one Variable
多變量線性迴歸 - Linear Regression with multiple Variable
一個房價預測例子:
這個例子是預測住房價格的,我們要使用一個數據集,數據集包含波特蘭市的住房價格。在這裏,我要根據不同房屋尺寸所售出的價格,畫出我的數據集。比方說,如果你朋友的房子是1250平方尺大小,你要告訴他們這房子能賣多少錢。那麼,你可以做的一件事就是構建一個模型,也許是條直線,從這個數據模型上來看,也許你可以告訴你的朋友,他能以大約220000(美元)左右的價格賣掉這個房子。這就是監督學習算法的一個例子;
模型表示 - Model Representation
訓練集 Training Set
:在監督學習中我們有一個數據集,這個數據集被稱訓練集
迴歸問題標記
m m m 代表訓練集中實例的數量
x x x 代表特徵/輸入變量
y y y 代表目標變量/輸出變量
( x , y ) \left( x,y \right) ( x , y ) 代表訓練集中的實例
( x ( i ) , y ( i ) ) ({{x}^{(i)}},{{y}^{(i)}}) ( x ( i ) , y ( i ) ) 代表第i i i 個觀察實例
h h h 代表學習算法的解決方案或函數也稱爲假設(hypothesis )
這就是一個監督學習算法的工作方式,我們可以看到這裏有我們的訓練集裏房屋價格
我們把它餵給我們的學習算法,學習算法的工作了,然後輸出一個函數,通常表示爲小寫 h h h 表示。h h h 代表hypothesis (假設 ),h h h 表示一個函數,輸入是房屋尺寸大小, h h h 根據輸入的 x x x 值來得出 y y y 值,y y y 值對應房子的價格 因此,h h h 是一個從x x x 到 y y y 的函數映射。
一種可能的表達方式爲:h θ ( x ) = θ 0 + θ 1 x h_\theta \left( x \right)=\theta_{0} + \theta_{1}x h θ ( x ) = θ 0 + θ 1 x ,因爲只含有一個特徵/輸入變量,因此這樣的問題叫作單變量線性迴歸問題
代價函數 - Cost Function
爲模型選擇合適的參數 (parameters )θ 0 \theta_{0} θ 0 和 θ 1 \theta_{1} θ 1
模型所預測的值與訓練集中實際值之間的差距,即建模誤差 (modeling error )
我們的目標便是選擇出可以使得建模誤差的平方和能夠最小的模型參數。 即使得代價函數
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J \left( \theta_0, \theta_1 \right) = \frac{1}{2m}\sum\limits_{i=1}^m \left( h_{\theta}(x^{(i)})-y^{(i)} \right)^{2} J ( θ 0 , θ 1 ) = 2 m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) 2
最小
梯度下降 - Gradient Descent
梯度下降是一個用來求函數最小值的算法,我們將使用梯度下降算法來求出代價函數J ( θ 0 , θ 1 ) J(\theta_{0}, \theta_{1}) J ( θ 0 , θ 1 ) 的最小值
梯度下降背後的思想是:開始時我們隨機選擇一個參數的組合( θ 0 , θ 1 , . . . . . . , θ n ) \left( {\theta_{0}},{\theta_{1}},......,{\theta_{n}} \right) ( θ 0 , θ 1 , . . . . . . , θ n ) ,計算代價函數,然後我們尋找下一個能讓代價函數值下降最多 的參數組合。我們持續這麼做直到找到一個局部最小值(local minimum ),因爲我們並沒有嘗試完所有的參數組合,所以不能確定我們得到的局部最小值是否便是全局最小值(global minimum ),選擇不同的初始參數組合,可能會找到不同的局部最小值
批量梯度下降(batch gradient descent )算法的公式爲:
a a a 是學習率(learning rate ),它決定了我們沿着能讓代價函數下降程度最大的方向向下邁出的步子有多大,在批量梯度下降中,我們每一次都同時讓所有的參數減去學習速率乘以代價函數的導數
梯度下降算法和線性迴歸算法
如圖:
對我們之前的線性迴歸問題運用梯度下降法,關鍵在於求出代價函數的導數,即:
∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \frac{\partial }{\partial {{\theta }_{j}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{\partial }{\partial {{\theta }_{j}}}\frac{1}{2m}{{\sum\limits_{i=1}^{m}{\left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)}}^{2}} ∂ θ j ∂ J ( θ 0 , θ 1 ) = ∂ θ j ∂ 2 m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) 2
j = 0 j=0 j = 0 時:∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial }{\partial {{\theta }_{0}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{1}{m}{{\sum\limits_{i=1}^{m}{\left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)}}} ∂ θ 0 ∂ J ( θ 0 , θ 1 ) = m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) )
j = 1 j=1 j = 1 時:∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) ) \frac{\partial }{\partial {{\theta }_{1}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{1}{m}\sum\limits_{i=1}^{m}{\left( \left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)\cdot {{x}^{(i)}} \right)} ∂ θ 1 ∂ J ( θ 0 , θ 1 ) = m 1 i = 1 ∑ m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) )
則算法改寫成:
Repeat {
θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) {\theta_{0}}:={\theta_{0}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{ \left({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)} θ 0 : = θ 0 − a m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) )
θ 1 : = θ 1 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) ) {\theta_{1}}:={\theta_{1}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{\left( \left({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)\cdot {{x}^{(i)}} \right)} θ 1 : = θ 1 − a m 1 i = 1 ∑ m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) )
}
多變量線性迴歸
多維特徵
J ( θ 0 , θ 1 . . . θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( {\theta_{0}},{\theta_{1}}...{\theta_{n}} \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( h_{\theta} \left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}} J ( θ 0 , θ 1 . . . θ n ) = 2 m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) 2
h θ ( x ) = θ T X = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta}\left( x \right)=\theta^{T}X={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} h θ ( x ) = θ T X = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n
特徵縮放
保證這些特徵都具有相近的尺度,這將幫助梯度下降算法更快地收斂,解決的方法是嘗試將所有特徵的尺度都儘量縮放到-1到1之間,最簡單的方法是令:x n = x n − μ n s n {{x}_{n}}=\frac{{{x}_{n}}-{{\mu}_{n}}}{{{s}_{n}}} x n = s n x n − μ n ,其中 μ n {\mu_{n}} μ n 是平均值,s n {s_{n}} s n 是標準差
多項式迴歸
線性迴歸並不適用於所有數據,有時我們需要曲線來適應我們的數據;比如一個二次方模型:h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2} h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 或者三次方模型: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}+{\theta_{3}}{x_{3}^3} h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3
正規方程
某些線性迴歸問題,正規方程方法是更好的解決方案。如:
正規方程是通過求解下面的方程來找出使得代價函數最小的參數的:∂ ∂ θ j J ( θ j ) = 0 \frac{\partial}{\partial{\theta_{j}}}J\left( {\theta_{j}} \right)=0 ∂ θ j ∂ J ( θ j ) = 0
2. 邏輯迴歸 - Logistic Regression
在分類問題中,要預測的變量 y y y 是離散的值, 如一個二元分類問題:我們將因變量(dependent variable )可能屬於的兩個類分別稱爲負向類(negative class )和正向類(positive class ),則因變量y ∈ 0 , 1 y\in { 0,1 \\} y ∈ 0 , 1 ,其中 0 表示負向類,1表示正向類;
預測腫瘤的例子:
根據線性迴歸模型我們只能預測連續的值,然而對於分類問題,我們需要輸出0或1,我們可以預測:
當h θ ( x ) > = 0.5 {h_\theta}\left( x \right)>=0.5 h θ ( x ) > = 0 . 5 時,預測 y = 1 y=1 y = 1 。
當h θ ( x ) < 0.5 {h_\theta}\left( x \right)<0.5 h θ ( x ) < 0 . 5 時,預測 y = 0 y=0 y = 0 。
假使我們又觀測到一個非常大尺寸的惡性腫瘤,將其作爲實例加入到我們的訓練集中來,這將使得我們獲得一條新的直線。
這時,再使用0.5作爲閥值來預測腫瘤是良性還是惡性便不合適了。可以看出,線性迴歸模型,因爲其預測的值可以超越[0,1]的範圍,並不適合解決這樣的問題。引入邏輯迴歸:該模型的輸出變量範圍始終在0和1之間
模型表示
邏輯迴歸模型
的假設是: h θ ( x ) = g ( θ T X ) h_\theta \left( x \right)=g\left(\theta^{T}X \right) h θ ( x ) = g ( θ T X )
其中:
X X X 代表特徵向量
g g g 代表邏輯函數(logistic function)
是一個常用的邏輯函數爲S形函數(Sigmoid function)
,公式爲: g ( z ) = 1 1 + e − z g\left( z \right)=\frac{1}{1+{{e}^{-z}}} g ( z ) = 1 + e − z 1 ,圖像:
邏輯迴歸中,我們預測:
當h θ ( x ) > = 0.5 {h_\theta}\left( x \right)>=0.5 h θ ( x ) > = 0 . 5 時,預測 y = 1 y=1 y = 1 。
當h θ ( x ) < 0.5 {h_\theta}\left( x \right)<0.5 h θ ( x ) < 0 . 5 時,預測 y = 0 y=0 y = 0 。
根據上面繪製出的 S 形函數圖像,我們知道當
z = 0 z=0 z = 0 時 g ( z ) = 0.5 g(z)=0.5 g ( z ) = 0 . 5
z > 0 z>0 z > 0 時 g ( z ) > 0.5 g(z)>0.5 g ( z ) > 0 . 5
z < 0 z<0 z < 0 時 g ( z ) < 0.5 g(z)<0.5 g ( z ) < 0 . 5
又 z = θ T x z={\theta^{T}}x z = θ T x ,即:
θ T x > = 0 {\theta^{T}}x>=0 θ T x > = 0 時,預測 y = 1 y=1 y = 1
θ T x < 0 {\theta^{T}}x<0 θ T x < 0 時,預測 y = 0 y=0 y = 0
判定邊界
一個具體的示範模型:
並且參數θ \theta θ 是向量[-3 1 1]。 則當− 3 + x 1 + x 2 ≥ 0 -3+{x_1}+{x_2} \geq 0 − 3 + x 1 + x 2 ≥ 0 ,即x 1 + x 2 ≥ 3 {x_1}+{x_2} \geq 3 x 1 + x 2 ≥ 3 時,模型將預測 y = 1 y=1 y = 1 。
我們可以繪製直線x 1 + x 2 = 3 {x_1}+{x_2} = 3 x 1 + x 2 = 3 ,這條線便是我們模型的分界線
,將預測爲1的區域和預測爲 0的區域分隔開
再複雜一些的數據分佈:
代價函數
當我們將h θ ( x ) = 1 1 + e − θ T x {h_\theta}\left( x \right)=\frac{1}{1+{e^{-\theta^{T}x}}} h θ ( x ) = 1 + e − θ T x 1 帶入到線性迴歸模型的代價函數中時,我們得到的代價函數將是一個非凸函數(non-convexfunction )
這樣的代價函數存在很多局部最小值,這將影響梯度下降算法尋找全局最小值
線性迴歸的代價函數爲:J ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{1}{2}{{\left( {h_\theta}\left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}} J ( θ ) = m 1 i = 1 ∑ m 2 1 ( h θ ( x ( i ) ) − y ( i ) ) 2 。
我們重新定義邏輯迴歸的代價函數爲:J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{{Cost}\left( {h_\theta}\left( {x}^{\left( i \right)} \right),{y}^{\left( i \right)} \right)} J ( θ ) = m 1 i = 1 ∑ m C o s t ( h θ ( x ( i ) ) , y ( i ) ) ,其中
h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 與 C o s t ( h θ ( x ) , y ) Cost\left( {h_\theta}\left( x \right),y \right) C o s t ( h θ ( x ) , y ) 之間的關係如下圖所示:Amazing ‼️‼️⁉️
這樣構建的C o s t ( h θ ( x ) , y ) Cost\left( {h_\theta}\left( x \right),y \right) C o s t ( h θ ( x ) , y ) 函數的特點是:
當實際的 y = 1 y=1 y = 1 且h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 也爲 1 時誤差爲 0,
當 y = 1 y=1 y = 1 但h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 不爲1時誤差隨着h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 變小而變大;
當實際的 y = 0 y=0 y = 0 且h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 也爲 0 時代價爲 0,
當y = 0 y=0 y = 0 但h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 不爲 0時誤差隨着 h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 的變大而變大
簡化的成本函數與梯度下降
將構建的 C o s t ( h θ ( x ) , y ) Cost\left( {h_\theta}\left( x \right),y \right) C o s t ( h θ ( x ) , y ) 簡化如下:
C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right) C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) )
帶入代價函數得到:
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J ( θ ) = m 1 i = 1 ∑ m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ]
即:J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J ( θ ) = − m 1 i = 1 ∑ m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ]
擬合訓練樣本的參數$\theta $,來輸出對假設的預測
假設的輸出,實際上就是這個概率值:p ( y = 1 ∣ x ; θ ) p(y=1|x;\theta) p ( y = 1 ∣ x ; θ ) ,就是關於 x x x 以$\theta 爲 參 數 , 爲參數, 爲 參 數 , y=1$ 的概率;
假設函數的區別
對於線性迴歸假設函數:
h θ ( x ) = θ T X = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n {h_\theta}\left( x \right)={\theta^T}X={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} h θ ( x ) = θ T X = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n
而現在邏輯函數假設函數:
h θ ( x ) = 1 1 + e − θ T X {h_\theta}\left( x \right)=\frac{1}{1+{{e}^{-{\theta^T}X}}} h θ ( x ) = 1 + e − θ T X 1
因此,即使更新參數的規則看起來基本相同,但由於假設的定義發生了變化,所以邏輯函數的梯度下降,跟線性迴歸的梯度下降實際上是兩個完全不同的東西
其他高級算法
梯度下降並不是我們可以使用的唯一算法,還有其他一些算法,更高級、更復雜共軛梯度法 BFGS (變尺度法 ) 和L-BFGS (限制變尺度法 ) 等
3. 過擬合與正則化
第一個模型是一個線性模型,欠擬合,不能很好地適應我們的訓練集;
第三個模型是一個四次方的模型,過於強調擬合原始數據,而丟失了算法的本質:預測新數據。
第二個模型是一個二次方模型,較好的擬合了數據,並可以進行新數據預測
以多項式理解,x x x 的次數越高,擬合的越好,但相應的預測的能力就可能變差;
分類問題中也存在這樣的問題:
過擬合的處理:
丟棄一些不能幫助我們正確預測的特徵。手工選擇/模型選擇的算法
正則化。 保留所有的特徵,但是減少參數的大小(magnitude )
4. 神經網絡 - Neural Networks
無論是線性迴歸還是邏輯迴歸都有這樣一個缺點,即:當特徵太多時,計算的負荷會非常大
假設我們希望訓練一個模型來識別視覺對象(例如識別一張圖片上是否是一輛汽車),我們怎樣才能這麼做呢?一種方法是我們利用很多汽車的圖片和很多非汽車的圖片,然後利用這些圖片上一個個像素的值來作爲特徵
模型表示
爲了構建神經網絡模型,我們需要首先思考大腦中的神經網絡是怎樣的?每一個神經元都可以被認爲是一個處理單元/神經核(processing unit /Nucleus ),它含有許多輸入/樹突(input /Dendrite ),並且有一個輸出/軸突(output /Axon )。神經網絡是大量神經元相互鏈接並通過電脈衝來交流的一個網絡
類似於神經元的神經網絡,效果如下:
其中x 1 x_1 x 1 , x 2 x_2 x 2 , x 3 x_3 x 3 是輸入單元(input units ),我們將原始數據輸入給它們。
a 1 a_1 a 1 , a 2 a_2 a 2 , a 3 a_3 a 3 是中間單元,它們負責將數據進行處理,然後呈遞到下一層。
最後是輸出單元,它負責計算h θ ( x ) {h_\theta}\left( x \right) h θ ( x )
神經網絡模型是許多邏輯單元按照不同層級組織起來的網絡,每一層的輸出變量都是下一層的輸入變量。下圖爲一個3層的神經網絡,第一層成爲輸入層(Input Layer)
,最後一層稱爲輸出層(Output Layer)
,中間一層成爲隱藏層(Hidden Layers)
爲了更好了瞭解Neuron Networks 的工作原理,我們先把左半部分遮住:
右半部分其實就是以a 0 , a 1 , a 2 , a 3 a_0, a_1, a_2, a_3 a 0 , a 1 , a 2 , a 3 , 按照Logistic Regression 的方式輸出h θ ( x ) h_\theta(x) h θ ( x ) :
其實神經網絡就像是logistic regression ,只不過我們把logistic regression 中的輸入向量[ x 1 ∼ x 3 ] \left[ x_1\sim {x_3} \right] [ x 1 ∼ x 3 ] 變成了中間層的[ a 1 ( 2 ) ∼ a 3 ( 2 ) ] \left[ a_1^{(2)}\sim a_3^{(2)} \right] [ a 1 ( 2 ) ∼ a 3 ( 2 ) ] , 即: h θ ( x ) = g ( Θ 0 ( 2 ) a 0 ( 2 ) + Θ 1 ( 2 ) a 1 ( 2 ) + Θ 2 ( 2 ) a 2 ( 2 ) + Θ 3 ( 2 ) a 3 ( 2 ) ) h_\theta(x)=g\left( \Theta_0^{\left( 2 \right)}a_0^{\left( 2 \right)}+\Theta_1^{\left( 2 \right)}a_1^{\left( 2 \right)}+\Theta_{2}^{\left( 2 \right)}a_{2}^{\left( 2 \right)}+\Theta_{3}^{\left( 2 \right)}a_{3}^{\left( 2 \right)} \right) h θ ( x ) = g ( Θ 0 ( 2 ) a 0 ( 2 ) + Θ 1 ( 2 ) a 1 ( 2 ) + Θ 2 ( 2 ) a 2 ( 2 ) + Θ 3 ( 2 ) a 3 ( 2 ) )
我們可以把a 0 , a 1 , a 2 , a 3 a_0, a_1, a_2, a_3 a 0 , a 1 , a 2 , a 3 看成更爲高級的特徵值,也就是x 0 , x 1 , x 2 , x 3 x_0, x_1, x_2, x_3 x 0 , x 1 , x 2 , x 3 的進化體,並且它們是由 x x x 與θ \theta θ 決定的,因爲是梯度下降的,所以a a a 是變化的,並且變得越來越厲害,所以這些更高級的特徵值遠比僅僅將 x x x 次方厲害,也能更好的預測新數據。
這就是神經網絡相比於邏輯迴歸和線性迴歸的優勢
簡單的AND函數
我們可以用這樣的一個神經網絡表示AND 函數:
其中θ 0 = − 30 , θ 1 = 20 , θ 2 = 20 \theta_0 = -30, \theta_1 = 20, \theta_2 = 20 θ 0 = − 3 0 , θ 1 = 2 0 , θ 2 = 2 0
我們的輸出函數h θ ( x ) h_\theta(x) h θ ( x ) 即爲:h Θ ( x ) = g ( − 30 + 20 x 1 + 20 x 2 ) h_\Theta(x)=g\left( -30+20x_1+20x_2 \right) h Θ ( x ) = g ( − 3 0 + 2 0 x 1 + 2 0 x 2 )
我們知道g ( x ) g(x) g ( x ) 的圖像是:
所以我們有:h Θ ( x ) ≈ x 1 AND x 2 h_\Theta(x) \approx \text{x}_1 \text{AND} \, \text{x}_2 h Θ ( x ) ≈ x 1 AND x 2
多類分類
當我們不止兩種分類的時呢?
輸入向量x x x 有三個維度,兩個中間層,輸出層4個神經元分別用來表示4類,也就是每一個數據在輸出層都會出現[ a b c d ] T {{\left[ a\text{ }b\text{ }c\text{ }d \right]}^{T}} [ a b c d ] T ,且a , b , c , d a,b,c,d a , b , c , d 中僅有一個爲1,表示當前類。下面是該神經網絡的可能結構示例:
代價函數
在邏輯迴歸中,我們只有一個輸出變量,又稱標量(scalar ),也只有一個因變量y y y ,但是在神經網絡中,我們可以有很多輸出變量,我們的h θ ( x ) h_\theta(x) h θ ( x ) 是一個維度爲K K K 的向量,並且我們訓練集中的因變量也是同樣維度的一個向量;
代價函數爲:
h θ ( x ) ∈ R K h_\theta\left(x\right)\in \mathbb{R}^{K} h θ ( x ) ∈ R K ( h θ ( x ) ) i = i t h output {\left({h_\theta}\left(x\right)\right)}_{i}={i}^{th} \text{output} ( h θ ( x ) ) i = i t h output
反向傳播算法
我們在計算神經網絡預測結果的時候我們採用了一種正向傳播方法,我們從第一層開始正向一層一層進行計算,直到最後一層的h θ ( x ) h_{\theta}\left(x\right) h θ ( x ) 。
現在,爲了計算代價函數的偏導數∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial\Theta^{(l)}_{ij}}J\left(\Theta\right) ∂ Θ i j ( l ) ∂ J ( Θ ) ,我們需要採用一種反向傳播算法,也就是首先計算最後一層的誤差,誤差是激活單元的預測(a ( 4 ) {a^{(4)}} a ( 4 ) )與實際值(y k y^k y k )之間的誤差;利用這個誤差值來計算前一層的誤差,然後再一層一層反向求出各層的誤差,直到倒數第二層。
梯度檢驗
當我們對一個較爲複雜的模型(例如神經網絡)使用梯度下降算法時,可能會存在一些不容易察覺的錯誤,意味着,雖然代價看上去在不斷減小,但最終的結果可能並不是最優解。
爲了避免這樣的問題,我們採取一種叫做梯度的數值檢驗(Numerical Gradient Checking )方法。這種方法的思想是通過估計梯度值來檢驗我們計算的導數值是否真的是我們要求的。
對梯度的估計採用的方法是在代價函數上沿着切線的方向選擇離兩個非常近的點然後計算兩個點的平均值用以估計梯度。即對於某個特定的 θ \theta θ ,我們計算出在 θ \theta θ -$\varepsilon $ 處和 θ \theta θ +$\varepsilon $ 的代價值($\varepsilon $是一個非常小的值,通常選取 0.001),然後求兩個代價的平均,用以估計在 θ \theta θ 處的代價值
參數初始化
任何優化算法都需要一些初始的參數。到目前爲止我們都是初始所有參數爲0,這樣的初始方法對於邏輯迴歸來說是可行的,但是對於神經網絡來說是不可行的。如果我們令所有的初始參數都爲0,這將意味着我們第二層的所有激活單元都會有相同的值。同理,如果我們初始所有的參數都爲一個非0的數,結果也是一樣的。
我們通常初始參數爲正負ε之間的隨機值
綜合起來
網絡結構:第一件要做的事是選擇網絡結構,即決定選擇多少層以及決定每層分別有多少個單元。
第一層的單元數即我們訓練集的特徵數量。
最後一層的單元數是我們訓練集的結果的類的數量。
如果隱藏層數大於1,確保每個隱藏層的單元個數相同,通常情況下隱藏層單元的個數越多越好。
訓練神經網絡:
參數的隨機初始化
利用正向傳播方法計算所有的h θ ( x ) h_{\theta}(x) h θ ( x )
編寫計算代價函數 J J J 的代碼
利用反向傳播方法計算所有偏導數
利用數值檢驗方法檢驗這些偏導數
使用優化算法來最小化代價函數
以上,感謝🙏
@Reference: ML - AndrewNg