关于强化学习的一份介绍

news2024/11/18 0:38:48

在这篇文章中,我将介绍与强化学习有关的一些东西,具体包括相关概念、k-摇臂机、强化学习的种类等。

一、基本概念

所谓强化学习就是去学习:做什么才能使得数值化的收益信号最大化。学习者不会被告知应该采取什么动作,而是必须通过自己去发现哪些动作会产生最丰厚的收益。

所以,我们可以发现强化学习会带来一个独有的挑战,即试探与开发之间的折中平衡。也就是说,智能体(agent)必须开发已有的经验来获取收益,但于此同时也要进行试探,使得未来可以获得更好的动作选择空间。

强化学习也可以通过马尔科夫决策过程(MDP)来描述,即是说:机器在环境中,每下一次的行动仅与当前状态有关,但在之后选择并进行了某一项行动后,这个行动会反馈回刚才的决策中。

其中关于MDP,我们可以有这样的一个定义:

马尔科夫决策过程是一个五元组 S,A,P,R,γ其中:

S 表示状态集合;

A 表示动作集合;

P 是状态转移概率矩阵,表示在状态 s 采取动作 aa 后转移到状态 s′ 的概率;

R 是奖励函数,表示在状态 s 采取动作 a 后得到的即时奖励;

γ 是折扣因子,用于减少未来奖励的影响。

而MDP中的马尔可夫是指马尔可夫性质,即下一状态的概率分布只依赖于当前状态,而不依赖于历史状态序列。

我们知道强化学习中存在一个反馈机制,当智能体执行某个动作后,它会从环境中获得即时奖励,并且环境会转移到一个新的状态。这种反馈不是直接改变动作被选择的概率,而是通过更新智能体的策略来间接影响未来的动作选择。策略是一个从状态到动作的概率分布,智能体学习的策略将决定它在特定状态下选择特定动作的概率。

总节来说就是:智能体在执行动作后会收到奖励并转移到新状态,但这并不直接改变动作被选择的概率。相反,它是通过更新策略来影响未来的决策。

然后是强化学习中其他的一些概念:

智能体 (Agent): 是执行动作的学习实体。

环境 (Environment): 是智能体所处的世界,它根据智能体的动作给出响应。

状态 (State): 描述了环境的当前情况。(强化学习十分依赖状态这一概念,它既可以作为策略和价值函数的输入,又同时作为模型的输入与输出。)

动作 (Action): 智能体可以执行的行为。

奖励 (Reward): 环境对智能体采取的动作给予的反馈,用数值表示,智能体的目标就是最大化累计奖励。

在这里补充一下,一些优化方法,如遗传算法、模拟退火算法等方法它们都可以用于解决强化学习的问题,而不必显式运用价值函数。它们都采用大量静态策略,每个策略在扩展的较长时间与环境的一个独立实例进行交互。这些方法选择获取了最多收益的策略以及其变种来产生下一代的策略,然后继续循环更替,我们将之称为进化方法,因为我们不难发现它们的过程与生物的进化过程十分相似。不过这些进化方法忽视了强化学习问题中的一些有用结构:它们忽略了所有策略是状态到动作的函数这一事实,同时也没有注意个体在生命周期中都有经历过哪些状态,采取了哪些动作。所以,尽管进化与学习间有许多的共性,并且二者往往是相伴的,但我们还是会认为进化方法并不适用于强化学习问题。

二、K-摇臂机

K-摇臂机(Multi-Armed Bandit, MAB)问题是强化学习中的一个经典问题,也是一个简单的强化学习问题,它可以帮助我们理解在不确定情况下如何做出最佳决策。

2.1 定义

假设你在一家赌场里面对一台有 k 个摇臂的老虎机,每个摇臂都有不同的中奖概率。每次拉其中一个摇臂,你都会得到一个奖励(通常是金钱)。你的目标是在有限次尝试内最大化累计奖励。在这个问题中,“摇臂”代表不同的选项,“多臂”则指多个选择。

