機器學習 神經網路

2021-08-30 02:50:37 字數 3842 閱讀 7646

神經網路中最基本的成分是「神經元」模型,在生物神經網路中,每個神經元與其他神經元相連,當他「興奮」時,就會向相連的神經元傳送化學物質,從而改變這些神經元類的電位;如果某神經元的電位超過乙個「閾值」,那麼他就會被啟用。將上述描述當成乙個數學模型——m-p神經元模型,神經元接收來自n個神經元傳遞過來的輸入訊號,這些輸入訊號通過帶權重的連線進行傳輸,將神經元接收到的總輸入值與神經元的自身的閾值進行比較,然後通過「啟用函式」處理產生神經元的輸出。理想中的啟用函式是階躍函式,但是它不連續,通常我們用sigmoid函式作為啟用函式。

把許多神經元按一定的層次連線起來就得到了神經網路。乙個神經網路視為包含了許多引數的數學模型,這個模型是由若干函式相互代入得到的。

感知機由兩層神經網路組成,輸入層接收外界輸入訊號傳遞給輸出層,輸出層是m-p神經元,感知機能很容易的實現邏輯與、或、非運算,部落格的下文附有實現感知機邏輯與或非的**。

跟一般的,給定訓練資料集,權重$w_i(i=1,2,...n)$以及閾值$\theta$可以通過學習得到,對訓練樣例(x,y),若當前感知機的輸出為$\hat$,則感知機權重將這樣調整:

$$w_i\leftarrow w_i+\delta w_i,\\\delta w_i=\eta (y-\hat)x_i$$

式中$\eta$稱為學習率,若感知機**正確$\hat=y$,則權重不需要調整。

需要注意的是,感知機只有輸出層神經元進行啟用函式處理,即只有一層功能神經元,其學習能力非常有限,感知機的學習過程一定會收斂,而求得適當的權重,感知機不能解決異或這樣的非線性問題。要解決非線性問題,需要考慮考慮多層功能神經元,兩層感知機能夠解決異或問題,輸出層和輸入層之間的神經元被稱為隱層,隱層和輸出層都是擁有啟用函式的功能神經元。常見的神經網路如下圖所示的層級結構,每層的神經元與下一層的神經元會全連線,同層的神經元之間不存在連線,也不存在跨層連線。這樣的神經網路通常稱為「多層前饋神經網路」。其中輸入層神經元負責接收輸入訊號,隱層和輸出層神經元對訊號進行加工,最終結果由輸出層神經元輸出,神經網路學到的東西,蘊含在連線權與閾值中。

多層網路的學習能力比單層感知機強得多,我們要訓練多層網路就要用到誤差傳播演算法(error backpropagtion),bp演算法不僅可以用於多層前饋神經網路,還可用於其他型別的神經網路,如:遞迴神經網路...,但是我們通常說的「bp網路」一般是指bp演算法訓練多層前饋神經網路。

給定訓練集$d=$,即輸入例項由d個屬性描述,輸出$l$維例項向量。

上圖是乙個bp神經網路及演算法中的變數符號,一共擁有d個輸入神經元、$l$個輸出神經元、q個隱層神經元的多層前饋網路結構,

$\theta_j$表示輸出層第j個神經元的閾值

$\gamma_h$表示隱層第h個神經元的閾值

$v_$表示輸入層第i個神經元與隱層第h個神經元之間的連線權

$w_$表示隱層第h個神經元與輸出層第j個神經元之間的連線權

$a_h= \sum_ ^v_x_i$表示隱層第h個神經元接收到的輸入

$\beta_j=\sum_^w_b_h$表示輸出層第j個神經元收到的輸入

其中$b_h$為隱層第h個神經元的輸出,隱層和輸出層的功能神經元的啟用函式都使用sigmoida函式。

對訓練樣例$(x_k,y_k)$,神經網路的輸出為$\hat_k=(\hat_1,\hat_2...\hat_l)$,神經網路最終輸出=輸出神經元的輸入-輸出神經元的閾值。$\hat_j=f(\beta_j-\theta _j)$,則神經網路在$(x_k,y_k)$上的均方誤差為$$e_k=\frac\sum_^(\hat_j-y_j^k)^2$$

我們來算算神經網路一共需要多少引數:輸入層到隱層$d*q$個權重、隱層到輸出層$q*l$個權重、$q$個隱層神經元的閾值、$l$個輸出層神經元的閾值。

bp是乙個迭代學習的演算法,在迭代的過程中採用感知機規則對引數進行更新,$v\leftarrow v+\delta v$,我們就以隱層到輸出層的連線權$w_$為例來進行推導。bp演算法基於梯度下降策略,以目標的負梯度方向對引數進行調整。有$$\delta w=-\eta \frac}$$

