之前纠结了很久 Model-based 与 Model-free 。突然想出来的一个点子,觉得蛮有意思、蛮直观的,便写下来,希望能帮到和我一样的初学者。

我说的可能有错误,请以娱乐+批判性眼光阅读此文,有问题欢迎 私信/邮箱 来 指正/交流:PiperLiu@qq.com。

小红同学比较…嗯,风流。就是经常更换男朋友。

我朋友最近不知哪根弦不对劲,特别八卦。他特别特别想“预测”出小红的下任男友是谁。于是他找我来帮忙。

“这么办吧,”我说,“不如我们用强化学习的思想解决这个问题?”

“怎么讲?”

我便一本正经地胡说八道起来——

我们首先做五点假设:

  • 小红选哪个男票只与其选择当时的状态(心情、心智、性格本身)有关;
  • 小红的性格、心智、选择原则一直没怎么发生过变化;
  • 小红每次都会尽力去选择其认为的,会带来最好的结果的那个;
  • 小红分手后会根据心情立刻去找下一个男朋友;
  • 小红每次“分手”后,都会发朋友圈,通过朋友圈文案,可以看出小红对这个男友的满意程度,也就是这个男友实际上到底处的值不值。

因此,我们可以根据“历史数据”,得到一个个(状态-动作-收益-下一个状态-下一个动作)元组,从而可以根据小红的状态(心情)预测出其动作(选择哪个男朋友)。如下表。

元组元素 状态 动作 收益与后续状态
解释 小红当前心情 小红在该心情下选了哪个男朋友 与这个男友分手后,发的朋友圈内容
数据 1 小红不高兴 选了个很温柔的男友 分手后朋友圈很怀念(收益:+5),小红很尴尬
数据 2 小红很尴尬 选了个很暴躁的男友 分手后朋友圈疯狂吐槽(收益:-5),小红很尴尬
数据 3 小红很尴尬 选了个很体贴的男友 分手后朋友圈有点怀念(收益:+1),小红很平静
数据 4 小红很平静 选了个不爱说话的男友 分手后朋友圈较怀念(收益:+3),小红很平静
新数据 小红很开心 请你预测小红将找个什么样的男朋友? ???

数据抽象好了,我们就可以用 Sarsa 的思想来解决。

所谓 Sarsa 就是我们运用了 S A R S A 元素的意思。

我们通过已有的、或者测试得到的在线数据,来估计小红在各个状态下选择各个动作的“价值”,就可以估计出其会选谁当自己男朋友了。

心情(StS_tSt​) 选择(AtA_tAt​) 价值Q(St,At)Q(S_t, A_t)Q(St​,At​)
不高兴 选择温柔的 +10
不高兴 选择暴躁的 -10
不高兴 选择体贴的 +15
不高兴
不高兴 选择不爱说话的 -5

如果有了上面这张表,我们就知道小红在不高兴的心情下,最可能选择谁了。或者说,知道了选谁是对小红最好的。

我们的数据就是用来得到上面这张表的。更新公式如下(Sutton’s Reinforcement Learning - An Introduction 2018, P129, 6.7):

Q(St,At)←Q(St,At)+α[Rt+1+γQ(St+1,At+1)−Q(St,At)]Q(S_t,A_t) \leftarrow Q(S_t,A_t) + \alpha [ R_{t+1} + \gamma Q(S_{t+1}, A_{t+1}) - Q(S_t,A_t)]Q(St​,At​)←Q(St​,At​)+α[Rt+1​+γQ(St+1​,At+1​)−Q(St​,At​)]

“小红有过多少男朋友来着?”我问朋友。

“200多个吧。”

嗯…不多不少,我们应该更进一步:用 基于模型方法 (Model-based)还是 免模型方法(Model-free )?

啥是基于模型的方法?

基于模型,就是不单单把数据用来更新公式,还用来建模。

比如,上面提到了,数据是被放在公式Q(St,At)←f(St,At,Rt,St+1,At+1)]Q(S_t,A_t) \leftarrow f(S_t,A_t,R_t,S_{t+1},A_{t+1})]Q(St​,At​)←f(St​,At​,Rt​,St+1​,At+1​)]里面更新的。但除此之外,我们还可以拿这些数据对小红这个人进行建模:

  • 通过小红的行为,判断小红这个人的心智、性格、选择男朋友的原则(前面假设中提到了,小红的心智、性格、选择原则是不变化的);
  • 这样,除了小红产生的真实的200多个数据,我们还可以自己“推演”出一些虚拟数据(根据对小红心智、性格、选择男朋友的原则的假设,模拟小红接下来该选谁当男朋友)。

