强化学习(0):强化学习的基本概念与马尔科夫决策过程

news/2024/5/19 2:07:33 标签: 强化学习, 马尔科夫决策过程, 智能体

最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来,欢迎大家关注我的 个人博客,以及我的github。

本文主要讲解有关强化学习的基本概念以及马尔科夫决策过程的相关内容。

关于强化学习的教程,我见过多种版本,每个老师所讲的内容提纲也有所差异,自己还没有完全搞清楚整个知识体系框架,所以下面先讲哪些共有的部分。

一、强化学习概述

机器学习可以分为监督学习、无监督学习和强化学习(Reinforcement Learning)三个类别。有监督学习是任务驱动的,无监督学习是数据驱动的,强化学习是通过对环境的反馈来学习。

1. 强化学习的基本概念

智能体(Agent): 强化学习系统;

环境(Environment):智能体交互的外部;

状态(State): 决定下一步将要发生什么的信息,t 时刻的状态通常记为 S t S_t St

动作(Action): 智能体根据当前状态所采取的动作,t 时刻的动作通常记为 A t A_t At

奖励(Reward): 一个及时的反馈信号,它表示智能体在第 t 步的表现,智能体的目的就是最大化累计奖励值。t 时刻的奖励通常记为 R t R_t Rt

收获(return): 在一个马尔科夫奖励链上从 t 时刻起往后所有奖励 R 的有衰减的累计和;

策略(Policy): 策略(通常记为 π \pi π)是决定智能体的行为的机制,是从一个状态到一个动作的映射,可以是确定的,也可以是不确定的。确定性策略: a = π ( s ) a=\pi(s) a=π(s);随机策略: π ( a ∣ s ) = P ( A t = a ∣ S t = s ) \pi(a|s)=P(A_t=a|S_t=s) π(as)=P(At=aSt=s)

值函数(Value function): 值函数是一个未来奖励的预测,用来评价当前状态的好坏程度。

