作者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/cn.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