如何直觀地解釋 backpropagation 演算法?

時間 2021-05-07 00:07:28

1樓:anonymous

anonymous:這是迄今為止我所知道的最容易的「如何理解backpropagation」

給出了詳細的用於python程式實現的數學推導過程

2樓:莫言路遙余秋雨

先來解釋一下為什麼要學BP?

是為了求解梯度下降,最終求導計算cost function.

正常的求導是正向,正向有個缺點,有可能會重複計算。而BP則解決了重複計算問題,如下圖示:

反向求導過程,求導只計算一次。

3樓:Frank Cao

論過行罰(定規矩,成方圓),矯枉趨正;後反饋之前是正向傳播,計算了所有參與者的總「過」(即所有引數theta導致的誤差),後反饋將根據這個總「過」確認每個參與者各自的「過」(級聯求偏導),然後讓每個參與者減去各自的「過」(偏導數),實現矯枉趨正。

後反饋詳情,請參考:

Frank Cao:Neural Network Derivation(神經網路推導)

Frank Cao:機器學習思想

4樓:張覺非

張覺非:計算圖反向傳播的原理及實現

張覺非:運用計算圖搭建 LR、NN、Wide & Deep、FM、FFM 和 DeepFM

張覺非:深度神經網路的梯度消失(動畫)

5樓:「已登出」

是 Lens cat,其中 forward 是 get,backward 是 set,然後這個 lens enrich over 乙個 topo cat,這個 topo cat 是 parameter space。

大部分時候,我們可以擼乙個 graph cat 到這個 lens cat 的 functor,這個 graph cat 就是 computational graph

不過感覺好像也可以考慮 input × para × output -> cost 的 profunctor?

6樓:Robbie

有乙個點我用圖說明下,本層誤差等於下一層誤差乘以權重。看明白這個圖的計算就明白了。delta notation a bit off

7樓:張小磊

反向傳播演算法中其實也蘊含著精闢的人生智慧型,那就是花最少的力氣來出色的完成任務

神經網路(NN)的訓練過程可以看做是運輸兵在起始地和目的地之間搬運石頭的過程(當然起始地和目的地之間還會經過很多的中轉站),訓練終止的條件是運輸兵可以很舒服的在兩地之間進行自由傳輸(我們假設如果石頭和運輸兵的容器不是很吻合的話,那會耗費這傢伙很大的體力)。

其中運輸兵為NN的權重矩陣,石頭是要輸入NN的訓練集資料,起始地為NN的輸入層,目的地為NN的輸出層,中轉站當然就是NN的隱藏層啦,耗費的體力就是NN產生的誤差,訓練終止的條件是運輸兵可以消耗很小的力氣來完成傳輸任務。NN的訓練過程可以概括為:前向傳遞輸入訊號直至輸出產生誤差,反向傳播誤差資訊更新權重矩陣。

運輸兵怎樣才能經過數輪的搬運來使得自己的容器能夠適應所要搬運的石頭呢?

一開始她想了個辦法,經過逐層的運輸兵搬運之後,在目的地會產生出體力消耗(一開始的體力消耗肯定很大,因為對要搬運的石頭一無所知,完全是靠自己的感覺造的容器),然後用最終的體力消耗來指導每個中轉站的運輸兵來改造容器那豈不是聰明之舉。說做就做,然後就開始了漫長的改造容器之旅。之所以漫長,因為她採取了從頭開始的改造之路

先從起始地開始改造,於是她先讓各層的運輸兵姐妹們做好準備,因為石頭會隨時經過她們,到達目的地產生體力消耗後然後再通知她來改造;起始的運輸兵容器改造了一點之後,要開始改造第乙個中轉站運輸兵的容易了,於是她又通知她後邊的運輸兵姐妹們做好準備,然後再進行改造......最後終於到了最後中轉站的姐妹兒來改造容器了,聽說這個姐妹兒等的快睡著了。最終整個改造專案完成,運輸兵們從此過上了安逸的生活。

