【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.什么是安全强化学习?
安全强化学习是强化学习的一个分支,重点在于在学习过程中及部署过程中满足一定的安全约束。这些安全约束可以是物理、伦理或法律层面的限制。例如,自动驾驶汽车的强化学习模型应避免发生碰撞,医疗领域的强化学习模型需要避免对病人健康产生风险。
在强化学习的传统框架下,智能体学习的是一个最优策略,该策略通过最大化累积奖励(回报)
来优化智能体的行为决策。这里,
是时间步
的奖励值,
是折扣因子。然而,安全强化学习不仅仅考虑累积奖励,还需要确保在整个学习过程中智能体的行为是安全的。这就引入了安全约束,用公式表达为:
其中, 是不安全状态的集合。安全强化学习通过在策略优化过程中增加约束条件来保证智能体不会进入不安全的状态。
3.关键概念
1. 安全约束
在安全强化学习中,**安全约束(Safety Constraints)**是决定智能体行为是否安全的标准。通常,安全约束可以体现在以下几方面:
- 物理限制:如机器人避免碰撞或超过速度限制。
- 资源限制:如能量消耗不超过一定阈值。
- 伦理或法律限制:如自动驾驶汽车遵守交通规则,或医疗系统不能给患者带来过度的健康风险。
这些约束可以是硬约束(Hard Constraints),即必须严格遵守的约束,也可以是软约束(Soft Constraints),即在一定范围内可以违反但需要付出代价。
2. 风险敏感优化
在传统强化学习中,优化目标通常是最大化期望回报 。然而,在安全强化学习中,我们需要**风险敏感(Risk-Sensitive)**的优化目标。具体来说,风险可以用多种方式进行度量,例如:
- 方差(Variance):衡量回报的不确定性。
- 在险价值(Value at Risk, VaR):在给定的置信水平下,可能发生的最大损失。
- 条件在险价值(Conditional Value at Risk, CVaR):考虑了最坏情况下的损失。
通过引入风险度量,安全强化学习可以避免智能体在某些不确定的情况下做出高风险的决策。
其中,是风险的容忍水平。
3. 奖励塑形与惩罚机制
为了引导智能体学习到安全的行为,奖励塑形(Reward Shaping) 是一种常见的技术。具体做法是,将奖励函数修改为同时考虑回报和安全性的组合:
其中,是原始的奖励函数,
是智能体在状态
采取动作
后进入状态
时的安全代价,
是代价权重。这样,当智能体采取不安全行为时,会受到惩罚,从而促使智能体学习到更安全的策略。
4.安全强化学习的主要方法
安全强化学习有多种实现方法,以下介绍几种常见的算法及其特点。
1. 约束强化学习(Constrained Reinforcement Learning)
约束强化学习 的目标是在遵守安全约束的前提下最大化回报。其优化问题可以形式化为:
其中,是时间步
的代价函数(如安全成本),
是代价的上限。
常用的算法包括:
- 约束策略优化(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) 是一种基于策略梯度的安全强化学习方法,特别适用于连续动作空间。其目标是在约束总风险的同时最大化累积回报。具体的优化目标为:
其中, 是给定置信水平
的条件在险价值,
是风险容忍度。通过策略梯度法,智能体可以逐渐学习到在风险受控下的最优策略。
[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] 伪代码解释:
-
环境初始化:
- 使用
gym库来创建强化学习环境,state_dim和action_dim分别表示状态和动作的维度。
- 使用
-
参数初始化:
- 包括折扣因子
gamma、学习率alpha、拉格朗日乘子的学习率lambda_lr以及约束阈值constraint_threshold等。
- 包括折扣因子
-
策略网络:
PolicyNetwork类是一个简单的策略网络,用于预测动作概率分布。- 其方法
forward()计算动作概率,update()通过策略梯度更新参数。
-
训练过程:
- 在每个
episode中,智能体与环境交互并根据当前策略选择动作。 - 每次执行动作后,获取下一个状态、奖励、成本,以及是否结束。
cost通过info字典获取,表示智能体在当前状态执行动作后产生的安全成本。
- 在每个
-
拉格朗日损失:
- 损失函数由累积奖励 ( G ) 和累积成本 ( C ) 构成,使用拉格朗日乘子 ( \lambda ) 来权衡两者。
lagrangian_loss是拉格朗日损失,它平衡奖励与违反安全约束的代价。
-
策略更新:
- 通过
compute_gradients()计算策略梯度,然后调用policy.update()更新策略。
- 通过
-
更新拉格朗日乘子:
- 使用拉格朗日乘子法的学习率 ( \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 连接字符串的基本组成部分:…...
java_连接数据库的方法_后端处理_前端调用_打通整体思路
参考:14 尚上优选项目-平台管理端-权限管理模块-开发角色管理接口(上)_哔哩哔哩_bilibili 第一步. 定义数据 在数据库中定义好数据(如role表格),在java后端定义好对应的实体类(Role类…...
网络安全知识点
第一章 网络安全概述 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 项目介绍 在当前的软件开发和运维环境中,…...
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:这是一个图片展示组件,集成了缩放,移动等操作。 目录 一、安装 二、引入组件 三、使用…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
