目录
9.模型优化
9.1模型调参
背景:对一个模型而言,调参是重中之重,也是需要花费大量时间进行的一件事。
常用思路:基于基线,意思是找一些质量比较好的工具包,工具包里面有一些还不错的参数,可以作为参考点,另一个是看相关论文的实验设置的参数。调参时,每次调一个参数,再去看验证集上精度的改变。每次只调一个参数目的是可以直观看到该参数对模型的影响,每次调多个值,无法确定那个参数对模型影响大或者说有什么影响。重复整个操作,最后会得到对模型影响大的参数,和对模型没什么影响的参数,对模型影响大的参数中有一些是对模型很敏感的参数,意思是,这些参数改变很小就会对模型有更大的影响。这也是需要重点关照的参数。模型也分为参数敏感性和不敏感型,比方说Adam和SGD,通常SGD调参的结果比Adam要好,但Adam对参数不敏感,只用花比较少的时间就能得到不错的结果,而SGD只有花费大量时间找到最优结果才能在性能上超过Adam。调参到最后我们能找到一个合适的调参范围,再在这个范围内找到最优参数。注意一定要做好调参笔记。
难以复现别人实验原因:
①硬件不同,GPU,CPU不同,即使是同一款,新旧不同,性能上也会有差异。library库不同。
②代码不同
③随机种子不同,当然随机种子不同结果变化大,说明模型不稳定。
趋势:人工调参-》机器自动调参
自动调参:AutoML(HPO NAS)
模型训练价格(2021):树模型一次0.4美金,神经网络5美金。一般要训练1000次以上能得到较好的参数。
一个有趣的图描述调参过程:同事喊数据科学家回来工作,数据科学家回应我在AutoML。哈哈
9.2超参数优化
超参数优化(Hyperparameter optimization,简称HO):对于训练参数的自动调优
搜索空间:momentum(动量)为解决SGD中出现的曲折摆动问题,weight decay(权重衰减)用于模型正则化,解决过拟合问题。
方法:black-box(Grid search,Random search,Bayesian Optimization),multi-fidelity
(详细的后续再补充)
9.3神经网络架构搜索(NAS)
超参数:
- 优化参数(如learning rate,batch size,weight decay等)
- 定义网络结构的参数(比如有几层,每层是啥算子,卷积中的filter size等)
- 正则化系数
网络架构搜索(Neural Architecture Search,简称NAS):而定义网络结构的参数进行自动调优
原理:是给定一个称为搜索空间的候选神经网络结构集合,用某种策略从中搜索出最优网络结构。神经网络结构的优劣即性能用某些指标如精度、速度来度量,称为性能评估。
目的:就是希望可以有一套演算法或是一个框架能够自动的根据我们的需求找到最好的 neural architecture,而我们的搜索目标有可能会是根据 performance,或是根据硬体资源限制 (hardware constraints) 来进行搜索。
包括: search space, search strategy 和 performance estimation strategy。
Search Space:中文又称作为搜索空间,也就是我们在选择 neural architecture 时,我们所可以调整的所有选择。举例来说,kerne size, channel size, convolution type 以及 layer number 等等。
Search Strategy:在给定的 search space 当中,我们要透过什么方式来搜索出最好的 neural architecture。举例来说,在搜索 hyperparameter 时最为大家熟悉的 grid search 以及 random search,或是 evolution algorithm (基因演算法) 等等。
Performance Estimation Strategy:当我们从 search space 当中挑选出了一个 neural architecture,我们如何评估这个 neural architecture 是好还是坏的方式。举例来说,我们可以实际的训练每个 neural architecture 来获得实际的 top-1 accuracy,我们也可以训练少量的 neural architecture,并且将实际训练好的数据,用来训练一个额外的 accuracy predictor。
10.深度神经网络架构
这里只说,归一化,残差连接,注意力机制
批量归一化:在线性模型中,我们用标准化对数据进行处理,均值为0方差为1,有助于让函数更加平滑,便于处理,但深度神经网络包含多层并且有非线性函数,无法用标准化解决,所以出现了批量归一化,有助于收敛,尽管不会改变结果,但可以提升速度。
11迁移学习
11.1概念及方法
原理:迁移学习(Transfer Learning)是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。 迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。
找到目标问题的相似性,迁移学习任务就是从相似性出发,将旧领域(domain)学习过的模型应用在新领域上。
11.2微调
原理:顾名思义就是细微的调节将这个已训练好的模型参数迁移过来,或者说复制(不是完全拷贝,故有点区别,所以叫微调)过来,最后再对自己的模型进行训练。比如说我们的一个数据集是想找出图片中的热狗,但ImageNet数据集的图像大多于此无关,那迁移过来的参数有用吗?有用,因为在训练ImageNet中抽取的特征,如:边缘、纹理、形状等,对于识别物体都有同样的效果。
参考文献
1.深度学习入门之Momentum_深度学习momentum_赵孝正的博客-CSDN博客
2. Pytorch——momentum动量_momentum pytorch_Chukai123的博客-CSDN博客
3.权重衰减(weight decay)与学习率衰减(learning rate decay)_Microstrong0305的博客-CSDN博客
4. 权重衰减weight_decay参数从入门到精通_iioSnail的博客-CSDN博客
5.超参数优化与NNI(HPO,Hyper-parameter optimization)_hpo算法_Macropodus的博客-CSDN博客
6.automl-超参数优化(HPO)-综述_hpo 深度学习_xys430381_1的博客-CSDN博客
7.超参数优---贝叶斯优化及其改进(PBT优化)_改进贝叶斯_xys430381_1的博客-CSDN博客
9.神经架构搜索(Neural Architecture Search,NAS)介绍_虎大猫猫的博客-CSDN博客
10.迁移学习(Transfer)_Sonhhxg_柒的博客-CSDN博客
11.什么是迁移学习?_Xavier Jiezou的博客-CSDN博客
12.计算机视觉之迁移学习中的微调(fine tuning)_迁移学习微调_寅恪光潜的博客-CSDN博客