後來,有個更聰明的運輸兵發現,不對啊,咱這麼幹遲早是會累死的,你們沒發現咱幹了好多無用功嘛,每次改造容器的時候,從前往後改造,都得通知後邊的運輸兵姐妹,打擾人家休息(起始地運輸兵的改造之旅與第乙個中轉站運輸兵的改造之旅都得經過後邊很多姐妹的同樣的反饋資訊,為啥不從後邊先更新呢,這樣既能完成改造,又能節省體力)。於是她改變了改造策略,從目的地往起始地進行反向改造。首先,通過前向搬運產生體力消耗,然後先更新最後中轉站的運輸兵的容器,並儲存剩餘的體力消耗。

然後利用剩餘的體力消耗來更新倒數第二中轉站的運輸兵的容器,並儲存體力消耗,最終直到起始地運輸兵的容器改造完畢。這樣就保證了只打擾每個中轉站運輸兵一次就能出色完成改造的艱鉅任務。

後來的這個想法就是反向傳播演算法的思想。在此舉了乙個形象的栗子,不是很嚴謹,僅供參考。更多直觀解釋和公式推導,詳見拙作反向傳播之我見。

8樓:

BP=一次正向傳播(矩陣乘法)+一次反向傳播(矩陣乘法)+基於這個系統做矩陣形式的微分再求其最值(矩陣微分)。反覆迴圈這個過程就可以了。

等於其實本質上就是:兩次矩陣乘法,一次微分(梯度下降在這個過程裡頭)。

9樓:

從結果中學習,我理解成乙個什麼都不學只刷題的機器

根據這道題的正確和錯誤,反過來改善或者糾正前一層的函式weight和bias,這個過程就是反向傳播,不斷進行這個過程,直到模型訓練好。

至於如何改善和糾正,其他人都說的很清楚了。

10樓:Darcy

在簡單的函式中:比如f(x) = x,對該函式求導的話,很容易就可以算出f(x)' = 1

但是在神經網路中我們要算出每一層權重w的導數,以至於每次w的更新都能讓loss的值下降,最後求得loss的最小值。由於神經網路有很多層,每層都有權重w(n),那求w(n)的導數就沒有向上述的f(x)那麼簡單了,要依賴w(n+1)層的結果來計算的(也就是根據鏈式法則).

在實際實現神經網路的過程中反向傳播的實現也不複雜,在定義層的向前傳播的同時,保留一些必要的引數來實現層的反向傳播,後面再把這些層組合起來成神經網路就行了。

在cs231n的練習2中就是按照這個思路來的(據說是有借鑑了Caffe的設計思路)

在我做的這個作業中,在assignment2/cs231n/layers.py的檔案中每個forward函式都會對應乙個backward的函式,以至於在assignment2/cs231n/classifiers/fc_net.py檔案中實現的全連線網路都可以由layers下面的各種層的函式組合而成求得網路的loss和grad。

個人覺得這個作業設定的實在是太好了,本來我覺得要自己實現方向傳播是一件很難的事情,但是經過這樣的分解,覺得就很簡單了。如果你能自己實現一次反向傳播的話,這個理解起來應該也就不是什麼問題了。

建議初學ml的同學有機會一定要去刷下cs231n,對原理的理解很有幫助。

11樓:FelixHo

簡單通俗解釋一波:

已存在的東西:輸入值X , 初始權重W'(假設是你任意選的 ),期望的輸出值Y

追求的東西:找到上帝W, 使得 X 經過 W權重轉化後得到乙個和Y盡可能接近的輸出值。

1.首先通過正向傳播(神經網路從輸入層走到輸出層),基於輸入值X和初始權重W'得到乙個實際輸出值Y『

2.因為初始權重W'是任意的,所以這個實際輸出Y' 和 Y會有誤差E,所以你需要調整這些W'.

3.這時候反向傳播出場。通過反向傳播(從輸出層往輸入層走),計算每個權重對誤差E的影響。實際上就是求對應w'的偏導數。

例如:G=g(x) 對 x 求偏導數,表示了 x 對 G 的影響有多大,F=f(g(x))=f(G) 對 G 求偏導數表示 G 對 F的影響有多大,同理 F 對 x求偏導數,表示 x 對F的影響有多大. 由復合函式的鏈式法則可知,F 對 x求偏導數 = (F 導 G) * (G 導 x).

那麼,某個權重w'1對誤差E的影響有多大,相當於計算 (誤差E 對神經元的偏導) * (神經元對 w'1 的偏導),假設這個值是 d'1

