機器學習入門-基礎瑣碎筆記

 

5.html

 教程中的一些術語:網絡

  Model representation:函數

  其實就是指學習到的函數的表達形式,能夠用矩陣表示。post

  Vectorized implementation:學習

  指定是函數表達式的矢量實現。優化

  Feature scaling:編碼

  指是將特徵的每一維都進行一個尺度變化,好比說都讓其均值爲0等。url

  Normal equations:spa

  這裏指的是多元線性迴歸中參數解的矩陣形式,這個解方程稱爲normal equations.翻譯

  Optimization objective:

  指的是須要優化的目標函數,好比說logistic中loss function表達式的公式推導。或者多元線性迴歸中帶有規則性的目標函數。

  Gradient Descent、Newton’s Method:

  都是求目標函數最小值的方法。

  Common variations:

  指的是規則項表達形式的多樣性。

4.

前向傳輸 (Feed-Forward前向反饋)

BP網絡訓練開始以前,對網絡的權重和偏置值進行初始化,權重取[-1,1]之間的一個隨機數,偏置取[0,1]間的一個隨機數。神經網絡的訓練包含屢次的迭代過程,每一次迭代(訓練)過程都使用訓練集的全部樣本

每一輪訓練完成後判斷訓練樣本的分類正確率和最大訓練次數是否知足設定條件,若是知足則中止訓練,不知足則從前向傳輸進入到逆向傳輸階段

3.

上圖中隱藏層只畫了一層,但其層數並無限制,傳統的神經網絡學習經驗認爲一層就足夠好,而最近的深度學習觀點認爲在必定範圍內,層數越多,模型的描述和還原能力越強。

偏置結點是爲了描述訓練數據中沒有的特徵,偏置結點對於下一層的每個結點的權重的不一樣而生產不一樣的偏置,因而能夠認爲偏置是每個結點(除輸入層外)的屬性。

訓練一個BP神經網絡,實際上就是在外界輸入樣本的刺激下不斷調整網絡的權重和偏置這兩個參數,以使網絡的輸出不斷接近指望的輸出,BP神經網絡的訓練過程分兩部分:

  • 前向傳輸,逐層波浪式的傳遞輸出值;
  • 逆向反饋,反向逐層調整權重和偏置;
 
BP神經網絡層與層之間的關係是經過激活函數來描述的,激活函數至關於生物學中細胞體中的細胞核,是對輸入信號的處理單元。激活函數必須知足到處可導的條件,BP中經常使用的激活函數是Sigmoid。
 

2.

BP神經網絡訓練

      這部分應當說是整個BP神經網絡造成的引擎,驅動着樣本訓練過程的執行。由BP神經網絡的基本模型知道,反饋學習機制包括兩大部分,一是BP神經網絡產生預測的結果,二是經過預測的結果和樣本的準確結果進行比對,而後對神經元進行偏差量的修正。所以,咱們用兩個函數來表示這樣的兩個過程,訓練過程當中還對平均偏差 e 進行監控,若是達到了設定的精度便可完成訓練。因爲不必定可以到達預期設定的精度要求,咱們添加一個訓練次數的參數,若是次數達到也退出訓練

初始化BP神經網絡

      初始化主要是涉及兩個方面的功能,一方面是對讀取的訓練樣本數據進行歸一化處理,歸一化處理就是指的就是將數據轉換成0~1之間。在BP神經網絡理論裏面,並無對這個進行要求,不過實際實踐過程當中,歸一化處理是不可或缺的。由於理論模型沒考慮到,BP神經網絡收斂的速率問題,通常來講神經元的輸出對於0~1之間的數據很是敏感,歸一化可以顯著提升訓練效率。能夠用如下公式來對其進行歸一化,其中 加個常數A 是爲了防止出現 0 的狀況(0不能爲分母)。

       y=(x-MinValue+A)/(MaxValue-MinValue+A)

      另外一方面,就是對神經元的權重進行初始化了,數據歸一到了(0~1)之間,那麼權重初始化爲(-1~1)之間的數據,另外對修正量賦值爲0。實現參考代碼以下:

 

一些數據的定義

   首先,咱們介紹些下文中描述的程序裏面的一些重要數據的定義。

#define Data  820
#define In 2
#define Out 1
#define Neuron 45
#define TrainC 5500

      Data 用來表示已經知道的數據樣本的數量,也就是訓練樣本的數量。In 表示對於每一個樣本有多少個輸入變量; Out 表示對於每一個樣本有多少個輸出變量。Neuron 表示神經元的數量,TrainC 來表示訓練的次數。再來咱們看對神經網絡描述的數據定義,來看下面這張圖裏面的數據類型都是 double 型。

參考:

http://www.cnblogs.com/jzhlin/archive/2012/07/30/bp_c.html

1.轉文:

轉載自:

一文弄懂神經網絡中的反向傳播法——BackPropagation

