深度学习在很大程度上是关于解决大规模、复杂的优化问题。神经网络本质上是一个非常复杂的函数,由数百万个参数组成,代表着一个问题的数学解决方案。以图像分类任务为例,AlexNet 就是一个数学函数,它接受一个表示图像 RGB 值的数组,并输出一系列类别得分。
训练神经网络与损失函数
训练神经网络,本质上就是最小化一个损失函数。损失函数的值能衡量我们的网络在给定数据集上的表现与完美表现之间的差距。为了便于理解,我们假设网络只有两个参数(实际中可能约有十亿个参数)。损失函数的轮廓可能看起来像一个“山谷”,x 轴和 y 轴代表两个权重的值,z 轴代表特定权重值下损失函数的值。我们的目标是找到使损失最小的权重值,这个点被称为损失函数的最小值点。
梯度下降算法原理
当我们随机初始化权重时,神经网络的表现可能很差,就像一个喝醉的人把猫的图像分类成人类,对应损失函数轮廓上的点 A,此时损失很高。我们需要找到一种方法,从点 A 导航到“山谷”底部的点 B,即损失函数的最小值点。
首先,我们要确定在 x - y 平面的所有可能方向中,沿着哪个方向能使损失函数的值下降最快。这个方向与梯度的方向正好相反,梯度是导数在高维空间的“表亲”,它给出了函数上升最快的方向。在任何曲线上的点,我们可以定义一个切平面,在这个平面上有