强化学习入门

  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是在环境反馈学习前已经定了)
    Qlearning算法

    sarsa只有微微不同, 初始化的时候预设一个Action,在最后的更新的时候,Action = Action_
    ![Sarsa算法](https://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执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值