我们可以玩什么技巧来进一步细化训练好的神经网络模型,使其具有更低的 objective 函数值?
What kind of tricks we can play with to further refine the trained neural network model so that it has lower objective function value?
之所以问这个问题,是因为Caffe等很多深度学习框架都支持模型精炼功能。例如,在 Caffe 中,我们可以使用 snapshot 初始化神经网络参数,然后继续进行训练,如下命令所示:
./caffe train -solver solver_file.prototxt -snapshot snap_file.solverstate
为了进一步训练模型,我可以玩以下技巧:
- 使用较小的学习率
- 更改优化方法。例如,将随机梯度下降改为ADAM算法
我还能玩什么花样?
ps:我理解降低训练样本的损失函数值并不意味着我们可以得到更好的模型。
我认为这个问题太宽泛了。然而,这是一种常见的做法,尤其是在训练集较小的情况下。我会这样排列可能的方法:
- 较小的学习率
- more/different 数据扩充
- 向训练集添加噪声(确实与数据扩充相关)
- 微调训练集的子集。
最后一个确实是一种非常强大的方法,可以用来确定在某些极端情况下表现不佳的模型。然后,您可以制作一个 'difficult' 训练子集,以便使模型偏向它。我个人经常使用它。
之所以问这个问题,是因为Caffe等很多深度学习框架都支持模型精炼功能。例如,在 Caffe 中,我们可以使用 snapshot 初始化神经网络参数,然后继续进行训练,如下命令所示:
./caffe train -solver solver_file.prototxt -snapshot snap_file.solverstate
为了进一步训练模型,我可以玩以下技巧:
- 使用较小的学习率
- 更改优化方法。例如,将随机梯度下降改为ADAM算法
我还能玩什么花样?
ps:我理解降低训练样本的损失函数值并不意味着我们可以得到更好的模型。
我认为这个问题太宽泛了。然而,这是一种常见的做法,尤其是在训练集较小的情况下。我会这样排列可能的方法:
- 较小的学习率
- more/different 数据扩充
- 向训练集添加噪声(确实与数据扩充相关)
- 微调训练集的子集。
最后一个确实是一种非常强大的方法,可以用来确定在某些极端情况下表现不佳的模型。然后,您可以制作一个 'difficult' 训练子集,以便使模型偏向它。我个人经常使用它。