注意到$w_$先影響到第j個輸出層神經元的輸入值$\beta_j$,在影響到輸出值$\hat_y^k$,然後影響到$e_k$,有

$$\frac}=\frac_j^k}·\frac_j^k}·\frac}$$

由於$\beta_j=\sum_^w_b_h$,顯然有$\frac}=b_h$

根據$e_k=\frac\sum_^(\hat_j-y_j^k)^2$和$\hat_j=f(\beta_j-\theta _j)$,在結合sigmoid函式的性質$'=f(x)(1-f(x))$,有(下面負號哪來的,有待考證)

$$\frac}=\frac_j^k}·\frac_j^k}·b_h\\=-(\hat_j-y_j^k)'(\beta _j-\theta _j)·b_h\\=\hat_j(1-\hat_j)(\hat_j-y_j^k)·b_h$$

我們簡化一下式子,令$g_i=\hat_j(1-\hat_j)(\hat_j-y_j^k)$,則隱層到輸出層的連線權$w_$的更新公式為

$$\delta w_=\eta g_ib_h$$

類似的$$\delta \theta _j=-\eta g_i$$

$$\delta v_=\eta e_hx_i$$

$$\delta \gamma _h=-\eta e_h$$

$$e_h=-\frac·\frac\\=-\sum_^\frac·\frac'(\alpha _h-\gamma _h)\\=\sum_^w_g_j'(\alpha _h-\gamma _h)\\=b_h(1-b_h)\sum_^w_g_j$$

bp演算法流程:

1、先將輸入例項提供給輸入層神經元,然後逐層將訊號傳遞,知道產生輸出層的結果

2、然後計算輸出層的誤差,再將誤差逆向傳播至隱層神經元

3、最後根據隱層神經元的誤差來對連線權和閾值進行調整,該迭代過程迴圈進行,直到達到某些條件為止。

回過頭來,bp演算法的目標是要最小化訓練集d上的累計誤差$$e=\frac\sum_^e_k$$

我們之前介紹的是「標準bp演算法」,每次僅僅針對乙個訓練樣例來更新連線權和閾值,計算單個神經元的均方誤差$e_k$。針對於此,推出了累積誤差逆傳播演算法。累積bp演算法直接針對累積誤差最小化,不需要想標準bp演算法那樣進行更多次的迭代,只需要讀取整個訓練集d一遍後才對引數進行更新。但當引數下降到一定的程度後,再用標準bp演算法求解最小誤差。

乙個包含足夠多神經元的隱層,多層前饋網路就能以任意精度逼近任意複雜度的連續函式,然後設定多少隱層神經元仍然是未知數,實際應用仍然要靠「試錯法」。

bp神經網路經常遭遇過擬合,也就是訓練誤差持續降低,但是測試誤差很高。有兩種策略來緩解bp神經網路的過擬合,

第一種策略「早停」:用訓練集來計算梯度、更新連線權和閾值,測試集用來估計誤差,若訓練集誤差降低但測試集誤差公升高,則停止訓練,同時返回具有最小驗證集誤差的連線權和閾值。

第二種策略「正則化」:其基本思想是在誤差目標函式中增加乙個用於描述網路複雜度的部分,例如連線權與閾值平方和。仍令$e_k$表示第k個訓練樣本的誤差,$w_i$表示連線權和閾值,則誤差目標函式改變為:$$e=\lambda \frac\sum_^e_k+(1-\lambda )\sum_w_i^2$$

其中$\lambda\in (0,1)$用於對經驗誤差與網路複雜度這兩項進行折中,常通過交叉驗證來估計。

感知機邏輯與或非

機器學習 神經網路

序列模型屬於通用模型的一種,因為很常見,所以這裡單獨列出來進行介紹,這種模型各層之間是依次順序的線性關係,在第k層合第k 1層之間可以加上各種元素來構造神經網路這些元素可以通過乙個列表來制定,然後作為引數傳遞給序列模型來生成相應的模型。01 keras model sequential.py fro...

機器學習 神經網路

人工神經網路被用於處理大量輸入以及非線性問題。與回歸方法不同,回歸方法只能處理未知數組成的多項式構成的線性問題,即只能處理簡單的關於未知數多項式的非線性問題。而神經網路利用多層網路這一優勢,能夠處理複雜的非線性問題。theta 的維數為s times s j 1 如上圖所示,分類問題分為兩種 對於這...

機器學習,深度學習,神經網路,深度神經網路

先來說一下這幾者之間的關係 人工智慧包含機器學習,機器學習包含深度學習 是其中比較重要的分支 深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的公升級。神經網路一般有輸入層 隱藏層 輸出層,一般來說隱藏層大於2的神經網路就叫做深度神經網路,深度...