继在《要做好深度学习任务,不妨先在损失函数上「做好文章」》一文中为大家深入浅出地介绍了损失函数的相关知识后,Deep Learning Demystified 编辑、数据科学家 Harsha Bommana 本次接着从优化的角度,结合数学方式和可视化图,带大家以「看得见」的方式来了解神经网络如何一步步找到最小化的损失值,并最终实现最优化。
在前一篇文章《要做好深度学习任务,不妨先在损失函数上「做好文章」》中,我们对损失函数有了一个比较清晰的认知,它能够让我们知道模型在某一阶段的表现情况。现在,我们需要使用损失函数来训练网络以提高网络的性能。根本上,我们需要做的其实是获得损失值并尽可能地将其最小化,因为损失值越小,模型的性能就越高。最小化数学表示的这一过程就叫做优化,下面我们就看看如何在神经网络上将这些优化方法用其起来~
在神经网络中,每个层之间都有很多权重。我们需要了解的是:神经网络中每层的每个权重都会以某种方式影响到网络的输出,这是因为它们全都直接或间接地与输出有关联。
因此,我们可以说,如果我们改变神经网络中的任一特定的权重,网络的输出也会改变。
如下图所示,我们尝试了 3 种不同的场景。在每个场景中,我们都选择了一些随机的权重,并对其进行了更改。同时,下图也显示了,改变选择好的权重会对神经网络的哪些部分产生影响以及哪些部分不构成影响。在这 3 个场景中,网络的最后一层都至少有一个受影响的节点。由于最后一层的所有节点都与输出节点相连,所以我们可以说,只要最后这层的部分某部分受到权重变化的影响,那输出节点也同样会受到影响。
网络更改特定权重会对网络的哪些部分产生影响的可视化图
从上图中,我们同样可以观察到,权重离输出节点更远(离网络的始端更近),会更多地影响到网络始端和输出节点之间的节点。因而,我们可以判断,权重对输出的影响是非常间接的,因为在这些权重和输出之间还存在很多权重。离输出节点更近的权重则会更少地影响到网络始端和输出节点之间的节点,因此它们会更加直接地影响到输出节点。
了解如何通过改变权重来改变网络的输出后,我们接下来要知道如何最小化损失。改变权重就会改变输出,而改变输出就会改变损失——因为损失就是一个预测 (Y_pred) 值的函数,而这个值本质上就是网络的输出。所以,我们可以得出的结论是,改变权重最终会让损失也发生改变。
我们已经展示了权重和最终的损失之间的关系,但是目前为止我们还仅仅探讨了改变。改变可以是增加的意思,也可以是减少的意思,而在这里我们需要的是减少损失。所以,我们需要探索以这种方式来改变权重究竟如何能够能让损失减少。这一过程就叫做优化。
从数学的角度来看,我们可以通过使用偏导数(Partial Derivatives)来实现这个过程。偏导数能够让我们理解两个数学表达式如何相互影响。让我们先假设 X 和 Y,它们之间存在某些任意的数学关系,如果我们能够得到 X 对 Y 的偏导数,我们就能够知道 X 的改变如何影响 Y。如果偏导数为正,就意味着 Y 会随着 X 的增大而增大;如果为负,则意味着 Y 随 X 的增大而减小。
如此一来,我们需要得到神经网络中的每个权重对损失的偏导数。在某个特定案例中,如果权重的偏导数为正,那我们就减小权重从而减小损失;如果为负&