这就是所谓的 基于模型方法(Model-based)。

基于模型方法有好有坏,好处是:

  • 更充分地利用数据,有些数据对于 Q(St,At)Q(S_t,A_t)Q(St​,At​) 的更新是没什么用的,但对于判断小红是个什么样人有用(对于建模有用);
  • 基于模型,我们再产生一些数据,喂给 Q(St,At)Q(S_t,A_t)Q(St​,At​) ,这样,那些本来没什么用的数据也能间接地发挥价值;
  • “基于模型的方法则在一些控制问题中,相比于免模型方法,通常有 10^2 级的采样率提升。”[1]

但问题是:

  • 模型可能有偏差,则产生的数据也是不准的,更加误导了 Q(St,At)Q(S_t,A_t)Q(St​,At​) ;
  • 这个问题本身难以建模。

免模型方法(Model-free )则是不建模,只更新Q(St,At)Q(S_t,A_t)Q(St​,At​)。


说罢,我们就开心地去给小红的数据打标签了。

跑模型的时候,我问我朋友,这么关心小红,难道你也跟大家一样喜欢他吗?

朋友大方承认了,还问我:“你呢?”

我跟这位朋友向来都是坦诚相待,我的回答在文章末尾。


故事还没完,我们先聊点别的发散一下。

免模型方法很好理解,基于模型则有点抽象了。我们来看一个经典的基于模型方法:Dyna。

其迭代过程如下(Sutton’s Reinforcement Learning - An Introduction 2018, P164):

可以看到,每获得一个数据,其都会进行 n 次自我模拟(基于自己的模型,产生 n 个仿真出来的数据)。

Talk is cheap, show me the codes.

案例的代码可以阅读我在这章的笔记:

https://github.com/PiperLiu/Reinforcement-Learning-practice-zh/blob/master/practice/07-01-Maze-Problem-with-DynaQ-and-Priority.ipynb

代码使用的是 Shangtong Zhang 版的 python 解决方案。他的代码很优美,并且不晦涩,我对其进行了一些中文标注:

欢迎交流。


在故事中,我尽量把案例描绘成一个简单的、同轨策略的、马尔科夫过程。

解释一下我在故事中做的假设:

  • 小红选哪个男票只与其选择当时的状态(心情、心智、性格本身)有关;(马尔科夫过程)
  • 小红的性格、心智、选择原则一直没怎么发生过变化;(环境是稳定的,建模有其合理性)
  • 小红每次都会尽力去选择其认为的,会带来最好的结果的那个;(尽管我们不直接控制小红,但小红自己本身就在寻找最优策略,因此看作同轨策略控制)
  • 小红分手后会根据心情立刻去找下一个男朋友;(状态-动作是连续的)
  • 小红每次“分手”后,都会发朋友圈,通过朋友圈文案,可以看出小红对这个男友的满意程度,也就是这个男友实际上到底处的值不值。(价值函数的依据)

最后贴一段昨天读的文章[1]中提到的两段话,更好地理解基于模型的方法(Model-based)与免模型的方法(Model-free):

RL 算法可以分为基于模型的方法(Model-based)与免模型的方法(Model-free)。前者主要发展自最优控制领域。通常先通过高斯过程(GP)或贝叶斯网络(BN)等工具针对具体问题建立模型,然后再通过机器学习的方法或最优控制的方法,如模型预测控制(MPC)、线性二次调节器(LQR)、线性二次高斯(LQG)、迭代学习控制(ICL)等进行求解。而后者更多地发展自机器学习领域,属于数据驱动的方法。算法通过大量采样,估计代理的状态、动作的值函数或回报函数,从而优化动作策略。

基于模型的方法一般先从数据中学习模型,然后基于学到的模型对策略进行优化。学习模型的过程和控制论中的系统参数辨识类似。因为模型的存在,基于模型的方法可以充分利用每一个样本来逼近模型,数据利用率极大提高。基于模型的方法则在一些控制问题中,相比于免模型方法,通常有 10^2 级的采样率提升。此外,学到的模型往往对环境的变化鲁棒, 当遇到新环境时,算法可以依靠已学到的模型做推理,具有很好的泛化性能。


回来讲故事,我是怎么回答我朋友的呢?

我说,我不喜欢。毕竟,我对男的不感兴趣。

References:
[1] 83篇文献-万字总结 || 强化学习之路 https://mp.weixin.qq.com/s/_OS2q7-9Y7HcsoSXx-YBIQ
[2] Sutton R S, Barto A G. Reinforcement learning: An introduction[M]. MIT press, 2018.

公众号:Piper蛋窝

