首页 > 其他分享 >神经网络入门篇:详解随机初始化(Random+Initialization)

神经网络入门篇:详解随机初始化(Random+Initialization)

时间:2023-11-28 10:16:11浏览次数:38  
标签:初始化 0.01 函数 Initialization Random 入门篇 神经网络 隐含 单元

当训练神经网络时,权重随机初始化是很重要的。对于逻辑回归,把权重初始化为0当然也是可以的。但是对于一个神经网络,如果把权重或者参数都初始化为0,那么梯度下降将不会起作用。

来看看这是为什么。

有两个输入特征,\(n^{[0]} = 2\),2个隐藏层单元\(n^{[1]}\)就等于2。
因此与一个隐藏层相关的矩阵,或者说\(W^{[1]}\)是2*2的矩阵,假设把它初始化为0的2*2矩阵,\(b^{[1]}\)也等于 \([0\;0]^T\),把偏置项\(b\)初始化为0是合理的,但是把\(w\)初始化为0就有问题了。
那这个问题如果按照这样初始化的话,总是会发现\(a_{1}^{[1]}\) 和 \(a_{2}^{[1]}\)相等,这个激活单元和这个激活单元就会一样。因为两个隐含单元计算同样的函数,当做反向传播计算时,这会导致\(\text{dz}_{1}^{[1]}\) 和 \(\text{dz}_{2}^{[1]}\)也会一样,对称这些隐含单元会初始化得一样,这样输出的权值也会一模一样,由此\(W^{[2]}\)等于\([0\;0]\);

图1.11.1

但是如果这样初始化这个神经网络,那么这两个隐含单元就会完全一样,因此他们完全对称,也就意味着计算同样的函数,并且肯定的是最终经过每次训练的迭代,这两个隐含单元仍然是同一个函数,令人困惑。\(dW\)会是一个这样的矩阵,每一行有同样的值因此做权重更新把权重\(W^{[1]}\implies{W^{[1]}-adW}\)每次迭代后的\(W^{[1]}\),第一行等于第二行。

由此可以推导,如果把权重都初始化为0,那么由于隐含单元开始计算同一个函数,所有的隐含单元就会对输出单元有同样的影响。一次迭代后同样的表达式结果仍然是相同的,即隐含单元仍是对称的。通过推导,两次、三次、无论多少次迭代,不管训练网络多长时间,隐含单元仍然计算的是同样的函数。因此这种情况下超过1个隐含单元也没什么意义,因为他们计算同样的东西。当然更大的网络,比如有3个特征,还有相当多的隐含单元。

如果要初始化成0,由于所有的隐含单元都是对称的,无论运行梯度下降多久,他们一直计算同样的函数。这没有任何帮助,因为想要两个不同的隐含单元计算不同的函数,这个问题的解决方法就是随机初始化参数。应该这么做:把\(W^{[1]}\)设为np.random.randn(2,2)(生成高斯分布),通常再乘上一个小的数,比如0.01,这样把它初始化为很小的随机数。然后\(b\)没有这个对称的问题(叫做symmetry breaking problem),所以可以把 \(b\) 初始化为0,因为只要随机初始化\(W\)就有不同的隐含单元计算不同的东西,因此不会有symmetry breaking问题了。相似的,对于\(W^{[2]}\)可以随机初始化,\(b^{[2]}\)可以初始化为0。

\(W^{[1]} = np.random.randn(2,2)\;*\;0.01\;,\;b^{[1]} = np.zeros((2,1))\)
\(W^{[2]} = np.random.randn(2,2)\;*\;0.01\;,\;b^{[2]} = 0\)

也许会疑惑,这个常数从哪里来,为什么是0.01,而不是100或者1000。通常倾向于初始化为很小的随机数。因为如果用tanh或者sigmoid激活函数,或者说只在输出层有一个Sigmoid,如果(数值)波动太大,当计算激活值时\(z^{[1]} = W^{[1]}x + b^{[1]}\;,\;a^{[1]} = \sigma(z^{[1]})=g^{[1]}(z^{[1]})\)如果\(W\)很大,\(z\)就会很大或者很小,因此这种情况下很可能停在tanh/sigmoid函数的平坦的地方(见图3.8.2),这些地方梯度很小也就意味着梯度下降会很慢,因此学习也就很慢。

回顾一下:如果\(w\)很大,那么很可能最终停在(甚至在训练刚刚开始的时候)\(z\)很大的值,这会造成tanh/Sigmoid激活函数饱和在龟速的学习上,如果没有sigmoid/tanh激活函数在整个的神经网络里,就不成问题。但如果做二分类并且的输出单元是Sigmoid函数,那么不会想让初始参数太大,因此这就是为什么乘上0.01或者其他一些小数是合理的尝试。对于\(w^{[2]}\)一样,就是np.random.randn((1,2)),猜会是乘以0.01。