2.2 问题特点

探索与利用(Exploration vs. Exploitation):这是MAB问题的核心。你需要在探索(尝试不同的摇臂以了解它们的平均奖励)和利用(拉最有可能带来高奖励的摇臂)之间找到一个平衡点。

不确定性:在开始时,你对每个摇臂的期望奖励一无所知,必须通过试验来估计每个摇臂的真实期望值。

即时反馈:每次拉摇臂后,你会立即得到一个奖励,这是一个即时反馈问题。

2.3 ε-greedy 策略

我们可以使用价值的估计来进行动作的选择,这一类方法统称为“动作-价值”方法。那么,一种自然的方式就是通过计算实际收益的平均值来估计动作的价值:

Q_t(a)=\frac{\sum_{i=1}^{t-1} R_i*\mathbb{I}A_i=a}{\sum_{i=1}^{t-1} \mathbb{I}A_i=a}

所以,最简单的一种动作选择方法就是选择具有最高估计值的动作,即进行贪心选择。但这时会出现一个问题,就是这种贪心选择只顾眼前的收益,而可能会失去更大的收益,因为它不会选择那些虽然当前是低价值但在未来会去的极高价值的动作。那么,我们需要对其改进,我们让agent在大部分时间里是贪心的,但有时(以很小的概率ε)会去独立于动作-价值估计值而从所有的动作中等概率随机做出选择,而这种方法就是ε-贪心(greedy) 策略,所以可以总结出它的概念为:

ε-greedy 策略:大部分时间选择当前估计奖励最高的摇臂(利用),一小部分时间随机选择一个摇臂(探索)。

我们令Q(k)记录摇臂k的平均奖赏,若摇臂k被尝试了n次,得到的奖赏为v1,v2,v3……,vn,那么平均奖赏为:

Q(k)=\frac{1}{n}\sum_{i=1}^{n}v_{i}

此时,如果我们直接用该式来计算平均奖赏则需要记录n个平均奖赏值,所以为了更加高效,我们采用增量式计算,即每尝试一次后就立即更新Q(k),那么这个平均奖赏就应更新为:

Q_{n}(k)=\frac{1}{n}((n-1)*Q_{n-1}+v_{n})\\ =Q_{n-1}(k)+\frac{1}{n}(v_{n}-Q_{n-1}(k))

具体用一个代码举例:

import numpy as np
import random


class MultiArmedBandit:
    def __init__(self, num_arms, epsilon=0.1):
        self.num_arms = num_arms
        # 初始化每个摇臂的实际平均奖励
        self.true_rewards = np.random.normal(loc=0.0, scale=1.0, size=num_arms)
        # 初始化每个摇臂的经验平均奖励
        self.estimates = np.zeros(num_arms)
        # 初始化每个摇臂的尝试次数
        self.attempts = np.zeros(num_arms, dtype=int)
        # 探索与利用的参数
        self.epsilon = epsilon

    def pull_arm(self, arm):
        reward = np.random.normal(loc=self.true_rewards[arm], scale=1.0)
        return reward

    def update_estimate(self, arm, reward):
        # 使用增量式更新公式
        self.attempts[arm] += 1
        self.estimates[arm] += (reward - self.estimates[arm]) / self.attempts[arm]

    def choose_arm(self):
        if random.random() < self.epsilon:
            # 探索:随机选择一个摇臂
            return random.randint(0, self.num_arms - 1)
        else:
            # 利用:选择估计奖励最高的摇臂
            return np.argmax(self.estimates)


# 参数设置
num_arms = 10
epsilon = 0.1
num_trials = 1000

# 创建 K-摇臂机对象
bandit = MultiArmedBandit(num_arms, epsilon)

# 进行多次尝试
for trial in range(num_trials):
    chosen_arm = bandit.choose_arm()
    reward = bandit.pull_arm(chosen_arm)
    bandit.update_estimate(chosen_arm, reward)

