博客 / Others/ 如何使用30行代码快速创建神经网络?(附工具&教程)

如何使用30行代码快速创建神经网络?(附工具&教程)

引言

本文将指导你如何使用约30行JavaScript代码,快速构建并训练一个简单的神经网络。我们将借助Synaptic.js库,在浏览器或Node.js环境中实现一个学习异或(XOR)逻辑运算的神经网络模型。

神经网络基础概念

在开始编码前,我们先简要回顾几个核心概念。

神经元与突触

神经元是神经网络的基本单元,它接收输入,经过计算后产生输出。我们将使用Sigmoid神经元,其激活函数能将任意输入值映射到0到1之间。

一个神经元的输入通常是前一层神经元输出的加权和,加上一个偏置项。权重和偏置是神经网络通过训练学习的关键参数。

前向传播与反向传播

将多个神经元按层连接,就形成了神经网络。数据从输入层流向输出层的过程称为前向传播

训练的目标是让网络学会“泛化”,例如正确分类数据。训练时,我们给网络输入大量样本,计算其预测值与真实值的误差,然后通过反向传播算法,将误差从输出层向输入层反向传递,并据此调整各层的权重和偏置,使下一次预测更准确。这个过程会重复成千上万次。

如果你想深入了解反向传播的原理,可以参考以下资源:

实战:用Synaptic.js构建神经网络

现在,我们进入代码实战环节。

1. 创建网络结构

首先,使用new Layer()创建网络的各层,参数代表该层的神经元数量。

// 引入Synaptic.js库
const { Layer, Network } = require('synaptic');

// 创建输入层(2个神经元)、隐藏层(3个神经元)、输出层(1个神经元)
const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);

接着,将这些层连接起来并实例化网络:

// 连接各层
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);

// 实例化神经网络
const myNetwork = new Network({
  input: inputLayer,
  hidden: [hiddenLayer],
  output: outputLayer
});

这样就构建了一个2-3-1结构的神经网络(2个输入,3个隐藏神经元,1个输出)。

2. 训练神经网络

我们将训练网络学习XOR运算。XOR的真值表为:输入[0,0]或[1,1]时输出0;输入[0,1]或[1,0]时输出1。

// 定义学习率和训练数据
const learningRate = 0.3;
const trainingData = [
  { input: [0, 0], output: [0] },
  { input: [0, 1], output: [1] },
  { input: [1, 0], output: [1] },
  { input: [1, 1], output: [0] }
];

// 训练20000次
for (let i = 0; i < 20000; i++) {
  trainingData.forEach(data => {
    // 前向传播(激活网络)
    myNetwork.activate(data.input);
    // 反向传播(根据误差调整权重和偏置)
    myNetwork.propagate(learningRate, data.output);
  });
}

在每次迭代中,我们对四个可能的输入都进行一次前向传播和反向传播。propagate方法根据网络输出与目标输出的误差,使用学习率来更新内部参数。

3. 测试训练结果

训练完成后,我们可以测试网络的预测能力:

// 测试训练后的网络
console.log(myNetwork.activate([0, 0])); // 应接近 [0]
console.log(myNetwork.activate([0, 1])); // 应接近 [1]
console.log(myNetwork.activate([1, 0])); // 应接近 [1]
console.log(myNetwork.activate([1, 1])); // 应接近 [0]

将输出值四舍五入到最近的整数,应该能得到正确的XOR运算结果。

总结与后续

通过这个简单的例子,你已成功用JavaScript创建并训练了一个神经网络。虽然这只是深度学习的入门,但它为你使用Synaptic.js库打下了基础。该库的GitHub Wiki(链接)提供了更多高级教程和示例,值得进一步探索。

请注意,本文示例基于Synaptic.js库。虽然该库仍可使用,但社区中也有更多现代选择(如TensorFlow.js)。不过,其核心概念和训练流程是相通的。

发表评论

您的邮箱不会公开。必填项已用 * 标注。