手把手 | 30行JavaScript代码,教你分分钟创建神经网络

点击查看全文


手把手 | 30行JavaScript代码,教你分分钟创建神经网络_第1张图片


自己搭建神经网络太复杂?
手把手 | 30行JavaScript代码,教你分分钟创建神经网络_第2张图片
别怕!

今天我们将手把手教你如何用30行代码轻松创建一个神经网络。

在本篇文章中,你将学到

如何使用Synaptic.js(https://synaptic.juancazala.com/#/ )创建和训练神经网络。

利用这款工具,我们可以在浏览器中用Node.js进行深度学习。

今天我们要讲的例子是一个非常简单的神经网络,我们将用它来学习逻辑异或方程(XOR equation)。

同时,我也在Scrimba上创建了一个交互式屏幕录像。你也可以通过观看视频来学习本教程。(https://scrimba.com/casts/cast-1980 )

在开始编程之前,让我们先快速浏览神经网络的一些基本概念。


神经元和突触

神经网络的第一个模块,是神经元。

神经元类似一个函数,你输入一些值,它就会输出返回值。

神经元有各种不同的类型。我们的神经网络将用到sigmoid神经元(https://en.wikipedia.org/wiki/Sigmoid_function ),将任何输入的给定值,压缩到0到1之间。

下图中的圆圈就代表一个sigmoid神经元。它的输入值是5,输出值是1。箭头则代表的是神经元的突触,用来连接神经网络中其它层的神经元。


手把手 | 30行JavaScript代码,教你分分钟创建神经网络_第3张图片


为什么会有一个红色的数字5呢?它是连接到神经元的三个突触(左边3个箭头)的值之和。

在最左边,我们看到有两个值与所谓的偏差值进行了加法运算。数值1和0是绿色的,而偏差值-2是棕色的。

首先,两个输入值与他们的权重分别相乘,权重就是蓝色数字7和3。

然后,我们把他们和偏差值加起来,所得的结果是5,对应红色数字。这个红色数字就是我们人工神经元的输入值。


手把手 | 30行JavaScript代码,教你分分钟创建神经网络_第4张图片

由于我们的神经元是sigmoid神经元,它会将任何值压缩到0到1的区间范围内,所以输出值被压缩到1。

如果将这些神经元的网络连接起来,就形成了一个神经网络。通过神经元间的突触连接,从输入到输出进行正向传播。如下图所示:

手把手 | 30行JavaScript代码,教你分分钟创建神经网络_第5张图片


神经网络的目标是训练其泛化能力,例如识别手写的数字或者垃圾邮件。做到好的泛化重要的是通过神经网络找到合适的权重和偏差值。如上述例子中的蓝色和棕色数字。

当训练神经网络时,我们只需要加载大量示例数据,如手写的数字,然后让神经网络来预测正确的数字。

在每次预测后,你需要计算预测的偏差程度,然后调整权重和偏差值使得神经网络在下一次运算中可以预测的更加准确。这种学习过程被称为反向传播。如此重复上千次,你的神经网络很快会精于泛化。

本教程不包括反向传播的工作原理介绍,但是我找到了3个好的教程帮助大家理解:

分步介绍反向传播案例(https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/) – 作者:Matt Mazur

神经网路骇客指南(http://karpathy.github.io/neuralnets/) – 作者:Andrej Karpathy

神经网络和深度学习(http://neuralnetworksanddeeplearning.com/chap1.html) – 作者:Michael Nielsen


用代码搭建神经网络


点击查看全文

手把手 | 30行JavaScript代码,教你分分钟创建神经网络_第6张图片

你可能感兴趣的:(大数据,阿里云)