機器學習之 神經網路演算法原理

2022-07-30 00:03:19 字數 2539 閱讀 4782

**:   

神經網路

好了,前面花了不少篇幅來介紹啟用函式中那個暗藏玄機的e,下面可以正式介紹神經元的網路形式了。

下圖是幾種比較常見的網路形式:

前面講過,使用梯度下降的方法,要不斷的修改k、b兩個引數值,使最終的誤差達到最小。神經網路可不只k、b兩個引數,事實上,網路的每條連線線上都有乙個權重引數,如何有效的修改這些引數,使誤差最小化,成為乙個很棘手的問題。從人工神經網路誕生的60年代,人們就一直在不斷嘗試各種方法來解決這個問題。直到80年代,誤差反向傳播演算法(bp演算法)的提出,才提供了真正有效的解決方案,使神經網路的研究絕處逢生。

bp演算法是一種計算偏導數的有效方法,它的基本原理是:利用前向傳播最後輸出的結果來計算誤差的偏導數,再用這個偏導數和前面的隱藏層進行加權求和,如此一層一層的向後傳下去,直到輸入層(不計算輸入層),最後利用每個節點求出的偏導數來更新權重。

為了便於理解,後面我一律用「殘差(error term)」這個詞來表示誤差的偏導數。

輸出層→隱藏層:殘差 = -(輸出值-樣本值) * 啟用函式的導數

隱藏層→隱藏層:殘差 = (右層每個節點的殘差加權求和)* 啟用函式的導數

如果輸出層用purelin作啟用函式,purelin的導數是1,輸出層→隱藏層:殘差 = -(輸出值-樣本值)

如果用sigmoid(logsig)作啟用函式,那麼:sigmoid導數 = sigmoid*(1-sigmoid)

輸出層→隱藏層:殘差 = -(sigmoid輸出值-樣本值) * sigmoid*(1-sigmoid) = -(輸出值-樣本值)輸出值(1-輸出值)

隱藏層→隱藏層:殘差 = (右層每個節點的殘差加權求和)* 當前節點的sigmoid*(1-當前節點的sigmoid)

如果用tansig作啟用函式,那麼:tansig導數 = 1 - tansig^2

殘差全部計算好後,就可以更新權重了:

輸入層:權重增加 = 當前節點的sigmoid * 右層對應節點的殘差 * 學習率

隱藏層:權重增加 = 輸入值 * 右層對應節點的殘差 * 學習率

偏移值的權重增加 = 右層對應節點的殘差 * 學習率

學習率前面介紹過,學習率是乙個預先設定好的引數,用於控制每次更新的幅度。

此後,對全部資料都反覆進行這樣的計算,直到輸出的誤差達到乙個很小的值為止。

以上介紹的是目前最常見的神經網路型別,稱為前饋神經網路(feedforward neural network),由於它一般是要向後傳遞誤差的,所以也叫bp神經網路(back propagation neural network)。

bp神經網路的特點和侷限:

- bp神經網路可以用作分類、聚類、**等。需要有一定量的歷史資料,通過歷史資料的訓練,網路可以學習到資料中隱含的知識。在你的問題中,首先要找到某些問題的一些特徵,以及對應的評價資料,用這些資料來訓練神經網路。

- bp神經網路主要是在實踐的基礎上逐步完善起來的系統,並不完全是建立在仿生學上的。從這個角度講,實用性 > 生理相似性。

- bp神經網路中的某些演算法,例如如何選擇初始值、如何確定隱藏層的節點個數、使用何種啟用函式等問題,並沒有確鑿的理論依據,只有一些根據實踐經驗總結出的有效方法或經驗公式。

- bp神經網路雖然是一種非常有效的計算方法,但它也以計算超複雜、計算速度超慢、容易陷入區域性最優解等多項弱點著稱,因此人們提出了大量有效的改進方案,一些新的神經網路形式也層出不窮。

文字的公式看上去有點繞,下面我發乙個詳細的計算過程圖。

參考這個:

我做了整理

這裡介紹的是計算完一條記錄,就馬上更新權重,以後每計算完一條都即時更新權重。實際上批量更新的效果會更好,方法是在不更新權重的情況下,把記錄集的每條記錄都算過一遍,把要更新的增值全部累加起來求平均值,然後利用這個平均值來更新一次權重,然後利用更新後的權重進行下一輪的計算,這種方法叫批量梯度下降(batch gradient descent)。

機器學習之神經網路

機器學習是一門致力於研究如何通過計算的手段,利用經驗來改善系統自身的效能。經驗通常以資料的形式存在,因此機器學習所研究的主要內容是關於在計算機上從資料中產生 模型 的演算法,即 學習演算法 有了學習演算法,將經驗資料提供給它,它就能基於這些資料產生模型 當面對新情況時,模型會給我們提供相應的判斷。一...

機器學習之神經網路NN

神經網路 neural network 以人腦中的神經網路為啟發而產生的,最著名對的演算法是backpropagation bp 演算法。可用來解決分類問題,也可用來解決回歸問題 詳情見前言 多層向前神經網路中使用了bp演算法 多層向前神經網路的組成,每一層由單元組成 圖中小圈圈 輸入層 由訓練集的...

python機器學習之神經網路 三

來自 前面兩篇文章都是參考書本神經網路的原理,一步步寫的 這篇博文裡主要學習了如何使用neurolab庫中的函式來實現神經網路的演算法。首先介紹一下neurolab庫的配置 neurolab需要採用python安裝第三方軟體包的方式進行安裝,這裡介紹一種安裝方式 1 進入cmd視窗 2 進入解壓檔案...