單層感知機模型
對于單層的感知機,它的激活函數是一個sigmoid
對于符號的定義做一個規范化,輸入層每一層進行一個編號
輸入是第0層,上標0表示屬于輸入層,下標0到n表示一共有n個節點(這里嚴格來說應該是0~n-1,為了書寫方便,不區分),下標為i的意思就是第i個元素
中間層,包含權值、累加、激活函數的輸出,權值上標還是表示第1層,有2個下標,第一個下標表示連接上一層 x i x_{i} xi?的節點,第二個下標表示連接的是這一層的節點,由于此時這一層只有一個節點,所以總是為0
x 0 1 x_{0}^{1} x01?,上標表示屬于第一層,下標表示第一層上面的第幾個元素,這里討論的是單層感知機,所以第一層只有一個節點
x 1 0 x_{1}^{0} x10?經過激活函數以后會得到一個輸出值,把這個激活函數的輸出值叫做 o 0 1 o_{0}^{1} o01?
最后 o 0 1 o_{0}^{1} o01?與目標值做均方差,即loss
推導一下單層感知機的推導公式
此處的σ(x)特指sigmoid函數,對x求導之后為σ(1-σ)
求導之前需要先向右計算一次所有的變量值,這就是前向傳播
可以看出對哪一號節點求導, x j 0 x_{j}^{0} xj0?就代表了哪一號節點的數值
對于單層的感知機可以很好的總結一下loss對某一號權值求導,最終僅僅跟這個神經元的輸出節點 O 0 1 O_{0}^{1} O01?以及跟他對應輸入節點的數值有關系,可以通過這個公式非常簡單的直接更新,也就是可以通過公式推導的過程計算出來每一條連接上面的梯度的大小然后直接更新
用pytorch計算,這里輸入x的特征有10個
對loss做backward可以得到loss對w中的所有參數分別求偏導
多層感知機模型MLP以及梯度
輸出節點變多了,均方差不是跟一個節點作比較,而是所有的輸出跟所有的label做比較
一共有N×M個連接數量,因此有N×M個偏微分的計算
對i號節點的輸出對t第i號節點的label做均方差, w j k w_{jk} wjk?對 O k 1 O_{k}^{1} Ok1?的影響只有當O的i等于k的時候 w j k w_{jk} wjk?才會有連接,O的i為其他值的時候 w j k w_{jk} wjk?是沒有連接的,也就是偏導數為0
第四步的時候 x k 1 x^{1}_{k} xk1?可以寫成n個w和x相乘