深度学习500问——Chapter14:超参数调整(3)

文章目录

[14.5 如何改善GAN的性能](#14.5 如何改善GAN的性能)

[14.6 AutoML](#14.6 AutoML)

[14.6.1 什么是AutoML](#14.6.1 什么是AutoML)

[14.6.2 自动化超参数搜索方法有哪些](#14.6.2 自动化超参数搜索方法有哪些)

[14.6.3 什么是神经网络架构搜索(NAS)](#14.6.3 什么是神经网络架构搜索(NAS))

[14.6.4 NASNet的设计策略](#14.6.4 NASNet的设计策略)

[14.6.5 网络设计中,为什么卷积核设计尺寸都是奇数](#14.6.5 网络设计中,为什么卷积核设计尺寸都是奇数)

[14.6.6 网络设计中,权重共享等形式有哪些,为什么要权重共享](#14.6.6 网络设计中,权重共享等形式有哪些,为什么要权重共享)


14.5 如何改善GAN的性能

优化GAN性能通常需要再如下几个方面进行:

  • 设计或选择更适合目的代价函数。
  • 添加额外的惩罚。
  • 避免判别器过度自信和生成器过度拟合。
  • 更好的优化模型的方法。
  • 添加标签明确优化目标。

GAN常用训练技巧:

  • 输入规范化到(-1,1)之间,最后一层的激活函数使用tanh(BRGAN除外)。
  • 使用 wassertein GAN的损失函数。
  • 如果有标签数据的话,尽量使用标签,也有人提出使用反转标签效果很好,另外使用标签平滑,单边标签平滑或者双边标签平滑。
  • 使用mini-batch norm,如果不使用batch norm 可以使用instance norm或者 weight norm。
  • 避免使用RELU和pooling层,减少稀疏梯度的可能性,可以使用leakrelu激活函数。
  • 优化器尽量选择ADAM,学习率不要设置太大,初始1e-4可以参考,另外可以随着训练进行不断缩小学习率。
  • 给D的网络层增加高斯噪声,相当于是一种正则。

14.6 AutoML

14.6.1 什么是AutoML

目前一个优秀的机器学习和深度学习模型,离不开这几个方面:

  • 一、优秀的数据预处理;
  • 二、合适的模型结构和功能;
  • 三、优秀的训练策略和超参数;
  • 四、合适的后处理操作;
  • 五、严格的结果分析。

这几方面都对最终的结果有着举足轻重的影响,这也是目前的数据工程师和学者们的主要工作。但由于这每一方面都十分繁琐,尤其是在构建模型和训练模型上,而大部分情况下,这些工作有无须过深专业知识就能使用起来。所以AutoML主要的作用就是来帮助实现高效的模型构建和超参数调整。

例如深度学习网络的架构搜索、超参数的重要性分析等等。当然AutoML并不简单的进行暴力或者随机的搜索,其仍然 需要机器学习方面的知识,例如贝叶斯优化、强化学习、元学习以及迁移学习等等。

目前也有不错的AutoML工具包,例如Alex Honchar的Hyperopt、微软的NNI、Autokeras等。

目前AutoML已经成为最新的研究热点,有兴趣的可以参考:AutoML | Literature on Neural Architecture Search

14.6.2 自动化超参数搜索方法有哪些

目前自动化搜索主要包含网格搜索、随机搜索、基于模型的超参优化。

网格搜索:

通常当超参数量较少的时候,可以使用网格搜索法,即列出每个超参数的大致候选集合。利于这些集合进行逐项组合优化。在条件允许的情况下,重复进行网格搜索会当优秀,当然每次重复需要根据上一步得到的最优参数组合,进行进一步的细粒度的调整。网格搜索最大的问题就在于计算时间会随着超参数的数量指数级的增长。

随机搜索:

随机搜索,是一种用来替代网格搜索的搜索方式。随机搜索有别于网格搜索的一点在于,我们不需要设定一个离散的超参数集合,而是对每个超参数定义一个分布函数来生成随机超参数。

随机搜索相比于网格搜索在一些不敏感超参上拥有明显优势。例如网格搜索对于批样本数量(batch size),在 [16,32,64]这些范围内进行逐项调试,这样的调试显然收益更低下。当然随机搜索也可以进行细粒度范围内的重复的搜索优化。

基于模型的超参优化:

有别于上述两种的搜索策略,基于模型的超参调优问题转化为了优化问题。直觉上会考虑是否进行一个可导建模,然后利用梯度下降进行优化。但不幸的是我们的超参数通常情况下是离散的,而且其计算代价依旧很高。

基于模型的搜索算法,最常见的就是贝叶斯超参优化。有别于网格搜索和随机搜索独立于前几次搜索结果的搜索,贝叶斯则是利用历史的搜索结果进行优化搜索。

其主要有四部分组成:

  1. 目标函数,大部分情况下就是模型验证集上的损失。
  2. 搜索空间,即各类待搜索的超参数。
  3. 优化策略,建立的概率模型和选择超参数的方式。
  4. 历史的搜索结果。

首先对搜索空间进行一个先验性的假设猜想,即假设一种选择超参的方式,然后不断的优化更新概率模型,最终的目标是找到验证集上误差最小的一组超参数。

14.6.3 什么是神经网络架构搜索(NAS)

2015至2017年间,是CNN网络设计最兴盛的阶段,大多都是由学者人工设计的网络结构。这个过程会非常繁琐。其主要原因在于对不同模块组件的组成通常是个黑盒优化的问题,此外,在不同结构超参数以及训练超参数的选择优化上非凸优化问题,或者是个混合优化问题,既有离散空间又有连续空间。

NAS(Neural Architecture Search)的出现就是为了解决如何通过机器策略和自动化的方式设计出优秀高效的网络。而这种策略通常不是统一的标准,不同的网络结合实际的需求通常会有不同的设计,比如移动端的模型会在效率和精度之间做平衡。

目前,NAS也是AutoML中最重要的部分。NAS通常会分为三个方面,搜索空间(在哪搜索),搜索策略(如何搜索)及评价预估。

  • **搜索空间,**即在哪搜索,定义了优化问题所需变量。不同规模的搜索空间的变量其对于的难度也是不一样的。早期由于网络结构以及层数相对比较简单,参数量较少,因此会更多的使用遗传算法等进化算法对网络的超参数和权重进行优化。深度学习发展到目前,模型网络结构越来越复杂,参数量级越来越庞大,这些进化算法已经无法继续使用。但若我们先验给定一些网络结构和超参数,模型的性能已经被限制在给定的空间,此时搜索的空间已变得有限,所以只需对复杂模型的架构参数和对应的超参数进行优化即可。
  • **搜索策略,**即如何搜索,定义了如何快速、准确找到最优的网络结构参数配置的策略。常见的搜索方法包括:随机搜索、贝叶斯优化、强化学习、进化算法以及基于模型的搜索算法。其中主要代表为2017年谷歌大脑的使用强化学习的搜索方法。
  • **评价预估,**定义了如何高效对搜索的评估策略。深度学习中,数据规模往往是庞大的,模型要在如此庞大的数据规模上进行搜索,这无疑是非常耗时的,对优化也会造成非常大的困难,所以需要一些高效的策略做近似的评估。这里一般会有如下三种思路:

一、使用些低保真的训练集来训练模型。低保真在实际中可以用不同的理解,比如较少的迭代次数,用一小部分数据集或者保证结构的同时减少通道数等。这些方法都可以在测试优化结构时大大降低计算时间,当然也会存在一定的偏差。但架构搜索从来并不是要一组固定的参数,而是一种优秀的模型结构。最终选取时,只需在较优秀的几组结构中进行全集训练,进行择优选取即可。

二、使用代理模型。除了低保真的训练方式外,学者们提出了一种叫做代理模型的回归模型,采用例如插值等策略对已知的一些参数范围进行预测,目的是为了用可能少的点预测到最佳的结果。

三、参数级别的迁移。例如知识蒸馏。用已训练好的模型权重参数对目标问题搜索,通常会让搜索拥有一个优秀的起点,由于积累了大量的历史寻优数据,对新问题的寻优将会起到很大的帮助。

14.6.4 NASNet的设计策略

NASNet是最早由google brain通过网络架构搜索策略搜索并成功训练ImageNet的网络,其性能超越所有手动设计的网络模型。关于NASNet的搜索策略,首先需要参考google brain发表在ICLR 2017的论文《Neural Architecture Search with Reinforcement Learning》。该论文是最早成功通过架构搜索策略在cifar-10数据集上取得比较不错效果的工作。NASNet很大程度上是沿用该搜索框架的设计思想。

NASNet的核心思想是利用强化学习对搜索空间内的结构进行反馈探索。架构探索图如下,定义了一个以RNN为核心的搜索控制器。在搜索空间以概率p对模型进行搜索采样。得到网络模型A后,对该模型进行训练,待模型收敛得到设定的准确率R后,将梯度传递给控制器RNN进行梯度更新。

架构搜索策略流程

RNN控制器会对卷积层的滤波器的尺寸、数量以及滑动间隔进行预测。每次预测的结果都会作为下一级的输入,当层数达到设定的阈值时,会停止预测。而这个阈值也会随着训练的进行而增加。

这里的控制器只预测了卷积,并没有对例如 inception 系列对分支结构或者ResNet的跳级结构等进行搜索。所以,控制器需要进一步扩展到预测这些跳级结构上,这样搜索空间相应的也会增大。

为了预测这些结构,RNN控制器内每一层都增加了一个预测跳级结构的神经元,文中称为锚点,稍有不同的是该锚点的预测会由前面所有层的锚点状态决定。

RNN控制器

NASNet大体沿用了上述生成网络结构的机器,并在此基础上做了如下两点改进:

1、先验行地加入inception系列和ResNet的堆叠模块的思想。其定义了两种卷积模块,Normal Cell和Reduction Cell,前者不进行降采样,而后者是个降采样的模块。而由这两种模块组成的结构可以很方便的通过不同数量的模块堆叠将其从小数据集搜索到的架构迁移到大数据集上,大大提高了搜索效率。

​ NASNet的RNN控制器

2、对RNN控制进行优化,先验性地将各种尺寸和类型的卷积和池化层加入到搜索空间内,用预测一个卷积模块代替原先预测一层卷积。如图,控制器RNN不在预测单个卷积内的超参数组成,而是对一个模块内的每一个部分进行搜索预测,搜索的空间则限定在如下这些操作中:

​ • identity • 1x3 then 3x1 convolution​ • 1x7 then 7x1 convolution • 3x3 dilated convolution​ • 3x3 average pooling • 3x3 max pooling​ • 5x5 max pooling • 7x7 max pooling​ • 1x1 convolution • 3x3 convolution​ • 3x3 depthwise-separable conv • 5x5 depthwise-seperable conv​ • 7x7 depthwise-separable conv

在模块内的连接方式上也提供了element-wise addition和concatenate两种方式。NASNet的搜索方式和过程对NAS的一些后续工作都具有非常好的参考借鉴意义。

14.6.5 网络设计中,为什么卷积核设计尺寸都是奇数

我们发现在很大部分网络设计时都会使用例如 3x3/5x5/7x7 等奇数尺寸卷积核,主要原因有两点:

  • 保证像素点中心位置,避免位置信息偏移。
  • 填充边缘时能保证两边都能填充,原矩阵依然对称。

14.6.6 网络设计中,权重共享等形式有哪些,为什么要权重共享

权重共享的形式:

  • 深度学习中,权重共享最具代表性的就是卷积网络的卷积操作。卷积相比于全连接神经网络参数大大减少。
  • 多任务网络中,通常为了降低每个任务多计算量,会共享一个骨干网络。
  • 一些相同尺度下的结构化递归网络。

权重共享的好处:

权重共享一定程度上能增强参数之间的联系,获得更好的共性特征。同时很大程度哈桑降低了网络的参数,节省计算量喝计算所需内存(当然,结构化递归并不节省计算量)。此外权重共享能起到很好正则的作用。正则化的目的是为了降低模型复杂度,防止过拟合,而权重共享则正好降低了模型的参数喝复杂度。

因此一个设计优秀的权重共享方式,在降低计算量的同时,通常会较独享网络有更好的效果。

权重共享不仅在人工设计(human- invented)的网络结构中有简化参数,降低模型复杂度的作用,在神经网络搜索(NAS)的网络结构中可以使得child model的计算效率提升,使得搜索过程可以在单卡GPU上复现,见Efficient NAS(ENAS)。

相关推荐
HPC_fac1305206781616 分钟前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
网易独家音乐人Mike Zhou3 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书3 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
小陈phd3 小时前
OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算
人工智能·opencv·计算机视觉
Guofu_Liao4 小时前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
小二·4 小时前
java基础面试题笔记(基础篇)
java·笔记·python
小喵要摸鱼6 小时前
Python 神经网络项目常用语法
python
一念之坤7 小时前
零基础学Python之数据结构 -- 01篇
数据结构·python
wxl7812278 小时前
如何使用本地大模型做数据分析
python·数据挖掘·数据分析·代码解释器
NoneCoder8 小时前
Python入门(12)--数据处理
开发语言·python