天天看點

05.TensorFlow多層感覺機

實驗原理:

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

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

05.TensorFlow多層感覺機
05.TensorFlow多層感覺機

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

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

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

05.TensorFlow多層感覺機

前向傳播

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

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

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

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

反向傳播

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

假設多層感覺機用于分類,在輸出層有多個神經元,每個神經元對應一個标簽。輸入樣本為x=[x1,x2,⋯,xn],其标簽為t;對于層l,用Ll表示該層的所有神經元,其輸出為yl,其中第j個節點的輸出為yl(j),該節點的輸入為ul(j),連接配接第l層與第(l−1)層的權重矩陣為Wl,上一層(第l−1層)的第i個節點到第l層第j個節點的權重為wl(ji)。

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

那麼則有:

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

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

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

05.TensorFlow多層感覺機

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

05.TensorFlow多層感覺機

實作代碼:

運作結果:

05.TensorFlow多層感覺機