| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 强化学习笔记(1.0) -> 正文阅读 |
|
[人工智能]强化学习笔记(1.0) |
1.强化学习 强化学习是一类算法,是让计算机实现从一开始什么都不懂,通过不断地尝试并更新自己的行为准则。从错误中学习,最后找到规律,最终达到目的的方法。 在计算机中,可以为每一次的行为进行打分。分为高分和低分,有了打分的经验,就可以尽量去选择高分,而避免选到低分。所以强化学习具有分数导向性。 强化学习的算法: (1)通过价值选行为:Q learning、Sarsa(使用表格学习)、Deep?Q Network(使用神经网络学习) (2)直接选行为:Policy?Gradients(基于概率) (3)想象环境并从中学习:Model?based?RL 2.强化学习方法汇总 Model?free?和Model?based 强化学习的方法分为不理解所处环境的model-free方法和理解model-based方法。 在Model-free中,Q-learning、Sarsa、Policy?Gradients都是从环境中得到反馈然后学习。 而Model-based多出了一个虚拟环境,且比model-free多了想象力。 Model-free中,机器人智能等待真实世界的反馈,然后根据反馈做出行动。 Model-based,能够通过想象来判断接下来发生的状况,然后选择想象情况中最好的,然后采取下一步的策略。 【1】将强化学习分为基于概率和基于价值(分类方式) 基于概率是强化学习中最直接的一种,能通过感官分析所处环境,输出下一步要采取行动概率,然后根据概率采取行动,所以每种动作都有可能被选中。 基于价值的方法是输出所有动作的价值,它会直接选择价值最高的。 动作一般是不连续的,对于连续的动作,就能体现出基于概率的优势,而基于价值确实无能为力的。 通过基于概率的方法和基于价值的方法,又创造出了Actor-Critic.actor会基于概率做出动作,而critic会对动作给出价值,在原有的基于概率的policy?gradients上加速了学习过程。 【2】另一种分类方式,回合更新和单步更新 类比于玩游戏,回合更新是在一局游戏结束后进行总结,一局游戏中所有的转折点,然后更新行为准则。 单步更新,游戏中每一步都在更新。边玩边学习。 Monte-Carlo?learning和基础版的policy?gradients等是回合更新 Qlearning,Sarsa,升级版的policy?gradients等是单步更新。 现在大多数方法采用单步更新,因为单步更新更有效率。 【3】另一种分类方式,在线学习和离线学习 在线学习:本人在场,本人边玩边学习(on-policy)比如:Sarsa 离线学习:本人可以不在场,本人或者其他人玩,不必边玩边学习(off-policy) Sarsa--在线学习 Q?learning,Deep-Q-Network--离线学习 3.为什么要用强化学习 强化学习(Reinforcement?Learning)是一个机器学习大家族的分支,由于近些年的技术的突破,和深度学习(Deep?Learning)的整合,使得强化学习有了进一步的运用。强化学习是让我们的程序从对当前环境完全陌生,成长为一个在环境中游刃有余的高手。 Q-learning 为了得到最优策略policy,我们考虑估算每一状态下每一种选择的价值value有多大。然后我们通过分析发现,每一个时间片的Q(s,a)和当前得到的Reward以及下一个时间片的Q(s,a)有关。Q-learning建立在虚拟环境下无限次的实验。这意味着可把上一次实验计算得到的Q值进行使用。这样,就可以根据当前的r,reward以及上一次实验中下一个时间片的Q值来更新当前Q值。下面来具体分析。 Q-learning的算法过程: 重复(对每一节episode): 重复(对episode的每一步): 执行完动作后,观察reward和新的状态S' Q(St,At)<--Q(St,At)+alpha(R(t+1)+lanmdamax(a)Q(S(t+1),a)-Q(St,At)) S<--S' 循环直到S终止 对于Q-learning,首先就是要确定如何存储Q值,最简单的想法就是矩阵,一个s一个a对应一个Q值,所以可以把Q值想象为一个很大的表格,横列代表S(STATE),纵列代表a(ACTION),里面的数字代表Q值,如下所示:
这样就可以知道Q值是怎样的了,下面就是看Q表是如何更新的。 (1)初始化Q矩阵,比如说都设置为0 (2)开始实验。根据当前Q矩阵及伊布西龙-greedy方法获取动作。比如当前处在状态s1,那么在s1一列每一个Q值都是0,那么这个时候随便选择就可以。
假设为选择a2动作,然后得到的reward是1,并且进入到s3状态,接下来我们要根据 Q(St,At)<--Q(St,At)+alpha(R(t+1)+lanmdamax(a)Q(S(t+1),a)-Q(St,At)) 来更新Q值,这里我们假设alpha=1,lamda=1,也就是每一次都把目标Q值赋给Q。那么公式变成: Q(St,At)=R(t+1)+max(a)Q(S(t+1),a) 所以在这里,就是 Q(s1,a2)=1+max(a)Q(S(3),a) 那么对应的s3状态,最大值是0,所以Q(s1,a2)=1+0=1,Q表格就变成:
(3)接下来就是进入下一次动作,这次的状态是s3,假设选择动作a3,然后得到1的reward,状态变成s1,那么我们同样进行更新: Q(s3,a3)=2+max(a)Q(s1,a)=2+1=3 所以Q表格就变成:
(4)重复上面的方法。 就是这样,Q值在实验的同时反复更新。直到收敛。 DQN 为什么会产生DQN呢,那当然是因为Q-learning也有他的不足之处。我们已经知道,Q表是用表格来表示的Q(s,a),但是这只适合于少量的状态空间和行为空间,如果出现大量的数据的话,用表格就显得格外不妥。所以我们需要对状态的维度进行压缩,解决办法就是价值函数近似。 价值函数近似(Value?Function?Approximation) 什么是价值函数近似,其实很简单,就是用一个函数来表示Q(s,a).即 Q(s,a)=f(s,a) 这里的f可以是任意类型的函数,比如线性函数: Q(s,a)=w1s+w2a+b? ?其中w1,w2,b就是函数f的参数 通过函数的表示,我们就可以无所谓s到底是多大的维度,反正最后都会通过矩阵运算输出为单值的Q。这就是价值函数近似的思路。 如果我们就用w来统一便是函数f的参数,那么就有 Q(s,a)=f(s,a,w) 为什么叫近似,因为我们并不知道Q值的实际分布情况,本质上就是一个函数来近似Q值的分布,所以,也可以说是Q(s,a)≈f(s,a,w) 高维状态输入,低维动作输出的表示问题 对于海量(state,action)数据来说,这是一个高维状态输入,低维动作输出。那么怎么来表示这个函数f呢。最简单的尝试,把高维s和低维a加在一起作为输入。但实际确有一些不妥。我们只需要对高维的状态进行降维,而不需要对动作也进行降维处理。 Q(s)≈f(s,w),只把状态s作为输入,但是输出的时候输出每一个动作的Q值,也就是输出一个向量[Q(s,a1),Q(s,a2),Q(s,a3),...,Q(s,an)],记住这里输出是一个值,只不过是包含了所有动作的Q值的向量而已。这样我们就只要输入状态s,而且还同时可以得到所有的动作Q值,也将更方便的进行Q-learning中动作的选择与Q值更新。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 10:32:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |