作者subgn ( )
看板DataScience
標題[問題] max pooling的梯度問題
時間Sun Oct 17 18:07:17 2021
在max polling中,因為只取最大的資料點,其他都丟棄,
因此只有最大的點的變動會影響下一層layer,也就是說除了他以外其他點的梯度都是零
那這樣不是只有那一點的相關權重有梯度且會被更新到,其他的權重都不會更新到了呢?
例如[a1, a2, a3], 當前最大值是a1, 那梯度就是[a1, 0, 0]
因此只有a1相關的權重會被更新,a2, a3就永遠不會被更新到
假設我們要找的optimization是在當a2為max的時候,要怎樣才會跳脫出a1為最大的狀態呢
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.248.45 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/DataScience/M.1634465239.A.4E5.html
1F:推 ddavid: 你如果真的很確定你的情況不適用max pooling,那就換成別 10/17 19:16
2F:→ ddavid: 種如average-pooling啊,為什麼要硬用 10/17 19:17
3F:→ ddavid: 或者每種pooling都跑多個不同參數測試看哪種好啊,也許你 10/17 19:18
4F:→ ddavid: 所想的問題其實會在某些參數設定下緩解 10/17 19:19
5F:→ chang1248w: convolution後面接pooling不會有這問題啊 10/18 01:37
6F:→ chang1248w: 你pooling的方向是資料不是channel耶 10/18 01:38
7F:→ chang1248w: 不喜歡這個問題可以把資料做平移 10/18 01:40
8F:→ yoyololicon: 你的a是算出來的值還是權重? 10/18 13:32
9F:→ yoyololicon: 看你模型怎麼設計 如果a都是權重那當然不會更新 10/18 13:33
10F:推 tsoahans: max底下的值是同一個filter和不同資料區段運算得到的值 10/18 15:26
11F:→ tsoahans: 所以不管是a1 a2 a3實際上都是update同一個filter 10/18 15:27
12F:→ tsoahans: (假設max pool是接在convolution後面) 10/18 15:28
13F:→ subgn: 所以重點是因為前面有convolution讓不管最大值在哪個點, 10/18 21:13
14F:→ subgn: 都能update到同一個filter的權重嗎?那如果前面是 10/18 21:14
15F:→ subgn: dense-layer, 很可能就只會持續更新一開始擁有最大值的點嗎 10/18 21:14
16F:→ chang1248w: 情況類似relu,但更嚴苛,夠深夠寬就幾乎不會 10/19 01:58
17F:→ yoyololicon: 對 只會更新擁有最大值的點 但那只是中間值而已= = 10/19 14:12
18F:→ yoyololicon: 難不成你的輸入資料都不會變? 10/19 14:12
19F:→ yoyololicon: 實際上update的到底是hidden feature還是weight 10/19 14:14
20F:→ yoyololicon: 你應該釐清一下 10/19 14:14
21F:→ yoyololicon: 即使換成dense layer 不同資料產生的最大值也不一樣 10/19 14:18
22F:→ yoyololicon: 所以實際上所有的weight幾乎99.999%都會更新到 10/19 14:18
23F:→ yoyololicon: 在你的例子裡 要跳脫出a1的方法就會是靠其他的input 10/19 14:20