笔者尝试用JavaScript实现最简单的神经网络算法。
神经网络简介
神经网络试图模拟大脑的神经元之间的关系来处理信息。它的计算模型通常需要大量彼此连接的节点。每个神经元通过某种特殊的输出函数来处理来自其它相邻神经元的加权输入值。
神经元之间的信息传递的强度,用所谓的加权值来定义,算法会不断的调整加权值来实现自我的学习过程。
神经网络分为多层,如上图,有输入层,隐藏层和输出层。
JS线性代数包
神经网络的计算涉及到大量的矩阵计算,有许多的线性代数的开源的软件,Python下有著名的numpy,非常有名。 Javascript也有几个:
- http://numericjs.com/index.php
- https://github.com/jstat/jstat
- https://mkaz.tech/javascript-linear-algebra-calculator.html
我使用了numericjs,效果还不错。推荐大家可以试试。
两层神经网络
我们有一些简单的输入输出的数据用来训练神经网络。这里每一行代表一条数据。输入有三个参数,输出是一个。
Inputs 0 | Inputs 1 | Inputs 2 | Output |
---|---|---|---|
0 | 0 | 1 | 0 |
1 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
0 | 1 | 1 | 0 |
首先我们实现一个最简单的神经网络,没有隐藏层,输入直连输出。
因为输入是三个参数,输出是一个,所以我们的神经网络输入层是三个节点,输出是1个。