当前位置: 首页 > news >正文

【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,联系作者。✨

相关文章:

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

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

大模型qiming面试内容整理-系统设计与架构

在大模型和机器学习相关岗位的面试中,系统设计与架构的考察通常会涉及如何设计一个可扩展、可靠且高效的机器学习系统,特别是在面对大规模数据和复杂模型时。这一部分的考察不仅测试候选人对机器学习和深度学习的理解,还会评估其如何设计实际生产环境中的系统来满足需求。以…...

Mac/Windows端长期破解myBase8方法(无需安装火绒)

提醒 不管哪个端,都需要先退出myBase。 Mac 进入用户根目录/Users/c0ny100,即下边是Macintosh HD > 用户 > [你的用户名]这个界面然后按ShiftCommond.,显示隐藏文件。找到.Mybase8.ini文件 打开.Mybase8.ini文件,删除Fir…...

firewall

firewall 如果系统使用 firewalld 作为防火墙管理工具,可以使用以下命令: 查看防火墙是否运行: systemctl status firewalld查看防火墙的状态(简洁输出): firewall-cmd --state输出示例: r…...

XSS(跨站攻击)

XSS漏洞(跨站脚本) 1.XSS 漏洞简介 ​ XSS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从…...

Tomcat添加各种响应头 X-Download-Options、Permissions-Policy等

AI越来越火了,我们想要不被淘汰就得主动拥抱。推荐一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。 最近部署的项目被绿盟扫出来很多web漏洞,其中tomcat响应占了很大一部分。下面我们整理一下如何处理。 首先说说常见…...

搭建Tomcat(一)---SocketServerSocket

目录 引入1 引入2--socket 流程 Socket(应用程序之间的通讯保障) 网卡(计算机之间的通讯保障) 端口 端口号 实例 client端 解析 server端 解析 相关方法 问题1:ServerSocket和Socket有什么关系? ServerSocket Soc…...

ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小

ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小 文章目录 ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小1. 安装 Times New Roman 字体验证字体是否安装成功 2. 在 Matplotlib 中加载 Times New Roman 字体3. 在 Matplotlib 中使…...

openGauss开源数据库实战二十三

文章目录 任务二十三 openGauss 参数管理任务目标实施步骤一、启动参数文件及参数类型1.参数值修改后必须重新启动数据库的参数2.参数值修改后只需要reload操作的参数 二、设置数据库级参数三、设置用户级参数四、设置会话级参数五、将参数设置为默认值 任务二十三 openGauss 参…...

MySQL 复合查询(重点)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 MySQL 复合查询(重点) 收录于专栏[MySQL] 本专栏旨在分享学习MySQL的一点学习笔记,欢迎大家在评论区交流讨论💌 …...

ASP.NET |日常开发中连接Oracle数据库详解

ASP.NET |日常开发中连接Oracle数据库详解 前言一、安装和配置 Oracle 数据访问组件1.1 安装ODP.NET(Oracle Data Provider for.NET):1.2 引用相关程序集: 二、配置连接字符串2.1 连接字符串的基本组成部分&#xff1a…...

java_连接数据库的方法_后端处理_前端调用_打通整体思路

