【Python基礎教程7】神經網絡

一、神經元模型

上圖是一個簡單的單神經元模型,它接收來自其它神經元傳遞而來的信號x[0]~x[3],這些信號附帶着權重w[0] ~ w[3]進行傳遞,神經元接收到的輸入值與神經元的閾值\theta進行比較,最後經過激活函數產生輸出。

上圖對應的公式即: y = f(\sum_{i=0}^{n}w_{i}x_{i}-\theta _{j})   其中,f()即爲激活函數。

常用的激活函數有如下幾種:

1、Sigmoid函數

Sigmoid函數常被用作神經網絡的閾值函數,將變量映射到0,1之間,公式:

2、Tanh函數

Tanh是雙曲函數中的一個,Tanh()爲雙曲正切。在數學中,雙曲正切“Tanh”是由基本雙曲函數雙曲正弦和雙曲餘弦推導而來。公式:

 Tanh函數圖像Tanh函數圖像

3、ReLU函數

Relu激活函數(The Rectified Linear Unit),用於隱層神經元輸出。公式如下

 ReLU函數圖像

4、階躍函數

這是西瓜書中介紹的一個函數,將輸入值映射爲輸出值0 或者 1

 二、感知機與多層網絡

感知機由兩層神經元組成,如下圖

感知機是二分類的線性模型,其輸入是實例的特徵向量,輸出的是事例的類別

若兩分類是可分的,即存在一個線性超平面能將它們分開,則感知機一定可以求得相應的權重向量w = (w_{0}, w_{1}, ...w_{n});否則,感知機學習會發生振盪,無法求得合適解。

西瓜書對權重和閾值是給定了合適的初始值,但權重和閾值可以通過學習得到。權重和閾值先給定一隨機值,在得到結果後進行更新:如

w_{i}\leftarrow w_{i} + \Delta w_{i}

\Delta w_{i} = \eta (y - \hat{y})x_{i}  其中 \eta\in (0,1)爲學習率

西瓜書中階躍函數讓感知機實現邏輯與、或、非運算。但對於異或問題,感知機是無法解決的,必須引入多層神經元,同樣的有輸入層和輸出層,位於兩層之間的叫做隱層。多層神經網絡結構模型如下:

三、誤差逆傳播算法

誤差逆傳播算法(error BackPropagation,簡稱BP),也成反向傳播算法,是很強大的神經網絡學習算法。以西瓜書給出的單隱層神經網絡模型爲例,給出權重、閾值的更新公式

變量符號意義參考西瓜書

以隱層到輸出層的權重爲例,權重的更新規則:\Delta w_{hj} = \eta g_{j}b_{h} ,其中 g_{j} = \hat{y}_{j}^{k}(1-\hat{y}_{j}^{k})(y_{j}^{k}-\hat{y}_{j}^{k})

其它參數更新規則參考西瓜書。

誤差逆傳播算法:

輸出:訓練集D = \left \{ (x_{k},y_{k}) \right \}_{k=1}^{m},學習率\eta

過程:

在(0,1)範圍內初始化所有權值和閾值

do:計算當前樣本的輸出,計算輸出層的梯度項,計算隱層的梯度項,更新權重和閾值 until 達到停止條件

輸出:多層前饋神經網絡

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章