模仿学习(Imitation Learning)入门

模仿学习(Imitation Learning)入门在游戏中,我们往往有一个计分板准确定义事情的好坏程度。但现实中,定义Reward有可能是非常困难的,并且人定的reward也有可能存在许多意想不到的缺陷。在没有reward的情况下,让AI跟环境互动的一个方法叫做Imitation-Learning。在没有reward的前提下,我们可以找人类进行示范,AI可以凭借这些示范以及跟环境的互动进行学习。这种模仿学习使得智能体自身不必从零学起,不必去尝试探索和收集众多的无用数据,能大大加快训练进程。这跟supervised-learning有类似之处,如果采用这种

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在游戏中,我们往往有一个计分板准确定义事情的好坏程度。但现实中,定义Reward有可能是非常困难的,并且人定的reward也有可能存在许多意想不到的缺陷。在没有reward的情况下,让AI跟环境互动的一个方法叫做Imitation-Learning。在没有reward的前提下,我们可以找人类进行示范,AI可以凭借这些示范以及跟环境的互动进行学习。这种模仿学习使得智能体自身不必从零学起,不必去尝试探索和收集众多的无用数据,能大大加快训练进程。

这跟supervised-learning有类似之处,如果采用这种做法,我们叫做Behavior-Cloning,也就是复制人类的行为。

但是这种监督学习有一个缺点,如果是智能体进入到一个以前从来没有见到过的状态,就会产生较大的误差,这种误差会一直累加,到最后没有办法进行正常的行为。因此我们需要让实际遇到的数据和训练数据的分布尽量保持一致。

DAgger

前期先让人类去操作policy,拿到足够多的数据以后做完全意义上的offline训练;如果offline训出来效果不好,把效果不好的场景再让人类操作一遍,对各个状态打上动作标签。然后新数据加旧数据一起再训练,直到效果变好为止,这就是DAgger。

在这里插入图片描述

通常第三步人来收集数据也是一个比较麻烦和漫长的过程,我们也可以使用其他算法来代替人类来打标签。

逆强化学习(Inverse Reinforcement Learning)

在强化学习中,我们给定环境(状态转移)和奖励函数,我们需要通过收集的数据来对自身的策略函数和值函数进行优化。在逆强化学习中,提供环境(状态转移),也提供策略函数或是示教数据,我们希望从这些数据中反推奖励函数。即给定状态和动作,建立模型输出对应奖励。在奖励函数建立好后,我们就能新训练一个智能体来模仿给定策略(示教数据)的行为。

GAIL(Generative Adversarial Imitation Learning)

在这里插入图片描述

在IRL领域有名的算法是GAIL,这种算法模仿了生成对抗网络GANs。把Actor当成Generator,把Reward Funciton当成Discriminator。
我们要训练一个策略网络去尽量拟合提供的示教数据,那么我们可以让需要训练的reward函数来进行评价,Reward函数通过输出评分来分辨哪个是示教数据的轨迹,哪个是自己生成的虚假轨迹;而策略网络负责生成虚假的轨迹,尽可能骗过Reward函数,让其难辨真假。两者是对抗关系,双方的Loss函数是对立的,两者在相互对抗中一起成长,最后训练出一个较好的reward函数和一个较好的策略网络。

模仿学习结合强化学习

模仿学习的特点:

  1. 用人工收集数据往往需要较大成本,而且数据量也不会很大,并且存在数据分布不一致的问题。
  2. 人也有很多办不到的策略,如果是非常复杂的控制(例如高达机器人,六旋翼飞行器),人是没办法胜任的。
  3. 训练稳定简单。
  4. 最多只能做到和示教数据一样好,无法超越。

强化学习的特点:

  1. 需要奖励函数。
  2. 需要足够的探索。
  3. 有可能存在的不能收敛问题。
  4. 可以做到超越人类的决策。

因此我们可以把两者结合起来,既有人类的经验,又有自己的探索和学习。我们的做法是进行预训练和微调。AlphaGo正是运用了这种框架。同样星际争霸2的AlphaStar同样也是这种训练框架,得到了超越人类的水平。

在这里插入图片描述

但在运用pretrain和finetune这种框架时我们通常会面临一个问题,就是在预训练过后进行强化学习的时候,我们的策略一开始采集到的数据很可能是非常糟糕的,这会直接摧毁策略网络,导致效果越来越差,训练没法进行。因此我们需要在策略中将一开始的示教数据保留下来,我们可以把示教的数据直接放入reply buffer中,这样可以让策略网络随时进行学习。


我们可以通过加入一个损失函数同时对loss进行优化:

在这里插入图片描述

应用

在这里插入图片描述

在这里插入图片描述

结论

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191864.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 文末彩蛋 | 这个 Request URL 长得好不一样

    文末彩蛋 | 这个 Request URL 长得好不一样有朋友拿到一个网站请求的链接问这要怎么解密?很明显这不是加密的数据,这是一张图片base64后的结果,第一次写爬虫朋友遇到这样的请求,可能需要琢磨一下这是什么东西。如…

    2022年10月19日
    4
  • matlab读取tif图像并显示_matlab关闭窗口

    matlab读取tif图像并显示_matlab关闭窗口语法:info=imfinfo(filename,fmt)%输入图像名,图像的格式info=imfinfo(filename)%输入图像名 示例程序:info=imfinfo(‘C:\test1.jpg’) %返回图像信息,注意:输入·必须字符串info.Width                        …

    2022年10月5日
    6
  • java教程安装_java 安装教程

    java教程安装_java 安装教程直接运行exe可执行程序,默认安装即可;备注:路径可以选其他盘符,不建议路径包含中文名及特殊符号。3、配置环境变量1)新建变量名:JAVA_HOME,变量值:C:\ProgramFiles\Java\jdk1.8.0_112)打开PATH,添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin3)新建变量名:CLASSPATH,变量值:.;%JAVA_HOME%…

    2022年7月8日
    29
  • python语言中的多行注释符是_Pyhton 单行、多行注释符号使用方法及规范「建议收藏」

    python语言中的多行注释符是_Pyhton 单行、多行注释符号使用方法及规范「建议收藏」python中的注释有多种,有单行注释,多行注释,批量注释,中文注释也是常用的。python注释也有自己的规范,在文章中会介绍到。注释可以起到一个备注的作用,团队合作的时候,个人编写的代码经常会被多人调用,为了让别人能更容易理解代码的通途,使用注释是非常有效的。# 在学习python的朋友们,强烈推荐加入PythonQQ群。一、python单行注释符号(#)井号(#)常被用作单行注释符号,在代码…

    2025年5月24日
    2
  • 20213D激活码_通用破解码[通俗易懂]

    20213D激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    206
  • sklearn库的使用_导入turtle库的方法

    sklearn库的使用_导入turtle库的方法Sklearn库是基于Python的第三方库,它包括机器学习开发的各个方面。机器学习的开发基本分为六个步骤,1)获取数据,2)数据处理,3)特征工程,4)机器学习的算法训练(设计模型),5)模型评估,6)应用。机器学习的算法一般分为两种:一种既有目标值又有特征值的算法称之为监督学习,另一种只有特征值的算法称之为无监督学习。而监督学习还可以继续细分为分类算法和回归算法。1)获取数据⑤Sklearn中获取数据集使用的包为Sklearn.datasets,之后可以接load_*和fetch_*从Skle

    2022年10月7日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号