强化学习

news/2024/5/19 0:32:00 标签: 强化学习

Reinforcement Learning

    • What is Reinforcement Learning?
    • 强化学习中包含的一些算法
      • Q-learning(Off-policy)
        • 算法
      • Sarsa(On-policy)
        • 算法
      • Deep Q Network(DQN)
      • Policy Gradients

What is Reinforcement Learning?

强化学习是一种机器学习方法,也叫做试错法(Trial and Error),典型的使用强化学习的算法的例子是有alpha Go,它是让计算机在不断的尝试中,更新自己的行为准则,从而进一步学习如何下好围棋,如何得到高分。计算机自己学习是有一个虚拟的老师来给行为打分,得到的分数越高表示行为越好。与监督学习不同的是,强化学习在最开始的时候没有标签,需要自己通过不断的学习来找到适合自己行为的标签。

强化学习中包含的一些算法

1.通过价值选行为:Q-learning、Sarsa、Deep Q Network
2.直接选行为:Policy Gradients
3.想象环境并从中学习:Model Based RL

Q-learning(Off-policy)

举个例子:在我们很小的时候爸妈会告诉我们不写完作业就不准看电视,所以我们在写作业的状态下,好的行为准则是继续写作业,写完作业之后就可以得到奖励,但是不好的行为准则是还没有写完作业就去看电视了。假设我们以写作业这种行为准则为例,我们的选择是继续写作业和看电视,但是之前由于看电视没有被处罚过,所以我选择了还没写完作业去看电视,看电视之后又选择继续看电视,最后爸妈回家,发现我没有写完作业就去看电视了,并狠狠处罚了我,然后我就记下了这种经历,并把没有写完作业就去看电视的这种行为更改为负面行为。

假设我们的行为准则已经学习好了:现在我们处于写作业的状态定义为S1,然后把行为看电视定义为a1,把写作业定义为a2,根据我的经验,在S1的状态下,a2写作业带来的潜在奖励要比a1高,记录表格如下:

a1a2
S1-21

根据上表,我们可以得到现在应该选择a2作为我们接下来的行为。
现在我们的状态更新为S2,我们还是有两个同样的选择a1和a2,有下表:

a1a2
S2-42

同样选择Q表中对应的奖励值较大的那一个a2,然后到达S3并重复上述过程。
这就是Q-Learning的行为过程。

具体一点有:

a1a2
S1-21
S2-42

在实际的Q-Learning过程中,我们是根据奖励值来选择进行哪一个动作的,
Q ( S 1 , a 2 ) 现 实 : R + γ ∗ m a x Q ( S 2 ) Q ( S 1 , a 2 ) 估 计 : Q ( S 1 , a 2 ) } 差 距 = 现 实 − 估 计 \left. \begin{array}{l} \text{$Q(S1,a2)现实$:}&R+γ*maxQ(S2)\\ \text{$Q(S1,a2)估计$:}&Q(S1,a2) \end{array} \right\} 差距 = 现实 - 估计 Q(S1,a2)现实:Q(S1,a2)估计:R+γmaxQ(S2)Q(S1a2)}=

新 Q ( S 1 , a 2 ) = 老 ( S 1 , a 2 ) + α ∗ 差 距 新Q(S1,a2)=老(S1,a2)+ α*差距 Q(S1,a2)=(S1,a2)+α

算法

Initialize Q(s,a) arbitrarily
Repeat (for each episode):
	Initialize s 
	Repeat (for each step of episode):
	Choose a from s using policy derived from Q (e.g., ε-greedy)
	Take action a, observe r , s'
	Q(s,a) <- Q(s,a) + α[r + γmax Q(s',a') - Q(s,a)]
	s <- s';
until s is terminal

