神经网络101 手把手快速入门神经网络基础

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叫偏置项,下面会谈到。

1-ya95fcxh4h7zys8gsrzvng

所以计算方式是:

1-pa-u0c_k9lpmgya696rq4w

如果你适当组织排列神经元, 用神经元连接线(突触),就可以连接成为比较复杂的神经网络,把上一层的输出,作为下一层的输入,直到最后一层。这就是所谓的前向传播。像下面这个神经网络:

1-5gspus2hwfx4lq2_kcyulg
一个维基百科上的神经网络图片

步骤2: 理解Sigmoid函数

sigmoid函数是神经网络中常用激活函数的一种,有兴趣可以阅读我们之前的博客: 深度学习中的激活函数导引–“深度学习大讲堂”.

1-wjx8puc97thg7qw_8qigew
Sigmoid函数简单地说是把一个值映射到0到1的值,两端极限情况无限平缓地逼近0和1

步骤3: 理解反向传播

从输入到输出的前向传播非常好理解,但是从输出到输入的反向传播过程就不是很好理解。反向传播的目的是修正权重,就是开头第一张图中的蓝色数值。其实整个神经网络训练的目的就是得到好的权重

每次神经网络输入值,通过前向传播到最后一层的输出,与实际输出的预期一定会有差异,这个差异就是错误的修正指标。通过这个指标,我们就可以进行后向传播,最后把所有神经连接的权重进行更新。

1-cywgo_i0fapw4qqgh8gwrg
Matt Mazurs 后向传播教程的截图

上图Eo1Eo2就是刚才说的预测差异和修正权重的指标。

下面再列出一些后向传播的很好教程:

步骤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

邮箱:yanchao727@gmail.com 微信: david9ml

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注