事实上有时有比0.01更好的常数,当训练一个只有一层隐藏层的网络时(这是相对浅的神经网络,没有太多的隐藏层),设为0.01可能也可以。但当训练一个非常非常深的神经网络,可能要试试0.01以外的常数。无论如何它通常都会是个相对小的数。

好了,看完神经网络入门篇。就已经知道如何建立一个一层的神经网络了,初始化参数,用前向传播预测,还有计算导数,结合反向传播用在梯度下降中。

标签:初始化,0.01,函数,Initialization,Random,入门篇,神经网络,隐含,单元
From: https://www.cnblogs.com/oten/p/17861213.html

相关文章

  • springBoot项目启动卡在Root WebApplicationContext: initialization completed... (非
    通过源码启动排查发现,初始化连接池时创建了200次,通过配置文件中将initialSize值改为10,启动时间从1分钟变为了3秒。 ......
  • 【4.0】常用模块之random模块
    【一】导入模块importrandom【二】随机小数【1】默认区间的小数(random)大于0且小于1之间的小数importrandom#默认是大于0且小于1之间的小数res=random.random()print(res)#0.24512653841495302【2】指定区间的小数(uniform)importrandom#指定为0到......
  • 不用编程超简单的自动化测试工具:Airtest入门篇教程
    一、背景很多刚入行或从其他行业转行做测试的同学,日复一日每天做点工已经点得疲惫和麻木,觉得做测试和在厂子里打螺丝没太大区别。也想着做一做自动化测试,奈何自己看着代码就头痛,当初就是因为不喜欢编程才选择的做测试。亦或者由于从其他行业转行过来的,隔行如隔山,编程太痛苦。那......
  • 神经网络入门篇:直观理解反向传播(Backpropagation intuition)
    详细推导反向传播下图是逻辑回归的推导:回想一下逻辑回归的公式(参考公式1.2、公式1.5、公式1.6、公式1.15)公式1.38:\[\left. \begin{array}{l} {x}\\ {w}\\ {b} \end{array} \right\} \implies{z={w}^Tx+b} \implies{\alpha=\sigma(z)} \implies{{L}\left(a,y......
  • Redis入门篇(一)
    初学Redis简介以及入门一.Redis的介绍1.什么是redis?Redis(RemoteDictionaryServer)是一个开源的内存数据结构存储系统。它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。与传统的关系型数据库相比,Redis是一种更加快速高效的数据存储方式。Redis在内存中存......
  • 神经网络入门篇:神经网络的梯度下降(Gradient descent for neural networks)
    神经网络的梯度下降在这篇博客中,讲的是实现反向传播或者说梯度下降算法的方程组单隐层神经网络会有\(W^{[1]}\),\(b^{[1]}\),\(W^{[2]}\),\(b^{[2]}\)这些参数,还有个\(n_x\)表示输入特征的个数,\(n^{[1]}\)表示隐藏单元个数,\(n^{[2]}\)表示输出单元个数。在这个例子中,只介绍过的......
  • 随机森林(Random Forest)
    随机森林(RandomForest)是一种强大的集成学习算法,通过构建多个决策树,并结合它们的预测结果来提高整体模型的性能和鲁棒性。以下是随机森林的详细解释:随机森林的构建过程:Bootstrap抽样:对于给定的包含N个样本的原始数据集,进行有放回的随机抽样,构造一个新的样本集,大小也为N。......
  • 神经网络入门篇:详解向量化实现的解释(Justification for vectorized implementation)
    向量化实现的解释先对几个样本计算一下前向传播,看看有什么规律:公式1.16:\(z^{[1](1)}=W^{[1]}x^{(1)}+b^{[1]}\)\(z^{[1](2)}=W^{[1]}x^{(2)}+b^{[1]}\)\(z^{[1](3)}=W^{[1]}x^{(3)}+b^{[1]}\)这里,为了描述的简便,先忽略掉\(b^{[1]}\)后面将会看到利用Python的......
  • Python_Mooc_Stu_23_11_13_String_Random
    目录一、序列 (一)序列的索引 1.索引编号 2.序列元素索引访问3.注意事项 (二)序列的切片 1.切片格式 2.切片使用 3.参数缺省 二、序列的运算和常用处理函数 (一)序列运算 1.序列相加 2.序列相乘 3.序列对象比较 4.成员资格检查 (二)常用处理函数 1.len()......
  • 神经网络入门篇:详解多样本向量化(Vectorizing across multiple examples)
    多样本向量化与上篇博客相联系的来理解逻辑回归是将各个训练样本组合成矩阵,对矩阵的各列进行计算。神经网络是通过对逻辑回归中的等式简单的变形,让神经网络计算出输出值。这种计算是所有的训练样本同时进行的,以下是实现它具体的步骤:图1.4.1上篇博客中得到的四个等式。它们......