蘑菇书-第一章概述

1.强化学习与监督学习的区别 

监督学习

   做图像识别:标注的图片都是满足 独立同分布(建设样本空间中全体样本 服从一个未知分布,获得的每个样本 都是独立的从这个分布采样获得的。)。所以,输入的一大堆 标注 数据 是没有关联的。消除数据的相关性,使训练稳定。

   训练分类器时,会把  真实标签 给神经网络 ,当做真值。当网络作出一个 错误预测时,例如将车预测成飞机,会立即得到反馈 ,直接告诉他预测是错误的,这个错误  携程 一个 损失函数 loss function ,然后  反向传播  训练网络。

   会提供 正确 动作的 标签 ,反向传播 训练

强化学习

     agent 得到的观测值 不是独立同分布的,上一阵和下一帧 有非常强 的连续性,得到 的数据 是相关的时间序列数据 。数据都是有时间关联的。

     不会立即得到反馈 那个action  是正确或错误 ,只有当训练结束 才可以知道 reward ,奖励延迟。

    是 agent  探索和利用 的 过程。探索是试错,尝试新的action ,会得到不同的reward;利用 一试错 后 已知可以获取最大奖励的行为。

    对于动作 采样  ,直到一个回合 episode或者试验 trial (一场游戏)结束 ,对每个 action 进行 reward 。

MDP 和 POMDP

区别 在于 状态 state 和 观测 observation  

1.状态s state 是对环境environments的完整描述,观测o observation 是 对 状态 的部分描述。

2.Markov decision process(MDP): agent 能够 观察o 到 环境 的所有状态s:

用一个 5 元组描述: S表示状态空间,A为动作空间,T(s′∣s,a) 为状态转移概率,R 为奖励函数,γ 为折扣系数。

3.(Partially Observable Markov Decision Processes), POMDP:

当 agent 只能看到 部分 的观测o。假设智能体无法感知环境的状态 s,只能知道部分观测值 o。

用一个 7 元组描述: S表示状态空间,为隐变量,A为动作空间,T(s′∣s,a) 为状态转移概率,R 为奖励函数,Ω(o∣s,a) 为观测概率,O 为观测空间,γ 为折扣系数。

值学习 和 策略学习

1.value-based :显式的 学习 价值函数 ,隐式 学习 策略 。策略是从学到 的价值函数中 推算出来

    维护的是 价值表格 Q-table 或 价值函数 value function 。

    应用于  不连续的 、离散 的环境下。

2.policy -based :直接学习 policy 策略 ,不会去学习值函数。 直接给一个状态 ,输出 动作概率。

     动作策略 (在给定状态下采取何种动作)

      设定 的 策略 选择 连续的动作。

有模型 和 无模型

           在智能体执行动作前,是否能对下一步的状态和奖励进行预测,如果可以,就能够对环境进行建模,从而采用有模型学习。

1.model-based:

           一定程度上缓解训练数据匮乏的问题,智能体可以在虚拟世界(根据真实世界 经验 建立)中训练。限制了泛化性。

          有模型学习可以在虚拟世界中预测出所有将要发生的事,并采取对自己最有利的策略。

2.model-free:

         数据驱动型方法,需要大量的采样来估计状态、动作及奖励函数,从而优化动作策略。

        智能体只能一步一步地采取策略,等待真实环境的反馈。

二、代码实践

import gym
import numpy as np

class BespokeAgent:
    def __init__(self, env):
        pass

    def decide(self, observation):
        position, velocity = observation
        lb = min(-0.09*(position + 0.25) ** 2 + 0.03,
                 0.03 * (position + 0.9) ** 4 - 0.008)
        ub = -0.07 * (position + 0.38) ** 2 + 0.07
        if lb < velocity < ub:
            action = 2
        else:
            action = 0
        return action

    def learn(self, *args):
        pass


env = gym.make('MountainCar-v0')
agent = BespokeAgent(env)


def play_montecarlo(env, agent, render=False, train =False):
    episode_reward = 0
    observation = env.reset()
    while True:
        if render:
            env.render()
        action = agent.decide(observation)
        next_observation, reward, done, _ = env.step(action)
        episode_reward += reward
        if train:
            agent.learn(observation, action, reward, done)
        if done:
            break
        observation = next_observation

    return episode_reward

env.seed(0)
episode_reward =[play_montecarlo(env, agent, render=True) for _ in range(100)]
print('回合奖励 = {}'.format(np.mean(episode_reward)))
env.close()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值