如何优化神经网络?

原文 : How To Optimise A Neural Network?

繁體中文版

当我们解决一个涉及到神经网络的业界问题时,我们经常以糟糕的性能告终。 本篇将给你关于应该做什么,可以提高性能的建议。

是否你的模型欠拟合( underfitting )还是过拟合( overfitting )?

你必须将输入数据集分成两部分 – 培训和测试。 一般做法是 80% 用于培训, 20% 用于测试。

你应该用训练集来训练你的神经网络,用测试集来测试。 这听起来像是常识,但我们经常跳过它。

将模型的性能(回归情况下的 MSE 和分类情况下的 accuracy / f1 /  recall  / precision )与训练集和测试集进行比较。

如果它在测试和训练都表现不好,它就是欠拟合; 如果它在训练集中表现很好,但在测试集中表现不好,它就是过拟合。

如果是欠拟合

如果测试集上的性能在迭代或时期(完整数据集通过神经网络一次并返回一次)中不断提高,那么这意味着你需要增加迭代 / 时期。 如果花费的时间太多,你可能需要使用 GPUs。 你也可以尝试添加一个优化器,比如 Adam,而不是只添加普通的梯度下降法( Gradient Descent )。

如果表现没有改善,这意味着你有一个真正的欠拟合的情况。 在这种情况下,有三种可能性:

  1. 数据不足
  2. 数据间没有相关性 – 随机数据
  3. 你需要一个更好的模型

如果数据不足,你可以做以下事情:

  • 你可以生成更多的数据。 这就是所谓的数据增强( data augmenting )。 例如,你可以从不同的角度拍摄更多的照片,你可以重新调整一下它们的形状,安装更多的色彩滤镜,从边框上去掉一些像素等等
  • 你可以从互联网上下载类似的数据。 假设你想创建一个神经网络来识别你办公室里的面孔。 你可以下载更多来自世界各地的人脸图片,然后首先在这些人脸上训练模型,然后使用你办公室的人脸来训练模型
  • 你可以下载一个预先训练好的神经网络,在它上面加一层,然后用你的数据进一步训练它

如果数据间没有相关性,就不能做很多事情。 你可以重新检查标签( label )。 一个常见的错误是标签不批配。 假设有两个文件,一个包含特征,另一个包含标签,而这两个文件的顺序不同,或者我们只跳过一行,这两种情况都会导致标签不匹配。 因此,重新检查标签是否与特征的顺序相同。 此外,如果数据有问题,请与数据收集团队联系。

最后一种需要改进模型的情况是最困难的。 对于神经网络,你可以这样做:

  • 添加更多层( layers )
  • 增加更多的神经元以达到完全连接 / 密集层 ( layers )但偏好增加较多的神经元到正在增加的神经元上
  • 加更多的过滤器
  • 尝试不同的步伐( strides )
  • 添加 RELU,如果你还没有使用它
  • 如果你有递减( diminishing )或激增梯度( exploding gradients )的问题
    • 使用批量标准化( batch normalization )
    • 尝试使用 xavier_initializer 或其他启发法( heuristics )初始化权重
    • 同时,尝试梯度裁剪( gradient clipping )
  • 使用最小最大缩放或标准化做特征的规格化
  • 也试着将标签标准化。 虽然不建议一开始就使用

如果过拟合

如果你注意到你的模型是过拟合,你应该做范式( regularization ),并且确保你在每次迭代中都改组训练集,这样每个批次每次都是不同的。

为了范式,你可以使用 L1 或 L2 规格化( normalization )或丢包( dropout )层。

这些是我的快速笔记。 欢迎随时回馈指教。

CLOUD x LAB 的实验室功能介绍

Soft&Share 为 Cloudxlab 联盟,获授权翻译 CloudxLab 上所有信息

 欢迎使用 e-mail 订阅 Soft & Share 

发表评论

Powered by WordPress.com.

Up ↑

%d 博主赞过: