返回
从头学 Deep Learning:纯 JS 手写深度学习玩转 Chrome 恐龙游戏(一)
人工智能
2023-12-06 20:47:37
Chrome 恐龙游戏大作战:纯 JS 手写深度学习(一)
在上一章中,我们探讨了机器学习的基本概念。实践是学习的最佳途径,因此我们使用纯 JS(不使用 XNN 库)构建了一个简单的深度学习库,旨在通关 Chrome 恐龙游戏。
构建自己的深度学习库
要使用纯 JS 编写神经网络,我们首先需要构建一个库来处理矩阵运算、激活函数和梯度计算等基本操作。
矩阵运算
class Matrix {
constructor(rows, cols) {
this.data = Array(rows).fill(0).map(() => Array(cols).fill(0));
}
// ... 省略其他方法和操作符重载 ...
}
激活函数
const relu = (x) => Math.max(0, x);
const sigmoid = (x) => 1 / (1 + Math.exp(-x));
const tanh = (x) => (Math.exp(2 * x) - 1) / (Math.exp(2 * x) + 1);
梯度计算
const dRelu = (x) => x > 0 ? 1 : 0;
const dSigmoid = (x) => sigmoid(x) * (1 - sigmoid(x));
const dTanh = (x) => 1 - tanh(x) ** 2;
设计神经网络
我们的神经网络将采用简单的多层感知器(MLP)架构,由一个输入层、一个隐藏层和一个输出层组成。
前向传播
class NeuralNetwork {
constructor(inputSize, hiddenSize, outputSize) {
// 初始化权重和偏置
this.weights = [];
this.biases = [];
// ... 省略其他方法 ...
}
forward(input) {
// 前向传播计算
let output = input;
for (let i = 0; i < this.weights.length; i++) {
output = Matrix.multiply(output, this.weights[i]).add(this.biases[i]);
output = output.map((x) => relu(x)); // 使用 ReLU 激活函数
}
return output;
}
}
反向传播
class NeuralNetwork {
// ... 省略其他方法 ...
backward(input, target) {
// 反向传播计算
let output = input;
let gradients = [];
for (let i = this.weights.length - 1; i >= 0; i--) {
let error = target.subtract(output);
gradients.push({
weights: Matrix.multiply(output.transpose(), error),
biases: error,
});
output = Matrix.multiply(output, this.weights[i]).add(this.biases[i]);
output = output.map((x) => dRelu(x)); // 使用 ReLU 激活函数的导数
}
return gradients;
}
}
训练神经网络
我们使用简单的梯度下降算法来训练神经网络。
class NeuralNetwork {
// ... 省略其他方法 ...
train(inputs, targets, learningRate) {
for (let i = 0; i < inputs.length; i++) {
let gradients = this.backward(inputs[i], targets[i]);
for (let j = 0; j < this.weights.length; j++) {
this.weights[j].subtract(gradients[j].weights.multiply(learningRate));
this.biases[j].subtract(gradients[j].biases.multiply(learningRate));
}
}
}
}
应用于 Chrome 恐龙游戏
现在我们有了自己的深度学习库,我们可以将它应用于 Chrome 恐龙游戏中。
收集数据
我们需要收集恐龙在游戏中遇到的障碍物数据,包括恐龙的当前位置、障碍物的位置和类型等。
训练模型
我们使用收集到的数据训练神经网络,预测恐龙是否应该跳跃或下蹲以躲避障碍物。
控制恐龙
训练完成后,我们将神经网络部署到游戏中,实时预测恐龙的动作。
结论
通过构建自己的深度学习库并将其应用于 Chrome 恐龙游戏中,我们不仅了解了深度学习的基本原理,还体验了其在实际应用中的力量。在接下来的章节中,我们将深入探讨深度学习的更多高级概念,例如卷积神经网络和循环神经网络。