本文讲解第二部分的学习笔记《Gradient descent, how neural networks learn 》为3Blue1Brown神经网络课程,观看地址:www.bilibili.com/video/av16144388我们已经提到了在构建了一个有两个隐藏层的神经网络之后,我们需要这样一个算法:网络得到训练数据后,算法会调整所有的权重和偏置值,以提高网络在训练数据上的性能。我们也希望这种层次结构可以用来类比识别其他图像。网络训练好后,给它没见过的标注数据作为测试,这样就可以知道新的图像分类的准确率。这其实就是求某个函数的最小值。一开始,我们会完全随机地初始化所有的权重和偏置值。可以想象,对于给定的训练示例,该网络将表现得非常糟糕。比如你输入一张3的图像,理想状态应该是输出层3是最亮的点。但实际情况并非如此。这需要定义成本函数。当网络能够正确分类图像时,平方和相对较小,反之亦然。下一步是考虑数万个训练样本的平均成本。神经网络本身是一个具有784个输入值、10个输出和超过13,000个参数的函数。成本函数需要再抽象一层,输入13000多个权重和偏置值,输出是单个值,表示参数的性能。成本函数取决于网络在数以万计的训练数据上的综合性能,但我们还需要告诉网络如何改变这些权重和偏置值,使其性能更好。为了简化问题,我们先不考虑一个有13000多个变量的函数,而是考虑一个只有一个输入变量,也只有一个输出数的简单一元函数。学过微积分的人都知道,有时候你可以直接算出这个最小值,但是如果函数很复杂,你可能就写不出来了,而我们超复杂的13000元成本函数就更做不出来了.一个灵活的技巧是:以下图为例,先随机取一个输入值,在这里求函数的斜率,斜率为正向左,斜率为负向右,您将接近函数min的某个部分。(其实沿着负梯度方向,函数下降最快)但是因为一开始不知道输入值在哪里,所以最后可能会掉到很多不同的坑里,也不能保证localminimumyoufallinto是cost函数的全局最小值。值得一提的是,如果每一步的步长与斜率成正比,那么斜率在最小值附近会变得平缓,每一步都会越来越小,可以防止过调。我们想象一个更复杂的二元函数,有两个输入和一个输出,成本函数是图中右侧的红色表面。输入空间往哪个方向走,才能使输出结果下降最快?在多元微积分领域,函数梯度指的是函数最陡的增长方向。沿其相反方向,函数值减小最快。梯度向量的长度表示最陡坡度的陡度。最小化函数值的算法其实就是先计算梯度,向反方向走一小步,然后循环。处理13,000个输入的函数也是如此。只是把这些权重和偏差放在一个列向量中,代价函数的负梯度也是一个向量。负梯度指出如何在这个函数的输入空间中改变每个参数,使代价函数的值下降最快。对于我们设计的神经网络的成本函数来说,更新权重和偏置来降低成本函数的值意味着输入训练集的每个样本的输出会更接近真实结果。并且因为我们选择了所有训练样本的代价函数的平均值,所以最好是最小化所有样本得到的整体结果。当我们谈到让网络学习时,本质上就是最小化代价函数的值。成本函数必须是平滑的,这样我们才能移动找到全局最小值,这就是为什么人工神经元的激活值是连续的。至此,我们终于引出了梯度下降法的定义:负梯度中每个item值的符号告诉我们输入向量对应该上调还是下调,每个item的相对大小也告诉我们哪个值影响大,改哪个参数值最划算。经过训练的神经网络可以识别数字,但是当输入是噪声图片时,神经网络仍然自信地将其识别为数字。换句话说,即使网络学会了如何识别数字,它也不能自己写数字。原因是网络的训练被限制在一个非常狭窄的框架内。对于第一层网络,它对整个宇宙的视角是由一个个小格子中定义明确的静态数字组成的,它的代价函数会促使它对最终的判断有绝对的信心。你看得越深,就越意识到神经网络并不是那么聪明。本节结束!在下一节课中,我们将学习3Blue1Brown关于神经网络的第3部分《偏导数和反向传播法》。
