原文地址:零基礎入門深度學習(3) - 神經(jīng)網(wǎng)絡和反向傳播算法
這篇是前三篇和后三篇過渡的分水嶺卤橄,我也不保證敢說自己也看明白了。一遍看一遍寫自己的理解有助于思考。
前面已經(jīng)學習過了感知器和線性單元早直,區(qū)別主要是激活函數(shù)不同裙盾。神經(jīng)網(wǎng)絡就是這種小單元按照一定的規(guī)則連接起來形成的網(wǎng)絡。
神經(jīng)元
本質上和感知器是一樣的,但是感知器的激活函數(shù)是分段函數(shù)拱镐,神經(jīng)元的激活函數(shù)的sigmoid函數(shù)或者tanh函數(shù)量没,如圖:
計算這個神經(jīng)元的輸出和感知器計算一樣玉转,權值,輸入相乘相加殴蹄,作為sigmoid的參數(shù)計算輸出究抓。
sigmoid函數(shù)值域(0,1),是一個非線性的函數(shù)
神經(jīng)網(wǎng)絡是啥
如圖由多個神經(jīng)元全連接形成神經(jīng)網(wǎng)絡袭灯,全連接說的是下一層和的單個節(jié)點和上一層的所有節(jié)點都有連接刺下。
最左側是輸入層,中間是隱藏層稽荧,可以是很多層橘茉,最右邊是輸出層。神經(jīng)網(wǎng)絡的寬度就是輸入輸出層向量的長度,深度就是有多少層捺癞。節(jié)點之間的連線都有一個權值夷蚊。
計算神經(jīng)網(wǎng)絡的輸出
實際上是輸入向量到輸出向量的一個函數(shù),
給各個節(jié)點以及邊標上符號髓介,方便說明計算過程惕鼓,
輸入向量的維度必須和輸入層的節(jié)點數(shù)相同,計算a4的值:
式子中的是偏置項唐础,式子中需要使用sigmoid函數(shù)神經(jīng)元的激活函數(shù)箱歧。從上面可以看出神經(jīng)網(wǎng)絡的輸出向量長度和輸出層節(jié)點數(shù)相同。其他節(jié)點的計算也是參照上面這樣計算一膨。
神經(jīng)網(wǎng)絡的矩陣表示
就說這個網(wǎng)絡吧呀邢。
這個我覺得使用右乘的方式比較好理解,但是每一次的計算結果都需要做一次轉置才好理解豹绪。還是參照原文的采用左乘理解价淌。
相同的道理,在計算的時候瞒津,在左邊乘節(jié)點8,9的權值矩陣蝉衣,也是按照行排列。
嗯巷蚪,就是這個樣子病毡,每次計算完一層的輸出就需要擴展一個 1 。
神經(jīng)網(wǎng)絡的訓練
神經(jīng)網(wǎng)絡中能夠通過訓練得來的只有權重屁柏,至于網(wǎng)絡的深度啦膜,連接方式,每層的節(jié)點數(shù)等淌喻,只能是通過人為設定僧家,我們稱之為超參數(shù)。
神經(jīng)網(wǎng)絡的訓練算法反向傳播算法(back propagation)
假設每個訓練樣本為其中為樣本的特征似嗤,為樣本的目標值啸臀。
根據(jù)上一節(jié)的算法届宠,用樣本特征計算每個隱藏層節(jié)點的輸出烁落,以及每個節(jié)點的輸出
下面使用表示每個節(jié)點的誤差。
- 輸出層節(jié)點的誤差:
對于節(jié)點 i 是使用樣本種的特征進行計算輸出的結果豌注。當樣本為(輸出為的時候的誤差為: - 隱藏層節(jié)點的誤差
為節(jié)點的輸出值伤塌,為下一層節(jié)點的權值和誤差。例如幾點4的誤差:
- 更新每個鏈接的權值
例如這條連接權重的更新
反向傳播算法的內(nèi)容差不多就是這個樣子的了,至于推導去看原文吧!這里就不用看了药薯,我們理解了神經(jīng)網(wǎng)絡更重要绑洛。上面這三個就死記硬背吧!
梯度檢查
用于判斷神經(jīng)網(wǎng)絡是否正確童本。機器學習的套路真屯,首先確定神經(jīng)網(wǎng)絡的目標函數(shù),然后用梯度下降優(yōu)化算法求目標函數(shù)最小的時候的參數(shù)值穷娱。求解出來的就是參數(shù)的調整規(guī)則了绑蔫。
目標函數(shù),好像目標函數(shù)都是整個網(wǎng)絡中節(jié)點的誤差泵额,如本文的這個神經(jīng)網(wǎng)絡
梯度檢查就是用下面的式子計算梯度和程序計算出整個網(wǎng)絡誤差對權值的偏導數(shù)配深,然后計算梯度,將此梯度和程序計算出的梯度進行比較嫁盲,兩者相差非常小則說明程序是正確的:
自我感覺梯度就是偏導再乘一個w的極小變化量篓叶。