各位同學大家好
在這一節裡面我們要學習到如何利用類神經網路
來解決XOR閘的問題
我們都知道單層的類神經網路它的功能是有限的
因為它只能解決線性可分割的問題
而對於非線性分割的問題是沒有辦法
用單層類神經網路來解決
因此在這一小節裡面我們會學習到
利用多層類神經網路來解決XOR閘的問題
接著就讓我們來學習如何利用多層類神經網路
來解決XOR閘的問題
XOR閘的操作原理如下圖所示
當輸入為00的時候 則輸出為0
當輸入為01的時候 輸出為1
當輸入為10的時候 輸出也為1
當輸入為11的時候 輸出則為0
XOR閘不是一個線性可分割的問題
因此它不能被感知機或者是適應性線性元件所模擬
而經由倒傳遞演算法去訓練神經網路的權重與偏壓
則多層的類神經網路可以解決XOR閘分類的問題
接著介紹撰寫電腦程式
利用倒傳遞演算法訓練多層類神經網路
來進行XOR閘的分類問題
這邊會用到三個電腦程式
首先介紹S型的轉移函數
f of x會等於1加上e負x分之1
函數的輸出值會介於0與1之間
而它的導函數f' of x會等於
1減掉f of x乘上f of x
接著介紹S行函數的副程式
副程式的名稱為sigmoid
m代表輸入x矩陣的列數
n則代表輸入x矩陣的行數
A則為輸入矩陣S型函數的輸出
也就是A會等於1加上e負x分之1
接著介紹S型函數的導函數的副程式
副程式的名稱為sigmoid_derivative
當輸入為x矩陣的時候
則輸出為B會等於1減掉f of x乘上f of x
接著介紹XOR閘的主程式
輸入的型態為2乘1的向量
總共有4組的輸入
分別是00 01 10以及11
而網路的輸出為1乘1的純量
總共有4組的輸出
分別是0 1 1 以及0
接著是類神經網路參數的設定
首先設定訓練的次數
接著設定學習的速率
而輸入的資料個數為2
在隱藏層的神經元設定為5
在輸出層的神經元數目為1
初始化在隱藏層的權重矩陣為5乘2的矩陣
以隨機亂數的方式給予
初始化在隱藏層的偏壓向量為5乘1的向量
也是以隨機亂數的方式給予
接著初始化在輸出層的權重向量為1乘5的向量
也是以隨機亂數的方式給予
初始化在輸出層的偏壓為1乘1的純量
對於每一次的訓練進行前饋的傳遞
對於每一筆輸入資料
神經元的輸入在第一層n1會等於第一層的權重W1
乘上輸入向量a0加上第一層的偏壓
而第一層的輸出會等於第一層的轉移函數
代入第一層的輸入n1
第二層的網路輸入n2會等於第二層的權重W2
乘上第一層的輸出a1加上第二層的偏壓b2
而網路的輸出也就是第二層的輸出a2會等於
第二層的轉移函數f2代入第二層的輸入n2
接著進入倒傳遞階段 計算靈敏度函數
首先計算誤差
誤差會等於目標值減掉網路的輸出值
接著計算輸出層的靈敏度函數
也就是第二層的靈敏度函數s2會等於負2乘上
第二層的轉移函數的導函數代入第二層的輸入
再乘上誤差也就是t減a
計算隱藏層的靈敏度函數也就是
第一層的靈敏度函數會等於第一層轉移函數的導函數
代入第一層的輸入n1再乘上第二層的權重向量的轉置
乘上第二層的靈敏度函數
接著更新權重以及偏壓
首先更新輸出層的權重以及偏壓
輸出層的權重會等於原有的權重減掉學習速率lr
乘上第二層的靈敏度函數
再乘上隱藏層的輸出的轉置
而輸出層的偏壓會等於原有的偏壓減掉學習速率lr
乘上第二層的靈敏度函數
接著更新隱藏層的權重以及偏壓
新的隱藏層的權重會等於原有的權重減掉學習速率lr
乘上第一層的靈敏度函數再乘上輸入的轉置
而隱藏層的偏壓會等於原有的偏壓減掉學習速率lr
乘上第一層的靈敏度函數
將訓練好的權重與偏壓代入網路中進行模擬
對於每一筆的輸入資料以前饋的方式向前傳遞
也就是先計算第一層的神經元輸入
再計算第一層的神經元輸出
接著計算第二層的神經元輸入
最後即可獲得神經網路的輸出
展示訓練好的網路輸出
接著測試另外四組的輸入訊號分別是10 00 01以及11
將訓練好的權重與偏壓 代入類神經網路中 進行模擬
對於每一筆的測試輸入資料
同樣的以前饋的方式向前傳遞
即可獲得類神經網路的輸出
唯一不同的是在輸出層將s型的轉移函數
換成硬限制的轉移函數
以確保輸出的值不是0就是1
展示測試輸入資料的類神經網路輸出
展示隱藏層訓練好的權重以及偏壓
展示輸出層訓練好的權重與偏壓
電腦模擬結果顯示當輸入的型態為00 01 10與11
則訓練好的類神經網路輸出非常接近XOR閘的操作
若測試輸入資料為10 00 01以及11
而且輸出層的轉移函數改為硬限制
則訓練好的類神經網路輸出為10 10
這個結果與XOR閘的操作完全一致
在隱藏層訓練好的權重為5乘2的矩陣
在隱藏層訓練好的偏壓為5乘1的向量
在輸出層訓練好的權重為1乘5的向量
在輸出層訓練好的偏壓為1乘1的純量
以上就是XOR閘的內容
接著我們來進行這一小節的總結
首先我們介紹了單層類神經網路它的限制
也就是單層類神經網路由於只有輸入層以及輸出層
因此它只能進行線性可分割問題的分類
它沒有辦法針對非線性分類的問題來做處理
而接著我們介紹了如何利用單層的類神經網路
無法處理的問題
我們用多層類神經網路來解決XOR閘的問題
我們也了解了為什麼我們可以用
多層類神經網路來處理XOR閘
因此我們介紹了XOR閘分類器它的操作原理
最後我們介紹了如何撰寫電腦程式
來實現一個具有倒傳遞演算法的多層類神經網路
以上就是這一小節的總結
