前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅层神经网络

浅层神经网络

作者头像
深度学习与Python
发布2019-06-19 20:15:11
1.5K0
发布2019-06-19 20:15:11
举报

当我们开始学习深度学习时,一般会觉得它由许多隐藏层组成。但浅层神经网络仅包含1或2个隐藏层,这种网络也被称为人工神经网络。在这篇文章中,让我们看看什么是浅层神经网络及其在数学环境中的工作。下图给出了一个浅层神经网络的示例,其中包含1个隐藏层,1个输入层和1个输出层。

神经元

神经元是神经网络的原子单元。在给定输入的情况下,它计算输出并将该输出作为输入传递给后一层。神经元可以分成下边两部分:

  • 第一部分根据输入和权重计算输出Z.
  • 第二部分在Z上执行激活并计算出神经元的最终输出A.

隐含层

隐含层包括各种神经元,每个神经元执行上述2次计算。浅层神经网络隐含层中的神经元计算如下:

在上面的等式中,上标数[i]表示层数,下标数j表示特定层中的神经元数;X是由3个特征组成的输入向量;W[i] j是与层i中存在的神经元 j相关的权重;b[i] j是与层 i中存在的神经元 j相关的偏差;Z[i] j是与层 i中存在的神经元 j相关联的中间输出;A[i] j是与层 i中存在的神经元 j相关联的最终输出;Sigma是激活函数。在数学上它被定义为:

因此,我们将上面的四个方程矢量化可表示为:

前向传播

神经网络是由许多隐含层搭建起来,上边的计算中我们知道某一层中数据的计算,现在让我们来看一下网络中各层之间的前向传播过程。

第一个等式计算第一个隐藏层的中间输出Z [1]。第二个等式计算第一个隐藏层的最终输出A [1]。第三个等式计算输出层的中间输出Z [2]。第四个等式计算输出层的最终输出A [2],也是整个神经网络的最终输出。

激活函数

我们知道神经网络基本上是一组数学方程和权重。为了使网络在不同场景中都有着较高的准确率,我们在网络中加入激活函数。这些激活函数在神经网络中引入非线性特性。那么为什么要加入激活函数呢?现在假设没有激活函数,我们的神经网络可以表示为:

如果我们将等式1中的Z[1]的值代入等式2,那么我们得到以下等式:

所以在没有激活函数的情况下输出将成为权重矩阵W,输入X和新的偏移b的线性组合,这意味着隐含层中的神经元权重失去意义。因此,为了在网络中引入非线性,我们可以采用激活函数包括Sigmoid,Tanh,ReLU,Leaky ReLU等等。并非必须对所有层使用特定的激活功能。您可以为不同图层选择不同的激活功能。

权重初始化

我们知道神经网络的权重矩阵W是随机初始化的。那么为什么不能用0或任何特定值初始化W呢,下面我们将来说明这一点。

设W1为层1的权重矩阵以及W2为层2的权重矩阵,现在我们用0或任何其他值初始化。如果权重矩阵相同,隐藏层中神经元的激活将是相同的。因此,隐藏层中的神经元将以类似的方式更新权重,即在特定隐藏层中具有的多个神经元的意义不大。但是我们希望隐藏层中的每个神经元都是唯一的。因此,我们随机初始化权重。最好的初始化方法是Xavier的初始化。在数学上它被定义为:

该公式表示网络层的权重矩阵W是从正态分布中随机选取的,其中均值μ= 0,方差sigma²=层l-1中神经元数量的乘法逆。所有层的偏差b用0初始化。

梯度下降法

我们知道神经网络的权重是随机初始化的。为了使用神经网络进行正确的预测,我们需要更新这些权重。我们更新这些权重的方法称为Gradient Descent。让我们使用计算图来理解这一点。

在上图中,前向传播(用黑线表示)用于计算给定输入X的输出。后向传播(用红线表示)用于更新权重矩阵W [1],W [2]和偏差b [1],b [2]。权重更新是通过计算计算图中每个步骤的损失函数的导数来完成的。这就是我们所说的梯度下降,损失函数一般定义为:

使用上面的损失L等式并使用sigmoid函数作为隐藏和输出层的激活函数,根据链式法则得到下列结果:

到此,我们基本说明了浅层神经网络的层次结构以及各结构的数学工作原理。希望对大家学习有所帮助。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习与python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档