Q-Learning不一定说到做到,但是它永远都会通往一条成功的道路,不管这条道路有多危险
如上算法所示,我们每次更新都会用到一个Q(s1,a2)现实和Q(s1,a2)估计,而Q现实中也包含了Q(s2)的最大估计,将对下一步的衰减的最大估计和当前所获得的奖励当成这一步的现实。ε-greedy是用在决策上的一种策略,比如档ε=0.9时说明90%的情况我们会按照Q表的最优值来选择行为,10%的时间使用随机选择行为,α是学习效率(α<1),来决定这一次误差有多少要被学习。γ是对未来奖励的衰减值。

Sarsa(On-policy)

强化学习中Sarsa和Q-Learning非常相似,和之前的Q-Learning一样,我们使用写作业的例子来阐明Sarsa。没写完作业看电视会被处罚,写完作业会得到奖励。

同样有Q表:

a1a2
S1-21
S2-42

若选择Q-Learning,我们会观察接下来选择哪一个动作会奖励最大化,但是在真正做决定的时候却不一定会选择到会带来最大奖励的那一个动作,Q-Learning只是在这一步估计了一下接下来的动作值。而Sarsa是实践派,在接下来会真正选择到带来最大奖励的那个动作。

Q ( S 1 , a 2 ) 现 实 : R + γ ∗ Q ( S 2 , a 2 ) Q ( S 1 , a 2 ) 估 计 : Q ( S 1 , a 2 ) } 差 距 = 现 实 − 估 计 \left. \begin{array}{l} \text{$Q(S1,a2)现实$:}&R+γ*Q(S2,a2)\\ \text{$Q(S1,a2)估计$:}&Q(S1,a2) \end{array} \right\} 差距 = 现实 - 估计 Q(S1,a2)现实:Q(S1,a2)估计:R+γQ(S2a2)Q(S1a2)}=
新 Q ( S 1 , a 2 ) = 老 ( S 1 , a 2 ) + α ∗ 差 距 新Q(S1,a2)=老(S1,a2)+ α*差距 Q(S1,a2)=(S1,a2)+α
然后更新Q表中的s1和a2.

算法

Initialize Q(s,a) arbitrarily
Repeat (for each episode):
	Initialize s 
	Repeat (for each step of episode):
	Choose a from s using policy derived from Q (e.g., ε-greedy)
	Take action a, observe r , s'
	Choose a' from s' using policy derived from Q (e.g.,ε-greedy)
	Q(s,a) <- Q(s,a) + α[r + γQ(s',a') - Q(s,a)]
	s <- s'; a <- a';
until s is terminal

Sarsa与Q-Learning不同,它比较保守,会绕开危险达到目标。

Deep Q Network(DQN)

DQN是一种融合了神经网络和Q-Learning的方法。当状态太多的时候,传统的表格形式来存储状态会导致计算机的内存不够用和搜索状态耗时的情形。所以加入了神经网络。
1.将状态和动作当作神经网络的输入值,然后经过分析之后得到动作的Q值这样就没有必要在表格中记录Q值了,而是直接在神经网络中生成一个Q值。
2.还有一种形式是只输入状态值,输出所有的动作值,然后按照Q-Learning的原则,直接选择输出最大值的动作作为下一个要做的动作。

基于第二种神经网络来分析:
首先还是选用输出为a1,a2,输入为s2.
Q ( S ′ ) 现 实 : R + γ ∗ m a x Q ( S ′ ) Q ( S 2 ) 估 计 : Q ( S 2 ) } 差 距 = 现 实 − 估 计 \left. \begin{array}{l} \text{$Q(S')现实$:}&R+γ*maxQ(S')\\ \text{$Q(S2)估计$:}&Q(S2) \end{array} \right\} 差距 = 现实 - 估计 Q(S)现实:Q(S2)估计:R+γmaxQ(S)Q(S2)}=
新 N N = 老 N N + α ∗ ( Q 现 实 − Q 估 计 ) 新NN=老NN+ α*(Q现实 - Q估计) NN=NN+α(QQ)
DQN有Experience Replay 和 Fixed Q-targets,它有一个学习库可以用于学习过去的经历,还可以学习当前的经历,甚至可以学习别人的经历,可以随机抽取经历进行学习。