用“小红的下任男友是谁”通俗解释强化学习中的 基于模型方法 与 免模型方法相关推荐

  1. [白话解析] 通俗解析集成学习之bagging,boosting 随机森林

    [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林 0x00 摘要 本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来 ...

  2. 循环神经网络(RNN)原理通俗解释

    循环神经网络(RNN)原理通俗解释 1.RNN怎么来的? 2.RNN的网络结构及原理 3.RNN的改进1:双向RNN 4.RNN的改进2:深层双向RNN 4.1 Pyramidal RNN 5.RNN ...

  3. 正则化的通俗解释_干货|深度学习中的正则化技术概述(附Python+keras实现代码)...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 介绍 数据科学研究者们最常遇见的问题之一就是怎样避免过拟合.你也许在训练模型的时候也遇 ...

  4. 协方差、相关系数---通俗解释

    一.协方差的意义 学过概率统计的孩子都知道,统计里最基本的概念就是样本的均值,方差,或者再加个标准差.首先我们给你一个含有n个样本的集合,依次给出这些概念的公式描述,这些高中学过数学的孩子都应该知道吧 ...

  5. Fleury (弗罗莱) 算法通俗解释

    Fleury (弗罗莱) 算法通俗解释 1.定义 2.举例说明 图2为连通图G,现利用Fleury算法求它的欧拉通路.(注意区分:欧拉通路.欧拉回路) 其中一种欧拉通路如下:4 5 8 7 6 8 9 ...

  6. 通俗理解决策树算法中信息增益的

    转载自   通俗理解决策树算法中信息增益的 通俗理解决策树算法中的信息增益 在决策树算法的学习过程中,信息增益是特征选择的一个重要指标,它定义为一个特征能够为分类系统带来多少信息,带来的信息越多,说明 ...

  7. 依赖注入通俗解释_我如何向团队解释依赖注入

    依赖注入通俗解释 最近,我们公司开始开发一个新的基于Java的Web应用程序,经过一些评估过程,我们决定使用Spring. 但是许多团队成员并不了解Spring和Dependency Injectio ...

  8. 关于性能测试的通俗解释

    关于性能测试的通俗解释: http://www.docin.com/p-645879730.html 转载于:https://www.cnblogs.com/preftest/archive/2013 ...

  9. Wasserstein metric的通俗解释

    Wasserstein metric的通俗解释 ​关注他 166 人赞同了该文章 本文收录在无痛的机器学习第二季目录. Wasserstein GAN可以算是GAN界的一大突破了,有关它的介绍和使用心 ...

最新文章

  1. ubuntu 18.04.4 安装 bazel
  2. DJango操作MySQL数据库
  3. EasyX识别不到VC++6.0
  4. 数学建模——智能优化之粒子群模型详解Python代码
  5. php网站搭建致命错误203终止,PHP致命错误:无法重新分配$this
  6. c#和python更适合爬虫_python在爬虫方面有哪些优势呢?
  7. JS函数表达的几种写法
  8. 州的先生 python界面 代码完整版(注释)
  9. JavaScript数组操作 [Z]
  10. 插入模板_巧用Focusky模板制作精美微课
  11. JavaScript基础流程控制(3)
  12. 计算机组成原理(白中英) 第六章 课后题答案
  13. 目标追踪小任务(基于SIFT,LK光流,ceres)
  14. 大数据用户画像方法与实践(干货 转帖)
  15. django获取cleaned_data属性失败
  16. jQuery事件绑定和解绑
  17. 马云的创业故事及他人生中的摆渡人-微信的兴起和支付宝的至暗时刻(十)
  18. EasyX 窗口如何最大化,以及拖拽调整大小
  19. 智慧城市同城V4 v1.7.1
  20. 我28岁开始做淘宝,2年赚够100万:赚钱,真的不能靠拼命!!

热门文章

  1. 验证码生成php代码,一个php验证码生成类代码
  2. Tomcat不能自动编译JSP文件问题的一种解决方法
  3. VS2017 启动调试出现 无法启动程序“http://localhost:15613” 操作在当前状态中是非法的。 同时附加进程也是错误的解决方法
  4. Tomcat8 安装后点击startup出现闪退的解决方法(转)
  5. 如何在javascript中解析带有两个小数位的浮点数?
  6. win11天气小组件如何开启 Windows11开启天气组件的设置方法
  7. win11菜单栏的推荐项目怎么取消 windows11取消推荐项目的设置方法
  8. activiti 流程事件触发trigger
  9. mysql json字符串_mysql如何截取一个json字符串?
  10. MTK 10A常用函数集锦