如何正确训练DNN

一、训练一个网络的步骤:

1、定义一个网络架构

2、如何评估一个网络架构的好坏

3、真正训练出好的网络架构

4、在训练集上测试网络的好坏,如果不好,说明网络没有训练好

5、在测试集上测试网络的好坏,如果不好,说明出现过拟合现象

如何正确训练DNN_第1张图片

二、结果不好,并不意味着一定是overfitting

在下图左侧的training Data中,20层的网络误差比56层小,并不是说明20层的网络性能好,也可能是因为50层的网络并没有训练好。

在下图右侧的Testing Data中,20层的网络误差比56层小,并不是说明20层的网络性能好,56层的网络出现过拟合现象,也可能是因为50层的网络并没有训练好。

如何正确训练DNN_第2张图片

三、如果你的模型在Training Data的效果不好,可以采取以下策略

如何正确训练DNN_第3张图片

如何正确训练DNN_第4张图片

(1)检查你的Loss function

Loss function:希望预估出来的结果和实际结果越接近越好,测量方法很多,如:欧氏距离、Square Error、Cross Entropy

如何正确训练DNN_第5张图片

举例:Loss Function可能对于结果有很大的差别

如何正确训练DNN_第6张图片

为什么会有这种差别:Square Error的值落差很小,不利于模型选择最佳梯度,模型会默认你的结果已经很接近标准结果。而Cross Entropy的值落差很大,有助于模型选择最佳梯度,找到最优解。

如何正确训练DNN_第7张图片

(2)使用mini-batch

不要一次性拿60000张图片,以小单位来计算,一次拿1000张的total loss,来算最佳梯度,算完60000张后是一个epoch。如果epoch=20,随意一共是60*20=1200个interation,

下面是一次看60000张(update一次)和mini-batch(update20次)(不稳定)思想的图像表示:

如何正确训练DNN_第8张图片

如何正确训练DNN_第9张图片

如何正确训练DNN_第10张图片

设置mini-batch的小技巧:每个epoch中mini-batch的选择最好不一样。

如何正确训练DNN_第11张图片

(3)设置新的New activation function(激活函数)

如何正确训练DNN_第12张图片

如何正确训练DNN_第13张图片

一直困扰的一个问题就是:vanishing Gradient problem(梯度消散问题)

如何正确训练DNN_第14张图片

如何正确训练DNN_第15张图片

刚开始有人提出用RBM解决这个问题,后来又有人提出ReLU


如何正确训练DNN_第16张图片

如何正确训练DNN_第17张图片

如何正确训练DNN_第18张图片

如何正确训练DNN_第19张图片

如何正确训练DNN_第20张图片

ReLU有一些变形:

如何正确训练DNN_第21张图片

如何正确训练DNN_第22张图片

如何正确训练DNN_第23张图片

你可能感兴趣的:(python)