1、引言
在超参数中,Architecture指神经网络结构,比方说有多少个卷积层,每层有多少个卷积核,卷积核的大小等。Optimization Algorithm指优化算法,比方说算法类型(SGD等),batch大小,epoch数量,学习率等。
我们的目标是在测试集上得到更高的测试精确度,以此来评价模型好坏。所以要更优的权重参数,而超参数决定能否得到更好的权重参数。
以下来自我在youTube上总结的学习笔记,Neural Architecture Search: Basics & Random Search。除了最后一张在ppt截图了,其它两张都是自己画的,不要白嫖哦。
2、结构超参数 Architectural hyper-parameters
以CNN的结构为例子
程
序
=
{
卷
积
层
(
c
o
n
v
l
a
y
e
r
s
)
和
全
连
接
层
(
d
e
n
s
e
l
a
y
e
r
s
)
的
数
量
卷
积
核
的
数
量
,
卷
积
核
的
大
小
和
每
一
个
卷
积
层
的
s
t
r
i
d
e
大
小
全
连
接
层
的
宽
度
(
输
出
向
量
的
大
小
)
程序=\left\{ \begin{matrix} 卷积层(conv\ layers)和全连接层(dense\ layers)的数量 \\ 卷积核的数量,卷积核的大小和每一个卷积层的stride大小\\ 全连接层的宽度(输出向量的大小) \end{matrix} \right.
程序=⎩⎨⎧卷积层(conv layers)和全连接层(dense layers)的数量卷积核的数量,卷积核的大小和每一个卷积层的stride大小全连接层的宽度(输出向量的大小)
目前流行的CNN网络结构的超参数都是人工手动设计的
3、Neural Architecture Search(NAS)神经架构搜索
3.1 定义
寻找最优的神经网络结构,使得validation 准确率最好。当然,除了准确率,还要考虑计算内存、计算量开销等指标。
比方说,MobileNet计算内存开销比ResNet要小,但是准确率却低于ResNet。
3.2 Search Space 搜索空间
搜索空间是用户事先指定的,如下表所示:
我们想搭建一个10层的CNN网络。我们知道10-100的整数都是可行的卷积核的数量,但不可能全部都罗列进去搜索,否则搜索开销会非常非常大,所以要人工设定候选超参数。
Hyper-parameter Types | Candidates |
---|---|
the number of filters | { 24 , 36 , 48 , 64 } \{24,36,48,64\} {24,36,48,64} |
size of filters | { 3 × 3 , 5 × 5 , 7 × 7 } \{3 \times 3,5 \times 5,7 \times 7\} {3×3,5×5,7×7} |
stride | { 1 , 2 } \{1,2\} {1,2} |
我们的目标搜索空间:
{
24
,
36
,
48
,
64
}
10
×
{
3
×
3
,
5
×
5
,
7
×
7
}
10
×
{
1
,
2
}
10
\{24,36,48,64\}^{10} \times \{3 \times 3,5 \times 5,7 \times 7\}^{10} \times \{1,2\}^{10}
{24,36,48,64}10×{3×3,5×5,7×7}10×{1,2}10
目标搜索空间大小:
是所有可能的神经网络架构的数量,
(
4
×
3
×
2
)
10
(4\times3\times2)^{10}
(4×3×2)10
Nas的输出:
Layer 1 | Layer 2 | … \dots … | Layer 10 | |
---|---|---|---|---|
the number of filters | 36 | 48 | … \dots … | 64 |
size of filters | 5 × 5 5 \times 5 5×5 | 3 × 3 3 \times 3 3×3 | … \dots … | 7 × 7 7 \times 7 7×7 |
stride | 2 | 1 | … \dots … | 2 |
3.3 Baseline : Random Search
Nas最简单的方法就是随机搜索,首先在搜索空间中均匀随机搜索出一组超参数,然后搭建神经网络。一直训练,学习参数,直到算法收敛。最后用训练好的模型做预测,用validation准确率来评价模型的好坏。重复这个过程,最终找到最好的validation准确率所对应的那一组超参数,作为定下来的神经网络结构。这种随机搜索的方法也称为交叉验证(Cross-validation)。
最终我们选择达到94%validation准确率的这组超参数来设计CNN的神经网络结构。
交叉验证维基百科的定义:
交叉验证,有时亦称循环估计,是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析,而其它子集则用来做后续对此分析的确认及验证。一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。交叉验证的目的,是用未用来给模型作训练的新数据,测试模型的性能,以便减少诸如过拟合和选择偏差等问题。
3.4 Nas的挑战
- 每次测试/训练的成本/代价都很高
- 搜索空间太大
- 灾难性遗忘
PS:觉得不错的话,可以三连支持一下,有错误也请指出,谢谢!