1. 程式人生 > >BP神經網路,誤差反向傳播

BP神經網路,誤差反向傳播

皮一下

“我是誰,我在哪,我要去那?”,自我嗶嗶下,專案已經開始大半年了,上級一味追求效果,怎麼辦呢,涼拌吧。雖然用過caffe,用過tensorflow,用過mtcnn、knn、dnn、svm、yolo、ssd、s3fd、faceboxes,但還是個AI小白,神經網路對於我來說就是個典型的黑盒子,想研究一下,不知從哪開始,聽說BP演算法具有劃時代的意義----機器學習跨入深度學習的關鍵。好奇的小猴子覺得在水簾洞閉關了解了解。

BP核心思想

訊號正向傳播,誤差反向傳播

神經元

  1. 生物學大腦結構 ,一個個神經元組成,神經元的作用高中就學過,大概就是輸入一個訊號,對這個訊號進行處理,然後輸出將會帶來全新的寫作體驗

  2. 神經元的結構以及幹嘛用的

    看圖說話;在這裡插入圖片描述 在這裡插入圖片描述 式子比較簡單,圖形結合一看秒懂,這樣一看神經元不就是數學裡的一條線麼,此時它其實就是個二分類器。所以線上性可分場景,它就是分類器。給個好玩的傳送門 在這裡插入圖片描述

啟用函式:

比較常見的啟用函式:sigmoid、Relu、Tanh、softmax 1.sigmoid在這裡插入圖片描述 用於神經元的輸出,範圍[0-1],輸出結果是屬於哪一類的可能性,比如屬於正類0.9,負類0.1 缺點

說是啟用函式計算量大,反向傳播求誤差梯度時,很容易出現梯度消失,導致無法完成深層網路的訓練(達到飽和)

問題來了,為什麼會出現梯度消失呢? 原因是反向傳播要對啟用函式求導,求導之後它的函式影象: 在這裡插入圖片描述 由圖可看出,很容易無限趨近於0,具有這種性質的啟用函式稱之為軟飽和啟用函式,

sigmoid的軟飽和性,使得深度神經網路在二三十年裡一直難以有效的訓練,是阻礙神經網路發展的重要原因。具體來說,由於在後向傳遞過程中,sigmoid向下傳導的梯度包含了一個 因子(sigmoid關於輸入的導數),因此一旦輸入落入飽和區,的導數就會變得接近於0,導致了向底層傳遞的梯度也變得非常小。此時,網路引數很難得到有效訓練。這種現象被稱為梯度消失。一般來說, sigmoid 網路在 5 層之內就會產生梯度消失現象

  1. 常用啟用函式比較(一定要點選傳送門) 3.神經網路中的啟用函式的作用和選擇 (一定要點選傳送門

神經網路的結構

1.經過上面的介紹,單個神經元不足以讓人心動,唯有組成網路。神經網路是一種分層結構,一般由輸入曾,隱藏層,輸出層組成。所以神經網路至少有3層,隱藏層多於1,總層數大於3的就是我們所說的深度學習了。

輸入層:就是接收原始資料,然後往隱層送 輸出層:神經網路的決策輸出 隱藏層:該層可以說是神經網路的關鍵,相當於對資料做一次特徵提取。隱藏層的意義,是把前一層的向量變成新的向量。就是座標變換,說人話就是把資料做平移,旋轉,伸縮,扭曲,讓資料變得線性可分。可能這個不那麼好理解,舉個栗子: 下面的圖左側是原始資料,中間很多綠點,外圍是很多紅點,如果你是神經網路,你會怎麼做呢?

一種做法:把左圖的平面看成一塊布,把它縫合成一個閉合的包包(相當於資料變換到了一個3維座標空間),然後把有綠色點的部分擼到頂部(伸縮和扭曲),然後外圍的紅色點自然在另一端了,要是姿勢還不夠帥,就挪挪位置(平移)。這時候乾脆利落的砍一刀,綠點紅點就徹底區分開了。

重要的東西再說一遍:神經網路換著座標空間玩資料,根據需要,可降維,可升維,可大,可小,可圓可扁,就是這麼“無敵”在這裡插入圖片描述

2.正反向傳播理解 在這裡插入圖片描述 不同的應用場景,神經網路的結構要有針對性的設計,這裡僅僅是為了推導演算法和計算方便才採用這個簡單的結構

我們以戰士打靶,目標是訓練戰士能命中靶心成為神槍手作為場景:

那麼我們手裡有這樣一些資料:一堆槍擺放的位置(x,y),以及射擊結果,命中靶心和不命中靶心。

我們的目標是:訓練出一個神經網路模型,輸入一個點的座標(射擊姿勢),它就告訴你這個點是什麼結果(是否命中)。

我們的方法是:訓練一個能根據誤差不斷自我調整的模型,訓練模型的步驟是:

正向傳播:把點的座標資料輸入神經網路,然後開始一層一層的傳播下去,直到輸出層輸出結果。 反向傳播(BP):就好比戰士去靶場打靶,槍的擺放位置(輸入),和靶心(期望的輸出)是已知。戰士(神經網路)一開始的時候是這樣做的,隨便開一槍(w,b引數初始化稱隨機值),觀察結果(這時候相當於進行了一次正向傳播)。然後發現,偏離靶心左邊,應該往右點兒打。所以戰士開始根據偏離靶心的距離(誤差,也稱損失)調整了射擊方向往右一點(這時,完成了一次反向傳播) 當完成了一次正反向傳播,也就完成了一次神經網路的訓練迭代,反覆調整射擊角度(反覆迭代),誤差越來越小,戰士打得越來越準,神槍手模型也就誕生了。