提交 090eb26f 编写于 作者: wnma3mz's avatar wnma3mz

add 14th one

上级 54582f3e
### A Quick Introduction to Neural Networks
原文链接:[A Quick Introduction to Neural Networks](https://ujjwalkarn.me/2016/08/09/quick-intro-neural-networks/?from=hackcv&hmsr=hackcv.com&utm_medium=hackcv.com&utm_source=hackcv.com)
人工神经网,是受人脑中神经元处理信息的方式激励,通过使用电脑建立的模拟这种数据处理方式的建立起来的模型。由于在语义理解、机器视觉和文本处理方向的突破性成就,人工神经网络令机器学习领域和工业界同仁都感到十分激动。在这篇博文中,我们简单的理解一种比较特殊的人工神经网络——多层感知机。
#### **一个单独的神经元**
在神经网络中最基础的计算单元就是**神经元**,经常被叫**节点**或者**单元**。其他节点或者外部数据由它输入,经过计算输出。每个输入有一个与之对应的**权重**W。同时这个节点经过下面的**激活方程**作用到权重矩阵和输入矩阵的乘积之和。
![Screen Shot 2016-08-09 at 3.42.21 AM.png](https://ujwlkarn.files.wordpress.com/2016/08/screen-shot-2016-08-09-at-3-42-21-am.png?w=568&h=303)
###### Figure 1: a single neuron
上面的网络需要数值的输入**X1****X2**权重**W1****W2**分别相乘,另外需要加上一个称为偏置的**b**。以后我们将了解到更多关于偏置的细节信息。
图1中从神经元中计算得到的输出**Y**。方程**F**是非线性的一般称为**激活函数**。激活函数的目的就是引入非线性到神经元的输出。这一点的重要性表现在,现实生活中的数据一般都是非线性的,我们需要这些神经元学习表现非线性关系。
每一种激活函数使数值产生固定的数学运算。下面介绍几种经常用到的激活函数。
- **Sigmoid**激活函数: 接收一个实数值输入值,将值转化到0-1区间之内。
σ(x) = 1 / (1 + exp(−x))
- **tanh**激活函数**:** 接收一个实数值输入值,将值转化到[-1, 1]区间之内。
tanh(x) = 2σ(2x) − 1
- **ReLU**激活函数: ReLU代表一个修正线性单元。接收一个实数值输入值,当值大于零保持不变,当小于零输出值为零。
f(x) = max(0, x)
下图展示以上激活函数:
###### ![Screen Shot 2016-08-08 at 11.53.41 AM](https://ujwlkarn.files.wordpress.com/2016/08/screen-shot-2016-08-08-at-11-53-41-am.png?w=748)Figure 2: different activation functions
**偏置的重要性**: 偏置的主要功能在于给每个节点提供一个常数值(作为节点常规输入值的补充)。 See [this link](http://stackoverflow.com/q/2480650/3297280) to learn more about the role of bias in a neuron.
#### **前馈神经网络**
前馈神经网络是最早的最简单的人工神经网络的设计。它包含神经元在**层**间的你安排,相邻的层之间有有**连接**或者**边**。所有这些连接都有相应的**权重值**
以下是一个三层神经网络图:
![Screen Shot 2016-08-09 at 4.19.50 AM.png](https://ujwlkarn.files.wordpress.com/2016/08/screen-shot-2016-08-09-at-4-19-50-am.png?w=498&h=368)
###### Figure 3: an example of feedforward neural network
一个前馈神经网络可以包含三种类型的神经元:
\1. **输入神经元**--输入神经元给神经网络带来外部信息,被称为输入层。在输入层没有涉及计算--它仅仅是将信息传入隐含层。
\2. **隐含层神经元**--隐含层的神经元与玩不神经之间没有之间联系,因此称为隐含层。他们能计算和传递输入层与输出层之间的信息。全部的隐含层神经元组成“隐含层”这个概念。一般一个前馈神经网络有一层输入层和一层单独的输出层,可以没有或者有多层隐藏层。
\3. **输出神经元**--输出神经元集体被称为输出层,代表着从网络到外部的计算和传导。
在一个前馈神经网络中,信息只在一个方向运行-前向-由输入层,经由隐藏层到达输出层。在前馈神经网络中没有循环或者圆环网络(这种特性使得前馈神经网络不通与循环神经网络)。
下面是两个前馈神经网络的例子:
\1. **单层感知机**--这是最简单的前馈神经网,这种网络不包含隐藏层。
\2. **多层感知机-**-一个多层感知机有一层或者多层隐藏层。由于实际应用中,相对于单层感知机而言,多层感知机更实用,接下来我们将介绍多层感知机。
**多层感知机**
一个多层感知机(MLP)除了输出层和输出层之外,包含一层或者多层隐藏层。一般单层感知机只能训练线性模型,而多层感知机不仅可以训练线性模型,同时可以训练非线性摩西。
图4 展示了一个有一层隐藏层的多层感知机。需要注意的是所有连接均包含与之相对应的权重,只是在图中标示出了w0,w1,w3三个权重。
**输入层**:输入层有三个神经元。偏置神神经元值设置值为1,其他两个神经元分别作为外部输入设置为x1,x2(根据输入值情况数值型标示)。跟上面介绍的一样,在输入层没有计算操作,所以经过层数输出进入隐藏层的分别是1,x1,x2。
**隐藏层**:隐藏层同样有三个神经元,其中偏置神经元的输出设置为1。其他两个神经元的输出取决于输入层的的输出1,x1,x2和连接边的权重的乘积。图中标红的神经元,展示这个神经元的计算方式,另一个神经元以同样的方式输出。需要注意的是其中f指代的是激活函数。这些输出将会输入到输出层。
![ds.png](https://ujwlkarn.files.wordpress.com/2016/08/ds.png?w=1128)
###### Figure 4: a multi layer perceptron having one hidden layer
**输出层**:输出层有两个神经元,它们接收隐含层的输入,执行类似标红神经元的操作。计算出的Y1 Y2就是这个多层感知机的结果。
在给定一组特征x=(x1,x2,...)和目标变量y的前提下,一个多层感知机能学习特征和目标变量之间的关系,进而建立分类或者回归模型。
下面使用一个例子来更好的理解多层感知机。假设我们有一下学生的标记数据:
![train.png](https://ujwlkarn.files.wordpress.com/2016/08/train.png?w=297&h=112)
两个输入项分别表明学生学习的时间和在期中考中获得的成绩。结果列有两个值0或者1,分别表明学生在期末考中是否能通过。例如,我们可知如果学生学习35个小时,在期中考试中获得70分,那么他或者她最终能通过期末考。
现在,结社,我们需要预测一个学习学习了25个小时期中考70分能否通过最终考试。
![test.png](https://ujwlkarn.files.wordpress.com/2016/08/test.png?w=300&h=40)
这是一个多层感知机能通过已知例子学习,并给出预测的,二分类的问题。接下来饿哦们看看多层感知机是如何学习这些关系的。
训练我们自己的多层感知机:反向传播算法
训练多层感知机的过程被称为后向传播。我建议读下下面索引中的内容,这些内容给后向传播比较明确的介绍。
**误差反向传播**,也被简写为反向传播,是人工神经网络训练的一种方式。是监督学习的一种,是需要通过标记过的数据来训练模型的。
简单来说,后向传播类似**从错误中学习**。这种监督意味着修正网络产生的错误。
人工神经网络包含来自不同层的神经元:谁层、中间的隐藏层、和输出层。相邻层之间通过与权重相乘来连接。学习的目标给边分配对的权重。在输入矩阵已知的情况下,这些权重决定输出矩阵。
在有监督学习中,训练集是有标记的。这就意味着,对于给定的输出,我们知道想要的输出值或者标签。
**后向传播**:随机的初始化分配边上的权重值。对于训练集中的每次输入,人工神经网络均被激活同时它的产出也是可以被观察到的。网络的输出将同已知标记好的产出进行比较,差异将通过后向传播传给之前的层。权重会根据误差相应的调整。这个过程将不断进行直到输出的错误率小于事先设置的门槛值。
一旦上面的进程终止,我们训练完的人工神经网络。
既然我们队后向传播有了大体理解,现在我们回到上面学生分数的数据集。
图5中展示的多层感知机在输出层除了偏置神经元,有两个神经元接收输入的学习时间和期中成绩。感知机中隐藏层,除了偏置神经元之外有两个神经元。输出层也有两个神经元-上面点神经元输出通过的概率,下面点的神经元输出挂掉的概率。
在分类任务中,我们一般使用归一化指数函数在输出层作为激活函数,来保证输出概率和为1.归一化指数函数可以将一个任意真实值转化到0-1之间,并保证和为1.所以,在这个例子中,p(pass)+p(fail)=1
**第1步:前向过程**
随机初始化网络中的权重。让我们只观看下图5中被标记为V的神经元。假设相关的权重分别为w1,w2,w3。
网络接到第一个训练集中的样本作为输入。
l 输入=【35,67】
l 标记的结果=【1,0】
经过下面的计算神经元V的输出:
V = **f** (1*w1 + 35*w2 + 67*w3)
类似地,隐藏层中另一个神经元也将被计算出来。隐含层中的神经元经过类似输出层神经元类似的操作输入到输出层。这使得我们能够计算输出层输出的概率。
假设,输出层两个神经元给出的概率分别为0.4和0.6(因为权值是随机初始化的,所以输出也是随机的)。这里我们可以发现计算出的概率同想要的概率之间纯真很大差异。因此,图5中的网络输出了一个错误输出。
![Screen Shot 2016-08-09 at 11.52.57 PM.png](https://ujwlkarn.files.wordpress.com/2016/08/screen-shot-2016-08-09-at-11-52-57-pm.png?w=748)
###### Figure 5: forward propagation step in a multi layer perceptron
**第2****步:后向传播和权重更新**
我们计算了输出神经元中的误差,同时后向传播通过这些误差计算梯度。以减少输出层的误差为目标,使用类似梯度下降的优化器,来调整网络中的全部参数。这个过程展示在下图6中。
假设与神经元相关的新权证是w4,w5,w6(后向传播和调整权重后)。
![Screen Shot 2016-08-09 at 11.53.06 PM.png](https://ujwlkarn.files.wordpress.com/2016/08/screen-shot-2016-08-09-at-11-53-06-pm.png?w=748)
###### Figure 6: backward propagation and weight updation step in a multi layer perceptron
如果我们现在输入相同的样本带网络中,网络应该表现的更好一点,因为我们已经通过最小化误差调整了权重参数。正如图7中所示,输入层的误差同【0.6,-0.4】相比,已经减少到【0.2,-0.2】。这就意味着网络已经学会了如何正确的分类我们之前的训练样本。
![Screen Shot 2016-08-09 at 11.53.15 PM.png](https://ujwlkarn.files.wordpress.com/2016/08/screen-shot-2016-08-09-at-11-53-15-pm.png?w=748)
###### Figure 7: the MLP network now performs better on the same input
我们在所有的训练样本中重复以上过程。我们的网络就能学习这些样本。
假设我们想预测一个学生学习了25个小时期中考试75分是否能通过期末考,我们将数据输入到网络中就能得到结果。
这里我尽量避免使用数学上方程和解释梯度下降的概念,想通过建立一种对这种算法直观的理解。
三维视角的多层感知机
Adam Harley建立一种三维视角的剁成感知机,这种感知机已经在手写字识别中被训练和运用。
该网络将784个数字像素值作为来自手写数字的28×28图像的输入(其在输入层中具有对应于像素的784个节点)。网络在第一个隐藏层中有300个节点,在第二个隐藏层中有100个节点,在输出层中有10个节点(对应于10个数字)
虽然与前面部分讨论的网络相比,此处描述的网络要大得多(使用更多的隐藏层和节点),但前向传播步骤和反向传播步骤中的所有计算都以相同的方式(在每个节点处)完成,如上所述之前。
![Screen Shot 2016-08-09 at 5.45.34 PM.png](https://ujwlkarn.files.wordpress.com/2016/08/screen-shot-2016-08-09-at-5-45-34-pm.png?w=748)
###### Figure 8: visualizing the network for an input of ‘5’
具有比其他输出值更高的输出值的节点由更亮的颜色表示。在输入层中,亮节点是接收较高数值像素值作为输入的节点。请注意,在输出层中,唯一的明亮节点对应于数字5(输出概率为1,高于其他9个输出概率为0的节点)。这表明MLP已正确分类输入数字。我强烈建议玩这种可视化并观察不同层节点之间的连接。
#### 深度神经网络
1. \1. [深度学习和普通机器学习有什么区别?](https://github.com/rasbt/python-machine-learning-book/blob/master/faq/difference-deep-and-normal-learning.md)
\2. [神经网络和深层神经网络有什么区别?](http://stats.stackexchange.com/questions/182734/what-is-the-difference-between-a-neural-network-and-a-deep-neural-network?rq=1)
\3. [深层学习与多层感知器有何不同?](https://www.quora.com/How-is-deep-learning-different-from-multilayer-perceptron)
#### 结论
我已经跳过了本文中讨论的一些概念的重要细节,以便于理解。我会建议通过去[第一部分](http://cs231n.github.io/neural-networks-1/)[第2部分](http://cs231n.github.io/neural-networks-2/)[第三部分](http://cs231n.github.io/neural-networks-3/)[案例分析](http://cs231n.github.io/neural-networks-case-study/)从斯坦福大学的神经网络教程多层感知的全面理解。
#### References
1. [Artificial Neuron Models](https://www.willamette.edu/~gorr/classes/cs449/ann-overview.html)
2. [Neural Networks Part 1: Setting up the Architecture (Stanford CNN Tutorial)](http://cs231n.github.io/neural-networks-1/)
3. [Wikipedia article on Feed Forward Neural Network](https://en.wikipedia.org/wiki/Feedforward_neural_network)
4. [Wikipedia article on Perceptron ](https://en.wikipedia.org/wiki/Perceptron)
5. [Single-layer Neural Networks (Perceptrons) ](http://computing.dcu.ie/~humphrys/Notes/Neural/single.neural.html)
6. [Single Layer Perceptrons ](http://www.cs.stir.ac.uk/courses/ITNP4B/lectures/kms/2-Perceptrons.pdf)
7. [Weighted Networks – The Perceptron](http://page.mi.fu-berlin.de/rojas/neural/chapter/K3.pdf)
8. [Neural network models (supervised) (scikit learn documentation)](http://scikit-learn.org/dev/modules/neural_networks_supervised.html)
9. [What does the hidden layer in a neural network compute?](http://stats.stackexchange.com/a/63163/53914)
10. [How to choose the number of hidden layers and nodes in a feedforward neural network? ](http://stats.stackexchange.com/a/1097/53914)
11. [Crash Introduction to Artificial Neural Networks](http://ulcar.uml.edu/~iag/CS/Intro-to-ANN.html)
12. [Why the BIAS is necessary in ANN? Should we have separate BIAS for each layer?](http://stackoverflow.com/questions/7175099/why-the-bias-is-necessary-in-ann-should-we-have-separate-bias-for-each-layer)
13. [Basic Neural Network Tutorial – Theory](https://takinginitiative.wordpress.com/2008/04/03/basic-neural-network-tutorial-theory/)
14. [Neural Networks Demystified (Video Series): Part 1, Welch Labs @ MLconf SF](https://www.youtube.com/watch?v=5MXp9UUkSmc)
15. A. W. Harley, “An Interactive Node-Link Visualization of Convolutional Neural Networks,” in ISVC, pages 867-877, 2015 ([link](http://scs.ryerson.ca/~aharley/vis/harley_vis_isvc15.pdf))
\ No newline at end of file
......@@ -15,26 +15,26 @@
## 翻译贡献者
| 日期 | 翻译 | 校对 |
| --------------------------------------------------- | -------------------------------------------------- | ---- |
| [2017/09/25 第1期](https://hackcv.com/daily/p/1/) | [@wnma](https://github.com/wnma3mz) | |
| [2017/10/04 第2期](https://hackcv.com/daily/p/2/) | [@doordiey](https://github.com/doordiey) | |
| [2017/10/05 第3期](https://hackcv.com/daily/p/3/) | [@Arron206](https://github.com/Arron206) | |
| [2017/10/06 第4期](https://hackcv.com/daily/p/4/) | [@mllove](https://github.com/mllove) | |
| [2017/10/07 第5期](https://hackcv.com/daily/p/5/) | [@wnma](https://github.com/wnma3mz) | |
| [2017/10/08 第6期](https://hackcv.com/daily/p/6/) | [@doordiey](https://github.com/doordiey) | |
| [2017/10/09 第7期](https://hackcv.com/daily/p/7/) | [@mllove](https://github.com/mllove) | |
| [2017/10/10 第8期](https://hackcv.com/daily/p/8/) | [@AlexdanerZe](https://github.com/AlexdanerZe) | |
| [2017/10/11 第9期](https://hackcv.com/daily/p/9/) | [@exqlnet](https://github.com/exqlnet) | |
| [2017/10/11 第10期](https://hackcv.com/daily/p/10/) | [@aboutmydreams](https://github.com/aboutmydreams) | |
| [2017/10/13 第11期](https://hackcv.com/daily/p/11/) | [@wnma](https://github.com/wnma3mz) | |
| [2017/10/14 第12期](https://hackcv.com/daily/p/12/) | [@wnma](https://github.com/wnma3mz) | |
| [2017/10/15 第13期](https://hackcv.com/daily/p/13/) | | |
| [2017/10/16 第14期](https://hackcv.com/daily/p/14/) | | |
| [2017/10/17 第15期](https://hackcv.com/daily/p/15/) | | |
| [2017/10/18 第16期](https://hackcv.com/daily/p/16/) | | |
| [2017/10/19 第17期](https://hackcv.com/daily/p/17/) | | |
| [2017/10/20 第18期](https://hackcv.com/daily/p/18/) | | |
| 日期 | 翻译 | 校对 |
| --------------------------------------------------- | -------------------------------------------------------- | ---- |
| [2017/09/25 第1期](https://hackcv.com/daily/p/1/) | [@wnma](https://github.com/wnma3mz) | |
| [2017/10/04 第2期](https://hackcv.com/daily/p/2/) | [@doordiey](https://github.com/doordiey) | |
| [2017/10/05 第3期](https://hackcv.com/daily/p/3/) | [@Arron206](https://github.com/Arron206) | |
| [2017/10/06 第4期](https://hackcv.com/daily/p/4/) | [@mllove](https://github.com/mllove) | |
| [2017/10/07 第5期](https://hackcv.com/daily/p/5/) | [@wnma](https://github.com/wnma3mz) | |
| [2017/10/08 第6期](https://hackcv.com/daily/p/6/) | [@doordiey](https://github.com/doordiey) | |
| [2017/10/09 第7期](https://hackcv.com/daily/p/7/) | [@mllove](https://github.com/mllove) | |
| [2017/10/10 第8期](https://hackcv.com/daily/p/8/) | [@AlexdanerZe](https://github.com/AlexdanerZe) | |
| [2017/10/11 第9期](https://hackcv.com/daily/p/9/) | [@exqlnet](https://github.com/exqlnet) | |
| [2017/10/11 第10期](https://hackcv.com/daily/p/10/) | [@aboutmydreams](https://github.com/aboutmydreams) | |
| [2017/10/13 第11期](https://hackcv.com/daily/p/11/) | [@wnma](https://github.com/wnma3mz) | |
| [2017/10/14 第12期](https://hackcv.com/daily/p/12/) | [@wnma](https://github.com/wnma3mz) | |
| [2017/10/15 第13期](https://hackcv.com/daily/p/13/) | | |
| [2017/10/16 第14期](https://hackcv.com/daily/p/14/) | [@pickonecat](https://github.com/pickonecat)(暂未完成) | |
| [2017/10/17 第15期](https://hackcv.com/daily/p/15/) | | |
| [2017/10/18 第16期](https://hackcv.com/daily/p/16/) | | |
| [2017/10/19 第17期](https://hackcv.com/daily/p/17/) | | |
| [2017/10/20 第18期](https://hackcv.com/daily/p/18/) | | |
## 贡献指南
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册