# 打印结果
print("True Rewards:", bandit.true_rewards)
print("Estimated Rewards:", bandit.estimates)
print("Attempts per Arm:", bandit.attempts)

其运行结果为:

True Rewards: [ 0.05273471  1.40458756  0.32813439 -1.25692634 -0.67451511 -1.97502727
 -0.60326298 -0.22662436 -0.49297712  0.25822946]
Estimated Rewards: [ 0.54674629  1.45132379  0.18953721 -1.67282471  0.1013343  -2.52797267
 -1.07719265  0.19331869 -0.47083797  0.14306436]
Attempts per Arm: [ 12 922  11   8   3   6  10  13   5  10]
2.4 乐观初始值

目前,我们所讨论的方法都在一定程度上依赖于初始动作值Q_1(a)的选择,但这样一来,它们就是有偏的,在统计学的角度来看。不过,在实际中,这并非是一个问题,但它会称为用户需要调整的一个参数。那么,这个初始值该如何分配呢?可以考虑分配一个较高的初始值,以鼓励agent在早期多做尝试,以发现真正优秀的动作,而这样的一个思路就是乐观初始值的思路。

2.5 置信度上界

在之前的动作-价值的估计总会存在不确定性,所以试探的存在是必要的。所以在非贪心动作中,最好是根据动作的潜力来选择可能事实上优秀的动作,这就要考虑它们的估计值有多接近最大值,以及估计这些动作的不确定风性。一个有效的思路就是基于置信度上界的动作选择,即按照这个公式:

A_t=argmax_a[Q_t(a)+c\sqrt{\frac{lnt}{N_t(a)}}]

其中,平方根项是对 a 动作值估计的不确定性或方差的度量。因此,最大值的大小是动作 a 的可能真实值上界,而参数 c 决定了置信水平。

2.6 梯度摇臂机算法

现在,让我们针对每个动作 a 考虑学习一个数值化的偏好函数H_t(a)。偏好函数越大,动作就越频繁地被选择,但偏好函数的概念并非从“收益”上提出的。只有一个动作对另一个动作的相对偏好才是重要的,那么对于如下的这个softmax分布来说,若对于每一个动作的偏好函数都加上1000,则不会对动作概率产生任何影响,式子如下:

Pr(A_t=a)=\frac{e^{H_t(a)}}{\sum^k_{b=1}e^{H_t(b)}}=\pi_t(a)

其中,\pi_t(a)表示动作 a 在时刻 t 被选择的概率。另外,所有偏好函数的初始值都是一样的,所以它们被选择的概率是一样的。

2.7 关联搜索

关联搜索任务也叫上下文相关的摇臂机,它既涉及采用学习去搜索最优的动作,又将这些动作与表现最优时的情景关联在一起。它介于k摇臂机问题与完整的强化学习问题之间。它与完整的强化学习问题相似的点是它需要学习一种策略,但它与k摇臂机相似是体现在每个动作只影响即时收益。所以,如果允许动作可以影响下一刻的情景与收益那么就是完整的学习问题。

三、分类

如果我们按照有无环境模型来对强化学习去分类的话,它可以被分为两类,一是有模型的强化学习,二是无模型的强化学习。具体地:

基于模型的强化学习(Model-Based RL):在这种设置下,智能体尝试构建一个环境的模型,然后利用这个模型来预测未来的状态和奖励,从而做出决策。这种方法的优点是可以减少与真实环境的交互次数,但缺点是模型构建可能会引入误差。

无模型的强化学习(Model-Free RL):智能体不试图构建环境模型,而是直接从与环境的交互中学习。这类方法包括基于价值的方法(如Q-Learning)、基于策略的方法(如Policy Gradients)和Actor-Critic方法。

如果我们按照学习目标去分类的话,那么强化学习可以分为策略优化与Q-Learning

策略优化(Policy Optimization):直接优化策略本身,使其在长期能够获得更高的累计奖励。

Q-Learning:学习动作-价值函数,即在给定状态下采取某个动作所能获得的预期未来奖励。

