吴恩达深度学习 —— 3.11 随机初始化

当你训练神经网络的时候,随机初始化权重非常重要,对于逻辑回归,可以将权重初始化为零,但如果将神经网络的各参数数组全部初始化为0,再使用梯度下降算法那会完全无效,让我们看看是什么原因。
在这里插入图片描述
如上图,神经网络有两个输入特征,所以 n [ 0 ] = 2 n^{[0]}=2 n[0]=2,有两个隐藏单元,所以 n [ 1 ] = 2 n^{[1]}=2 n[1]=2,所以和隐藏层相关的矩阵 W [ 1 ] W^{[1]} W[1] ( 2 , 2 ) (2,2) (2,2),如果将其全部初始化为0,同时令 b [ 1 ] = 0 b^{[1]}=0 b[1]=0 b [ 1 ] b^{[1]} b[1]的维度是 ( 2 , 1 ) (2,1) (2,1)的。将偏置项初始化为0实际上是可行的,但是将W初始化为全零就成问题了。

这种初始化形式的问题在于,给网络输入任何样本得到 a 1 [ 1 ] a^{[1]}_1 a1[1] a 2 [ 1 ] a^{[1]}_2 a2[1]是一样的,得到的两个激活函数结果是一样的,因为两个隐藏单元都在做一样的计。

当计算反向传播的时候,事实证明,出于对称性, d z 1 [ 1 ] dz^{[1]}_1 dz1[1] d z 1 [ 2 ] dz^{[2]}_1 dz1[2]也是相同的,这两个隐藏单元也会以同样的方式初始化。假设输出的权重也是一样的,即 W [ 2 ] = [ 0 , 0 ] W^{[2]}=[0 ,0] W[2]=[0,0]。以这种方式初始化神经网络,隐藏单元 a 1 [ 1 ] a^{[1]}_1 a1[1]和隐藏单元 a 2 [ 1 ] a^{[1]}_2 a2[1]就完全一样了,所以这就是所谓的完全对称,意味着节点计算完全一样的函数。我们可以通过归纳法证明,在每次训练迭代之后,两个隐藏单元仍然在计算完全相同的函数。

两个隐藏单元一开始就在做同样的计算,两个隐藏单元对输出单元的影响也一样大,在一次迭代之后,同样的对称性仍然存在,两个隐藏单元仍然是对称的。无论训练神经网络多长时间,两个隐藏单元仍然在计算完全一样的函数。所以在这种情况下,多个隐藏单元真的没有意义,因为这些隐藏单元都在计算相同的东西。

对于更大的神经网络,或者输入有三个特征,或者隐藏单元的数目非常多,用类似的方法可以证明,这样的神经网络,如果把所有的权重都初始化为0,那么所有隐藏单元都是对称的,不管进行多少次迭代,网络都是在计算完全一样的函数,所以没有一点用处,因为我们需要两个不同的隐藏单元去计算不同的函数。

这个问题的解决方案是随机初始化所有参数,对于下图中的神经网络,可以令 W [ 1 ] = n p . r a n d o m . r a n d n ( ( 2 , 2 ) ) W^{[1]}=np.random.randn((2,2)) W[1]=np.random.randn((2,2)),这样可以产生参数为(2,2)的高斯分布随机变量,然后再乘于一个很小的数字,比如0.01,这样就将权重初始化为很小的随机数。

对于参数b,b完全没有对称性这个问题,即所谓的破坏对称性问题,把b初始化为0是可以的,即 b [ 1 ] = n p . z e r o s ( ( 2 , 1 ) ) b^{[1]}=np.zeros((2,1)) b[1]=np.zeros((2,1))。只要W随机初始化,一开始还是用不同的隐藏单元计算不同的函数,这里并不需要破坏对称性。

类似地,对于 W [ 2 ] W^{[2]} W[2]也可以随机初始化, b [ 2 ] b^{[2]} b[2]可以初始化为0,。

可能有一个疑惑,初始化W时的0.01是怎么得到的,为什么不用其它的数值。实际上,我们通常喜欢把权重矩阵初始化为非常非常小的随机值。因为如果用的是tanh或者是sigmoid激活函数,如果权重太大,当计算激活函数值时函数值可能落在激活函数的平缓部分,梯度的斜率非常小。意味着梯度下降会非常慢,学习会变得很慢。如果神经网络中没有任何sigmoid或者tanh激活函数,那问题可能没那么大。但如果在做二元分类,输出单元是sigmoid函数,那么你就不希望初始参数太大,所以用0.01是比较合理的,或者任意其它小数字,初始化 W [ 2 ] W^{[2]} W[2]也一样,可能用命令np.random.randn

实际上,有时有比0.01更好用的常数,当训练一个单隐层神经网络时,这是一个相对比较浅的神经网络,没有太多的隐藏层,设为0.01应该还是可以的。但是当训练一个很深的神经网络时,可能就得试试0.01以外的常数。不管怎样,初始化参数一般都很小

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值