【RL Latest Tech】安全强化学习(Safe RL):理论、方法与应用

        📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:

       【强化学习】(26)---《安全强化学习(Safe RL):理论、方法与应用》

安全强化学习(Safe RL):理论、方法与应用

目录

1.引言

2.什么是安全强化学习?

3.关键概念

4.安全强化学习的主要方法

1. 约束强化学习(Constrained Reinforcement Learning)

2. 屏蔽强化学习(Shielded RL)

3. 风险约束策略梯度(Risk-Constrained Policy Gradient)

[Python] Safe RL伪代码

[Notice]  伪代码解释:

5.应用与案例

6.结论


1.引言

        在强化学习(Reinforcement Learning, RL)中,智能体通过与环境的交互来学习一个策略,以最大化长期累积回报。然而,传统的强化学习算法在优化回报时往往不考虑智能体行为的安全性,导致在训练或部署过程中可能出现不安全的行为。**安全强化学习Safe Reinforcement Learning,Safe RL)**正是在此背景下提出的,它旨在在优化回报的同时确保智能体的行为符合某些安全约束。这对于实际应用尤为重要,如自动驾驶、机器人控制、医疗系统等场景中,安全问题至关重要,任何不安全的行为都可能带来严重后果。下图是约束策略优化(Constrained Policy Optimization, CPO)算法图。


2.什么是安全强化学习?

        安全强化学习是强化学习的一个分支,重点在于在学习过程中及部署过程中满足一定的安全约束。这些安全约束可以是物理、伦理或法律层面的限制。例如,自动驾驶汽车的强化学习模型应避免发生碰撞,医疗领域的强化学习模型需要避免对病人健康产生风险。

        在强化学习的传统框架下,智能体学习的是一个最优策略( \pi^* ),该策略通过最大化累积奖励(回报)( G_t = \sum_{k=0}^{\infty} \gamma^k R_{t+k} ) 来优化智能体的行为决策。这里, ( R_t )是时间步( t )的奖励值,( \gamma \in [0, 1] )是折扣因子。然而,安全强化学习不仅仅考虑累积奖励,还需要确保在整个学习过程中智能体的行为是安全的。这就引入了安全约束,用公式表达为:

[ \text{maximize } \mathbb{E} \left[ \sum_{t=0}^{\infty} \gamma^t R_t \right] \quad \text{subject to } \mathbb{P}(s_t \in \mathcal{S}_{unsafe}) = 0, \forall t ]

其中,( \mathcal{S}_{unsafe} ) 是不安全状态的集合。安全强化学习通过在策略优化过程中增加约束条件来保证智能体不会进入不安全的状态。


3.关键概念

1. 安全约束

        在安全强化学习中,**安全约束(Safety Constraints)**是决定智能体行为是否安全的标准。通常,安全约束可以体现在以下几方面:

  • 物理限制:如机器人避免碰撞或超过速度限制。
  • 资源限制:如能量消耗不超过一定阈值。
  • 伦理或法律限制:如自动驾驶汽车遵守交通规则,或医疗系统不能给患者带来过度的健康风险。

        这些约束可以是硬约束(Hard Constraints),即必须严格遵守的约束,也可以是软约束(Soft Constraints),即在一定范围内可以违反但需要付出代价。

2. 风险敏感优化

        在传统强化学习中,优化目标通常是最大化期望回报 ( \mathbb{E}[G_t] )。然而,在安全强化学习中,我们需要**风险敏感(Risk-Sensitive)**的优化目标。具体来说,风险可以用多种方式进行度量,例如:

  • 方差(Variance):衡量回报的不确定性。
  • 在险价值(Value at Risk, VaR):在给定的置信水平下,可能发生的最大损失。
  • 条件在险价值(Conditional Value at Risk, CVaR):考虑了最坏情况下的损失。

通过引入风险度量,安全强化学习可以避免智能体在某些不确定的情况下做出高风险的决策。

[ \text{maximize } \mathbb{E} \left[ \sum_{t=0}^{\infty} \gamma^t R_t \right] \quad \text{subject to } \text{Risk}(G_t) \leq \delta ]

其中,( \delta )是风险的容忍水平。

3. 奖励塑形与惩罚机制

        为了引导智能体学习到安全的行为,奖励塑形(Reward Shaping) 是一种常见的技术。具体做法是,将奖励函数修改为同时考虑回报和安全性的组合:

