A Quick Introduction to Neural Networks
Posted on August 9, 2016 by ujjwalkarn
原文链接: https://ujjwalkarn.me/2016/08/09/quick-intro-neural-networks/
An Artificial Neural Network (ANN)是一个计算模型,人工神经网络(ANN)是一种计算模型,其灵感来自人脑处理信息中生物神经网络的方式。在这个blog post我们会对ANN的一个特殊类型叫做Multi Layer Perceptron进行理解。
A Single Neuron
神经网络中计算的基本单元是neuron,通常叫做a node or unit。它接收一些其他nodes的输入,或者来自外部源的输入,并计算出一个输出。每个输入有一个关联的weight(w), 其分配基于它相对于其他输入的相对重要性。节点将函数f(下面定义)应用于其输入的加权和,如下面的图1所示:
上面的network有数值输入X1和X2,以及权重w1和w2。另外,还有一个输入l和权重b(被称作Bias)。我们将学习更多有关角色bias。
从neuron的输出Y被计算,如Figure1展示。函数f是非线性的,被称作Activation Function. Activation function的目的用来引入非线性值到a neuron的输出。这很重要,因为大多数现实世界数据是非线性的,我们需要neurons去学习这些非线性表示。
每一个activation function (or non-linearity)都有一个单个数值,并执行某个固定的数值运算[2]。实际中,你可能会遇到几个activation functions.
Sigmoid: 接受一个真实值的输入,并把它压缩至0到1之间
Tanh: 接受一个真实值的输入,并把它压缩至[-1, 1]之间
ReLU:ReLU代表Rectified Linear Unit. 它接受一个真实值输入,阈值为0,用0代表负值。
下图[2]展示了上面的activation functions.
Importance of Bias: Bias的主要功能是为每个node提供一个训练过的常量(除了每个node接收的normal输入)。查看此链接以学习更多在一个neuron中的bias的功能。
Feedforward Neural Network前置神经网络
前置神经网络是第一个以及最简单的artificial neural network[3]。它包含多个neurons,在layers中排列。来自相邻的layers的nodes之间有connections or edges。所有这些connections都有相关联的weights。示例如下图:
一个feedforward neural network包含三种类型的nodes:
1 Input Nodes: Input nodes给network提供来自外部的信息,都被看作是Input Layer.对任何一个input nodes都没有任何计算,他们只是提供给hidden nodes提供信息。
2 Hidden Nodes: Hidden nodes与外部的世界没有联系(因此叫做hidden). 他们执行计算,并把信息从input nodes传给output nodes. 一个hidden nodes集合形成一个hidden layer。一个feedforward network只会有一个单个input layer和一个单个output layer, 但是它可以有0个或者多个Hidden layers.
3 Output Nodes.输出节点统称为“输出层”, 负责计算和从网络向外界传输信息。
在一个feedforward network中,信息只向一个方向运动-forward,从input nodes,穿过hidden nodes(如果有的话), 然后到output nodes。在该network中没有cycles或者loops[3]。(前馈网络的这种特性不同于递归神经网络,其中节点之间的连接形成一个循环)。
下面给两个feedforward networks的例子:
1 Single Layer Perceptron. 这是最简单的feedforward neural network[4],不包含任何隐藏层[4][5][6][7]。
2 Multi Layer Perceptron.一个multi layer perceptron有一个或者多个隐藏层,我们将只讨论multi layer perceptrons,因为他们在实际应用中比single layer perceptons更有用。
Multi Layer Perceptron
一个multi layer perceptron包含一个或者多个隐藏层。A single layer perceptron只能学习linear functions,一个多层perceptron还可以学习non-linear functions.
Figure 4展示了有单个hidden layer的多层layer perceptron。注意所有的connections都有权重,但是图中只展示了三个权重(w0, w1, w2).
Input layer: Input layer有三个节点。Bias node有一个值1. 另外两个nodes取X1和X2作为external inputs(是依赖于input dataset的数值)。正如上面所讨论的,在input layer没有执行计算。所以来自input layer的nodes 1, x1和x2是分别独立的,并被转入隐藏层 which are fed into the Hidden Layer.
Hidden Layer: 隐藏层有三个节点,并有一个Bias节点具有output值1. 隐藏层中其他两个节点的输出取决于输入层(1,X1,X2)的输出以及与连接(边缘)相关的权重。Figure 4展示了对于一个隐藏节点的输出计算(高亮部分). 类似的,来自其他隐藏node的输出也可以计算。记住,f是指activation function。这些输出然后被转入output layer中的节点。
Output layer: Output layer有两个节点,接收来自Hidden layer的输入,以及执行类似于高亮部分的计算。作为这些计算的结果计算的值(Y1和Y2)充当多层感知器的输出。
给定一个特征集X = (x1, x2, …)以及目标y, 一个Multi Layer Perceptron可以学习特征和目标之间的关系,用于任何一个分类或者回归。
下面举例说明Multi Layer Perceptrons。假设我们有如下的student-marks数据集:
两个输入栏显示学生学习的小时数和学生获得的中期分数。 “最终结果”列可以有两个值1或0,表示学生是否在最后一学期通过。例如,我们可以看到,如果学生学习了35个小时并且在中期获得了67分,他/她最终通过了最后一个学期。
现在,假设,我们想要预测一名学生在中期学习25小时并且有70分的学生是否会通过最后一学期。
这是一个二元分类问题,其中多层感知器可以从给定的示例(训练数据)中学习并在给定新数据点的情况下做出明智的预测。我们将在下面看到多层感知器如何学习这种关系。
Training our MLP: The back-propagation Algorithm
Multi Layer Perceptron学习的过程被称作是Backpropagation algorithm。我推荐阅读this Quora answer by Hemanth Kumar(在下面被引用),其清晰的解释了Backpropagation.
Backward Propagation of Errors,通常被缩写为BackProp,是ANN被训练的几种方法中一种。它是一个监督训练过程a supervised training scheme,也就意味着,它从labeled training data中学习(有一个监督者,引导its learning)。
简单来说, BackProp就像从mistakes中学习 ”learning from mistakes” ,监督者在它犯错误的时候纠正ANN。
一个ANN在不同层中包含节点: input layer, intermediate layers 以及the output layer. 相邻图层的节点相连都有权重。Learning的目的就是给这些edges分配正确的权重。给定一个输入矢量,这些权重决定了输出的矢量是什么。
在监督学习中,训练集被标注the training set is labeled。这就意味着,对于一些给定的输入,我们知道期望或者期待输出the desired/expected output(label).
BackProp Algorithm:
最初,所有edge的权重被随机分配。对于训练集中的每一个输入,ANN是活跃的,它的输出被观察。该输出与我们已知的期望的输出做比较,然后错误被传播给前一个图层。这个错误被noted,权重被相应的调整。该过程会重复一直到输出的错误在预定的阈值之下。
一旦上面的算法结束,我们就有了一个学习过的ANN,我们认为可以去接受新的输入了。该ANN被认为已经从几个例子(labeled data)和自己的错误(error propagation)中学习了.
现在我们知道Backpropagation如何工作了,我们重新回到student-marks数据集上。
在Figure5中展示的Multi Layer Perceptron(摘自Seadapted from Sebastian Raschka’s excellent visual explanation of the backpropagation algorithm)在输入层有两个节点(除了Bias node),分别是Hours Studied和Mid Term Marks。同时隐藏层也有两个节点(除去Bias Node).输出层也有两个节点-upper node输出Pass的可能性,lower node输出Fail的可能性。
在分类任务中,我们一般使用Softmax function作为Multi Layer Perceptron的Activation Function,以确保输出是概率,并且和为1。
Softmax函数采用a vector of arbitrary real-valued scores,并将其压缩为0到1之间的值的向量,该向量总和为1。那么,在这种情况下,
Probability(Pass) + Probability(Fail) =1
Step 1: Forward Propagation
Network中的权重都是随机分配。让我们考虑Figure5中隐藏层节点标记为V。假设从输入层到该节点的所有连接的权重分别是w1 w2 和w3.
Network然后把第一次训练example作为input(我们知道对于输入35和67来说,Pass的可能性是1).
从该节点的输出V可以如下计算(f是一个activation function 比如sigmoid)
类似的,隐藏层中从另一个节点的输出也同样被计算。隐藏层中两个节点的输出作为输出层的两个节点的输入。这使得我们能够计算输出层的两个节点的输出可能性。
假设输出层中两个节点的输出概率分别为0.4和0.6(因为权重是随机分配的,输出也是随机的)。我们可以看到计算的概率(0.4和0.6)与期望的概率(分别为1和0)相差很远,因此图5中的网络被称为具有“不正确的输出”。
Step 2: Back Propagation and Weight Updation
我们在output nodes处的total error,然后把这些错误使用Backpropagation通过network返回,并计算gradients。然后我们使用优化方法诸如Gradient Descent,去调整网络中的所有的all weights,目的在于减少输出层的错误。在图6中展示(暂时忽略图中的数学方程式)
假设新的赋予每个节点的权重是w4 w5 w6在Backpropagation反传播和调整权重之后。
如果我们现在再次向网络输入相同的示例,则网络应该比以前更好地执行,因为现在已经调整了权重以最小化预测中的错误。如图7所示,与之前的[0.6,-0.4]相比,输出节点处的误差现在减少到[0.2,-0.2]。这意味着我们的网络已经学会正确分类我们的第一个训练示例。
我们在数据集中使用所有其他训练示例重复此过程。然后,据说我们的网络已经学会了这些例子。
如果我们想要预测在期中考试中学习了25个小时,得了70是否通过final term,我们会经历forward propagation step,找到对于Pass and Fail的输出可能性。
我在这里避免使用数学方程和诸如“渐变下降”等概念的解释,而是试图为算法开发直觉。有关Backpropagation算法的更多数学讨论,请参阅此链接。
多层感知Multi Layer Perceptron 的3d可视化
Adam Harley创建了多层感知的3d可视化,已经使用Backpropagation在手写digits的MNIST数据集上进行过训练(which has already been trained using Backpropagation on the MNIST Database of handwritten digits)。
Network接收来自手写数字的28*28图像的784数值像素值作为输入(输入层有784个节点对应于像素)。Network在第一个hidden layer有300个节点,在第二个hidden layer有100个节点,在输出层有10个节点(对应于10个数字)[15]。
虽然与前面部分讨论的网络相比,此处描述的网络要大得多(使用更多的隐藏层和节点),但前向传播步骤和反向传播步骤中的所有计算都以相同的方式(在每个节点处)完成,如上所述之前。 图8显示了输入为数字“5”时的网络。
比其他节点有更高输出值的节点以较明亮的颜色表示。在输入层,明亮的节点是那些接收更高数值作为输入的节点。注意,在输出层中,唯一的明亮节点对应于数字5(输出概率为1,高于其他9个输出概率为0的节点)。这表明MLP已正确分类输入数字。我强烈建议尝试这种可视化并观察不同层节点之间的连接。
Deep Neural Networks
- What is the difference between deep learning and usual machine learning?
- What is the difference between a neural network and a deep neural network?
- How is deep learning different from multilayer perceptron?
结论
在这个post中我略过了一些概念的细节部分以便于理解。我推荐阅读斯坦福的Neural Network tutorial的Part1, Part2, Part3和Case Study以便于更透彻理解Multi Layer Perceptrons.
References
- Artificial Neuron Models
- Neural Networks Part 1: Setting up the Architecture (Stanford CNN Tutorial)
- Wikipedia article on Feed Forward Neural Network
- Wikipedia article on Perceptron
- Single-layer Neural Networks (Perceptrons)
- Single Layer Perceptrons
- Weighted Networks – The Perceptron
- Neural network models (supervised) (scikit learn documentation)
- What does the hidden layer in a neural network compute?
- How to choose the number of hidden layers and nodes in a feedforward neural network?
- Crash Introduction to Artificial Neural Networks
- Why the BIAS is necessary in ANN? Should we have separate BIAS for each layer?
- Basic Neural Network Tutorial – Theory
- Neural Networks Demystified (Video Series): Part 1, Welch Labs @ MLconf SF
- A. W. Harley, “An Interactive Node-Link Visualization of Convolutional Neural Networks,” in ISVC, pages 867-877, 2015 (link)