原文:A Quick Introduction to Neural Networks
人工智能神经网络(Artificial Neural Network)的设计灵感来自生物界神经网络传递信息的方式。神经网络在语音识别、机器视觉、文本处理等领域取得了许多突破性成果,在机器学习领域引发广泛关注,本文介绍一种特殊的人工智能神经网络——多层感知器(Multi Layer Perceptron)。
神经元
神经元是神经网络的基本单元,也称作节点(node)或单元(unit),他接收来自其他神经元或外界的输入信息,经过计算产生输出信息。每个输入关联一个权重(weight),权重体现了各输入信息之间的相对重要性。节点用一个函数 f 来计算所有输入的加权和,如下图所示。
如图所示,神经元有输入数字 X1 和 X2,分别有权重 w1 和 w2,另外,有偏执项(Bias)输入 1,偏执项权重为 b。
神经元输出 Y 的计算公式中 f 是一个非线性函数,叫做激活函数(Activation Function),加入激活函数能够产生非线性输出,这对于分析现实中的非线性数据非常重要。
激活函数(或者称非线性函数)通过特定的数学运算将输入数值计算得出结果,常用的激活函数有:
1、Sigmoid 函数:将输入值映射到 0 至 1 的区间内。
σ(x) = 1 / (1 + exp(−x))
2、tanh 函数:将输入值映射到 -1 至 1 的区间内。
tanh(x) = 2σ(2x) − 1
3、ReLU:将负数输出为 0,正数输出为其本身。
f(x) = max(0, x)
以上激活函数如下图所示。
前向传播神经网络
前向传播神经网络是神经网络中最基本的结构,在每层(layers)中包含多个神经元,相邻层之间的节点可以互相连接,并指定连接的权重,如下图所示。
前向传播神经网络可以包含三种类型的节点:
1、输入节点:输入节点提供来自外界的输入,组成“输入层”,输入节点不包含任何计算,只是将输入传到神经网络内。
2、隐含节点:隐含节点不与外界相连,将输入节点传来的信息经过计算后传给输出节点,一组隐含节点组成隐含层,一个前向传播神经网络只能有一个输入层和一个输出层,却可以没有隐含层或包含多个隐含层。
3、输出节点:一组输出节点组成输出层,将网络内的信息传递到外界。
在前向传播神经网络中,信息单向传播(输入节点 -> 隐含节点 -> 输出节点),网络中没有环路(与之对应的是递归神经网络 Recurrent Neural Network,其节点组成环形网络)
两个前向传播神经网络的例子:
1、单层感知器(Single Layer Perceptron):单层感知器是最简单的神经网络,他不包含隐含层。
2、多层感知器(Multi Layer Perceptron):多层感知器包含一个或多个隐含层。
多层感知器(Multi Layer Perceptron)
多层感知器包含一个或多个隐含层,可以学习非线性特征,下图展示了包含一个隐含层的多层感知器,其中的每个连接都有权重,但是图中只标出了3个(w0,w1,w2)。
输入层:输入层有三个节点,偏执节点的值为 1,其他两个节点从外界传入输入 X1 和 X2,如上所述,输入层不包含计算过程,所以输入节点分别向隐含层输出 1、X1、X2。
隐含层:隐含层也有三个节点,偏执节点的值为 1,其他两个节点根据输入层传来的输出及权重计算得出。下图展示了一个隐含节点的输出计算公式,公式中 f 是激活函数。计算出的输出被传入输出层。
输出层:输出层有两个节点,对隐含层的输出进行计算,最终输出 Y1 和 Y2,作为整个多层感知器的输出
给定一个特征集合 X = (x1, x2, …) 和目标 y,多层感知器能够学习到特征和目标之间的分类关系或回归性质。
举例介绍多层感知器,比如我们如下的学生成绩数据
两个输入列是学习时长和期中成绩,结果列是期末成绩,值是1或0,代表是否通过考试。例如,一个学生学习了35小时并在期中考试取得67分,那么他在期末通过了考试。
现在,我们想预测一个学习了25小时并在期中考试取得70分的学生能否通过期末考试。
这是一个典型的二分类问题,多层感知器能够从给定数据(训练数据)学习并给出预测值。
训练多层感知器:反向传播算法
多层感知器的训练过程可以称为反向传播,理解反向传播,可以参考Quora(译文:逆向传播)
图5中的多层感知器的输入层有2个输入节点(不含偏执节点),各代表“学习时长”和“期中成绩”,隐含层有2个隐含节点(不含偏执节点),输出层有2个输出节点(上方的节点代表通过期末考试,下方的节点代表没通过考试)
在分类任务中,我们经常使用 Softmax 函数作为输出层的激活函数,以获得各个输出的概率值(所有输出的概率值总和等于1)。Softmax 函数可以将一个向量映射成值为0到1之间的向量,且总和等于1,在此例中是:
概率(考试通过)+ 概率(不通过)= 1
第一步:前向传播
所有权重参数随机赋值,以图5中隐含节点 V 为例,假设该节点各个输入的权重是 w1、w2、w3。
模型开始学习第一条数据(输入为35和67,输出为考试通过)。
向模型输入:[35, 67]
期望输出:[1, 0]
V 节点的输出计算公式是:
V =f (1*w1 + 35*w2 + 67*w3)
同样,其他隐含层节点的输出也可以计算得出,隐含层的输出作为输出层的输入,这样就可以计算出最终要输出的概率。
假设2个输出节点输出了0.4和0.6(权重的初始值不同,得到的结果也不同),与期望的1和0相差很大,由此可见,图5中的网络模型给出了“错误的输出“。
第二步:反向传播和权重更新
计算输出节点的总误差,并利用反向传播(Backpropagation)将误差的梯度(gradients)传回,然后对权重值进行优化,以减小输出层的输出误差,优化方法可以采用梯度下降等方法,如图6所示。
假设节点 V 更新后的输入权重是 w4、w5、w6。
如果再将同样的数据输入网络模型,由于权重向减小预测误差的方向发生了改变,模型应该有更准确的输出,如图7所示,输出节点的误差变为[0.2, -0.2],比之前的 [0.6, -0.4]有所降低,也就是说,网络模型能够更准确地预测第一条训练数据。
对训练数据中的其他数据重复以上过程,我们说,网络模型学习了这些数据。
此时预测一个学生学习时长是25,期中成绩是70,我们按照前向传播的步骤计算预测值
多层感知器的三维可视化
Adam Harley将多层感知器在MNIST手写数字数据集上进行训练,并将训练好的模型进行三维可视化。
该模型从28 x 28的手写数字图片中读取784个数值像素值作为输入,模型的第一个隐含层拥有300个节点,第二个隐含层拥有100个节点,输出层有10个节点(对应0至9的数字)。
即使该模型的隐含层数和节点数远远多于上面学生成绩的例子,但是前向传播和反向传播的计算方法都是一样的。
图8展示了该网络模型读取数字“5”的情景。
具有更高输出的节点用高亮颜色显示。对于输入层,接收了高数值像素值的节点以高亮显示,对于输出层,只有代表数字“5”的节点显示高亮(这意味着该节点的概率输出接近1,而其他节点的输出均接近0),这说明多层感知器可以对输入的数字进行正确的分类。
若想了解更多信息可以点击查看原文链接
其他机器学习、神经网络相关博文,请点这里