状态转移概率矩阵: 在状态 s 下采取动作 a 时,转移到下一个状态 s‘ 的概率,用 P s s ′ a P_{ss'}^a Pssa 表示。


下面是几个不常用的概念,只做了解就好。

学习(Learning): 在环境未知的情况下,智能体通过和环境交互来提升自己的策略;

规划(Planning): 在环境的模型已知的情况下,智能体只通过模型的计算来提升自己的策略;

学习和规划是序列决策中的两个基本问题。

探索(Exploration): 寻找关于环境的更多信息;

开发(Exploitation): 根据已知信息去最大化奖励;

开发就是在自己之前吃过的饭店里选一家最好吃的,而探索就是在没有吃过的饭店里不断尝试。

预测(Prediction): 给定策略去预测值函数;

控制(Control): 寻找最优策略;

2. 强化学习的基本思想及分类

强化学习可以表示为智能体和环境的马尔科夫决策过程智能体在第 t 步时执行行动 A t A_t At,获得状态值 S t S_t St 和奖励值 R t R_t Rt。环境接收到动作 A t A_t At,产生新的状态 S t + 1 S_{t+1} St+1 和奖励 R t + 1 R_{t+1} Rt+1智能体根据奖励值不断调整自己的动作模式,以期得到最大的奖励值。以下为强化学习过程的示意图:

RL

强学学习主要有两种分类方式

(1) 根据是建立对状态价值的估计来解决问题还是建立对决策的估计来解决问题,分为基于价值(Value-Based) 的 RL 和基于策略(Policy-Based)的 RL 两种。基于价值的RL输出所有动作的概率,按照概率分布选择动作,具体的算法有 Policy Gradients。基于价值的 RL 输出所有动作的价值,会根据最高价值来选择动作,具体的算法有 Q-Learning 和 Sarsa等。而 Actor-Critic 是两者的结合。

(2) 根据智能体在解决强化学习问题时是否需要建立环境模型,分为基于模型(Model-based)的 RL 和不需要模型(Model-free)的 RL 两类。

3. 举个例子

maze

在上图所示的走迷宫例子中,红色的是智能体,黄色的是迷宫出口,黑色的陷阱,整个迷宫就是环境,迷宫一共有 4 × 4 = 16 4\times 4=16 4×4=16 个格子,所以一共16个状态。智能体所能采取的动作只有四个——往上下左右方向移动。当智能体到达迷宫出口时奖励值为1,当智能体落入陷阱时奖励值为-1,其他情况奖励值为0。当然奖励值是需要事先给定的。我们的目标就是使智能体到达迷宫出口时获得的奖励值的总和最多。

二、马尔科夫决策过程

在实际情况下,价值函数 v π v_\pi vπ 不仅与上一个状态和动作有关,而且还应该和之前所有的状态和动作有关。策略 π ( a ∣ s ) \pi(a|s) π(as) 和状态转移概率 P s s ′ a P_{ss'}^a Pssa 也是同理。但是这样会导致模型变得十分复杂, 为了简化模型,可以假设模型具有马尔科夫性。

1. 马尔科夫性

马尔科夫性是指当前状态只取决于前一个状态,即 P ( S t + 1 ∣ S t ) = P ( S t + 1 ∣ S 1 , S 2 , . . . , S t ) P(S_{t+1}|S_t)=P(S_{t+1}|S_1,S_2,...,S_t) P(St+1St)=P(St+1S1,S2,...,St)

2. 马尔科夫过程(马尔科夫链)

马尔科夫过程是一个具有马尔科夫性的随机状态序列 S 1 , S 2 , . . . S_1,S_2,... S1,S2,... 。可以表示为二元组 < S , P > <S,P> <S,P>,其中 S 是一个有限的状态集合,P 是一个状态转移概率矩阵: P s s ′ = P ( S t + 1 = s ′ ∣ S t = s ) P_{ss'}=P(S_{t+1}=s'|S_t=s) Pss=P(St+1=sSt=s),即从一个状态转移到另一个状态的概率。

3. 马尔科夫奖励过程

马尔科夫奖励过程就是一个具有奖励值的马尔科夫链,可表示为四元组 < S , P , R , γ > <S,P,R,\gamma> <S,P,R,γ>,其中 R 是奖励函数 R s = E ( R t + 1 ∣ S t = s ) R_s=E(R_{t+1}|S_t=s) Rs=E(Rt+1St=s),即当前状态可获得的奖励的期望值; γ \gamma γ 是衰减因子, γ ∈ [ 0 , 1 ] \gamma\in[0,1] γ[0,1]

4. 马尔科夫决策过程

MDP是一个具有策略的马尔科夫奖励过程,可表示为五元组 < S , A , P , R , γ > <S,A,P,R,\gamma> <S,A,P,R,γ>,其中 A 是一个有限的动作集。P 是状态转移概率矩阵 P s s ′ a = P ( S t + 1 = s ′ ∣ S t = s , A t = a ) P_{ss'}^a=P(S_{t+1}=s'|S_t=s,A_t=a) Pssa=P(St+1=sSt=s,At=a),R 是奖励函数 R s a = E ( R t + 1 ∣ S t = s , A t = a ) R_s^a=E(R_{t+1}|S_t=s,A_t=a) Rsa=E(Rt+1St=s,At=a)

5. 常用概念的数学表达式

当假设模型具有马尔科夫性后,一些概念的数学表达式就得到了进一步的简化。

策略: 策略 π \pi π 是一个给定状态 s 下关于动作 a 的分布: π ( a ∣ s ) = P ( A t = a ∣ S t = s ) \pi(a|s)=P(A_t=a|S_t=s) π(as)=P(At=aSt=s)

收获: 在一个马尔科夫奖励链上从 t 时刻起往后所有奖励的有衰减的累计和。其中衰减系数 γ \gamma γ 体现了未来的奖励在当前时刻的价值比例。记为:
G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . = ∑ k = 0 ∞ γ k R t + k + 1 G_t=R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+...=\sum_{k=0}^\infty{\gamma^kR_{t+k+1}} Gt=Rt+1+γRt+2+γ2Rt+3+...=k=0γkRt+k+1
衰减系数的引入可以避免存在环的马尔科夫链中奖励值无限大的情况。

(状态)值函数: 从给定状态 s 出发,遵循策略 π \pi π,获得的回报 G t G_t Gt 的期望,记为:
v π ( s ) = E π ( G t ∣ S t = s ) v_\pi(s)=E_\pi(G_t|S_t=s) vπ(s)=Eπ(GtSt=s)
动作值函数: 从给定状态 s 出发,采取行动 a,遵循策略 π \pi π,获得的回报 G t G_t Gt 的期望,记为:
q π ( s , a ) = E π ( G t ∣ S t = s , A t = a ) q_\pi(s,a)=E_\pi(G_t|S_t=s,A_t=a) qπ(s,a)=Eπ(GtSt=s,At=a)
要计算值函数的话就需要将所有可能的路径列举出来,然后计算总奖励的期望,但是对于复杂问题而言穷举是不可能的,所以就需要各种算法来解决这个问题。


http://www.niftyadmin.cn/n/968529.html

相关文章

HDOJ 2088 Box of Bricks

2019独角兽企业重金招聘Python工程师标准>>> #include <stdio.h>int main() {int t,n,sum,all,a[120];int k0;while(scanf("%d", &t)!EOF && t){if(k)printf("\n");sum0;all0;for(int i0; i<t; i){scanf("%d",…

注册表c++精华

https://blog.csdn.net/niushitang/article/details/21653849 https://blog.csdn.net/trustnature/article/details/8089566 https://bbs.csdn.net/topics/250015421转载于:https://www.cnblogs.com/ruingking/p/10920665.html

强化学习(1):Q-Learning 算法

最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来&#xff0c;欢迎大家关注我的 个人博客&#xff0c;以及我的github。 本文主要讲解有关 Q-Learning 算法的内容&#xff0c;主要包括 on-policy 和 off-policy 的概念、Q-Learning 算法的基本思想和算法流程&#x…

GetProcAddress的二分查找

只要稍微熟悉PE结构就能很快写出来&#xff0c;GetProcAddress的原型如下 FARPROC WINAPI GetProcAddress(HMODULE hModule,LPCSTR lpProcName) hModule是指模块的基地址&#xff0c;比如用LoadLibrary加载dll返回的地址 lpProcName顾名思义就是函数或者变量的名称&#xff0c;…

019-请你说一下app性能测试的指标

1、内存&#xff1a;内存消耗测试节点的设计目标是为了让应用不占用过多的系统资源&#xff0c;且及时释放内存&#xff0c;保障整个系统的稳定性。当然关于内存测试&#xff0c;在这里我们需要引入几个概念&#xff1a;空闲状态、中等规格、满规格。空闲状态&#xff1a;打开应…

强化学习(2):Sarsa 算法及 Sarsa(lambda) 算法

最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来&#xff0c;欢迎大家关注我的 个人博客&#xff0c;以及我的github。 本文主要讲解 Sarsa 算法以及 Sarsa(λ\lambdaλ) 算法的相关内容&#xff0c;同时还会分别附上一个莫烦大神写的例子。 一、Sarsa 算法 Sarsa…

GFORTRAN

GFORTRAN - 维基百科&#xff0c;自由的百科全书GFORTRAN 维基百科&#xff0c;自由的百科全书跳转到&#xff1a; 导航、 搜索gfortran是GCC中的GNU Fortran编译器。从GCC4.0版开始&#xff0c;gfortran取代了g77成为GCC中的fortran编译器。gfortran目前仍在开发中&#xff0c…

Robot Framework(2)——简单运行案例

1.打开RIDE 之前介绍的3种方式都可以 2.创建工程和测试套件 1>点击File-New Project ①Name&#xff1a;工程命名 ②Parent Directory&#xff1a;上级目录&#xff0c;工程会创建在这个目录下&#xff0c;创建时要注意&#xff0c;默认是上一次的目录 ③Created Path&#…