这篇文章是个人用来水观点的,用不严谨的语言讨论两件事情,由于严格证明太长,数学都采用 hand-waving 方式的证明,大家意会思路便可,要讨论如下两件事情:

  1. 文本的生成对抗模型,下面简称文本 GAN,搞机器学习的人都熟悉生成对抗模型 (GAN)。但是目前成功的只是图片这种连续系统,离散系统比如 NLP 问题还是一个没有好解决方案的空白领域。
  2. 逆增强学习 (IRL),这个同文本 GAN 放到一起大家就很奇怪了,其实这里面有很长的历史渊源,有心人学习逆增强学习的历史,尤其十几年前的一套,就能知道现在 GAN 的研究进展,有意义的理论突破 (WGAN,和近来的损失敏感GAN,其它发展我相信几年后就消失)无一例外地神似逆增强学习里面的某一套。尤其大家知道 Andrew Ng 和 open AI 的大佬 Pieter Abbeel 发展的学徒逆增强学习 (Apprenticeship Learningai.stanford.edu/~ang/pa) ,其实就是神似 WGAN 的浅层算法。而逆增强学习最原始的 max margin 下的算法,居然同损失敏感 GAN 观点非常类似。可惜当年搞逆增强学习的人不讨论概率问题,清一色讨论收益增强,和收益寻找。而且受到线性规划和对偶那一套的强烈影响 (SVM 的思想祸害?),当时的逆增强学习都是在线性模型下完成,导致很多端对端问题解决都是跳山羊,踢皮球这些简单问题。

这篇文章主要讨论几个疑惑:

  1. 如何用逆增强学习解决文本 GAN,尤其是深度逆增强学习。
  2. 逆增强学习和语法级别的打分 (也即语法级别的收益函数)。
  3. 最重要的一点,有没有必要对文本生成做 GAN。

### 如何用逆增强学习解决文本生成 ###

生成文本能同增强学习联系起来,很大原因在于,我们假设我们人类说话过程等价一个增强学习学习过程 (注意这个是假设)。由于文本生成过程的收益函数是很模糊的东西,所以还需要逆增强学习获得收益,才进一步用增强学习推进。整个过程全都端起来就是一种 imitation learning,形象来说就是认为专家说的话是对的,那么一个牙牙学语的小孩模仿专家说话,模仿过程就是一个先猜大人为何要这样说,获得对应语境下的收益函数 (逆向增强学习),然后有样学样地说 (正向增强学习),比如人死了需要说节哀,因为说恭喜就会被暴打一顿。

大家看到上面所说的模仿学习,应该能够类比出一个 two player 的游戏:假设 A 是专家,B 是菜鸟,我们引进偏心裁判 r,裁判总是给专家打高分,菜鸟总是让裁判看不出他和专家的区别。我们不考虑数学,感性猜一下,这样玩下去的结果是啥?对的,菜鸟升级为专家,然后裁判 r 升级成专家肚子里面的蛔虫,专家啥心思他都能想得到,不然他没法区分专家和菜鸟。这样说完,大家是不是觉得这就是 ”干“ (GAN) 呢?整个模仿学习同 GAN 就这样联系了起来。

稍微写的数学一点,假设专家 A 根据某种祖传策略 \pi_E做了一连串动作 (比如某语境下说了一句话),裁判对于每个动作 (字词) 都打了一个分数,于是有了一连串的分数 r_0, r_1, r_2, .... ,专家总的得分就应该是 J_E = r_0 + r_1 + r_2 + r_3 + ...,同理,菜鸟根据自己的模仿策略 \pi搞出的分数是J = r_0 + r_1 + r_2 + r_3 + ...。这里面的 J 都对应于增强学习的长期收益,显然它应该是策略\pi 和裁判 r 的函数 J[\pi, r]。那么裁判偏心就是要最大化专家和菜鸟的差距,菜鸟目的就是最小化专家的差距,数学如下:

咋看起来,如果上面收敛结果是零的话,专家菜鸟合体了。看起来好像是对的,其实数学上是不 work 的。两个原因:

  1. 首先,不给裁判加以限制的话,r 可以优化成无穷,大 bug。
  2. 另外,数学上如何保证你的菜鸟策略就能收敛到专家策略,或者说你如何保证收敛到零。

