天天看點

多層感覺機:Multi-Layer Perceptron多層感覺機:MLP

多層感覺機:MLP

多層感覺機由感覺機推廣而來,最主要的特點是有多個神經元層,是以也叫深度神經網絡(DNN: Deep Neural Networks)。

感覺機:PLA

多層感覺機是由感覺機推廣而來,感覺機學習算法(PLA: Perceptron Learning Algorithm)用神經元的結構進行描述的話就是一個單獨的。

感覺機的神經網絡表示如下:

多層感覺機:Multi-Layer Perceptron多層感覺機:MLP

u=∑i=1nwixi+by=sign(u)={+1,u>0−1,u≤0

從上述内容更可以看出,PLA是一個線性的二分類器,但不能對非線性的資料并不能進行有效的分類。是以便有了對網絡層次的加深,理論上,多層網絡可以模拟任何複雜的函數。

多層感覺機:MLP

多層感覺機的一個重要特點就是多層,我們将第一層稱之為輸入層,最後一層稱之有輸出層,中間的層稱之為隐層。MLP并沒有規定隐層的數量,是以可以根據各自的需求選擇合适的隐層層數。且對于輸出層神經元的個數也沒有限制。

MLP神經網絡結構模型如下,本文中隻涉及了一個隐層,輸入隻有三個變量 [x1,x2,x3] 和一個偏置量 b ,輸出層有三個神經元。相比于感覺機算法中的神經元模型對其進行了內建。

多層感覺機:Multi-Layer Perceptron多層感覺機:MLP

前向傳播

前向傳播指的是資訊從第一層逐漸地向高層進行傳遞的過程。以下圖為例來進行前向傳播的過程的分析。

假設第一層為輸入層,輸入的資訊為[x1,x2,x3]。對于層 l ,用Ll表示該層的所有神經元,其輸出為 yl ,其中第 j 個節點的輸出為y(j)l,該節點的輸入為 u(j)l ,連接配接第 l 層與第(l−1)層的權重矩陣為 Wl ,上一層(第 l−1 層)的第 i 個節點到第l層第 j 個節點的權重為w(ji)l。

多層感覺機:Multi-Layer Perceptron多層感覺機:MLP

結合之前定義的字母标記,對于第二層的三個神經元的輸出則有:

y(1)2=f(u(1)2)=f(∑i=1nw1i2xi+b(1)2)=f(w(11)2x1+w(12)2x2+w(13)2x3+b(1)2)y(2)2=f(u(2)2)=f(∑i=1nw2i2xi+b(2)2)=f(w(21)2x1+w(22)2x2+w(23)2x3+b(2)2)y(3)2=f(u(3)2)=f(∑i=1nw3i2xi+b(3)2)=f(w(31)2x1+w(32)2x2+w(33)2x3+b(3)2)

将上述的式子轉換為矩陣表達式:

y2=⎡⎣⎢⎢⎢y(1)2y(2)2y(3)2⎤⎦⎥⎥⎥=f⎛⎝⎜⎜⎜⎡⎣⎢⎢w112w212w312w122w222w322w132w232w332⎤⎦⎥⎥⎡⎣⎢x1x2x3⎤⎦⎥+⎡⎣⎢⎢⎢b(1)2b(2)2b(3)2⎤⎦⎥⎥⎥⎞⎠⎟⎟⎟=f(W2X+b2)

将第二層的前向傳播計算過程推廣到網絡中的任意一層,則:

⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪y(j)l=f(u(j)l)u(j)l=∑i∈Ll−1w(ji)ly(i)l−1+b(j)lyl=f(ul)=f(Wlyl−1+bl)

其中 f(⋅) 為激活函數, b(j)l 為第 l 層第j個節點的偏置。

反向傳播

基本的模型搭建完成後的,訓練的時候所做的就是完成模型參數的更新。由于存在多層的網絡結構,是以無法直接對中間的隐層利用損失來進行參數更新,但可以利用損失從頂層到底層的反向傳播來進行參數的估計。(約定:小寫字母—标量,加粗小寫字母—向量,大寫字母—矩陣)

假設多層感覺機用于分類,在輸出層有多個神經元,每個神經元對應一個标簽。輸入樣本為 x=[x1,x2,⋯,xn] ,其标簽為 t ;

對于層 l ,用Ll表示該層的所有神經元,其輸出為 yl ,其中第 j 個節點的輸出為y(j)l,該節點的輸入為 u(j)l ,連接配接第 l 層與第(l−1)層的權重矩陣為 Wl ,上一層(第 l−1 層)的第 i 個節點到第l層第 j 個節點的權重為w(ji)l。

對于網絡的最後一層第 k 層——輸出層,現在定義損失函數:

E=12∑j∈Lk(t(j)−y(j)k)2

為了極小化損失函數,通過梯度下降來進行推導:

⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪∂E∂w(ji)l∂E∂b(j)l=∂E∂y(j)l∂y(j)l∂w(ji)l=∂E∂y(j)l∂y(j)l∂u(j)l∂u(j)l∂w(ji)l=∂E∂y(j)l∂y(j)l∂b(j)l=∂E∂y(j)l∂y(j)l∂u(j)l∂u(j)l∂b(j)l

在上式子中,根據之前的定義,很容易得到:

⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪∂y(j)l∂u(j)l∂u(j)l∂w(ji)l∂u(j)l∂b(j)l=f′(u(j)l)=y(i)l−1=1

那麼則有:

⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪∂E∂w(ji)l∂E∂b(j)l=∂E∂y(j)l∂y(j)l∂u(j)l∂u(j)l∂w(ji)l=∂E∂y(j)lf′(u(j)l)y(i)l−1=∂E∂y(j)l∂y(j)l∂u(j)l∂u(j)l∂b(j)l=∂E∂y(j)lf′(u(j)l)

另有,下一層所有結點的輸入都與前一層的每個結點輸出有關,是以損失函數可以認為是下一層的每個神經元結點輸入的函數。那麼:

∂E∂y(j)l=∂E(u(1)l+1,u(2)l+1,...,u(k)l+1,...,u(K)l+1)∂y(j)l=∑k∈Ll+1∂E∂u(k)l+1∂u(k)l+1∂y(j)l=∑k∈Ll+1∂E∂y(k)l+1∂y(k)l+1∂u(k)l+1∂u(k)l+1∂y(j)l=∑k∈Ll+1∂E∂y(k)l+1∂y(k)l+1∂u(k)l+1w(kj)l+1

此處定義節點的靈敏度為誤差對輸入的變化率,即:

δ=∂E∂u

那麼第 l 層第j個節點的靈敏度為:

δ(j)l=∂E∂u(j)l=∂E∂y(j)l∂y(j)l∂u(j)l=∂E∂y(j)lf′(u(j)l)

結合靈敏度的定義,則有:

∂E∂y(j)l=∑k∈Ll+1∂E∂y(k)l+1∂y(k)l+1∂u(k)l+1w(kj)l+1=∑k∈Ll+1δkl+1w(kj)l+1

上式兩邊同時乘上 f′(u(j)l) ,則有

δ(j)l=∂E∂y(j)lf′(u(j)l)=f′(u(j)l)∑k∈Ll+1δkl+1w(kj)l+1

注意到上式中表達的是前後兩層的靈敏度關系,而對于最後一層,也就是輸出層來說,并不存在後續的一層,是以并不滿足上式。但輸出層的輸出是直接和誤差聯系的,是以可以用損失函數的定義來直接求取偏導數。那麼:

δ(j)l=∂E∂y(j)lf′(u(j)l)=⎧⎩⎨⎪⎪f′(u(j)l)∑k∈Ll+1δkl+1w(kj)l+1l層為隐層f′(u(j)l)(y(j)l−t(j))l層為輸出層

至此,損失函數對各參數的梯度為:

⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪∂E∂w(ji)l∂E∂b(j)l=∂E∂u(j)l∂u(j)l∂w(ji)l=δ(j)ly(i)l−1=∂E∂u(j)l∂u(j)l∂b(j)l=δ(j)l

上述的推到都是建立在單個節點的基礎上,對于各層所有節點,采用矩陣的方式表示,則上述公式可以寫成:

∂E∂Wl∂E∂blδl=δlyTl−1=δl={(WTl+1δl+1)∘f′(ul),l層為隐層(yl−t)∘f′(ul),l層為輸出層

其中運算符 ∘ 表示矩陣或者向量中的對應元素相乘。

常見的幾個激活函數的導數為:

f′(ul)f′(ul)f′(ul)=sigmoid′(ul)=sigmoid(ul)(1−sigmoid(ul))=yl(1−yl)=tanh′(ul)=1−tanh2(ul)=1−y2l=softmax′(ul)=softmax(ul)−softmax2(ul)=yl−y2l

根據上述公式,可以得到各層參數的更新公式為:

Wlbl:=Wl−η∂E∂Wl=Wl−ηδlyTl−1:=bl−η∂E∂b=bl−ηδl

References:

繼續閱讀