ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于PPO强化学习的AutoResearch-RL:实现神经网络架构自动搜索与进化

基于PPO强化学习的AutoResearch-RL:实现神经网络架构自动搜索与进化 1. 项目概述当AI学会自我进化最近在搞一个挺有意思的玩意儿我把它叫做“AutoResearch-RL”。这个名字听起来有点唬人但核心想法其实挺直接的打造一个能自己搞研究、自己评估自己、然后不断进化的AI智能体。具体来说这个智能体的“研究”方向是自动发现最优的神经网络结构。想想看我们设计一个神经网络从ResNet到Transformer背后是无数研究者手动调参、试错的心血。这个过程既需要深厚的领域知识又极其耗时。AutoResearch-RL的目标就是把这个“炼丹”过程自动化、智能化。它不再是一个被动的、需要人类工程师反复喂数据和调参的工具而是一个具备“自我意识”的主动探索者。它会像一名不知疲倦的研究员在浩瀚的神经网络架构空间里不断提出新的设计方案行动然后通过训练和评估来检验这个方案的好坏奖励并根据结果反思和调整自己的“研究策略”策略更新周而复始永不停歇。这背后的核心驱动力是强化学习特别是近端策略优化算法。PPO算法以其出色的稳定性和样本效率成为了训练这类复杂决策智能体的理想选择。AutoResearch-RL智能体就是那个“研究员”它的“动作”是选择网络层类型、连接方式、超参数等它的“环境”是待解决的任务数据集和评估流程而“奖励”则是新设计出的网络在验证集上的性能指标如准确率、F1分数。通过PPO框架智能体学习到一个策略什么样的架构决策序列更有可能导向高性能的网络。这个项目的价值不言而喻。它不仅能将AI研究者从重复性的架构搜索劳动中解放出来更有可能探索出人类直觉难以触及的、新颖高效的网络结构。无论是计算机视觉、自然语言处理还是科学计算一个能自主进化的架构发现引擎都意味着我们离更通用、更强大的AI又近了一步。接下来我就带你深入拆解这个“永动”研究引擎的内部构造。2. 核心架构与永动循环设计要让一个AI智能体实现“自我研究”和“永动进化”其系统设计必须是一个精心构建的闭环。AutoResearch-RL的核心架构可以看作是一个由智能体、环境、评估器、元控制器四部分构成的自治系统。这个系统的运行完美诠释了“Perpetual Self-Evaluating”的含义。2.1 智能体作为架构探索者在这个框架中智能体是一个基于PPO算法训练的策略网络。它的输入并非原始数据而是当前架构搜索的“状态”。这个状态是一个高度结构化的表征可能包括当前部分架构的描述例如一个表示已构建网络层的图结构或一个序列化的操作列表。历史性能摘要之前尝试过的类似架构分支所获得的奖励性能的统计信息。任务上下文嵌入对目标任务如CIFAR-10图像分类的某种编码让智能体知道它在为什么任务设计网络。智能体的输出是一个在离散动作空间上的概率分布。每个动作对应一个具体的架构构建决策例如添加层选择卷积层、全连接层、注意力层、池化层等。配置层参数确定该层的滤波器数量、核大小、步长等。建立连接决定新层与前面哪几层相连这引入了跳跃连接等复杂拓扑。终止信号决定当前架构是否已经完成可以提交评估。注意动作空间的设计是成败关键。过于细粒度如每个滤波器的具体数值会导致搜索空间爆炸智能体难以学习过于粗粒度如只有5种预定义模块则限制了创新性。一个折中的方案是使用分层动作空间先决定模块类型再决定模块内的参数。2.2 环境与评估器的协同环境在这里不是一个静态的游戏场景而是一个动态的、计算密集的架构训练与评估流水线。当智能体输出一系列动作构建出一个完整的网络架构描述后这个描述会被送入环境。环境的运作流程如下架构实例化根据描述代码动态生成一个可训练的神经网络模型。快速训练在一个较小的代理数据集或完整数据集的一个子集上对模型进行短周期、低强度的训练。例如在CIFAR-10上只训练5-10个epoch使用较小的批量大小。这一步的目标不是获得最终性能而是快速获取一个性能潜力信号。性能评估在held-out的验证集上计算模型的指标如准确率。这个指标是奖励信号的主要组成部分。评估器则是一个更复杂、可能独立运行的模块。它的职责是进行更深度的、可信的最终评估。当智能体基于快速训练奖励更新策略并最终提出一个“候选冠军”架构时评估器会启动用完整的训练集、标准的训练流程如足够的epoch数、数据增强、学习率调度重新训练该架构。在独立的测试集上进行严谨评估得到最终报告性能。有时评估器还会计算架构的复杂度指标如参数量、FLOPs并将一个权衡了性能和效率的复合指标作为最终奖励反馈给元控制器用于调整智能体的长期目标。2.3 元控制器与永动循环元控制器是整个系统的大脑它管理着“永动”循环。它的工作包括经验回放管理存储智能体探索的状态动作奖励新状态经验轨迹。这些数据用于PPO算法的更新。策略更新调度决定何时收集够一批经验触发一次PPO的策略和价值网络更新。探索-利用权衡的动态调整初期鼓励智能体多尝试随机动作高探索率后期逐渐倾向于选择当前策略认为最优的动作高利用率。重启与迭代当一个架构搜索任务达到预设目标或迭代次数后元控制器可以初始化一个新的搜索任务可能是同一个任务的更深入搜索也可能是一个全新的任务从而实现“永不停歇”的研究。这个循环可以概括为智能体提议架构 - 环境快速训练并给出初步奖励 - 智能体根据奖励更新策略 - 循环往复 - 评估器对优秀候选做终极验证 - 元控制器根据终极结果调整搜索方向或开启新任务。整个过程中人类只需要定义任务和初始搜索空间剩下的“研究”工作完全交给了这个自治系统。3. 关键技术实现PPO驱动的策略优化AutoResearch-RL的核心学习引擎是PPO算法。选择PPO而非其他RL算法如DQN、A3C是基于架构搜索这个特定问题的深思熟虑。架构搜索的动作空间通常是高维、离散且连续的一个架构由多个连续的动作构成同时评估一个动作即训练一个网络的成本极其高昂。PPO在应对这些挑战上具有显著优势。3.1 为何是PPO样本效率与稳定性PPO属于策略梯度算法家族它通过限制每次策略更新的幅度通过剪切或惩罚KL散度避免了训练中的剧烈震荡。在架构搜索中每一次“试错”训练一个网络都可能需要数十分钟甚至数小时的计算资源。PPO的稳定性意味着我们能用更少的“失败尝试”学到有效的策略这对于计算成本高昂的任务至关重要。处理连续动作序列架构设计是一个序列决策过程。PPO天然适用于这种基于策略输出动作的场景它能直接优化一个参数化的策略函数如神经网络输出在给定状态下各个动作的概率。兼容优势函数PPO使用优势函数A(s, a)来评估动作的好坏即“这个动作比平均情况好多少”。在架构搜索中优势函数能更精细地分辨出在某个特定架构状态下选择“添加一个3x3卷积”是否真的比“添加一个5x5卷积”或“添加一个最大池化”更好即使它们的绝对奖励可能都不高。3.2 策略与价值网络设计在AutoResearch-RL中我们需要设计两个核心网络策略网络输入状态s输出动作概率分布 π(a|s)。由于状态可能包含图结构信息这里常使用图神经网络或Transformer编码器来处理。例如将当前已构建的架构表示为图节点是层边是连接用GNN编码得到一个状态向量再通过MLP头输出每个可能动作的logit。价值网络输入状态s输出一个标量V(s)代表当前状态即当前部分架构的长期价值预期。价值网络的结构通常与策略网络的编码器部分共享参数以降低计算负担并促进特征学习。一个简化的伪代码逻辑如下# 伪代码展示PPO更新核心循环 for iteration in range(total_iterations): # 1. 收集轨迹智能体与环境交互 trajectories [] for _ in range(num_envs): state env.reset() # 重置为空的架构状态 done False while not done: action_dist policy_network(state) action sample(action_dist) # 采样一个动作如“添加卷积层” next_state, reward, done env.step(action) # 实例化并快速训练新架构 trajectories.append((state, action, reward, next_state, done)) state next_state # 2. 计算优势估计和回报 # 使用GAE(广义优势估计)从收集的奖励序列计算每个状态-动作对的优势A_t advantages compute_gae(trajectories, value_network, gamma, lambda) # 3. PPO核心更新最大化剪切后的目标函数 for epoch in range(ppo_epochs): # 从轨迹中采样一批数据 batch sample_batch(trajectories) states, old_actions, old_log_probs, returns, advantages batch # 计算新策略下的log概率和熵 new_action_dist policy_network(states) new_log_probs new_action_dist.log_prob(old_actions) entropy new_action_dist.entropy().mean() # 计算概率比和剪切目标 ratios torch.exp(new_log_probs - old_log_probs) surr1 ratios * advantages surr2 torch.clamp(ratios, 1 - clip_epsilon, 1 clip_epsilon) * advantages policy_loss -torch.min(surr1, surr2).mean() # 价值函数损失均方误差 values value_network(states) value_loss F.mse_loss(values, returns) # 总损失 策略损失 价值损失系数 * 价值损失 - 熵系数 * 熵鼓励探索 total_loss policy_loss value_coef * value_loss - entropy_coef * entropy optimizer.zero_grad() total_loss.backward() optimizer.step()3.3 奖励工程引导智能体走向“优秀”在强化学习中奖励信号就是智能体学习的“指挥棒”。在AutoResearch-RL中设计一个好的奖励函数R是成功的关键。一个朴素的奖励是验证集准确率。但这存在几个问题稀疏性只有当一个完整架构被构建并训练后才能获得一个奖励。中间动作没有即时反馈。方差大快速训练得到的准确率噪声很大可能因为随机初始化或优化器的偶然性而波动。未考虑效率智能体可能倾向于设计出参数量巨大、精度仅提升一点点的模型。因此我们需要进行奖励工程中间奖励可以为某些关键动作设置小的正向或负向奖励。例如成功添加一个层给与一个极小的正奖励如0.001以缓解稀疏性问题。奖励归一化在每一轮迭代中对收集到的所有奖励进行减均值、除标准差的标准化使其均值为0方差为1。这能稳定PPO的训练。多目标奖励最终的奖励可以是多个指标的线性组合例如R Accuracy - β * log(Params)。其中β是一个权衡系数用来惩罚模型复杂度鼓励智能体发现精度高且高效的架构。实操心得奖励函数中的系数如β需要小心调整。一开始可以设β0让智能体先学会找到高精度架构哪怕它很大。然后逐渐增加β引导它“压缩”模型。这个过程本身也可以自动化让元控制器来调整β。4. 实战部署从零构建一个简易AutoResearch-RL系统理论说了这么多我们来动手搭建一个简化版的AutoResearch-RL针对一个具体任务在CIFAR-10数据集上自动发现卷积网络架构。我们将使用PyTorch和Stable-Baselines3库它提供了高质量的PPO实现作为基础。4.1 环境定义与状态/动作空间首先我们需要用gymnasium原OpenAI Gym的接口来定义我们的环境。import gymnasium as gym from gymnasium import spaces import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms import numpy as np class NASEnv(gym.Env): def __init__(self, max_layers10): super().__init__() self.max_layers max_layers self.current_step 0 self.best_val_acc 0.0 # 动作空间假设每个动作是一个元组 (layer_type, channels, kernel_size, stride) # 为简化我们将它们扁平化为一个离散空间。例如 # 0: Conv(32, 3x3, stride1) # 1: Conv(64, 3x3, stride1) # 2: Conv(128, 3x3, stride1) # 3: MaxPool(2x2) # 4: Identity (跳跃连接) # 5: Terminal (终止构建) self.action_space spaces.Discrete(6) # 6种基本操作 # 状态空间我们需要编码当前已构建的架构。 # 一个简单方法固定长度序列每个位置代表一层的信息。 # 这里我们用一个(max_layers, feature_dim)的矩阵。feature_dim编码层类型、参数等。 # 当前步数也作为状态的一部分。 self.observation_space spaces.Box(low-1, high100, shape(max_layers 1,), dtypenp.float32) # 这里简化了实际应用需要更复杂的表示如图或序列。 # 加载CIFAR-10数据快速训练用子集 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) train_dataset datasets.CIFAR10(root./data, trainTrue, downloadTrue, transformtransform) # 取一个小子集加速 self.train_loader torch.utils.data.DataLoader(train_dataset, batch_size64, shuffleTrue, num_workers2) val_dataset datasets.CIFAR10(root./data, trainFalse, downloadTrue, transformtransform) self.val_loader torch.utils.data.DataLoader(val_dataset, batch_size256, shuffleFalse, num_workers2) def reset(self, seedNone, optionsNone): super().reset(seedseed) self.current_step 0 self.architecture [] # 存储层描述 # 初始化状态全零向量表示空架构 state np.zeros(self.observation_space.shape, dtypenp.float32) state[0] self.current_step # 第一步把步数放在第一个位置 return state, {} def step(self, action): self.current_step 1 self.architecture.append(action) # 检查是否终止 done (action 5) or (self.current_step self.max_layers) if done: # 构建、训练并评估网络 reward self._train_and_evaluate() # 更新最佳记录可选用于归一化奖励 self.best_val_acc max(self.best_val_acc, reward) else: reward 0.0 # 中间步骤无即时奖励 # 更新状态这里简单地将动作历史放入状态向量 state np.zeros(self.observation_space.shape, dtypenp.float32) state[0] self.current_step for i, a in enumerate(self.architecture[:self.max_layers]): state[i1] a 1 # 偏移一下避免0值混淆 return state, reward, done, False, {} def _train_and_evaluate(self): 根据self.architecture构建网络快速训练返回验证准确率作为奖励 # 1. 根据动作列表动态构建模型 model self._build_model_from_actions(self.architecture[:-1]) # 去掉终止动作 device torch.device(cuda if torch.cuda.is_available() else cpu) model.to(device) # 2. 快速训练例如3个epoch criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr0.001) model.train() for epoch in range(3): # 快速训练 for inputs, labels in self.train_loader: inputs, labels inputs.to(device), labels.to(device) optimizer.zero_grad() outputs model(inputs) loss criterion(outputs, labels) loss.backward() optimizer.step() # 3. 在验证集上评估 model.eval() correct 0 total 0 with torch.no_grad(): for inputs, labels in self.val_loader: inputs, labels inputs.to(device), labels.to(device) outputs model(inputs) _, predicted torch.max(outputs.data, 1) total labels.size(0) correct (predicted labels).sum().item() accuracy correct / total return accuracy def _build_model_from_actions(self, actions): 将动作序列转换为PyTorch模型简化版仅示意 layers [] in_channels 3 # CIFAR-10输入通道 for a in actions: if a 0: layers.append(nn.Conv2d(in_channels, 32, kernel_size3, padding1)) in_channels 32 elif a 1: layers.append(nn.Conv2d(in_channels, 64, kernel_size3, padding1)) in_channels 64 elif a 2: layers.append(nn.Conv2d(in_channels, 128, kernel_size3, padding1)) in_channels 128 elif a 3: layers.append(nn.MaxPool2d(2)) elif a 4: # Identity在PyTorch中可以用nn.Identity但这里为了简化我们跳过 # 实际需要更复杂的图结构来支持跳跃连接 pass layers.append(nn.ReLU()) layers.append(nn.AdaptiveAvgPool2d((1, 1))) layers.append(nn.Flatten()) # 注意这里输出维度是硬编码的实际需要根据最后的通道数计算 layers.append(nn.Linear(in_channels, 10)) # CIFAR-10有10类 return nn.Sequential(*layers)4.2 集成PPO与训练循环定义好环境后我们可以使用Stable-Baselines3来创建和训练PPO智能体。from stable_baselines3 import PPO from stable_baselines3.common.vec_env import DummyVecEnv from stable_baselines3.common.callbacks import EvalCallback, StopTrainingOnNoModelImprovement # 创建环境 env DummyVecEnv([lambda: NASEnv(max_layers8)]) # 定义PPO模型 # 策略网络和价值网络会自动根据环境观察空间创建但我们可以自定义 policy_kwargs dict(activation_fntorch.nn.ReLU, net_arch[64, 64]) model PPO(MlpPolicy, env, policy_kwargspolicy_kwargs, learning_rate3e-4, n_steps2048, batch_size64, n_epochs10, gamma0.99, gae_lambda0.95, clip_range0.2, verbose1) # 设置回调定期评估并保存最佳模型 eval_callback EvalCallback(env, best_model_save_path./logs/, log_path./logs/, eval_freq5000, deterministicTrue, renderFalse) # 开始训练 print(开始训练AutoResearch-RL智能体...) model.learn(total_timesteps100000, callbackeval_callback) print(训练完成。) # 保存最终模型 model.save(ppo_autonas)4.3 结果分析与架构导出训练完成后我们可以加载最佳模型并让它生成一些架构。# 加载模型 model PPO.load(./logs/best_model) # 让智能体在环境中“运行”几次查看其设计的架构 test_env NASEnv(max_layers8) for i in range(5): obs, _ test_env.reset() done False arch [] while not done: action, _states model.predict(obs, deterministicTrue) # 使用确定性策略 obs, reward, done, truncated, info test_env.step(int(action)) arch.append(int(action)) print(f第{i}次运行生成的架构动作序列: {arch}, 最终奖励(准确率): {reward:.4f}) # 可以将动作序列转换为实际的PyTorch模型并保存 if reward 0.75: # 假设我们只保存准确率大于75%的架构 net test_env._build_model_from_actions(arch[:-1]) torch.save(net.state_dict(), fdiscovered_arch_{i}_acc{reward:.3f}.pth)这个简化版本忽略了真实NAS中的许多复杂性如可微架构搜索、细胞结构、跨层连接、超参数优化等但它清晰地展示了AutoResearch-RL的核心闭环PPO智能体通过与环境架构训练评估流程交互学习生成高性能神经网络架构的策略。5. 性能优化与工程实践中的挑战在实际部署一个全功能的AutoResearch-RL系统时你会遇到许多在简化demo中不曾出现的挑战。这些挑战直接关系到项目的成败和效率。5.1 计算成本与加速策略最大的瓶颈无疑是计算成本。训练一个网络来评估一个动作即使只跑几个epoch在大型数据集上也是沉重的负担。以下是几种关键的加速策略权重共享与一次性评估这是ENAS和DARTS等算法的核心思想。不独立训练每个候选架构而是构建一个包含所有可能操作的超网络。所有架构共享这个超网络的权重。评估一个子架构时只需激活对应的路径进行计算无需从头训练。这能将评估时间从数小时缩短到数秒。在AutoResearch-RL中可以将环境中的_train_and_evaluate替换为基于超网络的前向传播和梯度更新。代理任务与低保真度评估数据子集在完整数据集的一个小子集如10%上进行训练和评估。低分辨率图像对于CV任务将输入图像下采样。减少训练周期只训练很少的epoch如5个。减少网络宽度/深度评估时使用较少的滤波器或层数。早停机制如果训练初期损失下降缓慢提前终止该架构的评估给予一个较低的奖励。分布式并行评估PPO的n_steps参数意味着智能体在更新前要收集多条轨迹。这些轨迹的收集即架构评估是相互独立的可以完美并行。使用Ray或PyTorch Distributed等框架可以同时启动几十甚至上百个训练任务极大缩短每一轮迭代的时间。实操心得分层搜索是一个有效的工程实践。先在一个非常廉价的代理任务如小数据集、极小模型上进行大规模、探索性的搜索筛选出有潜力的架构方向。然后只对这些有潜力的架构在更接近真实任务的设置更大数据集、更长的训练时间上进行二次精炼评估。这好比先广撒网再重点捕捞。5.2 策略网络与状态表示的进阶设计我们之前用了简单的MLP和扁平化状态这对于复杂架构搜索是远远不够的。基于图神经网络的状态编码神经网络架构本质是一个有向无环图。GNN是编码这种结构信息的天然工具。将每一层视为节点连接视为边节点的特征可以包含层类型、参数等。通过几层GNN消息传递最终得到一个代表整个当前部分架构的图嵌入向量作为策略网络的输入。这能让智能体更好地理解架构的拓扑语义。基于Transformer的序列编码如果将架构生成视为一个序列生成问题先添加第一层再第二层...那么Transformer编码器是绝佳选择。它通过自注意力机制让当前待生成的动作能“看到”并“理解”之前所有已生成层及其之间的关系。位置编码则提供了层的顺序信息。引入记忆机制让策略网络具备记忆能力如LSTM或Transformer解码器可以帮助智能体记住在生成长序列架构过程中的长期依赖关系避免出现前后矛盾的设计如在池化层后紧接一个需要空间信息的上采样操作。5.3 奖励塑造与多目标优化单一的准确率奖励容易导致智能体陷入局部最优或设计出不可用的模型如参数量爆炸。多目标奖励函数设计一个复合奖励R f(Acc, Params, FLOPs, Latency)。这需要为每个目标设定一个权重或使用帕累托优化。一个常见形式是R Acc - λ1 * log(Params) - λ2 * log(FLOPs)。动态调整λ可以让智能体在不同阶段侧重不同目标。基于排名的奖励不直接使用准确率的绝对值而是使用在一批候选架构中的相对排名作为奖励。例如将一批架构按性能排序排名前10%的获得高奖励后10%的获得惩罚。这种方法对奖励的尺度不敏感更关注架构之间的相对优劣能有效应对评估噪声。好奇心驱动探索为奖励增加一个“好奇心”项鼓励智能体探索那些其预测模型一个学习预测下一状态或奖励的辅助网络难以预测结果的区域。这能防止智能体过早收敛到某个看似不错但非最优的架构模式上。6. 常见陷阱、调试与未来展望即使理解了所有原理在实现AutoResearch-RL的过程中你依然会踩进无数的坑。这里记录了一些典型的陷阱和调试方法。6.1 训练不稳定的根源与对策PPO虽然稳定但在NAS这种独特环境下仍可能失效。问题现象可能原因排查与解决思路奖励不增长智能体行为随机学习率太高/太低奖励尺度不合适智能体从未获得正向反馈。1.监控策略熵熵值应缓慢下降。如果熵始终很高说明智能体在随机探索可能奖励信号太弱或学习率太低。2.归一化奖励使用RewardNormalizer。3.检查环境确保环境给出的奖励是正确的例如快速训练出的准确率是否合理。可以手动测试几个已知的好/坏架构看奖励是否符合预期。奖励初期上升后崩溃策略更新步长太大一次更新“毁掉”了已学到的策略或探索率下降太快。1.减小PPO的clip_range从0.2调到0.1甚至0.05限制每次更新的幅度。2.调整GAE参数lambda降低lambda如从0.95到0.9可以减少优势估计的方差。3.检查价值函数损失如果价值损失突然飙升说明价值网络没学好拖累了策略更新。可以尝试调低价值损失系数vf_coef。智能体总是过早终止终止动作的奖励设置不合理或者智能体发现“什么都不做”比“做错了受罚”更安全。1.给终止动作一个基于最终性能的奖励而不是固定奖励。2.为中间步骤引入小的负奖励生存成本鼓励智能体在找到好架构前不要轻易终止。例如每添加一层奖励-0.001。3.修改动作空间将“终止”动作设置为只有在达到最大层数时才可用。6.2 评估噪声与过拟合快速训练评估带来的噪声是RL在NAS中应用的主要挑战之一。现象同一个架构两次不同的随机种子下快速训练可能得到差异很大的准确率如±3%。这会导致奖励信号噪声极大智能体无法可靠地判断一个动作的好坏。对策多次采样取平均对同一个架构用不同的随机种子初始化并快速训练K次如K3取平均准确率作为奖励。这能显著降低方差但计算成本乘K倍。使用排名奖励如前所述排名对绝对数值的噪声不敏感。引入预测器训练一个性能预测器一个回归模型输入是架构编码输出是预测的性能。用这个预测器的输出作为奖励的一部分或替代。随着RL的进行用真实评估数据不断微调这个预测器。这相当于让智能体从一个“经验丰富的导师”那里获得更平滑的反馈。6.3 从研究到生产落地考量一个在CIFAR-10上搜索出的优秀架构直接迁移到ImageNet或你的业务数据集上性能可能会大打折扣。领域迁移问题架构搜索是高度依赖任务和数据的。在代理任务小数据集上搜出的最优架构在目标任务大数据集上可能不是最优。这就是代理任务保真度问题。解决方案逐步提升保真度采用多保真度搜索。先在极低保真度设置下如小图、少epoch进行大量探索筛选出候选池。然后逐步增加保真度更大数据子集、更多epoch在候选池内进行精炼和排序。搜索空间迁移不直接迁移架构而是迁移搜索策略。将在源任务如CIFAR-10上训练好的PPO智能体的策略网络作为在目标任务如ImageNet上继续训练的初始权重。由于神经网络设计的一些通用原则如“先卷积后池化”、“跳跃连接有用”是跨任务共享的这种迁移学习能大大加速在新任务上的搜索。引入元学习让智能体学会“如何快速适应一个新任务”。在训练阶段就让智能体接触多种不同的代理任务学习一个通用的、可快速调整的架构搜索策略。这个领域的终极愿景是构建一个真正“通用”的AI研究智能体。它不仅限于神经网络架构设计未来可以扩展到优化算法设计、新型激活函数发现、甚至机器学习 pipeline 的自动组合。AutoResearch-RL框架提供了一个强大的范式将创造性过程形式化为一个序列决策问题利用强化学习的力量进行自动化探索。虽然前路充满工程与算法上的挑战但每一次尝试都让我们离“AI设计AI”的自动化未来更近一步。
返回列表