训练神经网络主要围绕一下四个方面:
1)层,多个层组合成网络(或模型)。
2)输入数据和相应的目标。
3)损失函数,即用于学习的反馈信号。
4)优化器,决定学习过程如何进行。
将上述四者的关系可视化为:
多个层链接在一起组成了网络,将输入数据映射为预测值。然后损失函数将这些预测值与目标进行对比,得到损失值,用于衡量网络预测值和预测期望结果的匹配程度。优化器使用这个损失值来更新网络的权重。
一、层
神经网络基本数据结构是层。层是一个数据处理模块,将一个或多个输入张量转换成一个或多个输出张量。有些层是无状态,但大多数层是有状态的,即层的权重。权重是利用随机梯度下降学到的一个或多个张量,其中包括网络的知识。
不同的张量(张量tensor)格式与不同的数据处理类型需要用到不同的层。例如,向量数据保存在形状为(samples,features)的2D张量中,通常用密集连接层也叫全连接层或密集层来处理。序列数据保存在形状为(samples,timestamps,features)的3D张量中,通常用循环层(recurrent layer)来处理。图像数据保存在4D张量中,通常用二维卷积层来处理。
二、损失函数和优化器
损失函数(目标函数):在训练过程中需要将其最小化。它能够衡量当前任务是否已经成功完成。
优化器:决定如何基于损失函数对网络进行更新。他执行的是随机梯度下降(SGD)的某个变体。
选择正确的目标函数非常重要。网络的目的是使损失尽可能最小化,因此如果目标函数与成功完成这个任务不完全相关,那么网络最终得到的结果可能会不符合你的预期。
对于选择损失函数的一些前人经验:对于分类、回归、序列预测等常见问题,可以遵循如下的指导原则来选择正确的损失函数。
二分类问题:可以使用二元交叉熵(binary cross entropy)损失函数。
多分类问题:分类交叉熵(categorical crossentropy)损失函数。
回归问题:可以使用均方误差(mean-squared erro)损失函数。
序列学习问题:可以使用联结主义时序分类(CTC,connectionist temporal classification)损失函数。
只有在面对正真全新的研究问题是,才需要自主开发目标函数。