4. 設定乙個學習率 L , 那麼新的權重 w'1 = w'1 - L*d'1, 其他權重更新同理。

5. 更新完所有權重後,替換初始權重,迭代上面的步驟,直到誤差E盡可能少或滿足一定的迭代次數後結束訓練.

總結:反向傳播從最終誤差出發,反推各個權重的誤差影響力,進而逐步修正權重,直到誤差盡可能低.

12樓:

個人理解:

小朋友第一次看到動物,看到是一頭大象,小朋友記住了,兩隻耳朵、四條腿、兩隻眼睛、長鼻子是大象。後來又看到了一條狗,也是兩隻耳朵、四條腿、兩隻眼睛,只不過沒有長鼻子,小朋友說這是大象,爸爸告訴他不對,這是狗。於是小朋友總結了,兩隻耳朵、四條腿、兩隻眼睛的不一定是大象,這些特徵就降低了權重,而長鼻子是關鍵特徵保留了權重。

小朋友見得動物越來越多,再也不靠耳朵、腿和眼睛來區分動物了,因為太多動物都有這個特徵。

這個特徵降低權重的過程就是反向傳播。

13樓:李蛟

首先,前面的幾個答案都可以幫助理解,再看 @憶臻 的例子和 @何欽堯 的理論後,就差不多了。

不過,我這裡想再提煉下,省去複雜的式子之類的,應該能夠更簡單地幫助理解:

先忘記back(反正我開始的時候錯誤理解了back,然後就弄糊塗了)

按forword方式,求解整個表示式。簡單的講,就是一堆函式的函式的函式的 ...,型如 C = f(h(g(...

l(x; ); )...); ) 的巢狀函式。這裡的C為最終的cost function, 每層函式會有 這個引數(第i層,表示乙個矩陣),最內層(第一層)還會有x(訓練資料)

然後求解 C 對每個 的偏微分。對於求偏微分,有 C/ = f * h * g * ... * l/ (因為形如 y = h(g(x)) 的函式,有y/x = h/g * g/x,即普通的鏈式求導。

上面f定義為 f/h)

然後再想想back是什麼意思。因為直接求第一層的C/ 時,可能涉及到後面層的 C/ 等未知引數;而先求C/ 時,卻不涉及到前面層的C/ 、C/ 等,所以,我們可以先直接求最後一層的 C/ ;然後再求倒數第二層的C/ ,...,最後求第一層的C/ 時,其他的C/ 之前都已經計算好了。

從而這個計算的過程就叫做back(先計算後面層的,然後往前一層一層計算)。

然後就可以進行迭代了。按照最普通的 的方式更新

當然,對於樓主說的『直觀』,還是看前面幾個有圖的。

如何直觀地解釋 緊緻性 ?

PerfectIsShit 說說高中生一些想法吧。eg 1,2 和 1,2 區間中對於 當 2。他們明明乙個能取到1,乙個取不到,那為啥極限又可以都是2呢?因為實數是連續的,在具體一點此處是為了理解並不嚴謹 我可以在數軸上無限逼近1,靠著1最近的那個點。在1的右面一點點,由於和1就差乙個點,點是沒有...

如何(直觀地)的理解同態和同構?

龍靜顏 同構,就是一樣 一樣 一樣。比如 左邊也是n維,右邊也是n維,如果是一一,豈不是同構?同態就允許有時不一樣。比如 m eeimg 1 至於保持運算,字面理解不就行了嗎? 夏瀟瀟 同構就是把英文翻譯為中文,每個英文詞對應乙個 且僅乙個 中文詞!並且中英文的句法規則相同,這是重要的,因為這意味著...

如何直觀地說明漢朝到底有多強大?

普通人 凡日月所照,江河所致,皆為漢土!這是漢朝說的。至今沒有第二個朝代敢說第二遍。國恒以弱滅,獨漢以強亡。這是漢朝滅亡後,後人對它的評價。至今也沒有第二個朝代得到過這個評價。 崇霽 1.好漢 男子漢 漢子 是從某些還存在的少數民族傳出來的誇人的詞,千年不易。2.無論朝代怎麼更替,中原大地上居住的人...