神经网络算法开发学习总结--算法应用及优化

1)算法目标设定

   首先要确定一个算法目标及约束条件,比如运行时间、硬件内存限制、准确度等选择算法。

《神经网络算法开发学习总结--算法应用及优化》

 

学习效果一般尽量采用单个指标进行评估,对于 N 个评价指标,选择其中一个指标作为优化指标,选择剩下的 N-1 个指标作为满足指标。

 

比如针对分类,有些场合关注查准率,有些场合关注查全率,而有些是用F1 score来评估。这些效果跟具体应用需求相关。

《神经网络算法开发学习总结--算法应用及优化》

 

另外还应该确定应用的最后一级输出,比如除了分类外,是否还应该输出位置或者特征点,制定对应的代价函数。

 

2) 优化流程及确认优化方向

 

  深度学习时,一般可以把数据集分为Training set、Dev set、Test set。

  Training set:一般用于训练模型。

  Dev set:用于评估不同算法以及不同超参数训练出来的模型在Dev set上的效果。

  Test set: 选定模型后在测试集上评估效果。

 

  算法的优化流程一般如下:

  • Fit Training set well
  • Fit Dev set well
  • Fit Test set well
  • Perform well in real world

  

降低Training Set的错误率和降低Dev set的错误率有不同的优化方法,因此要先判断算法的优化方向。这个一般可以通过对比偏差与方差来做判断。

在自然感知上的问题,如计算机视觉、语音识别、自然语言处理,目前机器识别还很难超过人类专家水平。以图片分类为例,人类专家团队的水平可以做到0.3%,可以作为一个比较基准,以下是一种训练结果:

Base error:0.3%,

Training error :1.0%

Dev error: 1.1%

当 (Training error – Base error = 0.7%)超过(Dev error – Training error=0.1%)时,算法的优化方向应该去寻找降低训练误差的方法,比如增加迭代次数,找更多的数据,更深的网络等。

反之,算法的努力方向是降低方差,这时要采用dropout、正则化或者寻找新的网络结构等方法。

《神经网络算法开发学习总结--算法应用及优化》

 

如果训练集和验证集错误率都很低,而实际场景使用时错误率比较高,可能就是开发集和真实场景数据不匹配问题,也就是他们的数据分布不同。这时就要想办法把更多真实数据引入到训练集和开发集中。 

 

3)优化策略

  • 错误分析

错误分析一般是人工进行的,方法是对错误分类的样本进行归类分析,然后改进算法,解决比例最高的那一类错误。

 

  • 超参数种类及范围选择

《神经网络算法开发学习总结--算法应用及优化》

超参数范围选择一般不会用线性坐标,而应该用对数坐标:

比如学习率的选择,我们需要将区间对数化来采样。例如我们将[0.0001,1]转化成四个区间[0.0001,0.001],[0.001,0.01],[0.01,0.1],[0.1,1],每个区间各取几个数,而不是直接在[0.0001,1]上平均做选择。

  

  • 正交化思想应用

调节超参数,优化自己想改善的性能,而不会影响其他性能。

应用正交化的思想,我们可以独立地解决高偏差和高方差的问题。

解决高偏差问题的方法有:

  • 训练更大的模型
  • 训练更长时间 / 使用更好的优化算法(如使用动量、RMSprop、Adam 等)
  • 调整神经网络结构(如调整网络层数、激活函数,使用 CNN、RNN 等)/ 进行超参数搜索

解决高方差问题的方法有:

  • 获取更多数据
  • 正则化(如 L2 正则化、Dropout 等)
  • 调整神经网络结构 / 进行超参数搜索

 

  • 迁移学习

当新的学习任务的训练样本数量不足时,可以采用迁移学习进行算法优化。

比如一个训练好的学习猫的网络,用于其他图片学习。可以把以下的红色部分去掉,创建一些新的网络,作为新的层,新创建层的参数进行随机初始化,使用新任务的数据集,重新进行训练。

《神经网络算法开发学习总结--算法应用及优化》

迁移学习的前提条件如下:

  • 任务 A 和任务 B 具有相同的输入 x
  • 任务 A 的可用数据远远多于任务 B
  • 任务 A 的低层特征有益于任务 B 的学习

 

4)网络模型简化

    精通训练算法情况下设计层数核节点更小的网络,精度下降可接受范围。

   

 

5)网络模型压缩

这个主要以深鉴为代表,针对训练后的模型进行压缩,在边缘设备部署推理功能时降低对计算和存储的需求。神经网络压缩算法,能够在保证基本不损失算法精度的前提下,将网络模型的计算量和规模压缩数倍至数十倍。

深鉴科技网络压缩算法原理:

 

  1. 剪枝Pruning,发现网络中对总体结果影响不大的权重,直接去掉它们。比如直接去掉权重绝对值小于0.1的连接,再进行fine-tune
  2. 第二个步骤是利用Code Book做量化。它是说把32bit长度的浮点数压缩到8bit甚至4bit。
  3. 用霍夫曼编码的形式存储数据

《神经网络算法开发学习总结--算法应用及优化》

 

 

 

 

    原文作者:神经网络算法
    原文地址: https://blog.csdn.net/weixin_38712697/article/details/83475022
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