🍠Python(PyTorch)物理变化可微分神经算法
🎯要点
🎯使用受控物理变换序列实现可训练分层物理计算 | 🎯多模机械振荡、非线性电子振荡器和光学二次谐波生成神经算法验证 | 🎯训练输入数据,物理系统变换产生输出和可微分数字模型估计损失的梯度 | 🎯多模振荡对输入数据进行可控卷积 | 🎯物理神经算法数学表示、可微分数学模型 | 🎯MNIST和元音数据集评估算法
🍪语言内容分比
🍇PyTorch可微分优化
假设张量x是元参数,a是普通参数(例如网络参数)。我们有内部损失 并且我们使用梯度 更新 和 。然后我们计算外部损失 。因此外部损失到 的梯度为:
鉴于上述分析解,让我们使用 TorchOpt 中的 MetaOptimizer 对其进行验证。MetaOptimizer 是我们可微分优化器的主类。它与功能优化器 torchopt.sgd 和 torchopt.adam 相结合,定义了我们的高级 API torchopt.MetaSGD 和 torchopt.MetaAdam。
首先,定义网络。
然后我们声明网络(由 a 参数化)和元参数 x。不要忘记为 x 设置标志 require_grad=True 。
接下来我们声明元优化器。这里我们展示了定义元优化器的两种等效方法。
元优化器将网络作为输入并使用方法步骤来更新网络(由a参数化)。最后,我们展示双层流程的工作原理。
输出:
让我们从与模型无关的元学习算法的核心思想开始。该算法是一种与模型无关的元学习算法,它与任何使用梯度下降训练的模型兼容,并且适用于各种不同的学习问题,包括分类、回归和强化学习。元学习的目标是在各种学习任务上训练模型,以便它仅使用少量训练样本即可解决新的学习任务。
更新规则定义为:
给定微调步骤的学习率 , 应该最小化
我们首先定义一些与任务、轨迹、状态、动作和迭代相关的参数。
接下来,我们定义一个名为 Traj 的类来表示轨迹,其中包括观察到的状态、采取的操作、采取操作后观察到的状态、获得的奖励以及用于贴现未来奖励的伽玛值。
评估函数用于评估策略在不同任务上的性能。它使用内部优化器来微调每个任务的策略,然后计算微调前后的奖励。
在主函数中,我们初始化环境、策略和优化器。策略是一个简单的 MLP,它输出动作的分类分布。内部优化器用于在微调阶段更新策略参数,外部优化器用于在元训练阶段更新策略参数。性能通过微调前后的奖励来评估。每次外部迭代都会记录并打印训练过程。
Last updated
Was this helpful?
