吴恩达《机器学习》学习笔记九——神经网络相关(1)
吳恩達《機器學習》學習筆記九——神經網絡相關(1)
- 一、 非線性假設的問題
- 二、 神經網絡相關知識
- 1.神經網絡的大致歷史
- 2.神經網絡的表示
- 3.前向傳播:向量化表示
- 三、 例子與直覺理解
- 1.問題描述:異或XOR、同或XNOR
- 2.單個神經元如何計算邏輯函數:以AND、OR為例
- 3.多層神經網絡計算復雜函數
- 四、 神經網絡實現多分類
課程鏈接:https://www.bilibili.com/video/BV164411b7dx?from=search&seid=5329376196520099118
前面的幾次筆記,較詳細地學習了機器學習里有監督學習的兩個最具代表性的模型,分別是解決回歸問題的線性回歸以及解決分類問題的邏輯回歸。這兩個模型最初的形態都是線性的,但是由于問題的復雜性,它們又可以推廣到非線性的形態,即多一些高次冪項特征。這次筆記就由此非線性假設函數引入,學習神經網絡的相關知識。如今人工智能能夠得到如此的發展,神經網絡可以說是功不可沒。
一、 非線性假設的問題
首先課程中提出的問題是,既然已經有了線性回歸和邏輯回歸來分別解決回歸和分類問題,即使是較為復雜的問題,也可以推廣假設函數到非線性形式來解決,那么為什么還要學習神經網絡呢?
那么我們就來看一看非線性假設存在的問題:
如上圖所示,是一個非線性的分類問題,數據樣本有兩個特征x1和x2,那么要分類這樣的數據集,假設函數就需要設置成如圖中所示,以此來達到非線性決策邊界的目標。這樣做唯一的代價就是通過特征映射將原來兩個特征變成了多項非線性特征,看起來沒有太大問題。
我們可以回顧一下筆記七中特征映射的代碼,最高次冪設置成了6次,特征的數量從原來的2個變成了28個,當時的計算量看似也不大,也能得到較好的結果。
但是問題就在于,很多情況,特征的數量遠遠不止2個,上百上千上萬甚至百萬的都很常見,如果都通過這樣特征映射將線性變成非線性假設去解決非線性問題,那么特征映射后的特征數量將飛速變大。
舉一個有100個特征的例子:
它的一次冪特征項是100個,而二次冪特征項就已經有5000個:
再看三次冪項,有170000個:
就不往更高次冪算了,只會更加龐大,而很多問題需要用到高次冪的項。
所以,當初始特征數量很大時,將其映射到高階特征項,特征空間將會急劇膨脹,可能會帶來嚴重的過擬合問題,以及沉重的計算和存儲負擔。所以用這種特征映射的方法來建立非線性模型,并不是一種好方法。
課程中還提供了CV領域圖像分類的一個例子:
假設一張圖像數據包含2500個特征(每個像素算一個),用邏輯回歸的這種非線性假設的方法,僅僅算二次冪的特征數量都已經有三百萬個,而50*50的圖像已經算是很小的圖片,所以這種方法過于簡單粗暴,特征數一大,就會非常吃力。
而神經網絡很好的克服了這個問題,即使初始特征空間龐大,也能很好的求解。
二、 神經網絡相關知識
1.神經網絡的大致歷史
神經網絡起初是一種模仿人腦運行機制的算法。曾在80年代以及90年代早期比較流行,但是因為一些原因,在90年代末又沉寂了下去。而近些年,神經網絡在各大領域上的應用,又使得它流行起來,主要是因為計算性能的飛速發展,使得計算機可以支持神經網絡計算的龐大數據量。目前,許多領域最新技術都會應用到神經網絡的知識。
2.神經網絡的表示
人腦的自然神經網絡的運行原理,如下圖所示:
如圖所示為一個神經元結構,主要包括三個部分:
樹突:信號的輸入部分,其他神經元的信號經過樹突來接收;
細胞體:許多外來信號經過樹突傳入后由細胞體處理,并產生一個輸出信號,即反應;
軸突:信號的輸出端。神經元可以看成是一個計算單元,對眾多外來信號進行處理后,產生一個輸出。
而機器學習中的神經網絡模型是指人工神經網絡,就是模仿自然神經網絡構造了功能相似的計算單元,如下圖所示:
x1,x2,x3分別是計算單元的輸入,黃色的圓圈是計算中心,h(x)是輸出的計算結果。這邊具體輸出什么形式的函數被稱之為激活函數,此處激活函數是sigmoid函數的形式。以sigmoid函數這個例子為例,黃色圓圈首先計算的是z =θ ^ T x,然后用sigmoid激活函數進行的計算是g(z) = 1/(1 + e^(-z)),最后的輸出也就是g(z)。黃色圓圈包含了計算z和g(z)的兩部分,其中的計算涉及到一些參數,那么優化神經網絡模型的過程,就是優化這些參數的過程,這些參數也叫權重(weights)。
以上是單個的神經元,那么與人腦類似,多個神經元可以組合成神經網絡,其結構如下圖所示:
第一列被稱為輸入層,它都是輸入的數據,最后一層被稱為輸出層,而中間的被稱為隱藏層,不論是一層還是多層,統稱為隱藏層。隱藏層中包含了要優化的參數。
我們看一下它具體是怎么工作的,如下圖所示:
首先定義a_i ^ (j)是第 j 層第 i 個計算單元的激活器;θ ^ (j)是從第 j 層映射到第 j+1 層的權重矩陣,如果第 j 層有 s_j 個計算單元,第 j+1 層有 s_(j+1) 個計算單元,那么θ^(j)的維度是 s_(j+1) × (s_j+1) 。這邊的1是指偏置項x0。
然后看圖中的一些計算過程,每一層都要按照激活函數來計算結果,直到計算到最后一層的輸出,如果層數較多,那么也要一層層的嵌套計算下去。
3.前向傳播:向量化表示
為了實現向量化表示,將第一個式子里的
表示為z_1 ^ (2),與此相似,第二、三個式子里的部分也分別表示為z_2 ^ (2) 、z_3 ^ (2)。而且,我們將輸入x與參數進行向量化:
那么,z ^ (2) 、a ^ (2)都將進行向量化,這里z ^ (2) 、a ^ (2)都是三維向量:
這邊的x向量也可以看作是a ^ (1)向量,以上是輸入層到隱藏層的計算過程,下面再看一下由隱藏層推到輸出層的計算,其實與之前的計算非常類似:
上面的這種由輸入層一層層往輸出層計算輸出的過程,稱之為前向傳播,從向量化的形式來看,是一次次嵌套計算的過程。
這種前向傳播的方法,也可以幫助我們了解神經網絡的作用,以及它為什么能夠學習非線性假設函數。將上面提到的神經網絡的輸入層遮住,如下圖所示:
剩下的結構其實就是一個邏輯回歸的模型,假設函數如圖中所示,只是邏輯回歸單元得到的輸入不是真正數據的輸入,而是隱藏層的計算結果,而這些隱藏層的計算結果,是通過前面層學習得到的函數輸入值,具體來講,就是它們是從第一層映射到第二層的函數中學習到的結果,這個函數由前面的參數θ^((1))決定。
總結一下,神經網絡中沒有直接使用輸入x來訓練邏輯回歸,而是自己先訓練邏輯回歸的輸入a,這個過程中因為θ^(1)選擇的不同參數,有時可以學習到一些復雜、有趣的特征,這樣就可以得到一個更好的假設函數,比直接使用原始輸入數據得到的假設函數更好。
再看一個層數更多的例子,第二層先學習了一些原始數據的特征,第三層再學習第二層的特征,第四層則可以根據前兩層抽象過的特征進行擬合,得到的假設函數更加復雜。第一層還叫輸入層,最后一層還叫輸出層,中間層都叫隱藏層。
三、 例子與直覺理解
通過一個例子來詳細地介紹神經網絡是如何計算復雜非線性函數的輸入的,幫助理解為什么神經網絡可以用來學習復雜的非線性假設模型。
1.問題描述:異或XOR、同或XNOR
下面是一個非線性的分類例子:同或,這個問題的數據分布如下圖所示,特征x1和x2都只能取0/1,當x1和x2同為0或同為1時類別為1,反之為0,這個問題不能用線性的模型來解決,需要非線性的決策邊界來劃分,也就是需要非線性的假設函數。
2.單個神經元如何計算邏輯函數:以AND、OR為例
輸入特征x1和x2的取值只能是0/1,尋找一個假設函數,使得經過神經元后的預測結果和真值表的結果匹配。圖中給定了模型的結構,單個神經元其實也可以看作是邏輯回歸,參數如圖中所示為-30,20,20,則假設函數或者說神經元的輸出為h(x)=g(-30+20x_1+20x_2)。將x1和x2的可能取值組合一一代入,得到預測結果為0,0,0,1,與真值表的結果完全符合。
下面看另一個線性的例子:
OR的計算原理和過程類似上面的AND模型,不再贅述。
從這兩個例子可以看到,神經網絡中的單個神經元是如何用來計算邏輯函數的,比如上面的AND和OR。下面將介紹,一個擁有多層神經元的神經網絡是如何被用來計算更復雜的函數的比如XOR或XNOR。
3.多層神經網絡計算復雜函數
首先有三個單個神經元的模型,如下圖所示:
它們分別能解決三個不同的邏輯計算。
為了能解決更復雜的問題,將它們組合到一起,變成一個三層的神經網絡,如下圖所示:
紅色、藍色和綠色的神經元分別對應上面的三個功能,看右邊的真值表變化,這樣組合的一個三層神經網絡就完成了非線性的同或XNOR問題。
還能這樣理解,輸入都放在輸入層,然后在中間放一個隱藏層,用來計算一些關于輸入的略微復雜的功能,然后再增加一層,用于計算一個更復雜的非線性函數。這就是為什么神經網絡可以計算這種復雜的函數。
在一層層往后計算的過程中,能夠計算的函數也會越來越復雜。
四、 神經網絡實現多分類
多輸出單元:一對多:
這是一個圖片分類的例子,需要將圖片分成行人、汽車、摩托車和貨車四類。相應地,建立了一個具有四個輸出單元的神經網絡,所以輸出是一個四維向量,這四個神經元的作用分別為,判斷圖中是否為行人、圖中是否為汽車、圖中是否為摩托車、圖中是否為貨車。如果為行人,輸出向量為[1 0 0 0],如果為汽車,則為[0 1 0 0],以此類推。只是這里數據集中的標簽y也要表示成一個四維向量才能與預測結果h(x)匹配。
總結
以上是生活随笔為你收集整理的吴恩达《机器学习》学习笔记九——神经网络相关(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言ODBC连接MySQL数据库制作简
- 下一篇: 线性调频信号(LFM)的形式及幅度谱、相