数值稳定性和模型初始化 讨论区

http://zh.diveintodeeplearning.org/chapter_deep-learning-basics/numerical-stability-and-init.html

1赞

前排挤挤

看完之后还是有点问题

随机初始化模型参数

在神经网络中,我们通常需要随机初始化模型参数。下面我们来解释这样做的原因。

回顾“多层感知机”一节图 3.3 描述的多层感知机。为了方便解释,假设输出层只保留一个输出单元 𝑜1o1(删去 𝑜2,𝑜3o2,o3 和指向它们的箭头),且隐藏层使用相同的激活函数。如果将每个隐藏单元的参数都初始化为相等的值,那么在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传播中,每个隐藏单元的参数梯度值相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代也是如此。这种情况下,无论隐藏单元有多少,隐藏层本质上只有 1 个隐藏单元在发挥作用。因此,正如我们在前面的实验中所做的那样,我们通常将神经网络的模型参数,特别是权重参数,进行随机初始化。

虽然画了几个矩阵推导了一下,验证了如果每个矩阵的元素都取相同的值的话,每个矩阵中所有参数的下降方向都是相同的。但是按理说梯度下降法不是应该与初始值无关吗(在保证凸函数的前提下)?如果出现了下降方向是相同的,那可不可以调整每一步的下降步长来迭代出一个元素不全相等的矩阵呢?

下降步长不应该是相同的吗?全局的?


假设只有一个输入单元,输出层也只有一个单元,隐含层有3个节点。
为简化分析:假设偏置固定为0。
假设代价函数为凸函数。
假设输出为:O =relu(w0x) + relu(w1x) + relu(w2*x)

如果按照如下方法更新参数,就能获得最优解。(但是普通的梯度下降不是这样的。)
初始化:epoch = 0
步骤1,计算w0的梯度,并更新 w0 = w0 - 学习率w0的梯度。(此时w1 和 w2保持不变。从现在开始 w0 不再等于w10和w2,权重参数又了差异化)
步骤2,计算w1的梯度,并更新 w1 = w1 - 学习率
w1的梯度。(此时w0和 w2保持不变。此时求取的w1的梯度不等于步骤一中w0的梯度。)
步骤3,计算w2的梯度,并更新 w2 = w2 - 学习率*w2的梯度。(此时w0 和 w1保持不变)
步骤4,epoch = epoch+1.。如果epoch 等于 num_epochs,那么结束训练;否则跳转到步骤1。


但是程序中一般实现的梯度下降优化过程是这样的:
初始化:epoch = 0
步骤1,计算w0的梯度,
步骤2,计算w1的梯度,因为w1=w0,所以w1的梯度等于w0的梯度。
步骤3,计算w2的梯度,因为w2=w0,所以w1的梯度等于w0的梯度。
步骤4,更新 w0 = w0 - 学习率w0的梯度。
步骤5,更新 w1 = w1 - 学习率
步骤2中计算的w1的梯度。(此时w1和 w0的梯度相等,所以更新之后 w1仍然和w0相等。)
步骤6,更新 w2 = w2 - 学习率*w2的梯度。(此时w2和 w0的梯度相等,所以更新之后 w2仍然和w0相等。)
步骤7,epoch = epoch+1.。如果epoch 等于 num_epochs,那么结束训练;否则跳转到步骤1。

上述方法 不能达到最优解的原因:
更新w1时, w0已经更新,此时 w1的梯度不再等于步骤2中计算的w1的梯度。
如果仍然使用步骤2中计算的w1的梯度,那么就不能到达最优解。

通过上述分析可知,梯度下降优化过程中,隐藏层的三个单元始终保持相同的参数,相当于只有一个隐藏单元的神经网络。
这种情况下,增加隐藏层单元数量并不能增加模型复杂度,但是仍然可以通过增加隐含层的层数来增加模型复杂度。

3赞

“那可不可以调整每一步的下降步长来迭代出一个元素不全相等的矩阵呢?”
是指不同元素采用不同的步长(学习率 lr)吗?

对于问题:是否可以将线性回归或softmax回归中所有的权重参数都初始化为相同值?
想请教一下:
个人理解 线性回归是可以将权重初始化为相同值,因为一个输出单元可以做,softmax 不可以这样,因为softmax需要多个输出单元。
是这样吗?

1赞

以单隐层为例(多隐层一样的),当前向传播完成后,即计算好当前y,神经元0的W0参数更新与神经元1、2的参数W1、W2无关的,只与输入X和输出y相关,而对每个神经元X和y都是相同的,所以如果W0、W1、W2相同,那么更新后的W0、W1、W2仍然相同(这里W0、W1、W2都是一维向量)。那么3个神经元就相当于1个神经元了.
这里需要区分神经元之间的权重参数Wi外部关系(即W0与W1、W2)和神经元Wi内部关系(Wi00,Wi01,。。。Wi0n,这里假设输入有n+1个),梯度下降法与初始化参数无关,是指Wi的内部取值无关

1赞

我的理解跟你刚好相反。一个是在讲义中提到,当输入为一个的,即做线性回归拟合,而不是分类训练的时候,一定需要随机初始化模型参数

