1、一些 Paper 会将数据做 min-max normalization 或者 z-score normalization,然后在输出层可能会用 tanh(对应缩放到 [-1, 1])或者 sigmoid(缩放到 [0, 1])。然而有人认为做 Regression 问题,输出层不需要任何激活函数。到底哪种做法更合理呢?
2、我在复现某篇 Paper 的模型时,就发现一个问题,该模型将数据缩放到 [-1, 1],输出层用的是 tanh。然而在我的数据上,由于大部分原始数据值接近于最小值,缩放后接近于 -1,恰好是 tanh 没有梯度的区域,因此 tanh 的训练效率特别慢。如果去除输出层的激活函数,有一个奇怪的现象:
a)如果使用原始数据(不进行任何数据标准化),收敛正常;
b)如果缩放到 [-1, 1] 或者 [0, 1],很难收敛,Loss 一直在震荡;
然而我的理解,它们之间只有数量级的差异(好比最小值为 0 的原始数据统一除以最大值,就缩放成了 [0, 1]),为什么会导致这种反差现象呢?
3、如果在模型中用到 BatchNorm、LayerNorm 等,是否就必须对输入输出的数据做标准化了?
BN是在当前层最后进行处理的,原始数据还是要经过至少一层的网络,在这一层网络中不同的数据规模和范围肯定会有影响,BN在后面会有所矫正,但是问题避免不了,所以还需要做标准化。 onvolution layer需要激活函数 pooling layer需要激活函数 normalization layer不需要激活函数 fully-connected layer需要激活函数 cost layer不需要激活函数
答案来源于网络
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。