参考:14 尚上优选项目-平台管理端-权限管理模块-开发角色管理接口(上)_哔哩哔哩_bilibili 第一步. 定义数据 在数据库中定义好数据(如role表格),在java后端定义好对应的实体类(Role类&#xf…...

网络安全知识点

第一章 网络安全概述 1.2.1 网络安全概念P4 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 1.2.3 网络安全的种类P5 (1…...

pyfink1.20版本下实现消费kafka中数据并实时计算

1、环境 JDK版本:1.8.0_412python版本:3.10.6apache-flink版本:1.20.0flink版本:1.20kafka版本:kafka_2.12-3.1.1flink-sql-connector-kafka版本:3.3.0-1.202、执行python-flink脚本 从kafka的demo获取消…...

国产Tomcat东方通(TongWeb):Linux系统部署全攻略

国产Tomcat东方通(TongWeb):Linux系统部署全攻略 国产tomcat东方通tongweb在linux系统上部署全流程 [这里是图片001] 项目地址: https://gitcode.com/Resource-Bundle-Collection/fca68 项目介绍 在当前的软件开发和运维环境中&#xff0c…...

bilstm -crf 的torch官方的教程 不支持 batchsize 。。。。有更效率更高的方案吗

根据您的需求,您正在寻找一个支持批量处理(batch size)的BiLSTM-CRF模型的PyTorch教程。以下是一些资源,它们提供了更高效的解决方案,包括批量处理的支持: 1. **a-PyTorch-Tutorial-to-Sequence-Labeling*…...

Python面试常见问题及答案6

一、基础部分 问题1: 在Python中,如何将字符串转换为整数?如果字符串不是合法的数字字符串会怎样? 答案: 在Python中,可以使用int()函数将字符串转换为整数。如果字符串是合法的数字字符串,转换…...

代码随想录算法训练营第三天 | 链表理论基础 | 203.移除链表元素

感觉上是可以轻松完成的,因为对链接的结构,元素的删除过程心里明镜似的 实际上四处跑气 结构体的初始化好像完全忘掉了,用malloc折腾半天,忘记了用new,真想扇自己嘴巴子到飞起删除后写一个函数,把链表打印…...

1. 机器学习基本知识(5)——练习题(1)

1.7 🐦‍🔥练习题(本章重点回顾与总结) 0.回答格式约定: 对于书本内容的回答,将优先寻找书本内容作为答案进行回答。 书本内容回答完毕后,将对问题进行补充回答,上面分割线作为两个…...

vue 自定义组件image 和 input

本章主要是介绍自定义的组件:WInput:这是一个验证码输入框,自动校验,输入完成回调等;WImage:这是一个图片展示组件,集成了缩放,移动等操作。 目录 一、安装 二、引入组件 三、使用…...

Gemma-3 Pixel Studio快速上手:支持表格图像的结构化数据提取技巧

Gemma-3 Pixel Studio快速上手:支持表格图像的结构化数据提取技巧 1. 工具介绍与核心能力 Gemma-3 Pixel Studio是基于Google最新Gemma-3-12b-it模型构建的多模态对话终端,特别擅长处理包含表格的图像数据。与传统OCR工具不同,它不仅能识别…...

EdgeRemover终极指南:专业级Microsoft Edge卸载解决方案

EdgeRemover终极指南:专业级Microsoft Edge卸载解决方案 【免费下载链接】EdgeRemover A PowerShell script that correctly uninstalls or reinstalls Microsoft Edge on Windows 10 & 11. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover 你…...

马斯克多项目进展与诉讼案引关注

本月 1 号 SpaceX 提交 IPO 申请,预计最早 6 月 IPO。同时,特斯拉多项目遇阻,Cybercab 人员流失、自动驾驶事故多,还有马斯克诉阿尔特曼案即将开庭,情况复杂。SpaceX IPO 预测原以为马斯克会在 20 号秘密提交 SpaceX 的…...

Chocolatey 安装 Python 3 时那些你可能不知道的隐藏依赖(附详细日志分析)

Chocolatey 安装 Python 3 时那些你可能不知道的隐藏依赖(附详细日志分析) 当你在 Windows 系统上使用 Chocolatey 安装 Python 3 时,表面上看只是一条简单的命令,但背后却隐藏着一系列复杂的依赖处理过程。这些自动安装的组件往往…...

千问3.5-2B部署教程(低成本GPU方案):单卡24GB显存跑通开源VL模型实录

千问3.5-2B部署教程(低成本GPU方案):单卡24GB显存跑通开源VL模型实录 1. 千问3.5-2B模型介绍 千问3.5-2B是Qwen系列中的小型视觉语言模型(VL),它能够同时理解图片内容和处理自然语言。这个模型特别适合那些需要在有限硬件资源上…...

Pandas 操作指南(一):DataFrame 的构建与表格数据组织

在数据分析与数据处理中,原始数据往往并不是一开始就以规范表格的形式出现。它可能来自列表(list)、字典(dict)、CSV/Excel 文件,或程序运行过程中临时生成的数据集合。若这些数据尚未被整理为结构明确的表…...

打破语言壁垒:GitHub全界面本地化实践指南

打破语言壁垒:GitHub全界面本地化实践指南 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 作为全球最大的代码托管平台&am…...

一键部署文档分析服务:YOLO X Layout模型Docker实战教程

一键部署文档分析服务:YOLO X Layout模型Docker实战教程 1. 为什么需要文档版面分析? 在日常工作中,我们经常遇到这样的场景:收到一份扫描的合同PDF,需要提取关键条款;或者拿到一份企业年报,想…...

终极gsudo扩展功能开发指南:5个自定义插件与模块开发技巧

终极gsudo扩展功能开发指南:5个自定义插件与模块开发技巧 【免费下载链接】gsudo Sudo for Windows 项目地址: https://gitcode.com/gh_mirrors/gs/gsudo gsudo是Windows系统上的命令行权限提升工具,为开发者提供了类似Unix系统中sudo命令的功能。…...

数据处理的艺术:Pandas中的字符串操作

在数据分析和处理的过程中,经常会遇到需要对数据框中的字符串进行复杂操作的情况。本文将通过一个具体的实例,展示如何使用Pandas库来处理字符串列表、去重、合并和计数等操作。 问题背景 假设我们有一个数据框,其中包含一个名为REFIX_LIST的列,该列每个单元格包含由逗号…...