回顾“多层感知机”一节图3.3描述的多层感知机。为了方便解释,假设输出层只保留一个输出单元𝑜1o1(删去𝑜2o2和𝑜3o3以及指向它们的箭头),且隐藏层使用相同的激活函数。如果将每个隐藏单元的参数都初始化为相等的值,那么在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传播中,每个隐藏单元的参数梯度值相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代也是如此。在这种情况下,无论隐藏单元有多少,隐藏层本质上只有1个隐藏单元在发挥作用

然后在此基础上,应该就可以理解了。线性回归不能使用相同的初始化权重参数。而softmax回归可以,因为在反向传播的时候,多个输出对不同的隐藏单元有不同的梯度。这样至少能保证超过一个,可能不全覆盖的隐藏单元有效:laughing:

我理解的话,多个输出对不同的隐藏单元在反向传播中梯度值一样。
在正向传播中,每个隐藏单元值一样,在参数值一样的情况下,可以使得每个输出单元值一样。这样,反向传播的话,在参数值与计算值一样的情况下,梯度值应该也是一样的。这样,多个隐藏单元的值一样,多个输出单元的值一样。

1赞

有多个输出单元并不影响结果。

假设网络有 K 个隐藏层,编号为 1,\dots, K1 个输出层,编号为 K+1 ,对于 i=1, \dots, K+1 ,第 i 层的权重参数为 W_{i} ,偏置参数为 b_{i} ,输出为 h_{i} ,输入为 h_{i-1} ,其中 h_{0} 是网络的输入向量。考虑第 i 层,输入 h_{i-1} \in \mathbb{R}^{n\times1} ,输出 h_{i} = \sigma(W_{i}h_{i-1} + b_{i}) \in \mathbb{R}^{p \times 1}W_{i} \in \mathbb{R}^{p \times n}b_{i} \in \mathbb{R}^{p \times 1}\sigma 是第 i 层的激活函数。我们用 L 表示损失函数,可以得到:

\begin{align*} \frac{\partial L}{\partial W_{i}} &= \left(\frac{\partial L}{\partial h_{i}} \odot \sigma'\left(W_{i}h_{i-1}+b_{i}\right)\right) h_{i-1}^{T} \tag1\\ \frac{\partial L}{\partial b_{i}} &= \frac{\partial L}{\partial h_{i}} \odot \sigma'\left(W_{i}h_{i-1}+b_{i}\right) \tag2\\ \frac{\partial L}{\partial h_{i-1}} &= W_{i}^{T}\left(\frac{\partial L}{\partial h_{i}} \odot \sigma'\left(W_{i}h_{i-1}+b_{i}\right)\right) \tag3\\ \end{align*}

其中 \odot 表示两个矩阵按位相乘。

对迭代次数施以归纳,可以证明以下结论:

  1. 对于 i=1, \dots, KW_{i} 各行相等
  2. 对于 i=2, \dots, K+1W_{i} 各列相等
  3. 对于 i=1, \dots, Kb_{i} 各行相等

首先,在第一次迭代开始前,由于参数由常量初始化,所以上述三个结论显然成立。

假设第 t 次迭代开始前,上述三个结论成立,不难得到,对于 i=1, \dots, Kh_{i}\displaystyle\frac{\partial{L}}{\partial{h_{i}}} 均各行相等,从而有:

  1. 对于 i=1, \dots, K\displaystyle\frac{\partial L}{\partial{W_{i}}} 各行相等
  2. 对于 i=2, \dots, K+1\displaystyle\frac{\partial L}{\partial{W_{i}}} 各列相等
  3. 对于 i=1, \dots, K\displaystyle\frac{\partial L}{\partial {b_{i}}} 各行相等

所以在第 t+1 次迭代开始前,上述三个结论仍然成立。

1赞

谢谢,理解了。

多层感知机的第l层输出H(l)是不是应该=XW(1)W(2)…W(l), 而不是XW(1)XW(2)…W(l

我不是特别明白你说的过程。如果输入层只有1个单元,唯一的隐藏层有3个单元,输出层只有1个单元,那么输出的O不该是O = relu(h0x)w0 + relu(h1x)w1 + relu(h2x)w2 吗,其中hi为隐藏层的参数。
在下面的步骤1,2中,w1的梯度等于w0的梯度不是因为w1等于w0而是因为对于w1的操作和w0的操作完全一样,也就是乘在它们前面的系数是一样的。

是的,XW(1)本来就作为下一层的输入了。

原理没有搞清楚。回到之前的例子里面尝试了一下,线性回归设相同值对结果影响不大。softmax设相同值,分类准确率一直是0.1.

刚才看到一种解释。权重相同,隐藏层的神经元相当于单个神经元,此时神经网络相当于线性分类器。所以线性回归可以设相同值,而softmax是非线性分类器,不能设相同的值。

2赞

x和y相同,按照链式法则来看,好像梯度也不相等啊。求教

梯度下降的步长应该是一样的,是指每个方向的时间是一样, 具体下降的长度要依赖于该分量上的梯度

我觉得你提到的步骤1,2 , 3是在第一次更新梯度同时完成的,同样步骤4, 5,6,也其实是一步就把三个梯度计算出来了,至于说不能达到最优解,是因为在误差函数中,权重参数的地位对等,其实将隐藏单元的个数减为1, 对系数乘以原来隐藏单元的个数也可以做到。