解决第一个问题就是给专家加上限制,这个限制应该形象理解为,任意两个动作,哪怕差距再微小,裁判再偏心,都不应该将这个差距打成无穷大的分数,分数应该有一个上界,数学上就是Lipschitz限制。不然专家同菜鸟一个微小的动作差异都被放大到无穷,菜鸟能够欺骗裁判的唯一路径,只能是从专家动作库里面查表得到的,毫无泛化可言。这样 WGAN 首先起了作用。

解决第二个问题需要 minmax 定理:\min_{y} \max_{x} f(x, y) \geq \max_{y} \min_{x} f(x, y),等号成立要求 f(x,y)是 x 和 y 的凸函数和凹函数。放到收益当中,化简一下得到:

注意到上面第二项一定是小于零的数,我们得到一个矛盾的不等式:

要解决这个矛盾,上面的不等式必须要求J[\pi, r] 是策略和收益的凸函数和凹函数,也即交换 min 和 max 后,等号必须满足:

这样一来,菜鸟分数才能单调逼近专家分数,进而菜鸟策略才能升级成为专家策略。

首先,J 是收益 r 的线性函数,没问题。然而,J 是策略的凸函数吗?很可惜,不是,是一个非常复杂的函数。。。这样岂不是完了。别急,我们可以对策略加约束,比如最大熵约束(aaai.org/Papers/AAAI/20):

神奇的是,一个小 trick 就成就大业了,J* 同时是策略和收益的凸函数和凹函数,(严格来说,数学上是不对的,但是转换到密度泛函下面,是可以交换 min 和 max 过程,数学严格证明可以看这篇文章 arxiv.org/pdf/1606.0347 )。

计算专家分数J^*[\pi_E, r]非常容易,带入专家训练数据求平均就是。真正的难题是,如何计算菜鸟分数 J^*[\pi, r],一般是通过蒙特卡洛的方法采样估算,也就是让菜鸟生成一段动作后才评估,接着求 min 策略的那一步用的是 policy gradient 的办法。大家知道计算 policy gradient 多费劲吗?现在一堆顶会文章都在改进蒙特卡洛下的 policy gradient 的种种问题 (方差大,基准不好定,效率太差等问题)。而且注意到,我们收益函数还是不断变化的东西,采样要多费劲才能跟得上你收益变动的速度?这个难度,基本让第一次搞这个的人得不到任何好果子吃,me too!

然而,需要这么费劲吗?完全没必要走蒙特卡洛路线。我们做一个bellman 替换: r = Q - \gamma V_{\pi} ,由于 r 有Lipschitz限制,故此 Q 也要有Lipschitz限制,我们假设 Q 的无限建模能力能够逼近任意给定的 r, 优化 Q 就是优化 r 。于是根据各种增强学习的结论,得到:J^*[\pi, r] = Q + \lambda H[\pi]。有趣的是,做了替换以后,可以证明冯诺依曼 minmax 定理仍然可以用,我们只用优化 :

更加有趣的是,如果对策略的限制是某种形式的熵, min 策略这一步可以解析计算出来,不同的熵定义会有不同结果!最终等效过程如下: Z(Q)是个 Q 的某种复杂函数,于是整个基于 WGAN 的零和博弈算法只用跑一个 deterministic 的最大化,进一步来说,Z(Q)函数在某种近似下就是我们通常用的基于最大似然猜下一个词的算法。更有趣的是,训练好的 Q 就是增强学习里面的长期收益函数,而 r = Q - \gamma V_{\pi} 就是我们要找的收益函数。所以,生成文本我们直接用 Q 去推送下一个动作 (或者字词) 便可。

我们做一个测试,我们生成一段 alice 梦游仙境的短文,输入种子是:alice lying on the bank, with her head in the lap of her sister, who was gently brushing away s

零和博弈的逆增强学习:alice lying on the bank, with her head in the lap of her sister, who was gently brushing away so more. than she had offend the sharp chinsing, and was not a moment to think. about stopping herself before she noticed the. order of rearing at once of the caternile rast to angring into its neck, and was delighted to find that her. neck would bend about easily in any direction.'. . 'tell it as he spoke.'. . 'i can't think . little girl or a sat up and growing lass,. are ,ook up and called of the goon. and the

