设计一个最先进的神经网络通常被形容为一门“玄学”。它需要深厚的专业知识、无数小时的实验,以及相当程度的直觉。从 AlexNet、VGGNet 到 ResNet 和 DenseNet,每一个突破性的架构都是人类煞费苦心设计的产物。
但如果我们能将这个过程自动化呢?如果我们不再手动设计架构,而是设计一种能够学习如何为我们设计架构的算法呢?
这正是 《使用强化学习的神经架构搜索》 (“Neural Architecture Search with Reinforcement Learning”) 这篇 2017 年由 Google Brain 研究人员发表的论文背后的开创性思想。作者们提出了一个系统,其中一个被称为 控制器 (Controller) 的 AI 能够从零开始生成高性能的神经网络架构。控制器会随着时间推移不断提升,探索广阔的设计空间,发现新颖的架构,这些架构能够媲美——甚至有时超越——最佳的人类设计。
在本文中,我们将深入探讨如何使用一个神经网络去设计另一个神经网络,探索使之成为可能的强化学习技术,并审视那些帮助开启自动化机器学习新时代的惊人成果。
架构工程的挑战
在我们探索 NAS 解决方案之前,先来理解这一问题。在深度学习中,进步往往与架构创新密不可分。虽然超参数调整 (寻找合适的学习率、批量大小、优化器) 已然具有挑战性,但设计网络的架构则更加复杂。
架构师必须决定:
- 深度: 模型应该有多少层?
- 层类型: 卷积?循环?池化?还是某种组合?
- 每层参数: 滤波器尺寸、步幅大小、单元数量。
- 连接方式: 顺序堆叠?像 ResNet 那样的跳跃连接?还是像 DenseNet 那样的密集连接?
可能性的空间巨大。传统的超参数优化方法——如随机搜索、贝叶斯优化——适合处理固定长度的参数集,但在设计复杂的、有条件的、可变长度的架构时则显得捉襟见肘。
神经架构搜索 (NAS) 将架构设计本身重新定义为一个学习问题。
核心思想: AI 架构师
作者的方法在两个核心组件之间创建了一个反馈循环:
- 控制器 (Controller) : 一个循环神经网络 (RNN) ,生成一系列描述网络架构的 token —— 即蓝图。
- 子网络 (Child Network) : 由蓝图定义的网络,在 CIFAR-10 等真实数据上进行训练。
- 奖励评估 (Reward Assessment) : 训练完成后,子网络在验证集上的准确率作为奖励信号。
- 控制器更新 (Controller Update) : 使用强化学习更新控制器的参数,使其倾向于选择能带来更好奖励的架构。
这一循环如图 1 所示,会重复数千次。随着时间推移,控制器会成为一个更熟练的“AI 架构师”。
图 1: NAS 过程概览: 控制器采样架构,子网络被训练,准确率成为奖励,控制器学习生成更好的架构。
控制器: 用 RNN 生成蓝图
为什么选择 RNN?因为架构生成本质上是一个顺序过程: 某一层的参数选择可能会影响下一层。RNN 能够在条件化前序输出的情况下预测后续的参数序列。
对于一个简单的卷积网络 (CNN) ,控制器会为每一层依次预测:
- 滤波器高度
- 滤波器宽度
- 步幅高度
- 步幅宽度
- 滤波器数量
每一层参数的预测都是逐步完成的,并作为输入传递给下一步,直到达到预定义的最大深度。
图 2: 控制器 RNN 顺序采样 CNN 层的超参数,一步的输出馈送到下一步。
这种自回归设计允许生成可变长度的架构,并能捕捉超参数之间的复杂依赖关系。
训练控制器: 使用 REINFORCE 学习
一旦控制器定义了一个架构,相应的子网络就会被构建并训练完成。训练结束后,子网络的验证集准确率 \( R \) 会被用作奖励。
奖励 \( R \) 是不可微的,因此无法直接通过生成-训练的全过程进行反向传播。因此,作者使用了 REINFORCE,一种经典的策略梯度算法。
目标是最大化:
\[ J(\theta_c) = E_{P(a_{1:T};\theta_c)}[R] \]其中 \(\theta_c\) 为控制器参数,\(a_{1:T}\) 为预测的动作序列 (架构选择) 。
REINFORCE 对梯度的估计为:
\[ \nabla_{\theta_c} J(\theta_c) = \sum_{t=1}^T E_{P(a_{1:T};\theta_c)} \big[ \nabla_{\theta_c} \log P(a_t | a_{(t-1):1}; \theta_c) R \big] \]简单来说: 如果一系列选择带来高准确率,就调整 \(\theta_c\) 让这些选择出现的概率更大;表现差的选择概率会被降低。
这一估计器的高方差会导致训练不稳定。为降低方差,作者引入了一个基线值 (baseline) \( b \),即过去奖励的指数滑动平均。此时的奖励项变为 \((R_k - b)\),这强化了高于平均水平的架构:
\[ \frac{1}{m} \sum_{k=1}^{m} \sum_{t=1}^{T} \nabla_{\theta_c} \log P(a_t \mid a_{(t-1):1}; \theta_c) (R_k - b) \]扩展 NAS: 大规模并行化
将每个子网络训练到收敛非常耗时 (需数小时) ,作者借助了大规模并行计算。
图 3: 分布式 NAS 训练——服务器管理控制器权重,副本采样架构,数百个子模型并行训练。
他们使用了:
- 参数服务器 (Parameter Servers) : 存储控制器的共享权重。
- 控制器副本 (Controller Replicas) : 拉取权重并各自生成多个架构。
- 子网络副本 (Child Replicas) : 并行训练每个被采样的架构。
实验设置为: 20 个参数服务器分片,100 个控制器副本,每个副本采样 \( m = 8 \) 个架构,总计在 800 块 GPU 上并行训练 800 个子网络。
扩展搜索空间: 跳跃连接
现代网络常用跳跃连接 (ResNet、DenseNet) 来缓解梯度消失并实现更深的网络。作者为控制器加入了一种类似注意力机制的扩展:
对每一层 \( i \),预测一个 sigmoid 概率,决定是否与之前的每一层 \( j < i \) 相连:
\[ P(\text{Layer j is input to layer i}) = \sigma( v^T \tanh( W_{prev} h_j + W_{curr} h_i)) \]允许多个连接,输出在深度维度上拼接。
图 4: 控制器通过注意力机制构建跳跃连接与复杂拓扑。
超越 CNN: 设计全新循环单元
那 RNN 呢?标准的 LSTM 单元是人类设计的,NAS 能否找到更优的结构?
作者将 RNN 单元的计算建模为一棵树,其输入为 \( x_t \) 和 \( h_{t-1} \)。对于每个节点,控制器预测:
- 组合方式 (例如,加法、逐元素乘法)
- 激活函数 (例如,
tanh
、sigmoid
、relu
)
最终构建出一棵计算树,输出 \( h_t \) (以及可选的记忆状态 \( c_t \)) 。
图 5: NAS 预测构建的循环单元示例,编译成计算图。
以 8 个叶子输入为基础,搜索空间规模约为 \(6 \times 10^{16}\) 种可能架构。
实验与结果
NAS 在两个高难度基准上进行了测试:
CIFAR-10: 发现顶尖卷积网络
评估约 12,800 个架构后,NAS 找到一个 CNN,错误率为 3.65%,略好于 DenseNet-BC 的 3.74%,且速度快 1.05 倍。
表 1: NAS 与其他 CIFAR-10 顶尖架构性能对比。NAS 达到最先进水平。
所发现的架构更偏爱矩形滤波器 (如 7×5) 与短跳跃连接。
Penn Treebank: 发明更优 LSTM
NAS 设计的新 RNN 单元测试困惑度为 62.4,优于此前最佳的 66.0。
表 2: NAS 单元在 PTB 语言建模任务上获得新的最先进困惑度。
在字符级 PTB 任务上,该单元同样创造了新标杆。
表 3: NAS 单元泛化到字符级 PTB 建模,性能超过强大基线。
未经调优直接用于谷歌神经机器翻译系统时,BLEU 得分提高了 0.5 —— 足见其强大的可迁移性。
比随机搜索更好吗?
这会不会只是尝试了大量随机架构的幸运结果?并非如此。
图 6: NAS (策略梯度) vs. 随机搜索——NAS 持续找到更优模型,差距不断扩大。
NAS 控制器显然随着时间推移学会了更高效的搜索策略。
结论与影响
《使用强化学习的神经架构搜索》 改变了研究人员对网络设计的认知。要点如下:
- 自动化可行: 架构设计可构建为强化学习问题,让控制器发现新颖、高性能的结构。
- 最先进的结果: NAS 在多种任务上表现媲美甚至超越人类设计架构。
- 新时代开启: 虽然早期基于强化学习的 NAS 计算开销巨大,但它推动了更高效 NAS 方法的研究 (如可微分搜索、One-Shot 模型) 。
这项工作是通向元学习 (meta-learning) ——即机器学会如何学习——的一座里程碑。通过将 AI 最具挑战性的任务之一实现自动化,NAS 让人类研究者能够专注于更高层次的创新。NAS 发现的循环单元,已作为 NASCell
收录进 TensorFlow,至今仍是机器自主构建自身能力的有力见证。