图解深度学习的笔记:1.MP模型,感知器,BP下的多层感知器
M-P模型:它是首個通過模仿神經元而成的模型,其中只有兩層:輸入層x1…xn和輸出層y;權值w1…wn。
但是由于M-P的權值只能事先給定,不能自動確定權值,感知器應運而生。
↓
感知器:可以根據有監督學習,自動確定權值。設定訓練樣本和期望輸出,以誤差修正方法來調整實際權值。
但感知器只能解決線性可分問題,不能解決線性不可分問題
↓
初期多層感知器被提出來解決線性不可分問題
↓
但是由于誤差修正只能針對單層修正,不能跨層修正,初期多層感知器的只能對中間層和輸入層之間的參數進行修正,不能對其它層進行誤差修正學習,所以后來有了BP(誤差反向傳播)的多層感知器來改進這點。
↓
BP下的多層感知器。
目錄
- 1. M-P模型
- 1.1 最基礎的m-p模型:
- 1.2 NOT/ AND/ OR 的m-p模型:
- 1.2.1 NOT :
- 1.2.2 AND :
- 1.2.3 OR :
- 2. 感知器
- 3. 多層感知器
- 3.1 初期多層感知器:
- 3.2 BP下的多層感知器:
- A. BP下 單輸出 多層感知器的權重調節示例:
- B. BP下 多輸出 多層感知器的權重調節示例:
1. M-P模型
1.1 最基礎的m-p模型:
?由上圖所示,M-P模型由多個輸入節點 {xi_ii?|i= 1,2,3…n} 且 xi_ii?= {0,1} 和連接權值 {wi_ii?|i= 1,2,3…n} 組成,對應一個輸出節點y。
?整個圖可以寫做一個公式:
?其中 MP模型里的 激活函數f (我稱他為激活函數)是 :
? 以h為閾值,令ui_ii?=∑wi_ii?xi_ii?,y=f(ui_ii?), 當ui_ii?) ≥ h,y=1; 否則,y=0。
?
1.2 NOT/ AND/ OR 的m-p模型:
1.2.1 NOT :
?只需要把激活函數的規則改變:
?以h為閾值,令ui_ii?=∑wi_ii?xi_ii?,y=f(ui_ii?), 當ui_ii?) ≥ h,y=0; 否則,y=1。
1.2.2 AND :
?拿兩個輸入的AND模型來舉例說明:( xi_ii?= {0,1} )
?可以令w1=0.5, w2=0.5,而h=1 實現AND模型,( 當然w1,w2,h取別的值也可以。
1.2.3 OR :
?拿兩個輸入的OR模型來舉例說明:( xi_ii?= {0,1} )
?可以令w1=0.5, w2=0.5,而h=0.5 實現OR模型,( 當然w1,w2,h取別的值也可以。
?
?
2. 感知器
通過1中的M-P模型,我們大概有了一個,輸入xi_ii?, 輸出y,連接權值wi_ii?,和激活函數 f 的概念。
但是1中的連接權值wi_ii?都是人工設置的,這樣在實際應用來說,很不實用。我們更需要的是機器去自動尋找最合適的連接權值wi_ii?。由此,羅森布拉特提出了感知器的概念,感知器通過1. 有監督學習下訓練訓練樣本; 2. 誤差修正 得到合適的連接權值參數wi_ii?。從而實現了不需要人為干預自動尋找到權值。
誤差修正學習 公式:
??· a是確定連接權重調整值的參數,可以稱為學習率;a增加則誤差修正速度增加,但是太大會影響訓練的穩定性;a減少則誤差修正速度降低,但是太低會導致收斂速度太慢;
??· r是期望輸出(有監督學習/ 有教師學習); y是實際輸出
感知器的基本思路是:
利用隨機數來初始化各項參數;
逐個加入訓練樣本,實際輸出 y 與期望輸出 r 相等時,wi_ii?, h不變;實際輸出 y 與期望輸出 r 不相等時,調整 wi_ii?, h;
直到 誤差為0 或者小于某個特定數值。
( 由于 wi_ii? 的調整乘以 xi_ii? , 而 xi_ii?= {0,1} ,則只能針對 xi_ii?= 1 的權值 wi_ii? 進行調整:
??h減少; 增加 xi_ii?= 1 的權值 wi_ii? ; xi_ii?= 0 的權值 wi_ii? 不變。
??h增大; 減少 xi_ii?= 1 的權值 wi_ii? ; xi_ii?= 0 的權值 wi_ii? 不變。
?
?
?
3. 多層感知器
??利用誤差修正學習 , 我們實現了自動獲取參數 wi_ii? ,h,但是 感知器訓練只能解決線性可分問題,不能解決線性不可分問題。 (線性不可分問題: 無法用一條直線將兩個類別分開的問題)針對這點,多層感知器 和 BP 被提出來,用以解決線性不可分問題。
3.1 初期多層感知器:
初期多層感知器就是由多層結構的感知器遞階組成的輸入值向前傳播的網絡,也被稱為前饋網絡/ 正向傳播網絡。
多層感知器常由三層結構組成: 1. 輸入層; 2. 中間層; 3. 輸出層。
中間層的輸出z1…zm也是由x1…xn和wi11…winm組成輸出得到u1…um, 然后通過激活函數y=f(u)得到的。
但是由于誤差修正只能針對單層修正,不能跨層修正,所以初期多層感知器的只能對中間層和輸入層的參數進行修正,不能對其它層進行誤差修正學習
↓
針對此點,BP( Back propagation 誤差反向傳播算法 ) 被提出,用以改進初期的多層感知器不能對其它層進行誤差修正學習的缺點。
3.2 BP下的多層感知器:
最小二乘誤差函數 :
??
以下講解中,我的誤差函數使用最小二乘誤差函數*1/2 用以簡化后續運算:
??
而激活函數使用 可導的sigmoid函數 :(詳細介紹見: Sigmoid函數總結
??
sigmoid函數將整個一維空間映射到[0,1]或[-1,1]。他的導數就是:
??
權重的調整使用 梯度下降法(gradient descent method) :
我們的目標是通過梯度確定調整值,不斷調整權重連接值,使得誤差E達到最小,或者接近于0!!!
梯度是微積分中一個很重要的概念:
梯度的方向是函數在給定點上升最快的方向,那么梯度的反方向就是函數在給定點下降最快的方向!
剛才提到 “我們的目標是通過梯度確定調整值,不斷調整權重連接值,使得誤差E達到最小”
↓
可以看出有2個重要點: a. 因變量誤差E需要達到最小 ; b. 自變量是權重連接值 wi_ii?。
↓
那怎么才來來調整呢? 顯然我們用誤差對權值求導將是一個很好的選擇,導數的意義是提供了一個方向,沿著這個方向改變權值,將會讓總的誤差變大,更形象的叫它為梯度。
既然梯度確定了E最陡峭的上升的方向,也就是越順著梯度的方向,誤差增加的越來越快,逆著梯度的方向,誤差降低的越來越快,那么梯度下降的訓練法則是:
(η\etaη 是上文提到的 學習率 ;
在誤差函數的導數 ▽\bigtriangledown▽E( wi_ii?)前面加負號,是因為保證是順著梯度下降的方向調節權重連接值的!)
那怎么調整才能保證調整的快,而找到最小點呢?這個就可以提到 深入淺出–梯度下降法及其實現里下山的例子了。
假設這樣一個場景:一個人被困在山上,需要從山上下來(i.e. 找到山的最低點,也就是山谷)。但此時山上的濃霧很大,導致可視度很低。因此,下山的路徑就無法確定,他必須利用自己周圍的信息去找到下山的路徑。這個時候,他就可以利用梯度下降算法來幫助自己下山。具體來說就是,以他當前的所處的位置為基準,尋找這個位置最陡峭的地方,然后朝著山的高度下降的地方走,(同理,如果我們的目標是上山,也就是爬到山頂,那么此時應該是朝著最陡峭的方向往上走。)然后每走一段距離,都反復采用同一個方法尋找這個位置最陡峭的地方,最后就能成功的抵達山谷。
看到這里 你也許會問,那要是只找到了局部最優值,但是卻沒有真正到山谷怎么辦?因為目前的梯度下降法好像不能保證尋找到全局最優啊。即如果誤差曲面上有多個局極小值,那么不能保證這個過程會找到全局最小值。
如圖:
感知器與梯度下降 里提到的梯度下降的一種變體:隨機梯度下降 可以很好地解決這個問題:
其實也還有其他的辦法,具體可以看 Andrew Ng 關于 Machine Learning 的視頻,我當時看了記完筆記,有些印象覺得講得很好,至今也忘了。。所以暫時不講把。。未來深入了可能會開一篇文專門細講。。。
下面以單輸出多層感知器和多輸出多層感知器為例,介紹BP(誤差反向傳播)怎么自動調節連接權重值得:
(手寫的字,不要介意字太丑哦。。。)
A. BP下 單輸出 多層感知器的權重調節示例:
B. BP下 多輸出 多層感知器的權重調節示例:
總結
以上是生活随笔為你收集整理的图解深度学习的笔记:1.MP模型,感知器,BP下的多层感知器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu挂载新硬盘
- 下一篇: 【速度↑20%模型尺寸↓36%】极简开源