传统的 lstm 办法:alice lying on the bank, with her head in the lap of her sister, who was gently brushing away something better this time,. and we would be and lovely on it at all hurrow would be mereauer for having. cheat herself, and she went on again: to get through was quite. out of sight; and an old crab took the opportunity of saying to her. daught first of it, but she did not like to be rude, so she tried another question.. 'what sort of people live about it,' said the hatter. 'he wonder what. the mock turtl

上面都是在 char 级别的训练,对比一下,有没有感觉两者差不多。。。。不仅差不多,而且测试集的混淆度也差不多。。。两者都能生成有点意思的句子,lstm 下的:what sort of people live about it,' said the hatter。而逆增强学习下的:was delighted to find that her neck would bend about easily in any direction。

### 有没有必要给文本做 GAN ###

上面的结果有点让人沮丧,如果数学思路都完美正确的话,这里不得不讨论有没有必要跑文本 GAN,或者说用逆增强学习实现的文本 GAN 是不是真的能比传统办法生成的文本,感官上更加的好?

首先 GAN 的特色是避免概率建模,但这个对于离散系统优势不大,毕竟离散系统的概率建模很简单:神经网络 + softmax。一般觉得在离散系统做 GAN 唯一两点可能优势:第一是 embedding,第二是能否捕捉更加正确的特征。embedding 我并没有讨论过,尚不清楚效果。不过语言特征同图像特征非常不同,语言特征在 rnn 和 lstm 下一般是对前面一段序列做连续编码而成的,看起来应该连续量,实际上训练好后基本都是 -1,1的值,隐层空间的空洞非常多,基本等同离散,导致做基于 auto-encode 那种的 GAN 也不见得有啥辅助。

而前面的理论上给出进一步发现,可能文本 GAN 出来的等效结果同直接 lstm + softmax 最大似然得出的结果,不仅理论形式相差不大,结果可能也相差不大。这下就更加让人觉得文本 GAN 没啥卵用了。

### 语法级别的打分 ###

然而,我们是通过逆增强学习来实现 GAN 的,逆增强学习主要不是用来生成文本的,而是用来打分的。我们既然找到了文本的收益函数,那么是否可以用来给文本打分呢?尤其是写一句话,打个分数,看看这句语法层面的问题,风格层面的问题。我们用 ptb 数据库 (银行财务股票经纪相关 ) 做一个测试,用零和博弈的逆增强学习得到的基于字母级别的打分,然后给定一句话,将所有字母得分累加起来看总分数。原则上,语句错误越多,分数越低。下面给出非常有趣的展示,目前大家都在讨论房价,我也写一个同房价有关的句子 (妈蛋,知乎政治审核害得我要打***):

正常句子:the *** said that the house price has become a large burden in china,分数:1.07

错别字句子:the *** said that the house price has becpme a large burden in china,分数:0.85
错的离谱的句子:the *** said that the the the the the the the the there there one in,分数:0.71
时态错误:the *** said that the house price has became a large burden in china,分数:0.94
介词错误:the *** said that the house price has become a large burden on china,分数:1.0,看起来对介词敏感性不太高。。

形容词替换:
the *** said that the house price has become a big burden in china,分数:1.08
the *** said that the house price has become a small burden in china,分数:0.99 (电脑都认为放屁的话不值得高分)
the *** said that the house price has become a huge burden in china,分数:
1.09 (我不得不吐槽,电脑都觉得房价是个天大的负担)
名词替换:
the *** said that the house price has become a large burden in japan,分数:1.01
the *** said that the house price has become a large burden in beijing,分数:1.03

大家看到了吧,同义词替换基本不影响得分,文本的收益函数只同错误相关,这不就是我们希望逆增强学习得到的结果吗!!不过目前,只有训练数据很多的情况才能得到较好的收益,alice 梦游仙境得到的收益感觉就在梦游。。。赶紧多想想这个算法还能用来玩啥好玩的。。。。

全文总结一下:

  • 我觉得用传统的 GAN 思想做文本生成可能是一个大坑,谁进谁死,我都被坑了一个月了。
  • 我认为:逆增强学习给文本打分,然后做正向的增强学习生成更加靠谱。。。

完。。。细节留着发 paper 灌水。。。

