第4章
神经网络的学习
本章的主题是神经网络的学习。这里所说的“学习”是指从训练数据中自动获取最优权重参数的过程。
神经网络的特征就是可以从数据中学习。所谓“从数据中学习”,是指可以由数据自动决定权重参数的值。
本章将
介绍神经网络的学习,即利用数据决定参数值的方法,并用
Python
实现对MNIST手写数字数据集的学习。
数据是机器学习的核心。
机器学习的方法极力避免人为介入,尝试从收集到的数据中发现答案(模式)。神经网络或深度学习则比以往的机器学习方法更能避免人为介入。
这一章以手写数字识别为例介绍了神经网络的学习,下面从数字5的识别开始
一种方案是,先从图像中提取
特征量,
再用机器学习技术学习这些特征量的模式。这里所说的“特征量”是指可以
从输入数据(输入图像)中准确地提取本质数据(重要的数据)的转换器。图
像的特征量通常表示为向量的形式。在计算机视觉领域,常用的特征量包括
SIFT
、
SURF
和
HOG
等。使用这些特征量将图像数据转换为向量,然后对
转换后的向量使用机器学习中的
SVM
、
KNN
等分类器进行学习。
深 度 学 习 有 时 也 称 为 端 到 端 机 器 学 习(end-to-end machine
learning)。这里所说的
端到端
是指从一端到另一端的意思,也就是
从原始数据(输入)中获得目标结果(输出)的意思。
神经网络的优点是对所有的问题都可以用同样的流程来解决。
机器学习中,一般将数据分为
训练数据
和
测试数据
两部分来进行学习和实验等。首先,使用训练数据进行学习,寻找最优的参数;然后,使用测试数据评价训练得到的模型的实际能力。那么为什么需要将数据分为训练数据和测试数据呢?因为我们追求的是模型的泛化能力。为了正确评价模型的泛化能力,就必须划分训练数据和测试数据。另外,训练数据也可以称为
监督数据
。
泛化能力是指处理未被观察过的数据(不包含在训练数据中的数据)的能力。获得泛化能力是机器学习的最终目标。
只对某个数据集过度拟合的状态称为
过拟合
(
over fitting
)。避免过拟合也是机器学习的一个重要课题。
神经网络的学习通过某个指标表示现在的状态。然后,以这个指标为基准,寻找最优权重参数。
神经网络的学习中所用的指标称为损失函数
(
loss function
)。这个损失函数可以使用任意函数,
但一般用均方误差和交叉熵误差等。
![](https://i-blog.csdnimg.cn/blog_migrate/3101eca4459f55df11ff1e680a7aeec5.png)
将正确解标签表示为
1
,其他标签表示为
0
的表示方法称为one-hot
表示。
![](https://i-blog.csdnimg.cn/blog_migrate/ee8a78d061bb60c36ed80b2115f224ca.png)
这里,
log
表示以
e
为底数的自然对数(
log
e
)。
y
k
是神经网络的输出,
t
k
是正确解标签。并且,t
k
中只有正确解标签的索引为
1
,其他均为
0
(
one-hot
表示)。 因此,式(4
.
2
)实际上只计算对应正确解标签的输出的自然对数。也就是说,交叉熵误差的值是由正确解标签所对应的输出结果决定的。
机器学习使用训练数据进行学习。使用训练数据进行学习,严格来说,就是针对训练数据计算损失函数的值,找出使该值尽可能小的参数。因此,计算损失函数时必须将所有的训练数据作为对象。
神经网络的学习也是从训练数据中选出一批数据(称为
mini-batch
,
小批量),然后对每个mini-batch
进行学习。比如,从
60000
个训练数据中随机选择100
笔,再用这
100
笔数据进行学习。这种学习方式称为
mini-batch
学习
。
![](https://i-blog.csdnimg.cn/blog_migrate/a5c1b0fbde44114feda3cfa442322d39.png)
舍入误差,是指因省略小数的精细部分的数值(比如,小数点第8
位以后的数值)而造成最终的计
算结果上的误差。
利用微小的差分求导数的过程称为
数值微分
(numerical differentiation)。而基于数学式的推导求导数的过程,则用“解析性”(analytic)一词,称为“解析性求解”或者“解析性求导”。
梯度会指向各点处的函数值降低的方向。更严格地讲,梯度指示的方向是各点处的函数值减小最多的方向 A
。这是一个非常重要的性质。
使用梯度来寻找函数最小值(或者尽可能小的值)的方法就是梯度法。
梯度表示的是各点处的函数值减小最多的方向。因此,无法保证梯度所指的方向就是函数的最小值或者真正应该前进的方向。实际上,在复杂的函数中,梯度指示的方向基本上都不是函数值最小处。
函数的极小值、最小值以及被称为
鞍点
(saddle point)的地方,梯度为 0。极小值是局部最小值,也就是限定在某个范围内的最小值。鞍点是从某个方向上看是极大值,从另一个方向上看则是
极小值的点。虽然梯度法是要寻找梯度为 0的地方,但是那个地方不一定就是最小值(也有可能是极小值或者鞍点)。此外,当函数很复杂且呈扁平状时,学习可能会进入一个(几乎)平坦的地区,陷入被称为“学习高原”的无法前进的停滞期。
在梯度法中,函数的取值从当前位置沿着梯度方向前进一定距离,然后在新的地方重新求梯度,再沿着新梯度方向前进,如此反复,不断地沿梯度方向前进。像这样,通过不断地沿梯度方向前进,逐渐减小函数值的过程就是梯度法
(
gradient method
)。
根据目的是寻找最小值还是最大值,梯度法的叫法有所不同。严格地讲,寻找最小值的梯度法称为梯度下降法
(gradient descent method),寻找最大值的梯度法称为梯度上升法
(gradient ascent method)。但是通过反转损失函数的符号,求最小值的问题和求最大值的问题会变成相同的问题,因此“下降”还是“上升”的差异本质上并不重要。一般来说,神经网络(深度学习)中,梯度法主要是指梯度下降法。
像学习率这样的参数称为
超参数
。这是一种和神经网络的参数(权重和偏置)性质不同的参数。相对于神经网络的权重参数是通过训练数据和学习算法自动获得的,学习率这样的超参数则是人工设定的,一般来说,超参数需要尝试多个值,以便找到一种可以使学习顺利进行的设定。