鱼书学习5

在神经网络中,权重的初始值特别重要,将介绍初始值的推荐值,并通过实验确认神经网络的学习是否会快速进行。

权值衰减就是一种以减小权重参数的值为目的的学习,抑制过拟合的发生。

这里,我们来做一个实验观察权重初始值如何影响隐藏层的激活值的分布(激活函数的输出数据),这里要做的实验是向一个五层的神经网络传入随机输入数据,用直方图绘制各层激活值的数据分布。

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1/(1+np.exp(-x))

x=np.random.randn(1000,100)
node_num=100 #各隐藏层的节点数
hidden_layer_size=5 #隐藏层有5层
activations={} #激活值的结果保存在这里

for i in range(hidden_layer_size):
    if i !=0
        x=activations[i-1]

    w=np.random.randn(node_num,node_num)*1

    z=np.dot(x,w)
    a=sigmoid(z)
    activations[i]=a

#绘制直方图
for i,a in activations.items();
    plt.subplot(1,len(activations),i+1)
    plt.title(str(i+1)+"-layer")
    plt.hist(a.flatten(),30,range=(0,1))
plt.show()

对比权重的标准差为1和为0.01

w=np.random.randn(node_num,node_num)*0.01

各层激活值,在权重标准差为1时,偏向0和1,可能发生梯度消失的问题;在权重标准差为0.01,偏向0.5,相当于多个神经元都输出几乎相同的值,等于只有1个神经元,出现“表现力受阻”的问题。

接下来,我们尝试使用Xavier初始值。为了使各层的激活值呈现出具有相同广度的分布,推导了合适的权重尺度。结论是,如果前一层的节点数为n,则初始值使用标准差为1/根号n的高斯分布。使用Xavier初始值后,前一层的节点数越多,要设定为目标节点的初始值的权重尺度就越小。

node_num=100 #前一层的节点数
w=np.random.randn(node_num,node_num)/np.sqrt(node_num)

Xavier初始值时以激活函数时线性函数为前提而推导出来的。因为sigmoid函数和tanh函数左右对称,且中央附近可以视作线性函数,但激活函数用ReLU时,一般推荐使用ReLU专用的初始值。也成为He初始值。

当前一层的节点数为n,He初始值使用标准差为根号(2/n)的高斯分布。可以解释为,因为ReLU的负值区域的值为0,所以为了使得它更有广度,需要2倍的系数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值