[ R'(s, a, s') = R(s, a, s') - \lambda \cdot \text{Cost}(s, a, s') ]

其中,( R(s, a, s') )是原始的奖励函数,( \text{Cost}(s, a, s') ) 是智能体在状态 ( s )采取动作( a )后进入状态( s' )时的安全代价,( \lambda )是代价权重。这样,当智能体采取不安全行为时,会受到惩罚,从而促使智能体学习到更安全的策略。


4.安全强化学习的主要方法

        安全强化学习有多种实现方法,以下介绍几种常见的算法及其特点。

1. 约束强化学习(Constrained Reinforcement Learning)

约束强化学习 的目标是在遵守安全约束的前提下最大化回报。其优化问题可以形式化为:

[ \max_{\pi} \mathbb{E}{\pi}\left[ G_t \right] \quad \text{subject to } \mathbb{E}{\pi}\left[ C_t \right] \leq c_{max} ]

其中,( C_t )是时间步( t )的代价函数(如安全成本),( c_{max} )是代价的上限。

常用的算法包括:

  • 约束策略优化(Constrained Policy Optimization, CPO):在策略优化过程中直接处理约束。
  • Lagrangian Relaxation:将约束问题转换为拉格朗日乘子问题,通过优化原问题和约束问题的拉格朗日形式来解决。

2. 屏蔽强化学习(Shielded RL)

        屏蔽强化学习(Shielded Reinforcement Learning) 是一种结合形式化验证和强化学习的技术。通过引入一个“屏蔽器(Shield)”,智能体在采取动作之前,会通过屏蔽器检查该动作是否安全。如果不安全,屏蔽器会拒绝该动作并建议安全的替代动作。

        这种方法尤其适用于高风险环境,如自动驾驶和机器人控制。在屏蔽强化学习中,屏蔽器的设计往往依赖于形式化方法,如线性时序逻辑(Linear Temporal Logic, LTL)等。

3. 风险约束策略梯度(Risk-Constrained Policy Gradient)

        风险约束策略梯度(Risk-Constrained Policy Gradient) 是一种基于策略梯度的安全强化学习方法,特别适用于连续动作空间。其目标是在约束总风险的同时最大化累积回报。具体的优化目标为:

[ \max_{\theta} \mathbb{E}{\pi{\theta}} \left[ G_t \right] \quad \text{subject to } \text{CVaR}_{\alpha}(G_t) \leq \delta ]

其中,( \text{CVaR}_{\alpha} ) 是给定置信水平 ( \alpha )的条件在险价值,( \delta )是风险容忍度。通过策略梯度法,智能体可以逐渐学习到在风险受控下的最优策略。


[Python] Safe RL伪代码

        下面给出了一个典型的安全强化学习(Safe Reinforcement Learning)的Python伪代码。该伪代码展示了如何实现约束强化学习,考虑到安全约束,使用拉格朗日乘子法来解决安全性问题。

        🔥若是下面代码复现困难或者有问题,欢迎评论区留言;需要以整个项目形式的代码,请在评论区留下您的邮箱📌,以便于及时分享给您(私信难以及时回复)。

"""《Safe RL伪代码》时间:2024.10.07作者:不去幼儿园
"""
import numpy as np
import gym# 环境初始化
env = gym.make("YourEnvironment-v0")
state_dim = env.observation_space.shape[0]
action_dim = env.action_space.n# 参数初始化
gamma = 0.99  # 折扣因子
alpha = 0.01  # 学习率
lambda_lr = 0.005  # 拉格朗日乘子的学习率
episodes = 1000
constraint_threshold = 10.0  # 约束上限# 策略网络
class PolicyNetwork:def __init__(self):# 定义网络参数,例如全连接层、激活函数等passdef forward(self, state):# 计算动作概率分布passdef update(self, gradients):# 更新网络参数pass# 拉格朗日乘子初始化
lambda_param = 1.0# 策略网络
policy = PolicyNetwork()# 训练过程
for episode in range(episodes):state = env.reset()done = Falserewards = []costs = []while not done:# 根据策略选择动作action_probs = policy.forward(state)action = np.random.choice(action_dim, p=action_probs)# 执行动作,获取下一个状态、奖励和成本next_state, reward, done, info = env.step(action)cost = info.get('cost', 0)  # 获取成本,成本表示不安全行为的发生程度# 记录奖励和成本rewards.append(reward)costs.append(cost)# 更新状态state = next_state# 计算累积奖励和成本G = sum([gamma ** t * r for t, r in enumerate(rewards)])C = sum([gamma ** t * c for t, c in enumerate(costs)])# 计算拉格朗日损失lagrangian_loss = -G + lambda_param * (C - constraint_threshold)# 计算策略梯度并更新策略网络policy_gradients = compute_gradients(lagrangian_loss)policy.update(policy_gradients)# 更新拉格朗日乘子lambda_param += lambda_lr * (C - constraint_threshold)# 确保拉格朗日乘子非负lambda_param = max(0, lambda_param)# 打印每个episode的进度print(f"Episode {episode + 1}: Reward = {G}, Cost = {C}, Lambda = {lambda_param}")# 伪代码结束# 辅助函数 - 计算策略梯度(伪函数)
def compute_gradients(loss):# 实现策略梯度计算return gradients

[Notice]  伪代码解释:

  1. 环境初始化

    • 使用 gym 库来创建强化学习环境,state_dim 和 action_dim 分别表示状态和动作的维度。
  2. 参数初始化

    • 包括折扣因子 gamma、学习率 alpha、拉格朗日乘子的学习率 lambda_lr 以及约束阈值 constraint_threshold 等。
  3. 策略网络

    • PolicyNetwork 类是一个简单的策略网络,用于预测动作概率分布。
    • 其方法 forward() 计算动作概率,update() 通过策略梯度更新参数。
  4. 训练过程

    • 在每个 episode 中,智能体与环境交互并根据当前策略选择动作。
    • 每次执行动作后,获取下一个状态、奖励、成本,以及是否结束。
    • cost 通过 info 字典获取,表示智能体在当前状态执行动作后产生的安全成本。
  5. 拉格朗日损失

    • 损失函数由累积奖励 ( G ) 和累积成本 ( C ) 构成,使用拉格朗日乘子 ( \lambda ) 来权衡两者。
    • lagrangian_loss 是拉格朗日损失,它平衡奖励与违反安全约束的代价。
  6. 策略更新

    • 通过 compute_gradients() 计算策略梯度,然后调用 policy.update() 更新策略。
  7. 更新拉格朗日乘子

    • 使用拉格朗日乘子法的学习率 ( \lambda_{\text{lr}} ) 来调整乘子值,确保成本在预定阈值内。
    • lambda_param 必须保持为非负。
  • 这个伪代码提供了安全强化学习的一般框架。在实际实现中,可能需要使用神经网络、梯度下降优化器(例如 Adam)、和其他策略评估方法。
  • 由于安全强化学习涉及约束优化,策略的调整需要反复验证是否满足安全条件,因此实际实现中可能会引入更多的调试和验证过程。

5.应用与案例

1. 自动驾驶

        在自动驾驶领域,安全是至关重要的。自动驾驶汽车需要在复杂的交通环境中做出实时决策,确保遵守交通规则,避免碰撞和其他事故。安全强化学习可以帮助自动驾驶系统通过学习来不断优化其决策策略,同时确保在各种场景下都能保持安全。

        通过引入安全约束,如速度限制、车道保持和避障策略,自动驾驶系统可以在确保安全的同时逐步提高驾驶效率。屏蔽强化学习在此类场景中尤为适用,可以在系统做出危险决策前予以纠正。

2. 医疗决策

        在医疗领域,强化学习可以应用于个性化治疗方案的制定。然而,医疗决策涉及患者健康的风险,因此需要特别注意安全问题。安全强化学习可以通过约束不安全行为或决策来避免患者受到潜在的伤害。

        例如,在癌症治疗中,强化学习可以用于优化化疗的剂量和时间表。然而,过高的剂量可能会导致严重的副作用,因此系统需要学习在确保治疗效果的同时最小化不良反应。

3. 机器人控制

        在机器人控制中,安全问题同样重要,特别是在与人类共存的环境中。机器人需要通过学习来理解环境和人类的行为模式,并做出相应的安全决策。

        通过安全强化学习,机器人可以在执行任务时避免危险行为,如避免碰撞、正确处理易碎物品或在紧急情况下采取适当的行动。


6.结论

        安全强化学习作为强化学习的一个重要分支,不仅要优化长期回报,还要确保智能体在学习和部署过程中遵守安全约束。通过引入安全约束、风险敏感优化和奖励塑形等技术,安全强化学习为智能体在复杂和不确定的环境中做出安全且有效的决策提供了重要工具和方法。

参考文献:

Joshua Achiam, David Held, Aviv Tamar, Pieter Abbeel,2017,Constrained Policy Optimization

简介: 这篇论文提出了**约束策略优化(Constrained Policy Optimization, CPO)**算法,该算法旨在通过约束优化的方式训练安全的强化学习智能体。它利用二阶梯度信息来直接处理安全约束,从而确保在学习过程中,策略的改进始终在安全约束内。该方法在许多高风险场景(如机器人控制)中都表现出色。

Safe RL评估环境:

Safety Gym: Environment for Evaluating Safe Reinforcement Learning Agents

简介: 介绍了一个专门用于评估安全强化学习算法的环境框架,称为 Safety Gym。该环境提供了多种任务设置,智能体需要在复杂的物理环境中进行任务,同时保持行为的安全性。Safety Gym 已成为评估安全强化学习算法的标准工具之一。


     文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者关注VX公众号:Rain21321,联系作者。✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/454595.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第486题预测赢家

题目: 题解: class Solution:def PredictTheWinner(self, nums: List[int]) -> bool:length len(nums)dp [0] * lengthfor i, num in enumerate(nums):dp[i] numfor i in range(length - 2, -1, -1):for j in range(i 1, length):dp[j] max(num…

uniapp结合uview-ui创建项目

准备工作: 下载HBuilderX;官网地址:HBuilderX-高效极客技巧 安装node.js;官网地址:Node.js — 在任何地方运行 JavaScript,下载所需版本,安装后配置好环境变量即可 方式一(NPM安装方式): 1、打开开发者…

代码随想录-哈希表-两个数组的交集

题目与思路 这个题目可以用大小为1000的数组,因为限制了变量大小。我用的是set,感觉这个才是本意。 下面代码是用set实现的hash结构。先用set1存储nums1中的去重元素,然后用set2存储结果集 最后将set转为array用了两种方式,一是…

LINUX设备OTA时无法从HTTP服务器(TOMCAT)下载文件

疑难问题排查记录 问题 linux设备作为http客户端,执行OTA前先从HTTP服务器下载bin固件,测试nginx没有问题,nodejs编写的HTTP服务器也没有问题,而软件同事使用的Tomcat则无法成功下载。 排查经过 首先利用chrome浏览器测试下载…

WebGl 实现图片平移、缩放和旋转

1.图片平移 在WebGL中实现图片平移,可以通过修改顶点着色器中的顶点位置来实现。平移的基本思想是将每个顶点的位置向量沿着指定的方向(通常是x轴和y轴)进行平移。在顶点着色器中,可以通过添加或减去一个统一的偏移量&#xff08…

「AIGC」n8n AI Agent开源的工作流自动化工具

n8n AI Agent 是一个利用大型语言模型(LLMs)来设计和构建智能体(agents)的工具,这些智能体能够执行一系列复杂的任务,如理解指令、模仿类人推理,以及从用户命令中理解隐含意图。n8n AI Agent 的核心在于构建一系列提示(prompts),使 LLM 能够模拟自主行为。 传送门→ …

C++:stack 和 queue 的使用和模拟实现

使用 要注意&#xff0c;stack 和 queue 没有迭代器。 stack void teststack() {stack<int> st;st.push(1);st.push(2);st.push(3);st.push(4);st.push(5);cout << st.size() << endl;while (!st.empty()){cout << st.top() << " ";…

电机编码器

旋转式编码器 链接: 野火编码器 单圈&#xff0c;多圈绝对式编码器 在单圈绝对值编码器中&#xff0c;单圈并不表示编码器机械转动的圈数&#xff0c;而是指断电记忆的范围。实际上&#xff0c;机械转动是可以无限制地进行圈数的&#xff0c;但是断电记忆仅限于一圈的范围内…

构建后端为etcd的CoreDNS的容器集群(二)、下载最新的etcd容器镜像

在尝试获取etcd的容器的最新版本镜像时&#xff0c;使用latest作为tag取到的并非最新版本&#xff0c;本文尝试用实际最新版本的版本号进行pull&#xff0c;从而取到想的最新版etcd容器镜像。 一、用latest作为tag尝试下载最新etcd的镜像 1、下载镜像 [rootlocalhost opt]# …

bash之基本运算符

一.算术运算符 vim test.sh #!/bin/basha10 b20valexpr $a $b echo "a b : $val"valexpr $a - $b echo "a - b : $val"valexpr $a \* $b echo "a * b : $val"valexpr $b / $a echo "b / a : $val"valexpr $b % $a echo "b % a …

《重置MobaXterm密码并连接Linux虚拟机的完整操作指南》

目录 引言 一、双击MobaXterm_Personal_24.2进入&#xff0c;但是忘记密码。 那么接下来请跟着我操作。 二、点击此链接&#xff0c;重设密码。 三、下载完成后&#xff0c;现在把这个exe文件解压。注意解压要与MobaXterm_Personal_24.2.exe在同一目录下哦&#xff0c;不然…

LMS自适应滤波器原理与应用Matlab程序

1. 引言 自适应滤波器是一种根据输入数据动态调整其滤波系数的滤波器&#xff0c;能够在未知或变化的环境中有效工作。最小均方&#xff08;LMS&#xff0c;Least Mean Squares&#xff09;自适应滤波器是自适应滤波器家族中最经典的一种&#xff0c;其以计算简便、收敛速度快…

Docker基础部署

一、安装Ubuntu系统 1.1 新建虚拟机 打开VMware Workstation&#xff0c;选择文件->新建虚拟机->典型&#xff08;推荐T&#xff09;->安装程序光盘映像文件->输入虚拟的名字->一直下一步即可 安装程序光盘映像文件 注意&#xff1a;选择CentOS-7-x86_64-DVD-…

基于知识图谱的美食推荐系统

想象一下&#xff0c;每次打开应用&#xff0c;它都能为你量身推荐最符合你口味的美食&#xff0c;不需要再为“今天吃什么&#xff1f;”烦恼。这听起来是不是非常吸引人&#xff1f;今天就给大家介绍一个适合做毕业设计的创新项目——基于知识图谱的美食推荐系统&#xff01;…

STM32_实验5_中断实验

通过外部中断来检测四个按键按下的状态&#xff1a; WK_UP 控制蜂鸣器响和停 KEY0 控制 LED_R 互斥点亮 KEY1 控制 LED_G 互斥点亮 KEY2 控制 LED_B 互斥点亮。 中断的基本概念&#xff1a; 中断请求&#xff08;IRQ&#xff09;&#xff1a; 当发生某个特定事件&#xff08;例…

告别ELK,APO提供基于ClickHouse开箱即用的高效日志方案——APO 0.6.0发布

ELK一直是日志领域的主流产品&#xff0c;但是ElasticSearch的成本很高&#xff0c;查询效果随着数据量的增加越来越慢。业界已经有很多公司&#xff0c;比如滴滴、B站、Uber、Cloudflare都已经使用ClickHose作为ElasticSearch的替代品&#xff0c;都取得了不错的效果&#xff…

AOP 面向切面编程

1.准备工作&#xff0c;创建maven项目 1. pom.xml 加入依赖 <dependencies><!--spring核心坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.6</version&…

算术移位的学习

术移位&#xff08;Arithmetic Shift&#xff09;是一种位移操作&#xff0c;主要用于有符号整数。它与逻辑移位相似&#xff0c;但在处理负数时有一些显著的不同。算术移位能够保持符号位的完整性&#xff0c;因此在有符号数的移位运算中非常有用。 算术移位的类型 算术左移&…

打造商业数字化生态,价值何在?

​在当今数字化时代&#xff0c;商业格局正发生着深刻变革。打造商业数字化生态&#xff0c;成为众多企业的战略选择。那么&#xff0c;它的价值究竟几何呢&#xff1f; 商业数字化生态是利用数字技术&#xff0c;将企业、消费者、合作伙伴等各方连接起来&#xff0c;形成相互依…

AI时代,谷歌会像当年的IBM一样陨落吗?

​从2015年到2024年 在2015年的某个清晨&#xff0c;阳光透过硅谷的薄雾&#xff0c;照亮了谷歌总部那标志性的入口。那时&#xff0c;谷歌正处于技术的巅峰&#xff0c;人们怀着激动的心情讨论着它如何将机器学习和人工智能&#xff08;AI&#xff09;无缝融入到所有产品中。它…