此外还有特殊类型的,比如:

逆向强化学习(Inverse Reinforcement Learning, IRL):从观察到的专家行为中学习奖励函数。

层级强化学习(Hierarchical Reinforcement Learning, HRL):将任务分解成多个子任务,每个子任务可以独立学习,从而简化整体学习过程。

部分可观测的强化学习(Partially Observable Markov Decision Processes, POMDPs):当环境不是完全可观测时,智能体需要处理不确定性的信息。

此上

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过JS删除当前域名中的全部COOKIE教程

有时候需要通过JS来控制一下网站的登录状态&#xff0c;就例如:网站登出功能&#xff0c;我们可以直接通过JS将所有COOKIE删除&#xff0c;COOKIE删除之后&#xff0c;网站自然也就退出了。 那么今天我就给大家分享一段JS的函数&#xff0c;通过调用这段函数就可以实现删除COO…

【Mysql】Mysql的多表查询---多表联合查询(上)

1、介绍 多表查询就是同时查询两个或者两个以上的表&#xff0c;因为有的时候&#xff0c;用户在查看数据的时候&#xff0c;需要显示的数据来自多张表&#xff0c;多表查询有以下分类&#xff1a; &#xff08;1&#xff09;交叉连接查询&#xff08;产生笛卡尔积&#xff0…

华为Mate 70临近上市:代理IP与抢购攻略

随着科技的飞速发展&#xff0c;智能手机已经成为我们日常生活中不可或缺的一部分。而在众多智能手机品牌中&#xff0c;华为一直以其卓越的技术和创新力引领着行业的发展。近日&#xff0c;华为Mate 70系列手机的发布会正式定档在11月26日&#xff0c;这一消息引发了众多科技爱…

计算机毕业设计Python+Neo4j知识图谱医疗问答系统 大模型 机器学习 深度学习 人工智能 大数据毕业设计 Python爬虫 Python毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

vxe-grid table 校验指定行单元格的字段,只校验某个列的字段

Vxe UI vue vxe-table 中校验表格行是非常简单的&#xff0c;只需要配置好校验规则&#xff0c;然后调用 validate 方法就可以自动完成校验&#xff0c;但是由于项目淡色特殊需求&#xff0c;在某个单元格的值修改后需要对另一个列的值就行校验&#xff0c;这个时候又不需要全部…

记录大学Linux运维上机考试题目和流程

备注&#xff1a;今年的Linux操作系统考试已经全部结束&#xff0c;仅作为一个记录和留念 前提&#xff1a;配置环回网卡和环境和nat网卡 1、搭建dns服务器 2、Apache和http服务 3、搭建postfix邮件服务器实现邮件发送 4、搭建vsftpdFTP服务器实现文件上传 题目如下&…

2024-11-16-机器学习方法:无监督学习(1) 聚类(上)

文章目录 机器学习方法&#xff1a;无监督学习&#xff08;1&#xff09; 聚类&#xff08;上&#xff09;1. 聚类的基本概念1.1 聚类的概念1.2 聚类的功能1.3 聚类的算法 2. 相似度或距离2.1 闵可夫斯基距离2.2 相关系数2.3 夹角余弦 3 类或簇3.1 类的特征 4 类与类之间的距离…

kafka和Flume的整合

目录 一、Kafka作为Source 【数据进入到kafka中&#xff0c;抽取出来】 1、在我的flume的conf文件夹下&#xff0c;有个myconf文件夹&#xff1a; 2、 创建一个flume脚本文件&#xff1a; kafka-memory-logger.conf 3、测试 二、kafka作为Sink 【数据从别的地方抽取到kafka里…

打造专业问答社区:Windows部署Apache Answer结合cpolar实现公网访问

文章目录 前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息 3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况 4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建…

MySQL 8.4.3 Windows绿色安装与主从配置

