【神经网络和深度学习】
第三章 学习与梯度下降算法
案例:使用神经网络识别手写数字
既然我们已经为我们的神经网络设计了一个模型,它怎么能学会识别数字呢?我们需要的第一件事就是从所谓的训练数据集中学到的数据集,我们将使用MNIST的数据集,它包含数以万计的手写数字的扫描图像,以及它们正确的分类。NIST的名字来源于一个事实,那就是它是由美国国家标准与技术研究所收集的两个数据集的一个修改子集。以下是一些来自MNIST的图片:
正如你所看到的,这些数字实际上和第一章开头所显示的是一样的,是一种需要识别的挑战。当然,在测试我们的网络时,我们会要求它识别不在训练集里的图像!
MNIST的数据分为两部分。第一部分包含6万张图片作为训练数据。这些图片是来自250人的扫描笔迹样本,其中一半是美国人口普查局的雇员,其中一半是高中生。这些图像是灰度级的,28x28像素。MNIST数据集的第二部分是作为测试数据使用的10000张图像。再一次,这些是28x28的灰度图像。我们将使用测试数据来评估我们的神经网络是如何学会识别数字的。为了使这成为一个良好的性能测试,测试数据来自于不同的250人,而不是最初的培训数据(尽管仍然是人口普查局雇员和高中生之间的一个群体)。这有助于让我们相信,我们的系统能够识别那些在训练中没有看到的人的数字。
我们将使用符号x来表示训练输入。将每个训练输入 x x 作为28x28=784维矢量的一个维度向量。矢量中的每一个元素代表图像中单个像素的灰色值。我们将用 表示相应的期望输出,其中 y y 是 维向量。例如,如果一个特定的训练图像x,描绘的是 6 6 , 是来自神经网络的期望输出值。请注意, T T 是转置操作,将行向量变成普通(列)向量。
我们想要的是一种算法,它可以让我们找到权重和偏差,这样网络的输出就可以近似于 ,所有的训练输入都是 x x 。为了量化我们实现这个目标的程度,我们定义了一个成本函数,有时被称为损失或目标函数。我们在这本书中使用了术语成本函数,但是你应该注意其他的术语,因为它经常被用于研究论文和其他关于神经网络的讨论。
在这里, 表示网络中所有权重的集合, b b 表示所有的偏差, 是培训输入的总数, a a 是当 输入时来自网络的输出的矢量,而总和超过了所有的训练输入 x x 。当然,输出 依赖于 x x 、 和 b b ,但是为了保持符号的简单,我没有明确指出这种依赖。符号 表示向量v的一般长度函数。我们把它叫做二次成本函数;它有时也被称为平均平方误差或者是MSE。检查二次成本函数的形式,我们看到 C(w,b) C ( w , b ) 是非负的,因为和式中的每一项都是非负的。此外, C(w,b) C ( w , b ) 的成本也变得很小。 C(w