零和博弈下的逆增强学习相关推荐

  1. 独家 | Michael I.Jordan:大数据时代下的安全实时决策堆栈与增强学习(视频+精华笔记)

    金秋九月,2017国际大数据产业技术创新高峰论坛暨大数据系统软件国家工程实验室第一次会议盛大开幕,大数据系统软件国家工程实验室作为大数据系统软件技术研发与工程化的国家级创新平台,将通过大数据系统软件技 ...

  2. 《强化学习周刊》第36期:DDA3C、因果推理干预、逆强化学习

    No.36 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 关于周刊 强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和 ...

  3. 深度增强学习(DRL)漫谈 - 信赖域(Trust Region)系方法

    一.背景 深度学习的兴起让增强学习这个古老的机器学习分支迎来一轮复兴.它们的结合领域-深度增强学习(Deep reinforcement learning, DRL)随着在一系列极具挑战的控制实验场景 ...

  4. [增强学习][Reinforcement Learning]学习笔记与回顾-2-马尔可夫决策过程MDP

    Markov Decision Processes 前言 本文主要是视频学习的总结与回顾,想要了解更多内容请看视频或者学习专业课程.这一节主要是说马尔可夫决策过程-Markov Decision Pr ...

  5. 增强学习or强化学习概述

    增强学习or强化学习概述 强化学习是一个非常与众不同的"巨兽".它的学习系统(在强化学习语境中,一般称作智能体)能够观察环境,做出选择,执行操作,并获得回报(reward),或者以 ...

  6. 冯·诺伊曼奖得主Jorge Nocedal:增强学习中零阶优化方法及其应用(附演讲视频和PPT)

    2020 北京智源大会 本文属于2020北京智源大会嘉宾演讲的整理报道系列.北京智源大会是北京智源人工智能研究院主办的年度国际性人工智能高端学术交流活动,以国际性.权威性.专业性和前瞻性的" ...

  7. 增强学习(一) ----- 基本概念

    机器学习算法大致可以分为三种: 1. 监督学习(如回归,分类) 2. 非监督学习(如聚类,降维) 3. 增强学习 什么是增强学习呢? 增强学习(reinforcementlearning, RL)又叫 ...

  8. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  9. 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)

    1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...

最新文章

  1. 公司又有人被开除了,这次真的是...
  2. Hadoop_27_MapReduce_运营商原始日志增强(自定义OutputFormat)
  3. qt toutf8函数_qt中的toUtf8, toLatin1, Local8bit, toUcs4(转)
  4. python如何输出多个星号_如何将 Python 的一个类方法变为多个方法?
  5. proc文件的简单读写
  6. Java 改变cmd颜色_9 个小技巧让你的 if else 看起来更优雅!
  7. jquery简洁遮罩插件
  8. Dcmtk在PACS开发中的应用(基础篇) 第一章 与影像设备互连 作者 冷家锋
  9. C++---map/multimap用法介绍
  10. Oct 12: Patch Set Update Released
  11. get------引用接口
  12. php socket 执行,PHP异步调用socket实现代码
  13. 163编辑器学习笔记
  14. 大陆地区OpenStack项目Core现状(截至2016年1月28日,转载自陈沙克日志)
  15. 脚本小子_Lua函数
  16. 从键盘输入一个不多于3位的正整数,要求:求出它是几位数;分别打印出每一位数字;按逆序打印出各位数字
  17. 使用Spark SQL读取Hive上的数据
  18. 中级JAVA程序员应该掌握的数据结构知识
  19. Mac安装brew(2020年踩过无数坑后亲测有效的方法)
  20. C#,JAVA人民币小写转大写

热门文章

  1. 漫画解析12星座程序员的症状
  2. html image的srcset属性
  3. 响应式图像_如何为响应图像使用HTML5“图片”,“ srcset”和“大小”
  4. 论文笔记:Hashtag Recommendation for Multimodal Microblog Using Co-Attention Network
  5. python函数怎么打_python ln函数怎么打
  6. 企业做等级保护是必需的吗?
  7. 针对淘宝反selenium的反反爬措施详讲1-----pyautogui
  8. 安全靠谱的商家补法玩法
  9. Web开发之【Ajax】【Bootsrtap】省市联动与无刷新分页
  10. 新型肺炎疫情自行隔离期间我们可以干的正事