深度学习:前馈神经网络解释
前馈神经网络也称为多层神经元网络(MLN)。这些模型网络之所以称为前馈,因为信息仅在神经网络中正向传播,通过输入节点,然后通过隐藏层(单层或多层),最后通过输出节点。在MLN中,没有feedback连接,使得网络的输出反馈到其自身。这些网络由许多更简单模型(sigmoid神经元)组合表示。
动机:非线性数据
在我们讨论前馈神经网络之前,让我们先了解一下这种神经网络的需求。传统的模型,比如感知器,它接受真实的输入,只有当数据是线性可分离的时才给出布尔输出。这意味着正点(绿色)在边界的一边,负点(红色)在边界的另一边。从下图可以看出,感知机在寻找最佳决策边界来区分正负点方面做得很差。
非线性数据的感知器决策面
接下来,我们有一个类似于感知器的Sigmoid神经元模型,但是Sigmoid模型稍微做了修改,使得Sigmoid神经元的输出比感知器的阶跃函数输出平滑得多。虽然我们引入了非线性的Sigmoid神经元函数,但它仍然不能有效地将红点(负点)与绿点(正点)分开。
非线性数据的Sigmoid神经元决策边界
重要的一点是,我们已经从感知器中的一个严格的决策边界开始,朝着创建一个对于非线性可分离数据工作良好的决策边界的方向迈出了第一步。sigmoid神经元是前馈神经网络的组成部分。
我们知道单个sigmoid神经元也不能处理非线性数据。如果我们可以用有效的方式连接多个sigmoid神经元,这样就可以将神经元的组合近似为输入和输出之间的任何复杂关系,这是处理非线性数据所必需的。
非线性数据的Sigmoid神经元组合
前馈神经网络
多层神经元网络由许多Sigmoid神经元组成。MLN能够处理非线性可分离数据。存在于输入和输出层之间的层称为隐藏层。隐藏层用于处理输入和输出之间复杂的非线性可分离关系。
简单的深度神经网络
在本节中,我们将看到如何使用非常简单的神经网络来解决复杂的非线性决策边界。
让我们举一个手机预测器(喜欢/不喜欢)的例子,它有两个变量:屏幕尺寸和成本。它有一个复杂的决策边界,如下所示:
决策边界
我们知道,通过使用单个Sigmoid神经元,不可能获得这种非线性决策边界(无论我们如何改变Sigmoid神经元的参数w和b)。现在改变一下情况,用一个简单的神经元网络来解决同样的问题,看看它是如何处理的。
简单神经网络
我们的输入为x 1( 屏幕尺寸)和x 2 (价格),偏差为b1和b2。
现在让我们来理解一下这个模型。我们在第一层有第一个神经元(最左边),它与输入x 1和x 2连接,权重为w 11和w 12,权重为b 1和b 2。该神经元的输出表示为h1,它是x1和x2的函数,参数为w 11和w 12。
输出第一个神经元
如果我们将sigmoid函数应用于具有适当权重w11,w12和偏差 b1的输入x1和x2,我们将得到输出h1,它将是0和1之间的某个实数值。第一个神经元h1的sigmoid输出将由下式给出,
第一神经元的输出Sigmoid
接下来,我们在第一层中有另一个神经元,它与输入x 1和x 2连接,其权重为w13和w14以及偏差b3和b4。第二个神经元的输出表示为h2。
输出第二个神经元
类似地,第二个神经元h2的sigmoid输出将由下式给出,
到目前为止,我们已经看到了目前第一层的神经元,但我们还有另一个输出神经元需要h1和h2作为输入,而不是以前的神经元。这个神经元的输出将是最终预测的输出,它是h1和h2的函数。预测输出由以下等式给出,
之前我们只能调整单个sigmoid神经元的w1,w2和b。现在我们可以调整9个参数(w₁₁, w₁₂, w₁₃, w₁₄, w₂₁, w₂₂, b₁,₂b, b₃),它允许更复杂的决策边界的处理。通过尝试这些参数的不同配置,我们将能够找到最优曲面,其中整个中间区域(红点)的输出为1,其他地方为零,这正是我们所希望的。
网络决策边界
需要注意的重要一点是,即使使用简单的神经网络,我们也能够模拟输入和输出之间的复杂关系。
通用深度神经网络
在前面,我们已经看到了针对特定任务的神经网络,现在我们将讨论通用形式的神经网络。
没有连接的通用网络
假设我们的神经元网络有两个隐藏层(用蓝色表示,但如果需要,可以超过两层),每个隐藏层有3个sigmoid神经元(可以有更多的神经元)。我们有三个输入进入网络(为了简单起见,我只使用了三个输入,但它可以接受n个输入),在输出层有两个神经元。就像我之前说的,我们将以这个网络为例来理解深度神经网络的复杂性。
首先,我将解释术语,然后我们将讨论这些神经元如何相互作用。对于这些神经元中的每一个,都会发生两件事
- 由'a'表示的预激活:它是输入加偏差的加权和。
- 由'h'表示的激活:激活函数是Sigmoid函数。
带连接的通用网络
W 111-与连接到第一个输入的第一个隐藏层中存在的第一个神经元相关的权重。
W 112-与连接到第二个输入的第一个隐藏层中存在的第一个神经元相关的权重。
b11 - 与第一个隐藏层中存在的第一个神经元相关的偏差。
b12 - 与第一个隐藏层中存在的第二个神经元相关的偏差。
等等......
这里W1是一个权重矩阵,包含与各个输入相关的各个权重。每层的预激活是来自前一层的输入加上偏差的加权和。每层“i”的预激活数学方程式由下式给出,
预激活函数
每层的激活等于将Sigmoid函数应用于该层的预激活输出。每层'i'的激活数学方程式由下式给出,
激活函数
最后,我们可以通过将某种激活函数(可以是取决于任务的softmax)应用于前一层的预激活输出来获得神经网络的预测输出。预测输出的等式如下所示,
输出激活函数
深度神经网络的计算
现在我们将看到DNN内部的计算是如何发生的。
考虑在第一和第二隐藏层中有100个输入和10个神经元。100个输入中的每一个将连接到神经元。第一个神经元W1的权重矩阵将有总共10×100个权重。
权重矩阵
记住,对于权重和偏差变量的指标,我们遵循一种非常具体的格式,如下所示,
W(层编号)(层中的神经元编号)(输入编号)
b(层编号)(与该输入关联的偏差编号)
现在让我们看看我们如何计算第一层a11的第一个神经元的预激活。我们知道预激活只不过是输入加偏差的加权和。换句话说,它是权重矩阵W1的第一行和输入矩阵X加偏差b11之间的点积。
类似地,第一层中其他9个神经元的预激活,
简而言之,第一层的整体预激活由下式给出:
其中,W1是含有与相应输入相关的各个权重的矩阵。
第一层的激活由下式给出
其中'g'代表sigmoid函数。
记住a1是10个预激活值的向量,这里我们在所有这10个值上应用逐元素的sigmoid函数,并将它们存储在另一个表示为h1的向量中。类似地,我们可以计算网络中存在的“n”个隐藏层的预激活和激活值。
DNN的输出层
到目前为止,我们已经讨论了隐藏层中的计算。现在我们将讨论输出层中的计算。
带连接的通用网络
我们可以通过取与W3相关的权重的点积和前一层h 2加上偏置矢量b 3的激活来计算输出层的预激活a3。
预激活输出层
为了找出网络的预测输出,我们将一些函数应用于预激活值。
预测值
这两个输出将形成概率分布,这意味着它们的总和将等于1。
根据手头的任务选择输出激活函数,可以是softmax或线性激活函数。
Softmax函数
我们将使用Softmax函数作为输出激活函数,这是深度学习中最常用的激活函数(用于分类问题)。
Softmax函数
在Softmax函数中,无论输入如何,输出始终为正。
现在,让我们在上面显示的带有4个输出神经元的网络上演示Softmax函数。这4个神经元的输出都用向量a表示。对于这个向量,我们将使用我们的softmax激活函数来得到预测的概率分布,如下所示,
应用Softmax函数
通过应用softmax函数,我们得到预测的概率分布,我们的真实输出也是概率分布,我们可以比较这两个分布来计算网络的损失。
损失函数
在本节中,我们将讨论二元分类和多类分类的损失函数。损失函数的目的是告诉模型在学习过程中需要进行一些校正。
通常,输出层中的神经元数量将等于类的数量。但是在二元分类的情况下,我们只能使用一个输出概率P(Y = 1)的sigmoid神经元,因此我们可以得到P(Y=0) = 1-P(Y=1)。在分类的情况下,我们将使用交叉熵损失来比较预测的概率分布和真实的概率分布。
二元分类的交叉熵损失由下式给出,
多类分类的交叉熵损失由下式给出,
学习算法:非数学版本
我们将看到使用梯度下降学习算法的非数学版本。该学习算法的目标是确定参数的最优取值,使深度神经网络的整体损失尽可能地减小。
学习算法是这样的,
我们随机地初始化所有权重w(w111,w 112,...)和b(b 1,b 2,...)。然后我们迭代数据中的所有观察结果,对于每个观察,从神经网络中找到相应的预测分布并使用交叉熵函数计算损失。根据损失值,我们将更新权重,使新模型的模型总损失小于模型的当前损失。
结论
在这篇文章中,我们简要地研究了感知器和sigmoid神经元等传统模型处理非线性数据的局限性,然后我们继续研究了如何使用简单的神经网络来解决复杂的决策边界问题。然后,我们详细研究了一般意义上的神经网络和神经网络背后的计算。最后,我们研究了深度神经网络的学习算法。