7分钟用JavaScript创建神经网络!简单理论 正向传播 反向传播(或反向传播,简称backprop) 实践 结论

2025-05-25

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

Enter fullscreen mode Exit fullscreen mode

让我们创建一个名为 的文件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;
}
view raw activation.js hosted with ❤ by GitHub
import {exp} from 'mathjs'
export function sigmoid(x, derivative) {
let fx = 1 / (1 + exp(-x));
if (derivative)
return fx * (1 - fx);
return fx;
}
view raw activation.js hosted with ❤ by GitHub

然后让我们创建nn.js包含NeuralNetwork类实现的文件。

好像缺少了一些东西……哦,没错!我们需要trainable为我们的网络增加能力。

并仅添加predict产生结果的方法。

最后,让我们创建index.js一个文件,将上面创建的所有内容合并到其中。

我们的神经网络的预测:

预测

结论

如你所见,网络的误差在每个迭代周期中都会趋于零。但你知道吗?我告诉你一个秘密——它不会达到零,兄弟。那件事可能需要很长时间才能完成。它不会发生。永远不会。

最后,我们看到的结果与输入数据非常接近。最简单的神经网络,但它确实有效!

源代码可以在我的GitHub上找到。

我用我的母语发表的原创文章。

文章来源:https://dev.to/liashchynskyi/creating-of-neural-network-using-javascript-in-7minutes-o21
PREV
React TS:将函数作为 props 传递时不要重复类型,请使用它们的类型。
NEXT
参加“this”测验,了解“this”在 JavaScript 中的工作原理