1. 程式人生 > >python3__機器學習__神經網路基礎演算法__偏執項b

python3__機器學習__神經網路基礎演算法__偏執項b

1.前言

很多人不明白為什麼要在神經網路、邏輯迴歸中要在樣本X的最前面加一個1,使得 X=[x1,x2,…,xn] 變成 X=[1,x1,x2,…,xn] 。因此可能會犯各種錯誤,比如漏了這個1,或者錯誤的將這個1加到W·X的結果上,導致模型出各種bug甚至無法收斂。究其原因,還是沒有理解這個偏置項的作用啦。

一個傳統的神經網路就可以看成多個邏輯迴歸模型的輸出作為另一個邏輯迴歸模型的輸入的“組合模型”。因此,討論神經網路中的偏置項b的作用,就近似等價於討論邏輯迴歸模型中的偏置項b的作用。

2. 基礎回顧

我們知道,邏輯迴歸模型本質上就是用 y=WX+b 這個函式畫決策面,其中W就是模型引數,也就是函式的斜率(回顧一下初中數學的 y=ax+b ),而b,就是函式的截距。

一維情況下,令W=[1], b=2。則y=WX+b如下(一條截距為2,斜率為1的直線):

二維情況下,令W=[1  1],b=2,則y=WX+b如下(一個截距為2,斜率為[1 1]的平面):

顯然,y=WX+b這個函式,就是2維/3維/更高維空間的直線/平面/超平面。因此邏輯迴歸當然是線性分類器啦。因此如果沒有這個偏置項b,那麼我們就只能在空間裡畫過原點的直線/平面/超平面。這時對於絕大部分情況,比如下圖,要求決策面過原點的話簡直是災難。

因此,對於邏輯迴歸來說,必須要加上這個偏置項b,才能保證我們的分類器可以在空間的任何位置畫決策面(雖然必須畫的直直的,不能彎,嚶…)。

3. 神經網路的偏置項

同樣的道理,對於多個邏輯迴歸組成的神經網路,更要加上偏置項b了。但是想一想,如果隱層有3個節點,那就相當於有3個邏輯迴歸分類器啊。這三個分類器各畫各的決策面,那一般情況下它們的偏置項b也會各不相同的呀。比如下面這個複雜的決策邊界就可能是由三個隱層節點的神經網路畫出來的:

那如何機智的為三個分類器(隱節點)分配不同的b呢?或者說如果讓模型在訓練的過程中,動態的調整三個分類器的b以畫出各自最佳的決策面呢?

那就是先在X的前面加個1,作為偏置項的基底,(此時X就從n維向量變成了n+1維向量,即變成 [1, x1,x2…] ),然後,讓每個分類器去訓練自己的偏置項權重,所以每個分類器的權重就也變成了n+1維,即[w0,w1,…],其中,w0就是偏置項的權重,所以1*w0就是本分類器的偏置/截距啦。這樣,就讓截距b這個看似與斜率W不同的引數,都統一到了一個框架下,使得模型在訓練的過程中不斷調整引數w0,從而達到調整b的目的。

如果在寫神經網路的程式碼的時候,要是把偏置項給漏掉了,那麼神經網路很有可能變得很差,收斂很慢而且精度差,甚至可能陷入“僵死”狀態無法收斂。因此,除非有非常確定的理由去掉偏置項b,否則不能去掉。
--------------------- 
來源:CSDN 
原文:https://blog.csdn.net/Uwr44UOuQcNsUQb60zk2/article/details/81074408 
版權宣告:本文為博主原創文章,轉載請附上博文連結!