登录 / 注册
IT168数据中心频道
IT168首页 > 数据中心 > 数据中心资讯 > 正文

从零开始:编码神经网络参数的初始化!

2018-04-28 10:31    it168网站 原创  作者: 李佳惠 编辑: 李佳惠

  【IT168 资讯】机器学习/深度学习环境中的优化是改变模型参数以提高其性能的过程。换句话说,它是在预定假设空间中找到最佳参数以获得最佳性能的过程。有三种优化算法:

  ·优化算法不是迭代的,只是简单地求解一个点。

  ·优化算法本质上是迭代的,收敛于可接受的解决方案,而不管参数初始化,如梯度下降应用于逻辑回归。

  ·优化算法本质上是迭代的,适用于一组具有非凸损失函数的问题,如神经网络。因此,参数的初始化在加速收敛和实现更低的错误率方面起着至关重要的作用。

  从零开始:编码神经网络参数的初始化

  在这篇文章中,我们将看看三种不同的参数初始化情况,并看看它是如何影响错误率的:

  1.初始化所有参数为零

  2.将参数初始化为标准正态分布或均匀分布的随机值,并将其乘以标量(例如10)

  3.基于以下参数进行初始化:

  ·Xavier recommendation.

  ·Kaiming He recommendation

  我们将使用在“编码神经网络 - 前向传播和反向传播”文章中编写的函数来初始化参数,计算前向传播和反向传播以及交叉熵成本。

  为了说明上述情况,我们将使用cats vs dogs数据集,其中包含50个猫的图像和50个狗的图像。每个图像在RGB色阶上都是150像素x 150像素。因此,我们将有67,500个特征,其中输入矩阵中的每一列将是一个图像,这意味着我们的输入数据将具有67,500×100维度。

  首先加载数据,然后在启动辅助函数之前显示两个图像的样本。

  从零开始:编码神经网络参数的初始化

  从零开始:编码神经网络参数的初始化

  从零开始:编码神经网络参数的初始化

  现在我们将编写所有的辅助函数,这些函数将帮助我们根据不同的方法初始化参数,并编写我们将用来训练的神经网络的L层模型。

  从零开始:编码神经网络参数的初始化

  从零开始:编码神经网络参数的初始化

  从零开始:编码神经网络参数的初始化

  从零开始:编码神经网络参数的初始化

  将所有参数初始化为零

  在这里,我们将所有权矩阵和偏差初始化为零,看看这会如何影响误差率以及学习参数。

  从零开始:编码神经网络参数的初始化

  从零开始:编码神经网络参数的初始化

  使用零初始化方法的成本曲线

  如成本曲线所示,神经网络没有学到任何东西!这是因为所有神经元之间的对称性导致所有神经元在每次迭代中都具有相同的更新。因此,无论我们运行优化算法有多少次迭代,所有神经元仍会得到相同的更新,并且不会发生学习。因此,当初始化参数时,我们必须破坏对称性,以便模型将开始学习梯度下降的每次更新。

  用大的随机值初始化参数

  如果随机值是从标准正态分布或均匀分布初始化的,所以我们将在例子中使用标准正态分布。此外,我们将随机值乘以一个大数字(如10),以显示将参数初始化为较大的值可能会导致我们的优化具有较高的错误率(甚至在某些情况下会出现分歧)。现在让我们训练神经网络,其中所有权重矩阵已经使用以下公式初始化:np.random.randn()* 10

  从零开始:编码神经网络参数的初始化

  从零开始:编码神经网络参数的初始化

  成本曲线采用随机初始化方法

  这里的随机初始化是有帮助的,但是损失函数仍然具有很高的价值,这可能需要很长时间才能收敛并达到显著低价值。

  根据He和Xavier的初始化参数

  我们将探讨两种初始化方法:

  ·当应用于隐层的激活函数为整流线性单元(ReLU)时,最好应用Kaiming He方法。这样每个隐藏层上的权重将具有以下变量:var(W ^ l)= 2 / n ^(l-1)。我们可以通过乘以标准正态分布的随机值来实现。

  从零开始:编码神经网络参数的初始化

  ·当隐层的激活函数是双曲正切时,Xavier的方法是最好的,这样每个隐含层的权重就会有如下变量:var(W ^ l)= 1 / n ^(l-1)。我们可以通过乘以标准正态分布的随机值来实现。

  从零开始:编码神经网络参数的初始化

  我们将使用这两种方法来训练网络并查看结果。

  从零开始:编码神经网络参数的初始化

  从零开始:编码神经网络参数的初始化

  使用He初始化方法的成本曲线

  从零开始:编码神经网络参数的初始化

  从零开始:编码神经网络参数的初始化

  使用Xavier初始化方法的成本曲线

  从应用的这几种方法可以看出,参数的初始值在实现低成本值以及收敛和实现较低的训练错误率方面起着巨大的作用。如果我们有测试数据,它同样适用于测试错误率。

  结论

  深度学习框架使得更容易在不同的初始化方法之间进行选择,而无需担心自己实现它。尽管如此,了解参数在网络整体性能中的关键角色初始值也很重要。以下是一些关键要点:

  ·精心选择的初始化参数值导致:

  1.加快梯度下降的收敛速度

  2.增加梯度下降的可能性以找到较低的训练和泛化错误率。

  ·因为我们正在处理具有非凸损失函数的迭代优化算法,所以不同的初始化会导致不同的结果。

  ·随机初始化用于破坏对称性,并确保不同的隐藏单元可以学习不同的东西。

  ·不要初始化太大的值。

  ·Kaiming He(He)初始化适用于具有ReLU激活功能的神经网络。

  ·Xavier初始化适用于具有双曲正切激活函数的神经网络。

  创建这篇文章的源代码可以在这里找到。

  (https://github.com/ImadDabbura/blog-posts/blob/master/notebooks/Coding-Neural-Network-Parameters-Initialization.ipynb)

  • IT168企业级IT168企业级
  • IT168文库IT168文库

扫一扫关注

行车视线文章推荐

首页 评论 返回顶部