作者moodoa3583 (金牌台灣啤酒)
看板DataScience
標題[問題] 權重與梯度下降之間的相關與調整
時間Fri Apr 19 11:01:37 2019
大家早安
最近在做辨識手寫數字的類神經網路
參考程式碼如下
https://reurl.cc/3bkeV
但是對裡面train部分其中兩條程式碼想不通
分別是
# update the weights for the links between the hidden and output layers
self.who += self.lr * numpy.dot((output_errors * final_outputs * (1.0 - final_outputs)), numpy.transpose(hidden_outputs))
# update the weights for the links between the input and hidden layers
self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)), numpy.transpose(inputs))
這邊我的理解是透過斜率做梯度下降來調整權重
+=後面是學習率*斜率公式
但我的理解是在斜率為正的時候
權重應該是要下修的(減)
但這兩行卻是寫
self.wih +=
self.who +=
這樣在斜率為正的時候權重不就會增加了嗎?這樣應該會離低點越來越遠吧?
不知道我是不是錯過或誤會了哪部分的運算,所以想在此請問各位了
不好意思還請各位撥空指教,謝謝各位
如果問題不好還請多包含
-----
Sent from JPTT on my HTC_D10i.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.137.243.86
※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1555642900.A.5BA.html
→ moodoa3583: 剛剛找出問題了,在斜率公式裡面output_errors和hidde 04/19 14:40
→ moodoa3583: n_errors前是有帶負號的,但程式碼裡面沒有加負號,所 04/19 14:40
→ moodoa3583: 以權重的確是要寫+=才會是正確的 04/19 14:40
→ moodoa3583: 也可以寫成 04/19 14:42
→ moodoa3583: self.who -= self.lr * numpy.dot((-1*(output_error 04/19 14:42
→ moodoa3583: s) * final_outputs * (1.0 - final_ 04/19 14:42
→ moodoa3583: outputs)), numpy.transpose(hidden_outputs)) 04/19 14:42
→ moodoa3583: 對我而言會比較直覺一些 04/19 14:43
→ thefattiger: 你誤會很大,權重增加不代表loss會增加 04/20 00:21
的確,權重增加可能會造成誤差增加或減少,端看當下在圖形上的斜率來決定,抑或是我還有哪裡沒有考量到?還請多指教,謝謝
推 OnePiecePR: 樓上正解。不過版主應該能馬上轉過來。 04/20 21:00
※ 編輯: moodoa3583 (114.137.243.86), 04/21/2019 13:18:10
推 st1009: 好像有人在呼喚板主,可是我看不懂有甚麼事需要板主... 04/21 14:54
推 jack82822005: 應該是指文主?XD 04/23 03:20