基本设置

例子:瓜农种西瓜

• 多步决策过程
• 过程中包含状态、动作、反馈 (奖赏) 等
• 需多次种瓜,在过程中不断摸索,才能总结出较好的种瓜策略

监督学习对比强化学习

预测:最小化预测误差,预测结果不会对环境产生影响

比如,是否为肿瘤,天气预测是否影响天气

决策:决策动作会对环境产生影响

比如:肿瘤去除,股票投资会影响股市

强化学习的关键要素
<A,X,R,P><A,X,R,P><A,X,R,P>
动作空间 A
状态空间 X
奖赏函数 R:X×A×X→RX\times A\times X\rightarrow \mathcal{R}X×A×X→R
状态转移概率P:X×A×X→RX\times A\times X\rightarrow \mathcal{R}X×A×X→R

目标:通过在种瓜过程中不断摸索,总结出较好的种瓜策略,种出好瓜(获得的累积奖赏最大)

强化学习的目标
器通过在环境中不断尝试,从而学到一个“策略”(policy)π\piπ,使得
长期执行该策略后得到的累积奖赏最大

策略表示:
确定性策略和随机性策略

策略的评估:累计奖赏
状态值函数:从x输出用策略π\piπ带来的累计奖赏

状态值函数,从状态x出发,策略π\piπ的累计奖赏
{VTπ(x)=Eπ[1T∑t=1Trt∣x0=x]T步累计奖赏Vγπ(x)=Eπ[∑t=0+∞γtrt+1∣x0=x]γ折扣累计奖赏\left\{\begin{array}{l} V^\pi_T(x)=\mathbb{E}_\pi[\frac{1}{T}\sum^T_{t=1}r_t|x_0=x]&T步累计奖赏\\ V^\pi_\gamma(x)=\mathbb{E}_\pi[\sum^{+\infty}_{t=0}\gamma^t r_{t+1}|x_0=x]&\gamma折扣累计奖赏 \end{array}\right.{VTπ​(x)=Eπ​[T1​∑t=1T​rt​∣x0​=x]Vγπ​(x)=Eπ​[∑t=0+∞​γtrt+1​∣x0​=x]​T步累计奖赏γ折扣累计奖赏​
状态-动作值函数,从状态x出发,执行动作a再用策略π\piπ的累计奖赏
{QTπ(x)=Eπ[1T∑t=1Trt∣x0=x,a0=a]T步累计奖赏Qγπ(x)=Eπ[∑t=0+∞γtrt+1∣x0=x,a0=a]γ折扣累计奖赏\left\{\begin{array}{l} Q^\pi_T(x)=\mathbb{E}_\pi[\frac{1}{T}\sum^T_{t=1}r_t|x_0=x,a_0=a]&T步累计奖赏\\ Q^\pi_\gamma(x)=\mathbb{E}_\pi[\sum^{+\infty}_{t=0}\gamma^t r_{t+1}|x_0=x,a_0=a]&\gamma折扣累计奖赏 \end{array}\right.{QTπ​(x)=Eπ​[T1​∑t=1T​rt​∣x0​=x,a0​=a]Qγπ​(x)=Eπ​[∑t=0+∞​γtrt+1​∣x0​=x,a0​=a]​T步累计奖赏γ折扣累计奖赏​

强化学习方法分类

  1. 马尔科夫决策过程中,A、 X、 P、R已知:动态规划
  2. 模型意指马尔可夫决策过程:P和R往往未知
  3. 基于模型(model-based)的RL:先学习/还原环境模型,即P和R再求解最优策略
  4. 免模型(model-free)的RL:不学习/原环境模型,直接逼近最优策略

Q-learning算法

基本思想
• 学习状态-动作值函数Q(s,a)Q(s,a)Q(s,a),再从学到的QQQ函数里求出最优策略πππ(即带来的累积奖赏最大)
• 免模型方法:无需先学习状态转移概率P和奖赏函数R

• 从与环境交互的轨迹数据中学习
一条轨迹数据:s1,a1,r2,s2,a2...s_1,a_1,r_2,s_2,a_2...s1​,a1​,r2​,s2​,a2​...

【当动作和下一时刻状态都已经(通过采样)确定时】

Qγπ(x)=Eπ[∑t=0+∞γtrt+1∣x0=x,a0=a]Q^\pi_\gamma(x)=\mathbb{E}_\pi[\sum^{+\infty}_{t=0}\gamma^t r_{t+1}|x_0=x,a_0=a]Qγπ​(x)=Eπ​[t=0∑+∞​γtrt+1​∣x0​=x,a0​=a]
转换为
Q(st,at)=R(st,at)+γ⋅Q(st+1,at+1)Q(s_t,a_t)=R(s_t,a_t)+\gamma\cdot Q(s_{t+1},a_{t+1})Q(st​,at​)=R(st​,at​)+γ⋅Q(st+1​,at+1​)

基本思想:维护两个策略
目标策略:π(a∣s)\pi(a|s)π(a∣s)用状态-动作值函数Q(s,a)Q(s,a)Q(s,a)评估
执行/行为策略(用于收集数据和做探索):μ(a∣s)\mu(a|s)μ(a∣s)用于收集轨迹数据
{s1,a1,r2,s2,a2……sT}∼μ\{s_1,a_1,r_2,s_2,a_2……s_T\}\sim \mu{s1​,a1​,r2​,s2​,a2​……sT​}∼μ

μ(a∣s)\mu(a|s)μ(a∣s)实现,可以使用ϵ−greedy\epsilon-greedyϵ−greedy的环境探索法【平衡探索与利用】
πϵ(s)={π(s)=argmaxaQ(s,a)以概率1−ϵA中以均匀概率选取动作概率ϵ\pi^\epsilon(s)=\left\{\begin{array}{l} \pi (s) = argmax_aQ(s,a) & 以概率1-\epsilon \\ A中以均匀概率选取动作 & 概率\epsilon\end{array}\right.πϵ(s)={π(s)=argmaxa​Q(s,a)A中以均匀概率选取动作​以概率1−ϵ概率ϵ​

状态-动作值函数更新:


绵羊走迷宫
假设一个迷宫有5个房间,房间之间通过门相连,将这五个房间按照从0至4进行编号,且5号房间里面是草地。因绵羊要吃草,设定5号房间为绵羊的目标房间。求绵羊从任意一个房间走到目标房间(5号房间)的最优路径。

基于图表示的房间结构
• 节点:房间
• 边:如果两个房间有门相连,那么两个节点之间存在一条边。边的权重即为奖赏值(直接连接到5号房间的奖赏值为100,其他门的奖赏值为0)。没有门直接相连,奖赏值为-1

绵羊从任意一个房间走到目标房间的最优路径
→\rightarrow→从任意状态到达目标状态的最大累积奖赏

令学习参数γ=0.8,初始状态为1号房间

• 根据奖赏矩阵R,状态1的下一步动作有两种选择:转向状态3或者状态5。

  • 根据行为策略,假设我们转向状态5。

• 绵羊位于状态5以后,有三种可能的动作选择
:转向状态1或4或5。

  • 根据目标策略,选择Q值最大的动作,并更新值函数:

Q(1,5)=R(1,5)+γ×max{Q(5,1),Q(5,4),Q(5,5}=100Q(1,5)=R(1,5)+\gamma\times max\{Q(5,1),Q(5,4),Q(5,5\}=100Q(1,5)=R(1,5)+γ×max{Q(5,1),Q(5,4),Q(5,5}=100

当前状态为5号房间(达到目标状态)
完成了一次episode,矩阵Q也相应地更新了

接着,假设选取3为初始状态
• 根据奖赏矩阵R,状态3有三种可能的动作选
择:转向状态1或2或4。

  • 根据行为策略,假设我们转向状态1。

绵羊位于状态1以后,有两种可能的动作选择
:转向状态3或5。

  • 根据目标策略,选择Q值最大的动作,并更
    新值函数:
    Q(3,1)=R(3,1)+γ×max{Q(1,3),Q(1,5)}=80Q(3,1)=R(3,1)+\gamma\times max\{Q(1,3),Q(1,5)\}=80Q(3,1)=R(3,1)+γ×max{Q(1,3),Q(1,5)}=80

当前状态为1号房间(不是目标状态
第二次episode还没有结束

• 根据奖赏矩阵R,状态1有两种可能的动作选
择:转向状态3或5。

  • 根据行为策略,假设我们转向状态5。

由前面的分析,我们有:Q(1,5)=100。更新新矩阵Q,但是Q没有发生变化。第二次episode结束

继续执行更多的episode,最终Q将收敛成如下一个矩阵

如果以3号房间为初始状态,根据Q表,累积的奖赏最大的路径是3-﹥1-﹥5或者3-﹥4-﹥5,总的reward都为100。

强化学习拓展

RL需要对环境进行探索

智能体在探索中加深对环境的理解,使得长期累积奖赏最大

比如婴儿走路

智能体在探索中加深对环境的理解,使得长期累积奖赏最大

具体阐述:
K臂老虎机(K-armed Bandit):
一个状态,k个动作,每个摇臂奖励服从某个期望位置的分布,执行有限次动作,最大化累计奖赏

简化RL(无状态转移,因为只有一个状态),把探索抽象出来单独研究

若只探索:平均分配尝试次数(浪费大量尝试)

只利用:每个摇一次,根据反馈结果只选择期望最高的摇臂(误差大)

主要难题之一:平衡探索与利用
摇臂次数有限,如何分配资源做探索和利用,使得长期累积奖赏尽可能的大?

  1. 环境探索方法
    ϵ贪心\epsilon贪心ϵ贪心
    以ϵ\epsilonϵ的概率探索:均匀随机选择一个摇臂
    以1−ϵ1-\epsilon1−ϵ概率利用,选择当前期望最高的摇臂

  2. Softmax:基于当前已知摇臂期望对探索和利用这种
    if 摇臂当前平均奖赏大,选择概率高
    概率用Boltzmann分布
    P(k)=eQ(kr∑i=1KeQ(i)rP(k)=\frac{e^{\frac{Q(k}{r}}}{\sum^K_{i=1} e^{ \frac{Q(i)}{r}}}P(k)=∑i=1K​erQ(i)​erQ(k​​
    Q(i)Q(i)Q(i)是记录当前摇臂的平均奖赏

两种算法都有折中参数(ϵ,r)(\epsilon,r)(ϵ,r)

深度强化学习:深度模型+强化学习
深度强化学习
使用(深度)神经网络表示策略或值函数
迷宫:有限状态、动作,小规模

深度强化学习
大规模/连续动作、状态,复杂策略表示,可考虑深度强化学习

应用

例如,DQN(深度Q网络)玩游戏,可以超过人类水平
AlphaGo:树搜索+深度强化学习(深度网络+强化学习
除了各种棋类、还应用于机器人控制、推荐系统、军事博弈、股票预测
等各种决策任务

小结

有监督学习 无监督学习 强化学习
学习依据 基于监督信息 基于对数据结构的假设 基于评估
数据来源 一次给定 一次给定 在时序交互中产生
决策过程 单步决策(如分类和识别) 序贯决策(如棋类博弈)
学习目标 样本到语义标签的映射 数据的分布模式 选择能够获取最大受益的状态到动作的映射

强化学习:多步决策过程,解决how的问题,决策会影响环境
• 强化学习拓展:探索-利用难题、深度强化学习、应用及问题
• Q-Learning 算法

迷宫寻宝



当然,你不需要写出程序所有代码,你只需要补全以下函数并提交即可。

函数部分定义如下(部分变量的说明已经在提示中详尽给出):

void Qlearning()
{int nx = 1 + rand() % n, ny = 1 + rand() % m;int cnt = 0;while (!isEnd(nx,ny) && cnt < n*m) {auto &s0 = Qstate[(nx-1)*m+ny];int siz = s0.size();int _next = -1,idx = 0;if (!siz) return;if (siz == 1) _next = s0[0].first;else {sort(s0.begin(),s0.end(),cmp);double p = rand() / double(RAND_MAX);if (p < 1 - greedy_factor) {_next = s0[0].first;}else {idx = 1 + rand() % (siz - 1);_next = s0[idx].first;}}auto &s1 = Qstate[_next];sort(s1.begin(),s1.end(),cmp);double _nextMax = (int)s1.size() ? s1[0].second : 0.0;nx = (_next - 1) / m + 1;ny = (_next - (nx-1) * m) % (m+1);/********/// TODO// HINTS: 使用s0[idx].second、alpha、gama、_nextMax、Reward[nx][ny]变量,// 完成Qlearning的状态更新公式/********/cnt++;}
}

#include <bits/stdc++.h>
using namespace std;
const int maxn = 21;
const int epics = 50000;
const int target_success = 5000;
const double inf = 1e8;bool cmp(pair<int,double> X, pair<int,double> Y)
{if(X.second == Y.second) return X.first < Y.first;return X.second > Y.second;
}// 迷宫尺寸 n*m
// x,y坐标从1开始 起点(1,1) 终点(n,m)
// 对于每个位置(i,j),可以向U,L,R,D四个方向移动,不可走出迷宫边界,不可走到障碍物上
int n,m;// maze[maxn+5][maxn+5]存储迷宫 0代表可走通 1代表陷阱 (maze[i][j], 1<=i<=n,1<=j<=m)
// 答案保证有解 即 maze[1][1] = 0, maze[n][m] = 0, 起点与终点之间保证至少存在一条路径
int maze[maxn+5][maxn+5];// 奖励函数R 设置普通格子奖励为-(abs(i-n)+abs(j-m)) 陷阱奖励为-10000 终点奖励为100000 衰减因子alpha = 0.9 , gama = 0.9
const double alpha = 0.9;
const double gama = 0.9;
double Reward[maxn+5][maxn+5];// 状态函数Q 下一步的选取采用1-ϵ贪心
// 关于Qstate[pos]中的pos索引到二维坐标(px,py)的转换:
//  px = (pos - 1) / m + 1
//  py = (pos - (px-1) * m) % (m+1);
const double greedy_factor = 0.1;
vector< pair<int,double> > Qstate[(maxn+5)*(maxn+5)];// 存储答案
vector< pair<int,int> > ans;// 初始化奖励函数R和状态函数Q
void init_RQ(int i,int j)
{// 陷阱不设置奖励函数(可理解成均为-inf)if (maze[i][j] == 1) return;// Upif (Reward[i-1][j]) {Qstate[(i-1)*m+j].push_back({(i-2)*m+j,-1});}// Leftif (Reward[i][j-1]) {Qstate[(i-1)*m+j].push_back({(i-1)*m+j-1,-1});}// Rightif (Reward[i][j+1]) {Qstate[(i-1)*m+j].push_back({(i-1)*m+j+1,-1});}// Downif (Reward[i+1][j]) {Qstate[(i-1)*m+j].push_back({i*m+j,-1});}
}int success_time = 0;
bool isEnd(int i,int j)
{if (i == n && j == m) {++success_time;return true;}if (maze[i][j] == 1) {return true;}return false;
}void Qlearning()
{int nx = 1 + rand() % n, ny = 1 + rand() % m;int cnt = 0;while (!isEnd(nx,ny) && cnt < n*m) {auto &s0 = Qstate[(nx-1)*m+ny];int siz = s0.size();int _next = -1,idx = 0;if (!siz) return;if (siz == 1) _next = s0[0].first;else {sort(s0.begin(),s0.end(),cmp);double p = rand() / double(RAND_MAX);if (p < 1 - greedy_factor) {_next = s0[0].first;}else {idx = 1 + rand() % (siz - 1);_next = s0[idx].first;}}auto &s1 = Qstate[_next];sort(s1.begin(),s1.end(),cmp);double _nextMax = (int)s1.size() ? s1[0].second : 0.0;nx = (_next - 1) / m + 1;ny = (_next - (nx-1) * m) % (m+1);/********/// TODO// HINTS: 使用s0[idx].second、alpha、gama、_nextMax、Reward[nx][ny]变量,// 完成Qlearning的状态更新公式// 你的代码将被嵌在此处/********/cnt++;}
}int main()
{ios::sync_with_stdio(false);srand(2022);cin >> n >> m;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++) {int t;cin >> t;maze[i][j] = t;Reward[i][j] = (t == 0 ? -(abs(i-n)+abs(j-m)) : -10000.0);}}Reward[n][m] = 100000.0;for(int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++) {init_RQ(i,j);}}int cnt = 0;while (cnt < epics && success_time != target_success) {Qlearning();++cnt;}cnt = 0;int x = 1, y = 1;while ((x!=n || y!=m) && cnt < n*m) {auto &s = Qstate[(x-1)*m+y];if (!(int)s.size()) {// 无解情况,可忽略cout << "Something Wrong!" << endl;return 0;}ans.push_back({x,y});sort(s.begin(),s.end(),cmp);int _next = s[0].first;x = (_next - 1) / m + 1; y = (_next - (x-1) * m) % (m+1);++cnt;}ans.push_back({n,m});cout << (int)ans.size() << endl;for(auto& u : ans) {cout << u.first << ' ' << u.second << endl;}return 0;
}

思路

搞清楚每个部分干啥套公式即可

代码

double former = (1 - alpha) * s0[idx].second;
double later = alpha * (Reward[nx][ny] + gama * _nextMax);
s0[idx].second = former + later;

人工智能笔记11 --强化学习相关推荐

  1. 学习笔记:强化学习与最优控制(Chapter 2)

    Approximation in Value Space 学习笔记:强化学习与最优控制(Chapter 2) Approximation in Value Space 1. 综述 2. 基于Value ...

  2. 【医疗人工智能】通过强化学习和分类的自适应对齐进行有效的症状查询和诊断

    Article 文献题目:Efficient Symptom Inquiring and Diagnosis via Adaptive Alignment of Reinforcement Learn ...

  3. 强化学习笔记-01强化学习介绍

    本文是博主对<Reinforcement Learning- An introduction>的阅读笔记,不涉及内容的翻译,主要为个人的理解和思考. 1. 强化学习是什么?解决什么样的问题 ...

  4. David Silver强化学习公开课自学笔记——Lec1强化学习简介

    本笔记摘自知乎博主旺财的搬砖历险记和叶强,仅用于自学 1.背景介绍 (1)背景 强化学习是多学科多领域交叉的产物,本质是解决决策问题,即学会自动决策,在各个领域体现不同,但都归结为人类如何且为什么能做 ...

  5. 阿尔法狗的秘密:人工智能中的强化学习

    在有监督学习(supervised learning)中,训练数据中包含了数据样本的目标. 不过现实中可没有上帝一样的监督者给出这些目标或答案! 强化学习(reinforcement learning ...

  6. 【人工智能】深度强化学习的新突破:如何打造智能决策系统

    文章目录 深度强化学习的新突破:如何打造智能决策系统 引言 概念和术语介绍 强化学习 深度学习 强化学习和深度学习的结合 智能决策系统 关键问题分析 问题解决方案核心原理讲解 模型设计 数据集 模型评 ...

  7. 【从零开始学习人工智能】 人工智能简介 - 04强化学习

    人工智能简介 - 强化学习 引言 强化学习是人工智能领域的一个重要分支,它通过与环境进行交互学习,以最大化累积奖励为目标.在本篇文章中,我们将介绍强化学习的基本概念.关键要素和应用场景. 1. 强化学 ...

  8. 机器学习读书笔记:强化学习

    文章目录 强化学习基本模型 K-摇臂赌博机模型 ϵ\epsilonϵ-贪心 Softmax 有模型学习 策略评估 策略改进 免模型学习 蒙特卡洛强化学习 采样 策略改进 时态差分学习 值函数近似 模仿 ...

  9. 读书笔记 - 基于强化学习的城市交通信号控制方法研究 - 西电MaxPlus

    <基于强化学习的城市交通信号控制方法研究> 针对TC-GAC交通信号控制方法中只考虑局部拥堵因子的缺陷,引入车辆目的车道的全局拥堵因子,实现了多交叉口控制器Agent之间的简单协作. 由于 ...

  10. 强化学习笔记:强化学习的约束

    1 所需的样本数量过大 深度强化学习一个严重的问题在于需要巨大的样本量.举个例子,玩Atari游戏 图 19.17 中纵轴是算法的分数与 人类分数的比值,100% 表示达到人类玩家的水准. 图中横轴是 ...

最新文章

  1. Expandable Table的Demo
  2. C++ STL 算法精选之查找篇
  3. CodeForces 15B Laser
  4. linux lzo 压缩文件,Linux常用压缩和解压命令
  5. 关于Visual Studio .NET 2010最近的发布情况
  6. 实习踩坑之路:多线程+多个锁下面导致的数据库状态不对
  7. 莞工计算机学院杀手,莞工oj第40题神奇的fans
  8. 内网通手动修改积分_WooCommerce微信小程序2.9.4版本发布 拼团积分购适配可变产品 微信搜索推送...
  9. c语言的Hello World
  10. 蜂鸣器干扰通讯_蜂鸣器工作原理是什么,为什么需要接振荡的信号才能工作?...
  11. 无线局域网和蜂窝移动网络_为什么 iPhone 的数据流量叫做「蜂窝移动网络」?...
  12. JS实现歌词同步滚动效果
  13. 无线网ppp服务器连接失败,关于无线上网PPP拨号问题
  14. 2022智源大会议程公开 | 神经计算与生物智能论坛
  15. 学习Python数据分析,需要几个阶段?
  16. 16从零开始学Java之Java里的输入与输出语句有哪些?
  17. 搭搭云-超级应用平台 与JNPF Java多用户商城系统源码
  18. RDM redis操作
  19. SVG大神专访:计育韬,开创行业更要守护行业。
  20. BNCT知识宝典(中文2022版)

热门文章

  1. 数据中台之数据集成平台的数据抽取
  2. linux伊甸园论坛,Deepin2014壁纸大赛评审团——不断努力的Linux伊甸园
  3. 开心斗服务器维修要多久,大危机 《开心OL》史上最惨服务器开启?
  4. 计算机系统故障常用检测及排除方法有哪些,常见的电脑故障及排除方法
  5. 哪种软件测试硬盘速度,哪种工具最适合硬盘,SSD,U盘,存储卡速度性能测试?...
  6. nProtect的一些知识
  7. phpbb简体中文语言包的安装
  8. troublemaker中文谐音_troublemaker歌词, trouble maker 音译中文歌词
  9. 在C#中用一个按钮控制斑马zebra条码打印机进行打印
  10. 海康威视复赛题 --- 算法说明书