强化学习课程一

介绍

什么是强化学习(Reinforcement Learning)呢?想象自己在一个迷宫中, 你需要走到出口,但你完全不知道迷宫是什么样的,你能得到的环境信息就是4各方向上的情况,我们称这个迷宫为一个环境(environment)。 
下面你需要踏出一步,有4各方向可以选择,因为我们对于迷宫总体结构未知,所以这时候走任何一个方向是随意的。我们称这样移动一步为动作(action)。 
在迷宫里乱跑一定不是一个好的建议,我们应该当探索迷宫的过程中获得更多关于迷宫的信息,从而在动作的时候做出更好的判断(比如,之前来过这个位置,选择了向上走,很快就碰到了死路,所以选择其他方向会比较好),这就是说,要有一个反馈的机制——奖励(reward)。比如下一步就是出口了,应当给一个很大奖励(10000);而下一步是墙,应当给一个很大的负奖励(-10000)。而正常迷宫探索的时候,给一个正常的奖励就可以(1)。 
奖励是探索过程得到的经验,他将怎么指导我们新的探索呢?首先,对于在迷宫中我们每次要做出决策的时候,我们需要从自己的状态(state)进行判断,状态的表示方式很多,在迷宫中我们可以认为是位置坐标;在倒立摆中可以是位置和角度以及他们的加速度。 
那么,我们在迷宫中每次做出决策的时候,相关的就是当前状态和可以做的动作,设Q(s,a)为状态-动作函数,即在每个状态下,做每个动作的Q值(和reward相关),探索的过程中,我们要做的,就是把Q-Table填满。 
下面我们要做的就很明确了,我们在一个环境中,对于当前状态,我们根据经验(Q),做出一个动作,接着我们到了下一个状态,并基于状态得到一个奖励,拿到奖励后我们再更新经验(Q)。这样,通过很多次迭代的探索后,我们呢就能得到一个最优的走出迷宫的策略,这是一个由状态和动作构成的马尔科夫决策过程(Markev Decision Process)(什么是马尔科夫链?)

伪代码

我们呢了解了强化学习的基本思想,下面用一段伪代码表述整个强化学习的过程:

 
  1. Initialize Q arbitrarily //随机初始化Q值
  2. Initialize S //处于起点
  3. Repeat (for each episode):
  4. //每一次探索
  5. Repeat (for each step of episode):
  6. //探索中的每一步
  7. 根据当前Q和位置S,使用一种策略,得到动作A
  8. //这个策略可以是ε-greedy或者softmax等
  9. 做了动作A,到达新的位置S2,并获得奖励R
  10. //奖励可以是1,50或者-1000
  11. Q(S,A) (1-α)*Q(S,A) + α*[R + γ*maxQ(S2,a)]
  12. //在Q中更新S
  13. S S2
  14. 找到终点

下面具体讲两个问题:

1. 策略选择函数

这个策略有很多,也诞生了n多论文,我讲一下比较简单常用的三种,一会matlab代码中也正是用的这三种。 
1. 贪婪(greedy)算法 
贪婪算法简单来说就是选择最好的,你是一个极其贪婪的人,永远向着眼前最好的方向前进。具体选择方法是: 
action=find(Q(S,A)==max(Q(S,A)))action=find(Q(S,A)==max(Q(S,A))) 
2. ϵgreedyϵ−greedy算法 
对于贪婪算法,我们能想象到一点,如果每次都按着最好的方向前进,那也只能更新该方向的Q,即过度的利用过去的经验,没有对未知环境的探索,这样肯定是不够好的,所以这个ϵgreedyϵ−greedy算法就是每次以 ϵϵ的概率进行探索(随机选择一个方向),以1ϵ1−ϵ的概率进行利用(选择最好的方向)。

 
  1. actionSet = find(Q == max(Q));
  2. action = actionSet(1); %处理冲突,如果最大的q值相同,会导致action返回一个向量,导致switch错误
  3. tmp = rand(1);
  4. if tmp < e
  5. tmp2 = randi(4);
  6. while(tmp2 == action)
  7. tmp2 = randi(4);
  8. end
  9. action = tmp2;
  10. end

#这是matlab代码orz,比较混乱莫介意,意会吧 
3. softmax算法 
可以发现,ϵgreedyϵ−greedy算法在一开始固定了进行探索和利用的概率,事实上,我们可以想到,一开始应当进行大量的探索,随着探索的继续,而应该逐渐增加利用的概率。也就是说,ϵϵ的值应该与max(Q)max(Q)有关,于是,产生了softmax算法。 
他基于Boltzman分布 
P(k)=eQ(k)τi=1KeQ(i)τP(k)=eQ(k)τ∑i=1KeQ(i)τ 
ττ看作温度,当温度较小时,倾向于利用;当温度较高时,倾向于探索。 
代码中我们使Boltzman系数线性下降,直至设定的最小值。

 
  1. if (Boltzmann > 0.3)
  2. Boltzmann = Boltzmann - 0.999/iteration;
  3. else
  4. Boltzmann = 0.3;
  5. end

2. Q值更新公式

可以看到,前面伪代码里Q值更新的公式是: 
Q(S,A)(1α)Q(S,A)+α[R+γmaxQ(S,a)]Q(S,A)←(1−α)∗Q(S,A)+α∗[R+γ∗maxQ(S′,a)] 
下面解释一下里面两个参数: 
对于α,他代表我们学习的速度,如果α为1,则是完全学习,舍弃现有的值。 
对于γ,代表折扣因子,γ越大的时候,maxQ(S’,a)起到的作用就越大,那么他是什么呢? 
max_aQ(S’, a)指的便是记忆中的利益,即下一个状态中Q的最大值。想像一下如果下一步可以走到终点,他就会有一个很大的Q值,这个很大的Q可以帮助我们呢提前走到这个方向上。γ越大,越重视经验中的利益;γ越小,越重视眼前的利益。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值