關於BP網路的一些總結

2022-03-13 13:23:22 字數 2447 閱讀 7647

背景

前段時間,用過一些模型如vgg,lexnet,用於做監督學習訓練,順帶深入的學習了一下相關模型的結構&原理,對於它的反向傳播演算法記憶比較深刻,

就自己的理解來描述一下bp網路.

關於bp網路的整體簡述

bp神經網路,全程為前饋神經網路,它被用到監督學習中的主體思想是(我們假定我們這裡各個層layer次間採用的是全鏈結): 通過各個layer層的激勵和權值以及偏置的處理向前傳遞,最終得到乙個預期的值,然後通過標籤值和預期的值得到乙個殘差值,殘差值的大小反映了預期值和殘差值的偏離程度,然後使用反向傳播演算法(見下文),然後對上一層的推倒公式進行梯度(就是對應每乙個變數x1,x2,x3,x4,x5,.....,xn求解偏導,見下文)求解,然後代入各個變數x,得到各個變數x 當前層layer對應的權值w'(這個w'其實就是當前w偏離真實的w的殘差值),然後依次的向上一層反向傳播,最終到達input層,這時候我們會就會得到各個層layer相對應的權值w的偏離值,然後我們可以設定乙個學習率(在caffe中是用l_r表示的),也就是步長,來設定我們引數更新的大小其實就是各個層layer當前的權值w加上對應的w的偏離值乘上這個步長即 w+=w『*l_r,這樣就達到了引數的更新,然後通過數次迭代調整好w,b引數,特別需要強調一下的是,b可以是固定的,也可以設定成跟w權值相關的,比如b=w/2 等等,視情況而定。

以上就是就是bp網路的大致的描述了,那麼我們開始到bp網路的每乙個細節,進行說明吧.~

關於梯度

對於梯度,我們這裡就從這幾個角度進行一下解釋,什麼是梯度,梯度在bp網路中的作用,或者說為什麼bp網路中要採用梯度. 

1.1什麼是梯度?

梯度,即求偏導,比如我們有這樣乙個函式,f = 2a +3b  ,如果我們求解a的梯度,fa = 2,如果我們求解b的梯度,f_b = 3

以上就是對梯度最簡單的描述,那個也是只有一層神經網路時的引數求解,但是在實際的網路模型中,我們基本上不會用那麼簡單的模型,我們一般用層數較多(大於2層的模型進行)的模型來解決我們所面臨的問題,對於多層神經網路

如圖,這是乙個三層的神經網路

對於第一層

f1 = x1*w1_11 + x2*w1_12 +b1_1

f2 = x1*w1_21 + x2*w1_22 +b1_2

f3 = x1*w1_31 + x2*w1_32 +b1_3

然後進入到第二層

f4 = f1*w2_11 + f2*w2_12 + f3*w2_13 + b2_1

f5 = f1*w2_21 + f2*w2_22 + f3*w2_23 + b2_2

然後第三層

f6 = f4*w3_11 + f5*w3_12 + b3_1

這個其實就和 f = (1-x^2)^3 改寫成 g =x^2 , t = 1-x , f = x^3 是乙個道理

第一層: g = x^2

第二層: t =1-g  

第三層:  f = t^3      

我們對於這種復合函式求解梯度的步驟,如下:

f' = 3t^2*t' 對t求偏導數 

t' = -g'       對g求偏導數

g' = 2x      對x求偏導數

這就是求解梯度的過程.

以上就是對於梯度的乙個描述

1.2 那麼梯度在bp網路中起到何種作用?

梯度在求解的過程中,其實就是對逐個變數進行求導,比如f =a(bx),我們將其改成復合函式f=2g ,g = bx ,對x進行求導,那麼我們會得到變數的係數. 而我們所做的這一切就是為了得到這個,得到每一層layer的各個變數對應的係數,這個係數非常重要,我們來舉個例子說明一下,比如這個函式,f = a(bx),假設我們剛開始的時候隨機的設定乙個值給a = 0.23 , b=1 ,x去一系列值[1,2,3],我們都事先知道f的值對應[0.5,1,1.5],假定我們無法直接計算得到a的值為0.5,我們來一步步的估算a的,步驟如下:

不妨假定函式的真實值用ft表示,預估值用fp表示,殘差用fre.

當  x = 1 , ft = 0.5

而我們用公式得到fp =0.23 ,fre =  ft - fp =0.26,然後得到: are = 0.26*a,注 are為a的偏差值

,得到bre = b*are=1*0.26*a 

然後我們再求解b的更新值 b_n = b + l_r*bre*b(g求關於x的梯度)*1 (l_r為我們設定的學習率)

再更新 a_n = a + l_r*are*ab(f求關於x梯度的值)*1

這樣 我們就對引數a,b進行了更新.

然後當x =2 ,ft=1 .....依次這樣迭代更新 a,b

我們就是通過這種方式來進行引數更新的....

2 關於梯度的反向傳播.

反向傳播就是將殘差反推到各個引數上,求解各個引數的誤差值,最後在每乙個變數的梯度的方向上對誤差進行修正,修正的幅度依據學習率而定.

1.   

網路開發的一些總結

1 i o 模型的選擇,epoll就一定好嗎?那是肯定的。這個和select,poll有什麼區別。epoll還有比select,poll先進得地方,就在於將fd得列表維護在核心中,而select,poll是呼叫一次,傳遞一次,這點epoll領先是沒得說得。最主要還是epoll系統呼叫的實現方式採用事...

關於stringstream的一些總結

c 標準庫中的提供了比ansi c的更高階的一些功能,即單純性 型別安全和可擴充套件性。可以使用這些庫來實現安全和自動的型別轉換。如果你已習慣了風格的轉換,也許你首先會問 為什麼要花額外的精力來學習基於的型別轉換呢?也許對下面乙個簡單的例子的回顧能夠說服你。假設你想用sprintf 函式將乙個變數從...

關於JSON的一些總結

一 關於json json是一種類似於xml的通用資料交換格式,具有比xml更高的傳輸效率.從結構上看,所有的資料 data 最終都可以分解成三種型別 第一種型別是標量 scalar 也就是乙個單獨的字串 string 或數字 numbers 比如 北京 這個單獨的詞。第二種型別是序列 sequen...