7 分钟内使用 JavaScript 创建神经网络!
简单理论
前向传播
反向传播(或反向传播或反向传播)
实践
结论
嘿,大家好吗😁 今天,我要教大家如何用 JavaScript 自己构建一个简单的神经网络,无需任何AI 框架。快来试试吧!
为了更好地理解,您需要了解以下几点:
- 面向对象编程、JS、ES6;
- 基础数学;
- 基本线性代数。
简单理论
神经网络是由突触连接的神经元的集合。一个神经元可以表示为一个函数,它接收一些输入值并产生一些输出。
每个突触都有其自身的权重。因此,神经网络的主要元素是以特定方式层层连接的神经元。
每个神经网络至少有一个输入层、至少一个隐藏层和一个输出层。当每一层中的每个神经元都与下一层的所有神经元相连时,它被称为多层感知器 (MLP)。如果神经网络有多个隐藏层,则被称为深度神经网络 (DNN)。
图中表示6-4-3-1类型的 DNN ,即输入层有 6 个神经元,第一个隐藏层有 4 个神经元,第二个隐藏层有 3 个神经元,输出层有 1 个神经元。
前向传播
一个神经元可以有一个或多个输入,这些输入可以是其他神经元的输出。
- X1和X2——输入数据;
- w1,w2——权重;
- f(x1, x2) - 激活函数;
- Y——输出值。
因此,我们可以用数学公式来描述上述所有内容:
该公式描述了神经元的输入值。公式中:n - 输入数量,x - 输入值,w - 权重,b - 偏差(我们暂时不会用到这个特性,但现在你应该知道一点——它始终等于 1)。
如你所见,我们需要将每个输入值乘以其权重,并求和。我们得到了x乘以w 的乘积之和。下一步是将输出值网络传递给激活函数。同样的操作需要应用于神经网络中的每个神经元。
最后,你知道了什么是前向传播。
反向传播(或反向传播或反向传播)
反向传播是 1970 年首次提出的强大算法之一。[阅读更多关于其工作原理的信息。]
反向传播由几个步骤组成,您需要将其应用于神经网络中的每个神经元。
- 首先,需要计算神经网络输出层的误差。
目标 - 真实值,输出 - 神经网络的实际输出。
- 第二步是计算增量误差值。
f' ——激活函数的导数。
- 计算隐藏层神经元的误差。
突触 ——连接隐藏层和输出层的神经元的权重。
然后我们再次计算delta,但现在是针对隐藏层神经元。
输出 ——隐藏层中神经元的输出值。
- 现在该更新权重了。
lrate—— 学习率。
朋友们,我们刚才用了最简单的反向传播算法和梯度下降😯。如果你想深入了解,可以看看这个视频。
就这样。所有数学运算都完成了。只需编写代码即可!
实践
因此,我们将创建 MLP 来解决 XOR 问题(真的吗?😯)。
从最简单的事到最难的事,兄弟。一切都会好起来的。
输入、输出进行异或。
我们将使用Node.js平台和math.js库(类似于Python中的numpy)。在终端中运行以下命令:
mkdir mlp && cd mlp
npm init
npm install babel-cli babel-preset-env mathjs
让我们创建一个名为 的文件activations.js
,其中包含我们的激活函数定义。在我们的示例中,我们将使用经典的 S 型函数(老派,兄弟)。
import {exp} from 'mathjs' | |
export function sigmoid(x, derivative) { | |
let fx = 1 / (1 + exp(-x)); | |
if (derivative) | |
return fx * (1 - fx); | |
return fx; | |
} |
import {exp} from 'mathjs' | |
export function sigmoid(x, derivative) { | |
let fx = 1 / (1 + exp(-x)); | |
if (derivative) | |
return fx * (1 - fx); | |
return fx; | |
} |
然后让我们创建nn.js
包含NeuralNetwork
类实现的文件。
好像缺少了一些东西……哦,没错!我们需要trainable
为我们的网络增加能力。
并仅添加predict
产生结果的方法。
最后,让我们创建index.js
一个文件,将上面创建的所有内容合并到其中。
我们的神经网络的预测:
结论
如你所见,网络的误差在每个迭代周期中都会趋于零。但你知道吗?我告诉你一个秘密——它不会达到零,兄弟。那件事可能需要很长时间才能完成。它不会发生。永远不会。
最后,我们看到的结果与输入数据非常接近。最简单的神经网络,但它确实有效!
源代码可以在我的GitHub上找到。
我用我的母语发表的原创文章。
文章来源:https://dev.to/liashchynskyi/creating-of-neural-network-using-javascript-in-7minutes-o21