Basic Idea
- 需要用户自己定义一定数量的模块如9个模块,每个模块各不相同,如下图所示就可以被称为一个模块
- 还需要用户自己定义层数如20层,那么对于每一层我们都有9种模块可以选择,一共有20层,那么我们的搜索空间是
9
20
9^{20}
920
Super Net
1. One layer of Super Net
- Super Net 的一层由 9 个(上面人为设置)模块并联而成,用这 9 个模块处理输入的张量,然后对这 9 个模块的输出做加权平均得到一个张量 z ,权重由 Softmax 函数计算得出,输入为九个模块的参数
- Super Net 一共有 20 层(上面人为设置),在这 20 层后可能还有池化层和全连接层做分类或回归,但是之后的这些池化和全连接层需要用户根据自己的经验确定,该方法无法学习之后的超参数。一个层有 9 个并联的模块,但是每个层最后只会保留一个模块
- 每个层都有自己的可训练参数,层与层之间不共享参数
- 符号含义如下:
- 训练这个 Super Net,我们可以学习它的参数 θ
- 得到了训练的 θ,我们就可以用 Softmax算出权重,我们选择每一层中权重最大的模块作为我们的最终模块。这样我们就完成了搜索
- 个人的理解插入:这里的 θ 是从训练数据中学习到的,有训练数据的特征,而符合预测结果的模块结构的 θ 会更大,所以我们可以通过 θ 来选
Computational Efficient Design
- 在实际应用的时候我们要考虑计算的效率,有时候需要牺牲一些准确率来保证计算的高效性
Latency
- 假设我们需要在手机上部署一个神经网路,我们希望 Latency 越小越好:
- 我们测出每一个模块的 Latency,再根据 θ 做加权平均,计算出整个神经网络的总 Latency
- 平衡 Latency 和准确率的方法就是我们可以把神经网络的总 Latency 加到损失函数里面去一起计算梯度:
Hardware Awareness
- 对于不同的硬件条件,在不同的设备上找到的网络结构会不同: