强化学习入门

时间:2023-01-22 10:19:21
  1. 概念
    强化学习简单来说像训练大猩猩,我们告诉它哪个行为有奖励,他在多次做出行为的时候就会知道反馈,哪个好,哪个不好,于是久而久之就会选择好的行为。
    标准的定义是:如果Agent的某个行为策略导致环境正的奖赏(强化信号),那么Agent以后产生这个行为策略的趋势便会加强。Agent的目标是在每个离散状态发现最优策略以使期望的折扣奖赏和最大
    重要的是 agent,Action,environment

  2. 数学知识
    大致的意思其实就是,当前的最优策略,根据之前采取的Action返回回来的reward和observation来选择一个概率最大的行为。状态价值函数是对此状态下后续获得的回报的期望,动作价值函数是agent选择了这个状态获得未来回报的期望。
    南大俞扬博士 强化学习

    知乎介绍

  3. 基本算法
    我接触了Qlearning算法(off_policy)和Sarsa算法(On_policy),Qlearning是采取了Action后,根据environment返回的情况跟新Q表(评价某状态下的Action的优劣),状态从S更新为S_,再根据Q表选择下一次的行为(相当于这里的行为其实是不定的),but,Sarsa是采取了Action后,环境反馈学习后,S与action均更新为下一步(相当于这里的Action是在环境反馈学习前已经定了)
    强化学习入门

    sarsa只有微微不同, 初始化的时候预设一个Action,在最后的更新的时候,Action = Action_
    ![Sarsa算法](http://img.blog.csdn.net/20170813215101872?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzI2NzM0NTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
  4. 主要函数
def update():
for episode in range(100):
# init observation
observation = env.reset()

while True:
# update env
env.render()

# choose action based on observation
action = RL.choose_action(str(observation))

# RL take action and get next observation and reward
observation_, reward, done = env.step(action)

# RL learn from this transition
RL.learn(str(observation), action, reward, str(observation_))

# swap observation
observation = observation_

# break while loop when end of this episode
if done:
break

# end of game
print('game over')
env.destroy()

Qlearning的学习过程

def learn(self, s, a, r, s_):
self.check_state_exist(s_)
q_predict = self.q_table.ix[s, a]
if s_ != 'terminal':
q_target = r + self.gamma * self.q_table.ix[s_, :].max() # next state is not terminal
else:
q_target = r # next state is terminal
self.q_table.ix[s, a] += self.lr * (q_target - q_predict) # update

Sarsa的学习过程

def learn(self,s,a,r,s_,a_):
self.check_state_exist(s_)
q_predicte = self.q_table.ix[s,a]
if s_ != 'terminal':
#q_target = r + self.gamma * self.q_table.ix[s_, :].max()
q_target = r + self.gamma * self.q_table.ix[s_,a_]
else:
q_target = r
self.q_table.ix[s,a] = self.lr * (q_target - q_predicte)
  1. 感悟
    感觉强化学习还是主要依据的反馈feedback与概率进行选择,Qlearning的选择是根据环境的反馈后,选择概率较大的(也有一定的概率选其他选项,看参数),Sarsa是直接根据下一个state直接选好了action再学习。但是我想这俩着的差别在哪呢?Qlearning的Action选择是更快的受到环境的影响,它的选择会更广,多次尝试,稍慢。Sarsa是稍微谨慎的选择上一步的Action执行。