人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载本技术指南围绕 task_set/tasks/losg_problems/README.md 展开系统讲解 google-research 仓库中losg_problems模块的来龙去脉它源自经典论文《Learned Optimizers that Scale and Generalize》LOSG的问题集经 TensorFlow 版本适配后成为 TaskSet 元学习优化器基准的核心组成部分。读完本文你将掌握该问题集的完整目录结构、Problem基类与Spec数据结构的设计、六类玩具优化问题与随机数据集的生成原理、以及如何通过ModelAdapter把任意 TensorFlow 模型改造成可元训练的问题对象并能在本地运行对应测试与训练脚本。问题集的来源与定位task_set/tasks/losg_problems/README.md 全文只有一句话说明These problems are a copy (and slight modification for tensorflow updates and formatting) to those found in: https://github.com/tensorflow/models/tree/master/research/learned_optimizer/problems翻译过来即本目录下的问题是 LOSGLearned Optimizers that Scale and Generalize问题集的副本仅针对 TensorFlow 版本更新与代码格式做了轻微修改。这与 task_set/tasks/losg_tasks.py 头部注释相互印证——该文件明确指出其构建的任务与 LOSG 论文所用任务相似但包含了与原问题集不同的设置并给出论文 arXiv 编号 1703.04813。在 google-research 的 TaskSet 项目中论文《Using a thousand optimization tasks to learn hyperparameter search strategies》arXiv:2002.11887这些 LOSG 问题被重新组织为两类用途优化器元训练meta-training作为随机采样任务族的组成部分参与训练学习型优化器优化器评测evaluation固定参数的 2D 测试问题用于验证优化器性能。从代码引用关系可以清晰看到它的核心地位task_set/tasks/losg_tasks.py 同时导入了losg_problems下的datasets、problem_generator、problem_spec三个模块task_set/tasks/fixed/fixed_2d.py 也依赖该问题集构建固定评测任务。目录结构与各文件职责losg_problems目录共包含 7 个文件职责划分非常清晰文件职责README.md来源说明LOSG 问题集副本problem_spec.py定义Spec数据结构统一封装问题类 参数problem_generator.py核心模块Problem基类与全部玩具优化问题实现datasets.py监督学习数据集的生成与批量切分工具model_adapter.py把任意 TensorFlow 图适配为Problem接口problem_generator_test.py问题基类与稀疏梯度的单元测试datasets_test.py数据集生成与 batch 切分的单元测试model_adapter_test.pyModelAdapter变量替换机制的单元测试核心数据结构Spec——问题定义的延迟构造器problem_spec.py 是整个问题集复用的关键数据结构。它基于collections.namedtuple定义字段为callable、args、kwargs本质上是函数/类 参数的语法糖class Spec(collections.namedtuple(Spec, callable args kwargs)): Syntactic sugar for keeping track of a function/class args. __slots__ () def build(self): Returns the output of the callable. return self.callable(*self.args, **self.kwargs)使用方式在 losg_tasks.py 中有大量实例例如构造一个随机二次型问题problem_spec.Spec(pg.Quadratic, (cfg[dim],), {noise_stdev: cfg[noise_stdev]})build()调用时才真正实例化问题对象。这种设计让问题定义可以脱离构建过程被序列化、随机采样和延迟构建是 TaskSet 大规模随机生成任务族sampler/getter 机制的基础。Problem 基类统一的优化问题接口problem_generator.py 定义了Problem基类为所有优化问题提供统一接口。子类必须重写objective方法并声明参数形状param_shapes。初始化与随机种子管理def __init__(self, param_shapes, random_seed, noise_stdev, init_fnNone):关键逻辑problem_generator.pyrandom_seed必须是整数或None否则抛出ValueError若传入None则从MAX_SEED 4294967295范围内随机抽取种子设置np.random.seed(self.random_seed)保证问题内部的随机数据可复现noise_stdev记录梯度噪声强度init_fn用于自定义变量初始化默认为空操作。参数初始化基类提供两套初始化入口problem_generator.pyinit_tensors(seed)返回形状与param_shapes一一对应的tf.random_normal张量init_variables(seed)在名为parameters的变量作用域下把这些张量包装成tf.Variable。值得注意的是SoftmaxClassifier与ConvNet会重写init_tensors以使用不同的初始化分布见下文各问题类介绍。objective 与 gradientsobjective(parameters, dataNone, labelsNone)是子类必须实现的抽象方法基类直接raise NotImplementedError。gradients则在 problem_generator.py 中统一实现通过tf.gradients计算梯度后叠加noise_stdev强度的高斯噪声并特殊处理了tf.IndexedSlices类型的稀疏梯度对values加噪声、保留indices。数据集生成器datasets.py监督学习类问题需要数据datasets.py 提供了统一的数据容器与五类随机生成器。Dataset 容器Dataset是(data, labels)二元命名元组datasets.pydata为 float32 数组形状(N, D_i)labels为 int32/int64 数组。它提供size属性样本数batch_indices(num_batches, batch_size)方法生成打乱后的 minibatch 索引列表逻辑参考mnist.py——一个 epoch 结束后自动重新洗牌覆盖整个数据集若 data 与 labels 长度不一致则抛出ValueErrordatasets.py。五类随机数据集函数生成方式典型用途noisy_parity_class标签为若干个上下文类别之和的奇偶类noise_prob0.25概率翻转标签稀疏 softmax 回归的稀疏输入random基于 sklearn 的make_classificationsep控制类别分离度稠密分类问题random_binary均匀随机 0/1 特征二值输入分类random_symmetric先采样一半高斯样本再取相反数拼接要求数据集大小能被 2 整除random_mlp随机权重 MLP 的输出二值化依赖链、外向蛇形等结构问题random_mlp的实现细节在 datasets.py输入x为标准高斯样本逐层乘以按sqrt(2)/sqrt(n_features)缩放的高斯随机权重并做 ReLU 裁剪默认 6 层、宽度 20最终把输出的第一维按正负二值化为标签。noisy_parity_class则在 datasets.py 中实现y (sum(x) noise) % n_classes天然构造了稀疏到稀疏的学习任务。玩具优化问题家族全景problem_generator.py 共实现 20 余个问题类可按性质分为五组。这些问题都提供surface(xlim, ylim, n)方法2D 问题以支持目标函数曲面可视化。1. 二次型问题族Quadratic(ndim)f(x) 0.5 * ||Wx - y||^2其中W为随机高斯矩阵、y为随机高斯向量problem_generator.pyIsotropicQuadratic各向同性二次型目标为各参数平方和problem_generator.pySumOfQuadratics(ndim)sum((params - data)^2) - sum(data^2) epsilon通过减去原点损失使全局最小值为epsilon需配合random_symmetric数据集使用problem_generator.pyProjectionQuadratic(ndim)sum((params * data)^2)数据集提供不同探测方向全局最小值在原点problem_generator.pyBowl(condition_number, angle)二维二次碗通过condition_number和旋转角构造 Hessian 矩阵matrix sqrt(Hessian).dot(rotation_matrix)目标0.5 * ||Ax||^2problem_generator.py。2. 经典二维测试函数族这些函数参考了 SFU 优化测试函数集合全部继承自Problem2D参数形状为(2,)问题类数学特征初始化范围源码位置Rosenbrock单一全局最小值[1, 1]目标值为 0[-5, 10)problem_generator.pySaddle鞍点x^2 - y^2默认problem_generator.pyLogSumExp对数求和指数含多个指数项默认problem_generator.pyAckley大量局部最小值[-32.768, 32.768)problem_generator.pyBeale多峰、尖峰[-4.5, 4.5)problem_generator.pyBooth沿一个维度有长谷[-10, 10)problem_generator.pyStyblinskiTang凹凸起伏的二维函数[-5, 5)problem_generator.pyMatyas谷地中的单一全局最小值[-10, 10)problem_generator.pyBranin三个全局最小值x1 ∈ [-5,10), x2 ∈ [0,15)problem_generator.pyMichalewicz陡峭山脊与山谷m5控制陡峭度[0, π)problem_generator.py其中Rosenbrock目标为(1-x)^2 100*(y-x^2)^2Ackley结合指数衰减与余弦振荡是典型的强多峰测试函数。Problem2D.surface方法problem_generator.py会新建临时 TensorFlow 图和会话通过 placeholder 与feed_dict在网格上批量计算目标值可直接用于绘制损失曲面。3. 分类模型问题族SoftmaxClassifier 体系SoftmaxClassifier是监督分类问题的公共父类problem_generator.py提供了统一的inference、objective、argmax、accuracy四件套objectivesoftmax 交叉熵 L2 正则正则系数由FLAGS.l2_reg_scale控制默认1e-3通过--l2_reg_scale命令行 flag 配置。受限于 TensorFlow 历史 bugb/31402852当前仅支持 2 类问题超过 2 类会抛出ValueErroraccuracy通过tf.contrib.metrics.accuracy计算分类正确率。其子类包括问题类网络结构参数形状SoftmaxRegression线性层Wx b(n_features, n_classes)(n_classes,)SparseSoftmaxRegressionembedding 查找 求和 线性层(n_classes, n_features)(n_features, n_classes)(n_classes,)OneHotSparseSoftmaxRegression与上面相同但不用 embedding op改用 one-hot 矩阵乘法同上FullyConnected多层感知机默认hidden_sizes(32, 64)、sigmoid 激活每层一组(prev, sz)权重 (sz,)偏置ConvNetN 层卷积 全连接输出层每个卷积核(h, w, in, out) 仿射层权重/偏置SoftmaxClassifier.init_tensors采用tf.random_normal(shape) * 1.2 / sqrt(shape[0])缩放初始化problem_generator.py而ConvNet则使用stddev0.01的高斯初始化problem_generator.py。FullyConnected.inference将特征展平后逐层做activation(matmul bias)前向传播problem_generator.py。4. 结构化优化难题LOSG 问题集特意包含一批考验优化器长期规划能力的结构化问题DependencyChain(ndim)参数必须按序收敛每个参数在前一个参数归零前无法归零目标为x0^2 sum(xi^2 / (x_{i-1}^2 EPSILON))problem_generator.pyMinMaxWell(ndim)仅当参数绝对值的全局最小值和最大值都等于 1 时取全局最小其余参数梯度为零max_sqr 1/min_sqr - 2 epsilonproblem_generator.pyOutwardSnake(ndim)向无穷外盘旋的路径理想步长沿全程恒定依赖数据指定半径与正弦距离权重problem_generator.py。5. 问题变换包装器这些类不定义新目标函数而是包装既有问题以改变其数值特性包装器作用关键参数Rescale将问题参数整体放大/缩小scale倍scale默认 10.0SumTask把多个问题的目标函数相加参数拼接problem_specs列表Norm计算残差的 N-范数(sum(|diff|ε)^p)^(1/p)norm_powerLogObjective对目标取对数log(obj ε) - log(ε)无SparseProblem以概率zero_probability将梯度置零zero_probability默认 0.99其中SparseProblem.gradients的实现problem_generator.py用tf.where(mask, zero_grad, noisy_grad)按均匀随机数与zero_prob的比较结果掩码梯度模拟深度神经网络中常见的零梯度现象。ModelAdapter把真实模型接入 Problem 接口model_adapter.py 的ModelAdapter是连接任意 TensorFlow 模型与元训练问题的桥梁。它继承pg.Problem构造时接收一个make_loss_and_init_fn回调model_adapter.py该回调返回两个函数make_loss构建模型图并返回损失图中必须包含模型全部变量但不含队列make_init_fn给定参数列表返回一个接收tf.Session的初始化函数。变量捕获机制_get_variablesmodel_adapter.py通过mock.patch.object(RefVariable, __init__, custom_init)在构建图时拦截变量创建所有变量被强制设为trainableFalse并放入LOCAL_VARIABLES集合避免进入优化器 checkpoint同时按原始trainable属性区分参数与常量。该过程被包在名为unused_graph的 name scope 中便于 TensorBoard 识别。变量替换机制objective的核心是_make_with_custom_variablesmodel_adapter.py通过 mockRefVariable.value方法把模型中每个变量名映射到外部传入的参数张量实现用优化器的当前参数值替换模型内部变量的语义。这正是元学习优化器训练所必需的——损失必须能被外部参数控制。model_adapter_test.py 给出了完整验证用例构造x c一个可训练参数、一个常量的问题用ModelAdapter包装后验证参数替换为tf.constant(0.0)时目标值从 4.0 变为 2.0证明变量替换机制生效。在 TaskSet 中的集成从问题类到注册任务LOSGProblemTask问题定义的 Task 化包装losg_tasks.py 中的LOSGProblemTasklosg_tasks.py继承base.BaseTask把(problem_spec.Spec, dataset, batch_size)三元组包装成可训练的 Task有数据集时用tf.data.Dataset.from_tensor_slices构造无限重复、打乱、按 batch 切分的迭代器通过tf.custom_gradient定义fake_gradient将问题自身的objective与gradients无缝接入自动微分call_split中强制np.random.seed(self._problem.random_seed)保证每次前向计算的问题内部随机状态一致current_params/initial_params分别返回当前变量值与初始值供优化器训练使用。随机任务族与固定任务losg_tasks.py 的_problem_sample_get字典注册了 14 类可采样问题quadratic、bowl、sparse_softmax_regression、optimization_test_problems、fully_connected、norm、dependency_chain、outward_snake、min_max_well、sum_of_quadratics、projection_quadratic、sparse_problems、rescale_problems、log_objective每个类别都有配套的_sample_*配置采样器。例如quadratic 的维度dim在[10, 1000]对数均匀采样噪声强度以 0.5 概率在[0.01, 10.0]采样losg_tasks.pysparse_problems 的zero_probability在[0.9, 0.99]均匀采样losg_tasks.pyrescale_problems 的scale在[0.001, 1000.0]对数采样losg_tasks.py。这些采样器通过registry.task_registry.register_sampler(losg_tasks_family)注册为任务族并由get_losg_tasks_family负责实例化losg_tasks.py。而 fixed_2d.py 则以register_fixed注册了固定种子random_seed1/2、task seed123的TwoD_Bowl1/10/100/1000、TwoD_Rosenbrock、TwoD_Ackley、TwoD_Beale、TwoD_StyblinskiTang等固定评测任务用于优化器的确定性对比。验证与运行单元测试三个测试文件覆盖了问题集的全部关键行为可通过 TensorFlow 1.x 测试框架直接运行python3 -m task_set.tasks.losg_problems.problem_generator_test python3 -m task_set.tasks.losg_problems.datasets_test python3 -m task_set.tasks.losg_problems.model_adapter_test各测试要点problem_generator_test.py验证init_tensors/init_variables的形状与类型正确性、梯度数量与顺序problem_generator_test.py验证SparseProblem在zero_prob0.0梯度永不置零、1.0全部置零、0.5部分置零三种情况下的梯度行为datasets_test.py验证batch_indices的批量大小、打乱性与数据标签长度不一致时的ValueErrordatasets_test.py验证各数据集生成器的样本数、特征维度、标签范围与二值性、对称性model_adapter_test.py验证ModelAdapter的参数计数与变量替换语义。端到端训练按照 task_set/README.md 的说明可以直接用train_inner.py训练某个任务python3 -m task_set.train_inner --optimizer_nameadam4p_wide_grid_seed107 --task_namemlp_family_seed117 --output_directory/tmp/root_data_dir注意环境前提TaskSet 目前仅支持 TensorFlow 1.x如 tensorflow-1.15与对应版本的 Sonnet完整依赖清单见 task_set/requirements.txt。扩展自定义问题若要在该问题集基础上添加新问题按以下步骤即可继承Problem在 problem_generator.py 中定义子类声明param_shapes实现objective(parameters, data, labels)需要时重写init_tensors自定义初始化范围与gradients自定义梯度变换用Spec封装通过problem_spec.Spec(MyProblem, args, kwargs)描述问题便于延迟构建与序列化需要监督数据时在 datasets.py 中新增生成函数返回Dataset命名元组接入任务族在 losg_tasks.py 的_problem_sample_get中注册(采样器, 构造器)对或通过register_fixed注册固定任务补充测试参照现有三个测试文件覆盖新问题的初始化形状、梯度与数据合法性。小结losg_problems虽源自 LOSG 论文的问题集副本但在 google-research 的 TaskSet 项目中扮演着优化器元训练与评测问题库的基础角色Spec提供统一的延迟构造语法Problem基类定义了 objective/gradients/初始化三件套接口datasets.py供给监督数据ModelAdapter打通任意 TensorFlow 模型losg_tasks.py与fixed_2d.py则将其组装为可随机采样、可固定评测的完整任务体系。无论是复现 LOSG 实验、训练学习型优化器还是构建自定义优化基准这个目录都是最直接的起点。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐TaskSet 使用指南用上千个优化任务评估与元训练学习型优化器google-researchTaskSet 使用指南用上千个优化任务评估与元训练学习型优化器google research TaskSet 是 google research 仓库中人工智能深度学习NLP计算机视觉强化学习Shampoo 优化器 PyTorch 实现深度解析google-research 可扩展二阶预条件优化器指南Shampoo 优化器 PyTorch 实现深度解析google research 可扩展二阶预条件优化器指南 本文以 scalable_shampoo/py人工智能深度学习NLP计算机视觉强化学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考