最近在看深度學習的東西,一開始看的吳恩達的UFLDL教程,有中文版就直接看了,後來發現有些地方老是不是很明確,又去看英文版,而後又找了些資料看,才發現,中文版的譯者在翻譯的時候會對省略的公式推導過程進行補充,可是補充的又是錯的,難怪以爲有問題。反向傳播法實際上是神經網絡的基礎了,可是不少人在學的時候老是會遇到一些問題,或者看到大篇的公式以爲好像很難就退縮了,其實不難,就是一個鏈式求導法則反覆用。若是不想看公式,能夠直接把數值帶進去,實際的計算一下,體會一下這個過程以後再來推導公式,這樣就會以爲很容易了。

  說到神經網絡,你們看到這個圖應該不陌生:

 

  這是典型的三層神經網絡的基本構成,Layer L1是輸入層,Layer L2是隱含層,Layer L3是隱含層,咱們如今手裏有一堆數據{x1,x2,x3,...,xn},輸出也是一堆數據{y1,y2,y3,...,yn},如今要他們在隱含層作某種變換,讓你把數據灌進去後獲得你指望的輸出。若是你但願你的輸出和原始輸入同樣,那麼就是最多見的自編碼模型(Auto-Encoder)。可能有人會問,爲何要輸入輸出都同樣呢?有什麼用啊?其實應用挺廣的,在圖像識別,文本分類等等都會用到,我會專門再寫一篇Auto-Encoder的文章來講明,包括一些變種之類的。若是你的輸出和原始輸入不同,那麼就是很常見的人工神經網絡了,至關於讓原始數據經過一個映射來獲得咱們想要的輸出數據,也就是咱們今天要講的話題。

  本文直接舉一個例子,帶入數值演示反向傳播法的過程,公式的推導等到下次寫Auto-Encoder的時候再寫,其實也很簡單,感興趣的同窗能夠本身推導下試試:)(注:本文假設你已經懂得基本的神經網絡構成,若是徹底不懂,能夠參考Poll寫的筆記:[Mechine Learning & Algorithm] 神經網絡基礎

  假設,你有這樣一個網絡層:

  第一層是輸入層,包含兩個神經元i1,i2,和截距項b1;第二層是隱含層,包含兩個神經元h1,h2和截距項b2,第三層是輸出o1,o2,每條線上標的wi是層與層之間鏈接的權重,激活函數咱們默認爲sigmoid函數。

  如今對他們賦上初值,以下圖:

  其中,輸入數據  i1=0.05,i2=0.10;

     輸出數據 o1=0.01,o2=0.99;

     初始權重  w1=0.15,w2=0.20,w3=0.25,w4=0.30;

           w5=0.40,w6=0.45,w7=0.50,w8=0.55

 

  目標:給出輸入數據i1,i2(0.05和0.10),使輸出儘量與原始輸出o1,o2(0.01和0.99)接近。

 

  Step 1 前向傳播

  1.輸入層---->隱含層:

  計算神經元h1的輸入加權和:

神經元h1的輸出o1:(此處用到激活函數爲sigmoid函數):

 

 

  同理,可計算出神經元h2的輸出o2:

  

 

  2.隱含層---->輸出層:

  計算輸出層神經元o1和o2的值:

  

 

這樣前向傳播的過程就結束了,咱們獲得輸出值爲[0.75136079 , 0.772928465],與實際值[0.01 , 0.99]相差還很遠,如今咱們對偏差進行反向傳播,更新權值,從新計算輸出。

 

Step 2 反向傳播

1.計算總偏差

總偏差:(square error)

可是有兩個輸出,因此分別計算o1和o2的偏差,總偏差爲二者之和:

 

2.隱含層---->輸出層的權值更新:

以權重參數w5爲例,若是咱們想知道w5對總體偏差產生了多少影響,能夠用總體偏差對w5求偏導求出:(鏈式法則)

下面的圖能夠更直觀的看清楚偏差是怎樣反向傳播的:

如今咱們來分別計算每一個式子的值:

計算

計算

(這一步實際上就是對sigmoid函數求導,比較簡單,能夠本身推導一下)

 

計算

最後三者相乘:

這樣咱們就計算出總體偏差E(total)對w5的偏導值。

回過頭來再看看上面的公式,咱們發現:

爲了表達方便,用來表示輸出層的偏差:

所以,總體偏差E(total)對w5的偏導公式能夠寫成:

若是輸出層偏差計爲負的話,也能夠寫成:

最後咱們來更新w5的值:

(其中,是學習速率,這裏咱們取0.5)

同理,可更新w6,w7,w8:

 

3.隱含層---->隱含層的權值更新:

 方法其實與上面說的差很少,可是有個地方須要變一下,在上文計算總偏差對w5的偏導時,是從out(o1)---->net(o1)---->w5,可是在隱含層之間的權值更新時,是out(h1)---->net(h1)---->w1,而out(h1)會接受E(o1)和E(o2)兩個地方傳來的偏差,因此這個地方兩個都要計算。

 

 

計算

先計算

同理,計算出:

          

二者相加獲得總值:

再計算

再計算

最後,三者相乘:

 爲了簡化公式,用sigma(h1)表示隱含層單元h1的偏差:

最後,更新w1的權值:

同理,額可更新w2,w3,w4的權值:

 

  這樣偏差反向傳播法就完成了,最後咱們再把更新的權值從新計算,不停地迭代,在這個例子中第一次迭代以後,總偏差E(total)由0.298371109降低至0.291027924。迭代10000次後,總偏差爲0.000035085,輸出爲[0.015912196,0.984065734](原輸入爲[0.01,0.99]),證實效果仍是不錯的。

相關文章
相關標籤/搜索