David 9 今天发现一篇很适合作神经网络101的文章, 就是这篇Learning How To Code Neural Networks . 没有什么比自己写一个简单的神经网络更容易理解神经网络的了.
所以, 让我们开始吧 :
步骤1: 神经元和前向传播
什么是神经网络? 我们首先要搞明白什么是神经元.
神经元像一个函数 ; 它输入一些值, 计算后, 仅输出一个值.
下图中, 是一个人工神经元,输入是5,经过Sigmoid函数输出是1. 输入值5是哪里来的呢? 其实就是向量[1, 0]与[7, 3]的点积, 最后加上bias偏置-2,即1*7 + 0*3 + (-2) = 5. 这里的[1, 0]叫输入向量,[7, 3]叫权重向量,-2叫偏置项,下面会谈到。
所以计算方式是:
如果你适当组织排列神经元, 用神经元连接线(突触),就可以连接成为比较复杂的神经网络,把上一层的输出,作为下一层的输入,直到最后一层。这就是所谓的前向传播。像下面这个神经网络:
步骤2: 理解Sigmoid函数
sigmoid函数是神经网络中常用激活函数的一种,有兴趣可以阅读我们之前的博客: 深度学习中的激活函数导引–“深度学习大讲堂”.
步骤3: 理解反向传播
从输入到输出的前向传播非常好理解,但是从输出到输入的反向传播过程就不是很好理解。反向传播的目的是修正权重,就是开头第一张图中的蓝色数值。其实整个神经网络训练的目的就是得到好的权重。
每次神经网络输入值,通过前向传播到最后一层的输出,与实际输出的预期一定会有差异,这个差异就是错误的修正指标。通过这个指标,我们就可以进行后向传播,最后把所有神经连接的权重进行更新。
上图Eo1和Eo2就是刚才说的预测差异和修正权重的指标。
下面再列出一些后向传播的很好教程:
- A Step by Step Backpropagation Example — by Matt Mazur
- Hackers Guide to Neural Nets —by Andrej Karpathy
- NeuralNetworksAndDeepLarning — by Michael Nielsen
步骤4: 写一些自己的神经网络
非常棒的一篇指导文章是IAmTrask的“用Python写一个11行代码的神经网络”。
还有Denny Britz的进阶篇文章“Wild ML tutorial”。
好了,如果你每一个步骤都走过了, 你现在已经不是神经网络小白啦。如果你喜欢我的博客和翻译文章,或者合作和交流,请联系我的微信:yanchao727727
或者打个赏也行啊,嘿嘿~
参考翻译自:
https://medium.com/learning-new-stuff/how-to-learn-neural-networks-758b78f2736e#.g2k4zug9p
David 9
Latest posts by David 9 (see all)
- 修订特征已经变得切实可行, “特征矫正工程”是否会成为潮流? - 27 3 月, 2024
- 量子计算系列#2 : 量子机器学习与量子深度学习补充资料,QML,QeML,QaML - 29 2 月, 2024
- “现象意识”#2:用白盒的视角研究意识和大脑,会是什么景象?微意识,主体感,超心智,意识中层理论 - 16 2 月, 2024