神经网络算法与Python(三):误差与学习

参考

一、Python神经网络编程
二、****博客与简书

误差

在第二节中,我们简述了神经网络的运算方式,由此可知,输出结果的误差主要是来源于各个传递通道之间的权重。因此,我需要使用训练数据集来辅助我们“训练”神经网络,即不断地更新权重减小误差。

但是,由于在一个完整的神经网络中,误差是有所有神经元之间的权重决定的,我们并不知道具体哪个神经元的输出结果是多少亦或哪一层的输出结果是多少。我们只知道最终输出结果与实际结果(即训练集中的输出)之间的误差。

因此,这里我们使用反向传播误差的方法决定。即在输出层中的误差按照权重分配到上一层神经元,以此类推。同样地,我们也可以使用矩阵的方法辅助我们求得各个神经元被分得的误差。

学习

由反向传播法求得了各个神经元的误差以后,那么关键问题就变成了这些误差该如何指导神经元进行学习,即如何更新权重?
神经网络算法与Python(三):误差与学习
上图展示了一个简单的三层每层三个神经元的输入输出关系。可见单纯地从数学的角度出发并不能合理地求出最优值(因为随着神经网络越来越复杂,公式也会越来越复杂并且计算量巨大)。

同样采用枚举法显然也不是好的办法来更新权重,因为仅仅从误差的变化来猜测各个权重的大小变化的话由排列组合即可以知道计算量很大。因此实际上,我们使用梯度下降法(gradient descent)来辅助我们学习,这也是神经网络中最核心的内容。