Policy Gradients

前文中有提到,Q-Learning、DQN是学习奖惩的值,根据自己认为的最高价值选择行为,而Policy Gradients是不通过奖励值直接输出行为。我们也可以给Policy Gradients加上一个神经网络来输出预测的动作,这样做的最大好处是能在一个连续区间内选择动作。
Policy Gradients没有误差,但是它确实是在进行反向传递,比如说我们观测的信息通过神经网络分析选出了一个行为,直接进行反向传递,使得这个行为在下一次被选中的可能性增加,但是奖惩信息告诉我们,这一次增加的动作不是好的,那么我们应该相应减小本次动作增加的幅度,这样就可以靠奖励来左右神经网络的反向传递。反之,如果我们选中了一个行为,这个行为进行反向传递,使它在下一次能够被多选一点,这个时候奖励信息告诉我们这个行为是好的,那么我们在这一次反向传递的时候增加动作的幅度,使得这个行为在下一次选择能够被多选择一些。


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

相关文章

Ubuntu Android studio安装

首先如果你使用的时64位的Ubuntu&#xff0c;你需要先安装32位的库&#xff1a; sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc6如果你显示了一些提示信息表示找不到这些库的话&#xff0c;那么尝试下面的命令&#xff1a; sudo apt-get install lib32…

Numpy Pandas

Numpy & Pandas的使用Numpy&Pandas安装Numpy & Pandas简介numpynumpy创建数组numpy基础运算pandaspandas基本介绍pandas基本用法Numpy&Pandas安装 1.pip 安装 如果可以访问外网的话一般推荐使用pip安装(pip安装真的超级方便~&#xff01;&#xff01;&#xf…

Andrew Ng 机器学习笔记(八)

机器学习笔记简介主要内容clusteringUnsupervised learning introductionK-means algorithmOptimization objectiveRandom initializationChoosing the number of clusters参考链接简介 聚类分析是一种重要的人类行为&#xff0c;早在孩提时代&#xff0c;一个人就通过不断改进…

编译原理-递归子程序分析器的设计和实现

实验内容 本分析程序所分析的文法如下&#xff1a; G[E]&#xff1a; E→eBaA A→a|bAcB B→dEd|aC C→e|dC 要求输入一个语句&#xff0c;判断这个语句是不是属于这个文法的。如果是则输出“Right”&#xff0c;如果不是&#xff0c;则输出“Error”。 实验代码如下&#xf…

编译原理-词法分析

实验内容 通过对PL/0词法分析程序&#xff08;GETSYM&#xff09;的分析&#xff0c;并在此基础上按照附录A中给出的PL/0语言的语法描述&#xff0c;编写一个PL/0语言的词法分析程序。此程序应具有如下功能&#xff1a; 输入为字符串&#xff08;待进行词法分析的源程序&#…

DFS算法和一些实例

DFS(深度优先搜索) 深度优先搜索算法&#xff08;英语&#xff1a;Depth-First-Search&#xff0c;简称DFS&#xff09;是一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点&#xff0c;尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条…

Java学习-基础知识

1.Java语言的特性–跨平台性 任何一个软件在一个操作系统上面执行就得对一个软件进行解析&#xff0c;如Windows使用C/C写的&#xff0c;所以用C/C写出来的软件在Windows里面可以执行&#xff0c;但是没有可以执行Java语言的解析程序。有了JVM&#xff08;Java Virtual Machin…

Python-16-继承、封装、多态

一、继承 1. 概念 继承是一种创建新类的方式&#xff0c;新建的类可以继承一个或多个父类&#xff08;python支持多继承&#xff09;&#xff0c;父类又可称为基类或超类&#xff0c;新建的类称为派生类或子类。 子类会“”遗传”父类的属性&#xff0c;从而解决代码重用问题。…