神經網路中,bias有什麼用,為什麼要設置bias,當加權和大於某值時,激活才有意義?
神經網路中,當加權和大於0時,通過激活函數sigmoid壓縮/映射,輸出神經元的激活值
bias有什麼用,為什麼要設置bias,當加權和大於某值時,激活才有意義?""意義""是什麼意思?
這裡的回答都沒有用最直觀的方法解釋。我們可以把問題先簡化,為什麼線性模型要加 bias?答案很簡單,不加 bias 你的分類線(面)就必須過原點,這顯然是不靈活的。有了bias我們就可以上下左右移動我們的線了。神經網路是一樣的道理。
Bias的好處在於:可以使得神經網路Fit的範圍得到左右的調整。舉個很簡單的例子:
比如網路實際是 y=Sigmoid(w*x) 這個函數。這裡沒有Bias。w是weight,通過調節w,網路可以估計比較陡峭的Sigmoid,也可以估計比較平緩的Sigmoid。但是一個w只能對應一種pattern。所以這裡加入Bias,如下:
y=Sigmoid(w*x+bias)
bias表示x方向上的左右移動,一個w,如果bias=2,w就多了一個pattern,bias=-2,w又多了一個pattern。
所以Bias的好處是使得神經網路通過左右Shift可以適應(Fit)更多的情況。
而激活是相當於一個開關,舉個例子,比如你要訓練一個網路來區別男女,那麼男的來了就開門(激活)讓進去,女的來了就不開門,這樣就能分開男女了。
激活函數的功能就是這麼一個開關而已。
題主看到的關於"意義"的說法要表達的意思應該是:當使用接近於階躍函數的gate函數作為激活函數時(比如Sigmoid),可以將bias看做是一個激活的閾值,用來控制輸出是0還是1。這種說法更多的是一種形象的對神經元的理解。
實際上,bias相當於多了一個參數。在增加網路少量擬合能力的情況下,bias和其它普通權值相比無論前向還是後向,計算上都要簡單,因為只需要一次加法。同時,bias與其它權值的區別在於,其對於輸出的影響與輸入無關,能夠使網路的輸出進行整體地調整,算是另一維自由度吧。放在二維上,權值相當於直線的斜率,而bias相當於截距,這二者都是直線參數的一部分,並沒有必要區別對待。
因此,通常網路都會使用bias,但並不是必須,對於網路性能的影響並不是很顯著(除非網路太小導致擬合能力太差)。同時,在有些場合里,bias的使用也沒有意義,比如在batch normalization層之前的層就沒必要加,因為會被歸一化抵消掉。直接用二維情形下就可以理解了啊~如果在二維空間中我們想用一條線把樣本分成兩個類,如果沒有偏置項,這條線就必須過原點,這顯然是不合理的啊,事實上絕大多數情況下這條線肯定不過原點。
我們自己的沒有特別仔細探索過(i.e., 沒有達到做論文的系統程度,但實驗本身還是嚴格的)的實驗結論是最終結果上bias基本是沒用的(有時候甚至會有點負效果),但是會顯著加快收斂(尤其是在訓練剛開始的時候進度可能會快若干個epoch)。
bias對最終結果沒有顯著影響這點本身是很合理的,因為bias本身可以看做weight的一部分。就是說把該層的輸入x增加一個常數維1(i.e. {x,1}),這樣bias就作為新增維度對應的weight。於是,對於每一組輸入x,bias的存在(也就是多一個常數維1)並不增加任何有效信息。至於bias會加快收斂么,是因為bias的梯度相當於是對應維度的梯度直接加和所以通常值比較大,所以bias的增長一般比weight要快很多。但bias收斂快並不總是好事。在經典作品
X. Glorot and Y. Bengio, 「Understanding the difficulty of training deep feedforward neural networks」
里就發現sigmoid模型中bias的過快增長是導致早期deep network(沒有pretraining或者好的隨機初始化方法時)訓練失敗的『元兇』。至於sigmoid其實本身跟bias沒有任何關係。sigmoid可以有很多種解釋,比如看成一個指數函數族的二分類器。如果按照問題中涉及到的生理學意義,可以用"spike-rate coding"來解釋。大概可以理解成(如有錯誤歡迎指正)神經元在連續時間內不斷接受脈衝,但是只有當這些脈衝累計超過一定閾值後才會激活神經元。為了容易計算連續時間到達神經元的脈衝和,可以在一個給定的時間窗口(一個通常使用的離散時間點,比如語音識別里一個語音幀對應的時長)內估計脈衝的平均速率。而平均速率可以通過計算脈衝函數的累計分布函數來獲得。對於sigmoid來說,就是假設了脈衝的分布符合logistic distribution。這個分布的形狀跟標準正態分布分布比較像,但是積分形式恰好是sigmoid,比正態分布對應的誤差函數容易計算的多。
犀利哥的大實話 同學回答的很好,我想給各位看下這個圖像上的展示。在Michael Nielsen的Neural networks and deep learning中第四章有從視覺上證明神經網路可以擬合任何函數。強烈推薦去他的原網頁上手動調一調偏置,直觀的感受一下。下面的圖片均是他網頁里的截圖。
他先通過構造一個簡單的網路(S型激活函數):
然後增大權重,讓函數的斜坡變得陡峭:
最後整個輸出會變成類似階梯函數的東西,再通過偏置調整「階梯」的位置:
然後加上多個神經元,可以讓輸出的曲線有函數的形狀(中間我忽略了一些細節):
你可以看到,最後我們通過這樣的階梯來擬合任何一個函數:
偏置在這裡面正是起到了調整這一個個峰值的位置的作用。
@馬超 回答的已經非常簡單直觀了。我具體解釋下加上bias是如何讓網路變得更靈活。
簡單考慮一個只有一輸入一輸出的簡單網路:
假設用Sigmoid 激活函數,如果沒有bias,則 。
先看一下在不同W下的情況:
假如輸入 的輸入分布如圖中藍點(A集合)和紅點(B集合)所示(在x軸上的分布),要通過 來判斷輸入時在A內還是B內,很顯然,要提高準確性,sigmoid函數中的W係數需要學的很大,才能保證儘可能的判斷準確。
但是如果一個測試樣本在圖中綠點所在的位置呢,很明顯我們可以將綠點判為紅點所在的B集合,但是通過訓練學到的W是不能正確判斷的。這個時候似乎讓soigmoid函數變得更陡沒法解決了。
但是如果加一個bias呢。
像這樣,w(sigmoid中x的係數)不用學的很大就可以提高學習的準確率,網路就能夠非常靈活的fit A,B 的分布,可以準確的判斷綠點所屬的集合。
簡單點說,就是加上bias能更靈活的fit輸入的分布。
對deep的網路同樣適用。
bias應該來源於線性回歸。或是感知機分類器。
你先試試線性回歸不加常數項會有什麼效果,大概也就懂了。
試試只是線性組合的多層感知機,如果不加bias,效果不會好前段時間研究Enet的結構裡面感覺有的部分這個bias真的不需要,論文裡面本身也提到為了加快inference的速度的話,前面的bottleneck結構裡面不加bias
我個人感覺如果使用了batch normalization的話本身就不要加前面的bias,減去mean操作bias加了也沒有啥意義,拖慢速度
一直想找大牛問問這個事情
DQN裡面加bias的話初值一般怎麼選比較好
tf.constant.initializer(0)?
cs231n那個帥哥很通俗化的解釋過了
和你差不多的理解,有點像是模電裡面的三極體偏置電流,能夠控制「斬波」的效果。三極體就相當於一個權重、輸入、輸出都是單一標量的「神經元」。三極體本身的啟動、飽和特性、近線性區域特性就是個S函數,哈哈
從仿生學的角度,刺激生物神經元使它興奮需要刺激強度超過一定的閾值,同樣神經元模型也仿照這點設置了bias
推薦閱讀:
※深度學習在自然語言處理中到底發揮了多大作用?有哪些不足或局限?
※什麼是 end-to-end 神經網路?
※2017年神經機器翻譯(NMT)的一些重要資源匯總?
※只有達到 state of the art精度的方法才能發文章嗎?
※如何評價谷歌剛推出的Cloud AutoML?
TAG:機器學習 | 神經網路 | 深度學習DeepLearning |