深度学习进阶课程12---初始化网络(正态分布)

这篇文章写一下如何初始化神经网络结构
来看一下正态分布
在这里插入图片描述
如果均值=0,方差=1,则属于标准正态分布
均值:mean,average,x_bar=sum(xi,i=1…n)/n,一组数据它的中心趋势的衡量
标准差:standard deviation,sigma=sqrt(sum((xi-x_bar)^2,(i=1…n))/(n-1))
方差:标准差^2=方差

举个例子:
X=(x1,x2,x3,x4,x5)=1,2,3,4,5
x_bar=(1+2+3+4+5)/5=15/5=3
sigma=((1-3)^2 + (2-3)^2+ (3-3)^2+ (4-3)^2 + (5-3)^2)/(5-1)=sqrt((4+1+0+1+4)/4)=sqrt(2.5)=1.58
方差:1.58^2=2.5
假如有一个神经网络:
在这里插入图片描述
输入x:一半是0,一半是1,一共1000个神经元的输入层
在这里插入图片描述

结果:一半个0消失了,剩下的500个1,加上b,分布:标准差:sqrt(501)=22.4
模拟一个以0为均值,以22.4为标准差的正态分布:
在这里插入图片描述
可以看到以上图像中,z很多都远远大于1,或者远远小于-1,根据sigmoid函数:
在这里插入图片描述
输出的值都接近0和1,当权重变化时,更新量很小,对于更新后面的层,更新量很小,学习的很慢。
使隐藏层饱和了,跟之前我们说的输出层饱和问题相似,对于输出层,我们用改进的cost函数,比如cross-entropy函数可以改进输出层饱和问题,但是对于隐藏层,我们无法通过cost函数来改进

有其他更好的方法来初始化权重吗?
新的方法:正态分布均值=0,标准差等于1/sqrt(n_in)
n_in:输入层神经元个数
重复500个1,500个0作为输入时,z分布的标准差变成了sqrt(3/2)=1.22
证明:标准差=1/sqrt(n_in)=>方差=1/n_in
n_in=1000,方差=1/1000
在这里插入图片描述
不等于0的x有500,z的方差500*(1/1000)+b=1/2+1=3/2
z的标准差变成了sqrt(3/2)
在这里插入图片描述

大部分z在1和-1之间,神经元没有饱和,学习过程不会被减慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值