为什么神经网络参数不能全部初始化为全0?

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

最近试了一个小实验,发现当神经网络参数全部初始化为全0的时候(这样最省力嘛),效果并不好,后来和请教了ybb并且网上查阅了一些资料,记录一下自己的笔记和总结,欢迎大家指错交流~

还是原来的写作风格,通过一个具体例子,在讲例子的过程中,通俗解释要讲的知识点。见下!

假设我们现在需要初始化的神经网络如下所示:

为什么神经网络参数不能全部初始化为全0?_第1张图片

我们初始化权值为

b314cc46811d48ea72b3cce99d180f9a.png 654615bb9059d299626aded66d2e2c02.png

其中W1代表输入层到隐藏层的权值矩阵,W2代表隐藏层到输出层的权值矩阵。

假设网络的输入为[x1,x2,x3],然后通过网络的正向传播,可以得出:

8b058c38b03efedfed19150161b82721.png

由于

abde67b260fae48da2038b70d41f744a.png

我们可以知道:

7d53d191c21c68597be4e8e79e6aa731.png

从上面可以知道,此时隐藏层的值是相同的,然后经过激活函数f后,得到的a4,a5仍然是相同的,如下:

a757221e358e70a2b0a937d1ea2edd09.png

最终网络的输出为:

8e7c1119d54d095ff49c73d150f9fc6d.png

此时,假设我们的真实输出为y,则均方误差损失函数可以表示为:

e7bfc34574fb9fc12e6ba8cc8cc44757.png

到了这里,此时又应该到我们伟大的BP反向传播算法出场了!我们需要反向更新权值,它使得预测的输出值与真实值越来越靠近。

这里假设我们的读者已经知道了BP反向传播的过程,可以参看通俗理解神经网络BP传播算法 - 知乎专栏。

可以知道,通过反向传播后,结点4,5的梯度改变是一样的,假设都是outside_default.png,那么此时结点4与结点6之间的参数,与结点5与结点6之间的参数变为了,如下:

outside_default.png

outside_default.png

由上式可以看出,新的参数相同了!!!!

同理可以得出输入层与隐藏层之间的参数更新都是一样的,得出更新之后的参数

a598c7a0b66b991c10923575412e10d2.png

都是相同的!然后不管进行多少轮正向传播以及反向传播,每俩层之间的参数都是一样的。

换句话说,本来我们希望不同的结点学习到不同的参数,但是由于参数相同以及输出值都一样,不同的结点根本无法学到不同的特征!这样就失去了网络学习特征的意义了。

隐藏层与其它层多个结点,其实仅仅相当于一个结点!!如下图表示:

为什么神经网络参数不能全部初始化为全0?_第2张图片

这样总结来看:w初始化全为0,很可能直接导致模型失效,无法收敛。

因此可以对w初始化为随机值解决(在cnn中,w的随机化,也是为了使得同一层的多个filter,初始w不同,可以学到不同的特征,如果都是0或某个值,由于计算方式相同,可能达不到学习不同特征的目的)

小白团队出品:零基础精通语义分割↓↓↓

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

你可能感兴趣的:(算法,python,神经网络,人工智能,深度学习)