依賴反向傳播改進神經網路資料處理的精確度

joytoy發表於2021-09-09

在前幾節,我們一直強調,人工智慧執行的一個基本原理是,由人分析具體問題然後抽象出問題與資料間的邏輯關係,這種邏輯關係往往是一個數學模型。計算機的任務是根據大量資料的分析來確定數學模型中的各種引數。前面我們詳細討論過的一個例子就是二維平面上點集的劃分。

圖片描述

這裡寫圖片描述

如上圖,由人對問題進行抽象分析後得出,兩組資料可以用一條透過圓點的直線分割開來。直線所對應的方程就是問題與資料間的邏輯關係,也就是數學模型,模型的引數就是直線的斜率,這條直線與橫座標成多大的夾角才能更好的將兩組資料區分開來。計算機的任務就是根據輸入的大量點座標,然後根據給定演算法步驟把這個夾角計算出來。計算的辦法就是開始先隨機設定這個夾角值,然後檢測直線區分資料的效果,如果資料集中總共有100個點,其中60個點屬於紅點,但是當前直線只能將30個點識別為紅點,那麼誤差就是30個點,根據這個誤差,演算法調節直線夾角,使得調整後能正確識別的紅點數量越來越多,這就是人工智慧運轉的基本原理。

前面說過,神經網路模型中,需要修正的引數是神經元鏈路之間的權重值,問題在於如何修改,如下圖,假定最後神經元輸出結果,跟正確結果比對後得到一個誤差,那麼我們如何根據誤差來修正W(1,1) 和 W(2,1)呢?

圖片描述

這裡寫圖片描述

神經網路模型的問題在於,任何一個節點鏈路權重的改變都會對最終結果產生影響。所以當我們拿到計算結果產生的誤差後,不可能僅僅修改其中某一個權重,而是所有權重都要相應修改。接下來問題是,權重引數有多個,而最終誤差只有一個,那麼如何把誤差分配給每個權重進行調整呢?一種做法是把誤差平均分配給每個權重,如下圖:

圖片描述

這裡寫圖片描述

但這種大鍋飯機制不合理,因為W(1,1)權重大,傳送給輸出節點的訊號量就強,因此最終結果的誤差來自於這條鏈路的貢獻相對就大,因此要調整的話,這個權重的調整幅度肯定要比下面鏈路權重的調整幅度要大,因此合理的做法是,根據權重的比值進行相應的調整,因此網路要把誤差的四分之三傳遞給W(1,1), 四分之一傳遞給W(2,1),於是誤差反向傳播的模式如下圖:

圖片描述

這裡寫圖片描述

這個誤差回傳機制繼續運用到後續節點鏈路上,這就是所謂的反向傳導。當前模型中,輸出節點只有一個,如果輸出節點有多個怎麼辦?例如下圖:

圖片描述

這裡寫圖片描述

上圖網路有兩個輸出節點,兩個節點的輸出結果跟正確結果都會產生偏差,其處理方式跟一個節點時一樣,每個節點拿到誤差後,根據進入其節點的鏈路權重,等比例的返回給後面節點。如果第一個節點的輸出結果為O1, 對應的正確結果為T1, 那麼第一個輸出節點的誤差就是E1 = T1 - O1.從上圖可以看出E1會根據W(1,1)和W(2,1)的相互比值,同比例的返回給第一層的節點1和節點2.誤差E2的分配也同理。這麼算來,用於調整權重W(1,1)的誤差比值為:

圖片描述

這裡寫圖片描述

同理用於調整權重W(2,1)的誤差比值為:

圖片描述

這裡寫圖片描述

舉個實際例子,假定E1= 9, W(1,1) = 6, W(2,1) = 3, 那麼用於調整W(1,1)的誤差值為 9 * (6 / (6+3)) = 6, 用於調整W(2,1)的誤差值為 9 *(3/(3+6)) = 3。同理E2也依據相同原則分配給W(1,2)和W(2,2).

如果網路有三層,那麼誤差以相同機制反向傳播,如下圖:

圖片描述

這裡寫圖片描述

誤差先從最外層節點開始,根據鏈路的權重比例返回給中間隱藏層節點1,隱藏層節點1和輸入層節點1之間,在根據兩者的連結鏈路比重把中間層節點1接收到的誤差同比例分配給權重W(i,h)。如果還有更多的層級,這個反向傳播機制就一直進行下去。我們用一個具體例項把誤差的反向傳播機制走一遍。

圖片描述

這裡寫圖片描述

最外層輸出兩個輸出節點的誤差分別為1.5和0.5,中間層節點1與最外層節點1之間的鏈路權重為2.0,中間層節點1與最外層節點2的鏈路權重為1.0,中間層節點2與最外層節點1的鏈路權重為3.0,中間層節點2與最外層節點2的鏈路權重為4.0,於是最外層節點1反向傳導給中間層節點1的誤差為 1.5 * (2 / (2+3)) = 1.5 * (2/5) = 0.6, 最外層節點2反向傳導給中間層節點1的誤差為 0.5 * (1 / (1+4)) = 0.5 *(1/5) = 0.1, 因此中間層節點1接收到的總誤差為0.7.

中間層節點1與最外層節點2間鏈路權重為1.0,因此最外層節點1反向傳播給中間層節點2的誤差為1.5 * (3.0 / (2.0 + 3.0)) = 1.5 * (3/5) = 0.9,中間層節點2與最外層節點2的鏈路權重為4.0,因此最外層節點2反向傳播給中間層節點2的誤差為0.5 * (4.0 / (1.0 + 4.0)) = 0.5 * (4/5) = 0.4, 由此中間層節點2獲得的誤差為1.3.

我們以同樣的方法將誤差從中間層傳到回最外層,如下圖:

圖片描述

這裡寫圖片描述

最外層節點1與中間層節點1的鏈路權重為3.0,最外層節點2餘中間層節點1鏈路權重為2.0,因此中間層節點1反向傳導給最外層節點1的誤差為 0.7 * (3.0 / (3.0+2.0) ) = 0.7 * (3/5) = 0.42, 中間層節點1反向傳導給最外層節點2的誤差為 0.7 *  (2.0 / (3.0 + 2.0) ) = 0.28.

最外層節點1與中間層節點2的鏈路權重為1.0,最外層節點2與中間層節點2的鏈路權重為7.0,因此中間層節點2反向傳導給最外層節點1的誤差為 1.3 * (1.0 / (1.0 + 7.0) ) = 1.3 * (1/8) = 0.1625, 中間層節點2反向傳導給最外層節點2的誤差為1.3 * (7.0 / (7.0 + 1.0) ) = 1.1375.

由此最外層節點1獲得的總誤差為 0.42 + 0.1625 = 0.5825, 最外層節點2獲得的誤差為0.28 + 1.1375 = 1.4175.

透過反向傳播,我們就能把最外層節點獲得的誤差傳導給神經網路每一層的每個節點,每個節點再根據獲得的誤差調整它與下一層網路節點的鏈路權重,這個誤差回傳過程就是神經網路中經常提到的反向傳播機制。

下一節我們看看如何使用矩陣快速實現反向傳播誤差的計算。



作者:望月從良
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4650/viewspace-2810680/,如需轉載,請註明出處,否則將追究法律責任。

相關文章