感谢博主神经网络结构搜索 (3/3): 可微方法 Differentiable Neural Architecture
NAS
-
参数和超参数
超参数:1)神经网络结构;2)优化算法(SGD或adam)
神经网络结构搜索——集中在结构超参数
-
神经网络结构搜索 定义:寻找最优的神经网络结构,使得验证集准确率最大化,同时考虑计算量和内存开销
准确率最大化(resnet > vgg);考虑计算量和内存开销(mobilenet> resnet)
Seacher Space:手动设置的一组候选的超参数(四种卷积核数量,三种卷积核大小,两种stride大小)
搜索空间:一个包含所有可能的网络结构的集合(人为指定)
搜索空间大小:(卷积核种类 x 卷积核大小种类 x stride种类)^(卷积层数) -
NAS难点
1)每次搜索代价大(一组超参需要训练一个网络)
2)搜索空间太大
-
随机搜索(不容易找到好的结构,可以作为baseline做对照——如果在测试集上,有更高的准确率,则比随机搜索更好)
流程:
均匀随机选择一组超参数–> 训练以学习模型自身参数(算法收敛)–> val验证模型准确率
重复以上过程,看哪组准确率最高(交叉验证——调超参数的最标准方法) -
循环神经网络寻找神经网络结构并用强化学习训练RNN(2017,过时了,只需要思想)
-
可微结构搜索(DNAS/Darts, 2019)
Darts定义的目标函数,是神经网络结构参数的可微函数,可以对目标函数关于超参数求梯度,以更新超参数(更快,更好)
流程:
自定义多种block(每种block内部的结构各不相同)作为候选方案;自定义层数(多少个block串联)–> Super-net,可选方案的并联网络–>训练Super-net,寻找一条输入到输出的路径(最终的神经网络结构)
α为神经网络结构的超参数,w为神经网络参数
最终保留一条路径,最小化CEloss(最大化训练准确率)
α说明了在Super-net中哪个路径最重要,如果超网看作是一张图,则神经网络结构搜索就是选择图中的一条路径
损失优化:除了最大化准确率,考虑计算量,时间延迟(移动设备端)
措施:在神经网络结构搜索时考虑延迟,使得找到的神经网络结构有利于减小预测延迟(计算量)
实施:需要知道每种block的延迟具体有多大(候选模块重复一百次计算的平均时间)
将延迟放入优化函数中
入决定牺牲多少准确率来换取更快的计算(入小,注重精度)
- darts