只看一层连接你可能不觉得什么:4个输入神经元接到3个隐藏神经元,权重数就是4×3=12个。紧接着这3个隐藏神经元再连到下一层2个神经元,又多了3×2=6个。两层加在一起,18个参数就铺开了。而这还只是“4-3-2”这种极小的示意结构,现实中的网络动辄几百上千个神经元,层间乘积的累积速度会让参数规模直接撞上百万甚至数十亿量级。
权重数的膨胀并不是简单地随神经元个数线性往上加,而是每一对相邻层都把前一层的全部神经元与后一层的全部神经元进行全连接——这种每层之间的“完全配对”让权重数踩着乘法的台阶往上跳。所以深层网络之所以大,往往不是因为某一层特别宽,而是层与层之间的连线数叠起来之后,量级直接被推高了。
打开网易新闻 查看精彩图片
参数多了,怎么让这些权重朝着让损失变小的方向移动?梯度下降的做法比想象中更直观:在损失函数曲线上,看当前权重位置的“斜率”。斜率为负,说明曲线向右在往下走,要让权重值变大才能滑向更低的点;斜率为正,曲线向右在往上抬,那就要把权重值减小。更新公式里的“减去学习率乘梯度”,其实就是在用梯度的符号做方向盘——减去正梯度把权重往下拉,减去负梯度则相当于往上推,确保每次移动都是冲着损失更低的地方去。
单个神经元的数学手算还能应付,但一旦隐藏层堆叠起来,每一层都在影响最终输出,只靠看最后一个位置的斜率已经理不清前面每一层的功劳与过失了。这就是为什么多层网络必须依赖反向传播的链式法则——而如果先像滚球下山那样,把梯度下降的物理直觉先建立好,再去拆链式求导的步骤,就不会觉得那只是一堆符号的堆砌。
热门跟贴