总结
- 单层的MLP(没有隐藏层,二分类,输出层使用sigmoid函数),单层MLP和逻辑回归是完全等价的。逻辑回归初始化为全0是没问题的
- 多层MLP初始化为0不行,因为每一隐藏层的隐藏神经元权重都是一致的(反向传播的时候过个relu直接弄成0了),多个隐藏神经元的作用就如同一个神经元
为什么神经网络不能初始化权重W为0?为什么单层MLP的LR(没有隐藏层)就可以初始化权重W为0呢?
来自DeepSeek的简洁推导
LR可以初始化为全零
神经网络不可以
来自知乎磨磨唧唧的推导
以下转载自https://zhuanlan.zhihu.com/p/75879624?utm_campaign=shareopn&utm_medium=social&utm_psn=1859226216327958528&utm_source=wechat_session
转载自https://zhuanlan.zhihu.com/p/75879624
随意初始化为非零的权重是否可行?
答案肯定是不行的!
随意的初始化权重可能会导致梯度爆炸和梯度消失。例如当神经网络为线性的,我们初始化所有参数W=0.1或者W=0.9,都会造成指数级影响
如何初始化
快速总结一下,初始化的目的其实是为了二阶矩(也就是模长)不发生大变化:
Lecun: 从N(0,1/fan_in)从采样,也叫做LeCun 正态初始化,也称为 LeCun 均匀初始化,适用于更适合线性或者近似线性的激活函数,如双曲正切(在输入接近0时近似线性)
Xavier: 从N(0,2/(fan_in+fan_out))中采样,pytorch的TransformerEncoder用的是这个
He kaiming: 针对Relu,N(0,2/fan_in)或者N(0,2/fan_out)中都行
细看https://blog.youkuaiyun.com/taoqick/article/details/130798166