本期我们来讲反向传播 也就是神经网络学习的核心算法 稍微回顾一下我们之前讲到哪里之后
首先我要撇开公式不提 直观地过一遍 这个算法到底在做什么
然后如果你们有人想认真看里头的数学 下一期影片我会解释这一切背后的微积分 如果你看了前两期影片 或者你已经有足够背景知识 直接空降来这一期影片的话 你一定知道神经网络是什么 以及它如何前馈信息的
这里我们考虑的经典例子就是手写数字识别 数字的像素值被输入到网络第一层的784个神经元里
这里 我展示的是有2层16个神经元隐含层 10个神经元的输出层 代表网络最终给出的选择
我也假设你们已经理解了上期说到的梯度下降法 理解了所谓学习就是指 我们要找到特定的权重偏置 从而使一个代价函数最小化
稍许提醒一下 计算一个训练样本的代价 你需要求出网络的输出 与期待的输出 之间每一项的差的平方和
然后对于成千上万个训练样本都这么算一遍 最后取平均 这就得到了整个网络的代价值
如果你嫌这还不够复杂的话 上集内容也讲到了
我们要求的是代价函数的负梯度
它告诉你如何改变所有连线上的权重偏置 才好让代价下降得最快
反向传播算法 正是用来求这个复杂到爆的梯度的
我希望大家能够把上集中提到的一点牢牢记住 毕竟13000维的梯度向量 说它是难以想象都不为过
所以这里大家请记住另一套思路 梯度向量每一项的大小是在告诉大家 代价函数对于每个参数有多敏感 比如说 你走了一段我讲的过程 计算了负梯度 对应这条线上这个权重的一项等于3.2,而对应这条边上的一项等于0.1
你可以这么来理解 第一个权重对代价函数的值有32倍的影响力 如果你稍微改变一下第一个权重 它对代价值造成的变化
就是改变第二个权重同等大小下的32倍
就我个人而言 我刚开始学习反向传播的时候 我觉得最容易搞混的部分就是各种符号和上标下标 不过 一旦你厘清了算法的思路 算法的每一步其实都挺直观的 其实就是把许许多多微小的调整一层进一层地进行下去而已 所以 开始讲解时 我将完全抛弃所有的符号
给大家一步步解释 每一个训练样本会对权重偏置的调整造成怎样的影响 因为代价函数牵扯到 对成千上万个训练样本的代价取平均值
所以我们调整每一步梯度下降用的权重偏置 也会基于所有的训练样本 原理上是这么说
但为了计算效率 之后咱们会讨个巧 从而不必每一步都非得要计算所有的训练样本
还需要说明一点 我们现在只关注一个训练样本 就这张2 这一个训练样本会对调整权重和偏置造成怎样的影响呢?
现在假设网络还没有完全训练好 那么输出层的激活值看起来就很随机 也许就会出现0.5、0.8、0.2 等等等等
我们并不能直接改动这些激活值 只能改变权重和偏置值
但记住我们想要输出层出现怎样的变动 还是很有用的
因为我们希望图像最终的分类结果是2 我们希望第三个输出值变大 其他数值变小 并且变动的大小应该与现在值和目标值之间的差呈正比 并且变动的大小应该与现在值和目标值之间的差呈正比
举个例子 增加数字“2”神经元的激活值
就应该比减少数字“8”神经元的激活值来得重要 因为后者已经很接近它的目标了
那好 我们更进一步 就来关注下这一个神经元 我们要让这里面的激活值变大 还记得这个激活值是 把前一层所有激活值的加权和 加上一个偏置 再通过sigmoid ReLU之类的挤压函数 最后算出来的吧 所以要增加这个激活值 我们有三条大路可走 一增加偏置 二增加权重 或者三改变上一层的激活值 先来看如何调整权重 各个权重它们的影响力各不相同
连接前一层最亮的神经元的权重 影响力也最大 因为这些权重会与大的激活值相乘 所以至少对于这一个训练样本而言 增大了这几个权重值 对最终代价函数造成的影响 就比增大连接黯淡神经元的权重所造成的影响 要大上好多倍
请记住当我们说到梯度下降的时候 我们并不只看每个参数是该增大还是减小 我们还看该哪个参数的性价比最高
参考
https://youtu.be/Ilg3gGewQ5U?si=Cj4v_7kY3Ee-YDi2