强化学习基础-对偶梯度上升

简介: 对偶梯度下降是一个优化带约束目标函数的常用方法。
TB1O2cXEiLaK1RjSZFxXXamPFXa.jpg

本文为 AI 研习社编译的技术博客,原标题 :

The base of deep reinforcement-learning-Dual Gradient Descent

作者 | Jonathan Hui

翻译 | 斯蒂芬•二狗子

校对 | 斯蒂芬•二狗子       审核| 莫青悠      整理 | 菠萝妹

原文链接:

https://medium.com/@jonathan_hui/rl-dual-gradient-descent-fac524c1f049

对偶梯度下降是一个优化带约束目标函数的常用方法。在强化学习中,该方法可以帮助我们做出更好的决策。

TB1lU6JEkvoK1RjSZPfXXXPKFXa.png

该方法的核心思想是把目标函数转换为可以迭代优化拉格朗日对偶函数。其中拉格朗日函数 和拉格朗日对偶函数 g 定义为:

TB1qmZXEhnaK1RjSZFtXXbC2VXa.png

其中标量 λ 被称为拉格朗日乘子。

对偶函数 g 是原始优化问题的下限,实际上,若 f 是凸函数,g和f保持强对偶关系,即g函数的最大值等价于优化问题的最小。只要找到使得g最大的 λ ,我们就解决了原始优化问题。

所以,我们随机指定 λ 为初始值,使用优化方法解决这个无约束的g(λ)。

TB1xkY_EhnaK1RjSZFBXXcW7VXa.png

接下来,我们将应用梯度上升来更新 λ 以便最大化g。 g的梯度是:

TB1bknIEhTpK1RjSZFGXXcHqFXa.png

即为

TB1jGHTEkvoK1RjSZFwXXciCFXa.png

在下面的步骤1中,我们根据当前的 λ 值找到最小x,然后我们对g进行梯度上升(步骤2和3)。

TB1iaDNEcbpK1RjSZFyXXX_qFXa.png

先最小化带有原始x变量的拉格朗日 ,再用梯度法更新拉格朗日乘子 λ ,不断交替着进行这两种计算。通过这样重复迭代,λ、x将收敛。

  可视化

让我们想象一下这个算法是如何工作的。

TB18yLdEmzqK1RjSZPcXXbTepXa.jpg

Modified from source

设 y = g(x), z = f(x)。y 和 z 在来自于空间 G ,我们画出了与y对应的z。我们的解是上面的橙色的点: 空间 G上的最小f同时满足g(x)= 0。下面的橙色线是拉格朗日函数。它的斜率等于λ,它接触G的边界 。

TB1yo2LEmzqK1RjSZFHXXb3CpXa.jpg

然后我们使用梯度上升来调整 λ(斜率),以获得与 g(x)= 0 接触G的最大值 f(x) 。

TB1JGzBEjDpK1RjSZFrXXa78VXa.jpg

Modified from source

这就是对偶梯度上升法的工作原理。(PPT)

  示例

让我们通过一个示例来分析如何求解的。

TB1SgYMEgHqK1RjSZFgXXa7JXXa.jpg

  拉格朗日乘子

那么,拉格朗日乘子是什么?我们可以使用不同d值的等高线图可视化f函数。g是约束函数。

TB1E0YDEmrqK1RjSZK9XXXyypXa.jpg

其中 λ 是拉格朗日乘子

TB1_QrREgHqK1RjSZFEXXcGMXXa.jpg

  思考

对偶梯度下降可以使用任何优化方法来最小化具有λ值的拉格朗日函数。在轨迹优化问题中,我们一般使用的优化方法为iLQR。然后我们应用梯度上升来调整λ。通过重复迭代可以找到最优解。

TB1NOPdEmzqK1RjSZPcXXbTepXa.jpg

想要继续查看该篇文章相关链接和参考文献?

长按链接点击打开或点击【强化学习基础:对偶梯度上升】:

https://ai.yanxishe.com/page/TextTranslation/1427

AI研习社每日更新精彩内容,观看更多精彩内容:雷锋网雷锋网雷锋网(公众号:雷锋网)

盘点图像分类的窍门

动态编程:二项式序列

如何用Keras来构建LSTM模型,并且调参

一文教你如何用PyTorch构建 Faster RCNN

等你来译:

如何在神经NLP处理中引用语义结构 

你睡着了吗?不如起来给你的睡眠分个类吧! 

高级DQNs:利用深度强化学习玩吃豆人游戏

深度强化学习新趋势:谷歌如何把好奇心引入强化学习智能体 

目录
相关文章
|
存储 并行计算 Java
Python读取.nc文件的方法与技术详解
本文介绍了Python中读取.nc(NetCDF)文件的两种方法:使用netCDF4和xarray库。netCDF4库通过`Dataset`函数打开文件,`variables`属性获取变量,再通过字典键读取数据。xarray库利用`open_dataset`打开文件,直接通过变量名访问数据。文中还涉及性能优化,如分块读取、使用Dask进行并行计算以及仅加载所需变量。注意文件路径、变量命名和数据类型,读取后记得关闭文件(netCDF4需显式关闭)。随着科学数据的增长,掌握高效处理.nc文件的技能至关重要。
2776 0
|
人工智能 Java Serverless
阿里云函数计算助力AI大模型快速部署
随着人工智能技术的快速发展,AI大模型已经成为企业数字化转型的重要工具。然而,对于许多业务人员、开发者以及企业来说,探索和利用AI大模型仍然面临诸多挑战。业务人员可能缺乏编程技能,难以快速上手AI模型;开发者可能受限于GPU资源,无法高效构建和部署AI应用;企业则希望简化技术门槛,以更低的成本和更高的效率利用AI大模型。
802 12
|
算法 安全 数据安全/隐私保护
散列值数据完整性验证
散列值数据完整性验证
371 11
|
前端开发 JavaScript API
前端的全栈之路Meteor篇(完):关于前后端分离及与各框架的对比,浅析分离之下的潜在耦合
本文探讨了Meteor.js这一全栈JavaScript框架的特点与优势,特别是在前后端分离架构中的应用。Meteor通过共享数据结构和简化全栈开发流程,实现了前后端的紧密协作。文章还对比了其他全栈框架,如Next.js、Nuxt.js等,分析了各自的优势与适用场景,最后讨论了通过定义文档归属者和用户专有数据集简化后端构建及端云数据同步的方法。
954 0
|
并行计算 算法 Python
Dantzig-Wolfe分解算法解释与Python代码示例
Dantzig-Wolfe分解算法解释与Python代码示例
|
Java Maven
maven打包,java内存竟然要设置16G(-Xmx16384m)
maven打包,java内存竟然要设置16G(-Xmx16384m)
724 0
|
人工智能 并行计算 PyTorch
Stable Diffusion 本地部署教程:详细步骤与常见问题解析
【4月更文挑战第12天】本教程详细介绍了如何在本地部署Stable Diffusion模型,包括安装Python 3.8+、CUDA 11.3+、cuDNN、PyTorch和torchvision,克隆仓库,下载预训练模型。配置运行参数后,通过运行`scripts/run_diffusion.py`生成图像。常见问题包括CUDA/CuDNN版本不匹配、显存不足、API密钥问题、模型加载失败和生成质量不佳,可按教程提供的解决办法处理。进阶操作包括使用自定义提示词和批量生成图像。完成这些步骤后,即可开始Stable Diffusion的AI艺术创作。
2628 2