深度学习模型的参数W为什么不能初始化为0?

都是学习过程中的个人理解,会涉及有点复杂的数学思路,并且没有辅以方便理解的实例,可能解释得不是那么清楚。

假设W为权值,b为偏置,y为真实输出,loss为损失值。

首先,深度学习中的求导过程,是当给定模型之后,给定W和b之后,通过loss = δ(y), y = σ(W, b)给出的,对损失函数结果进行求导的结果,而结果是W和b各自的梯度。

所以实际上“自变量”是W, b,希望W和b都按着自己的梯度走一小步,这样可以使得loss逐渐靠近最小(不是严格的loss总梯度靠近,而是以每个自变量的偏导数近似靠近)。

如果举一个简单的例子,模型只存在一个隐层,我想求loss对输入层w的导数,有反向:

① loss = δ(y)    loss对y求导

② y = wh + b       y对隐层激活函数值h求导

③ h = σ(y0)        h对输入层线性函数值y0求导

④ y0 = w’x + b’     y0对输入w求导

如果是多个隐层呢,②③来回做,都是对h(输入)而非w(参数)求导,只有求某一层的导数时,是对该层的参数w求导。

而对于W, b初始值为0的情况下,输入层的线性函数值y=wx+b一定是0,0经过激活函数,输出不一定为0,但一定是相同值,由此导致,正向计算函数值时,每层的函数值相同。则逆向求导时,同层loss的导函数值就一定相同。【一定相同的原因:激活函数函数值相同的点一般只有一个,因此求导时求的都是该点导数,导数值相同】

但是输入层的W, b导函数值不一定相同(因为求输入层的导数时,其它层都是对x求导,只有输入层的y =wx+b是对w求导,结果为x,会受输入不同影响),但:

① 中间结构有线性函数

② 线性函数,指的是其它wx+b        ————此w非彼w,我数学不好,玩不来符号定义

③ 中间是要对x求导而不是w            ————如果这个理解不了可以自己推一推多层导数

④ y对x求导完是w

⑤ 中间层的w也被赋值为0了

则逆向传播还没到输入层,由链式乘法,导函数值就变成了0,所以管它输入层导函数值是啥呢,只要有一个0,算到输入层已经用不上了。

数学完了,下面就是玄学。

这不就导致,第一轮epoch跟没做一样,基本死掉了。

后续可能会让第一层艰难的活过来,其它层再在第一层活了的基础上慢慢地活过来,但这个过程要耗费多少epoch,代价太大了。

既然如此,直接别赋值为0不就好啦。

这里有一个复杂一点的,关于参数为0的计算:

(9条消息) 深度学习 | (6) 关于神经网络参数初始化为全0的思考_sdu_hao的博客-CSDN博客https://blog.csdn.net/sdu_hao/article/details/104719378

有图有真相,虽然求导过程上简略了点,应该逻辑正确。

用玄学来解释就是,我们给一个深度学习模型初始赋不同值,就是在告诉所有神经网络单元,你就关注这一部分特征,别的特征有别的单元管。

而如果初始赋值为0就是在说,你们所有人全关注同一个特征。(即使较真的说,根据输入不同,后续会导致关注点有所变化,但为啥不直接回避赋相同值呢?就那么想钻牛角尖吗,那么想从数学上解释清楚这个问题吗,惨惨如是批判自己)

很显然会使得模型效果不好,严重点就会导致模型失效。

虽然感觉自己能给自己解释明白了,但其实数学上的问题有数学家去管,平时我依然只需要知道数学家送来的结论。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值