下载 下载安装包链接&#xff1a; https://dev.mysql.com/downloads/mysql/ 安装配置 假设解压后的目录为C:\mysql-8.4.3-winx64 将C:\mysql-8.4.3-winx64\bin 加入path环境变量在C:\mysql-8.4.3-winx64中创建data文件夹在C:\mysql-8.4.3-winx64中创建my.ini文件 [mysqld]…

文件的简单操作

路径&#xff1a; 代码&#xff1a; main.c #include <stdio.h> #include <stdlib.h> #include <errno.h>int main() {/** 打开文件* FILE *fopen(const char *pathname, const char *mode);*///以追加的方式打开文件FILE* fp fopen("a.txt", &…

【网络】什么是交换机?switch

交换机&#xff08;Switch&#xff09;意为“开关”&#xff0c;是一种用于电&#xff08;光&#xff09;信号转发的网络设备。以下是关于交换机的详细解释&#xff1a; 一、交换机的基本定义 功能&#xff1a;交换机能为接入交换机的任意两个网络节点提供独享的电信号通路&am…

1 图的搜索 奇偶剪枝

图论——图的搜索_Alex_McAvoy的博客-CSDN博客 语雀版本 1 深度优先搜索DFS 1. 从图中某个顶点 v0 出发&#xff0c;首先访问 v0 2. 访问结点 v0 的第一个邻接点&#xff0c;以这个邻接点 vt 作为一个新节点&#xff0c;访问 vt 所有邻接点&#xff0c;直到以 vt 出发的所有节…

【Linux庖丁解牛】—Linux基本指令(下)!

目录 1、grep指令 2、zip/unzip指令 3、sz/rz指令 4、tar指令 ​编辑 5、scp指令 6、bc指令 7、uname –r指令 8、重要的几个热键 9、关机 10、完结撒花 1、grep指令 grep是文本过滤器&#xff0c;其作用是在指定的文件中过滤出包含你指定字符串的内容&#xff0c;…

Oracle19C AWR报告分析之Top 10 Foreground Events by Total Wait Time

Oracle19C AWR报告分析之Top 10 Foreground Events by Total Wait Time 一、分析数据二、详细分析2.1 Top 10 Foreground Events by Total Wait Time各项指标及其解释2.2 分析和总结 一、分析数据 二、详细分析 2.1 Top 10 Foreground Events by Total Wait Time各项指标及其解…

Android Framework AMS(14)ContentProvider分析-1(CP组件应用及开机启动注册流程解读)

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要解读ContentProvider组件的基本知识。关注思维导图中左上侧部分即可。 有了前面activity组件分析、service组件分析、广播组件分析的基…

计算机视觉 1-8章 (硕士)

文章目录 零、前言1.先行课程&#xff1a;python、深度学习、数字图像处理2.查文献3.环境安装 第一章&#xff1a;概论1.计算机视觉的概念2.机器学习 第二章&#xff1a;图像处理相关基础1.图像的概念2.图像处理3.滤波器4.卷积神经网络CNN5.图像的多层表示&#xff1a;图像金字…

Vue基础(1)_模板语法、数据绑定

模板语法 Vue模板语法有2大类&#xff1a; 1、插值语法&#xff1b; 功能&#xff1a;用于解析标签体内内容。 写法&#xff1a;{{xxx}}&#xff0c;xxx是js表达式&#xff0c;且可以直接读取到data中的所有属性。 2、指令语法&#xff1a; 功能&#xff1a;用于解析标签(包括…

《生成式 AI》课程 第3講 CODE TASK 任务2:角色扮演的机器人

课程 《生成式 AI》课程 第3講&#xff1a;訓練不了人工智慧嗎&#xff1f;你可以訓練你自己-CSDN博客 我们希望你设计一个机器人服务&#xff0c;你可以用LM玩角色扮演游戏。 与LM进行多轮对话 提示:告诉聊天机器人扮演任意角色。 后续输入:与聊天机器人交互。 Part 2: Role…

【软件工程】一篇入门UML建模图(类图)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必练内功_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…