2018年6月2日星期六

反向强化学习2——基本形式

本文收录在无痛的机器学习第二季目录

从最优策略求解回报

求解回报的目标函数

在上一节反向增强学习入门1——基本概念,我们介绍了反向强化学习的基本概念,也介绍了它和强化学习的区别。对于一个强化学习的问题,如果状态和行动空间已知,状态转移概率确定,对于强化学习来,它是要通过回报函数求出最优策略;而对于反向强化学习来说,则通过最优策略或最优策略的行动采样,求出回报函数。本节将介绍反向强化学习中最简单的问题:已知最优策略,求回报函数。

如果我们已知了状态和行动空间、状态转移概率和最优策略 ​ ,且状态和行动的空间都是离散的,那么我们该如何求解呢?读者初看这个问题,可能会觉得有点复杂。为了循序渐进地了解算法,我们首先会对问题做一定的限制,并给出解答,然后一步步地放开这些限制,看看求解方法该如何扩展。我们首先考虑表格式的策略与价值函数,这样每一个状态下的行动和表格中的一个值有关。根据最优策略的定义我们知道,最优策略​和其他策略​相比,对于每一个状态,其对应的价值函数都不弱于其他策略的价值函数。由此可以得到:

\pmb V_{\pi^*}(s) \geqslant \pmb V_{\pi}(s)

q_{\pi^*}(s,a) \geqslant q_{\pi}(s,a)

如果我们令S​为所有的状态集合,A​为所有的行动集合,那么对于任意的状态,我们可以得到:

\forall s \in \pmb S, q_{\pi^*}(s,\pi^*(s)) \geqslant q_{\pi}(s, \pi(s))

如果是看一步行动,我们知道最优策略的每一步行动都应该不弱于其他策略的行动,那么可以得到对于任意的状态,完全使用最优策略的价值,应该弱于"在当前时刻使用最优策略外的行动,此后使用最优策略进行决策"的价值。这个条件可以通过反证法得到,如果这一条件不能满足,那么实际上最优策略就不是最优了。上面的条件可以写作:

\forall s \in \pmb S,a \in \pmb A - \pi^*(s), \text{ } q_{\pi^*}(s,\pi^*(s)) \geqslant q_{\pi^*}(s, a)

我们可以利用Bellman公式将上面的不等式展开,可以得到:

\forall s \in \pmb S, a \in \pmb A - \pi^*(s), \text{ }\sum_{s'}\pmb P(s'|s,\pi^*(s)) \pmb V_{\pi^*}(s') \geqslant \sum_{s'}\pmb P(s'|s,a)\pmb V_{\pi^*}(s')

如果用列向量 \pmb P_{s,a} ​ 表示由 \pmb P(s'|s,\pi^*(s)) ​组成的向量,用列向量​ \pmb V 表示由 \pmb V_{\pi^*}(s') ​组成的向量,那么公式就可以变成:

\pmb P_{s,\pi^*(s)}\pmb V \geqslant \pmb P_{s,a}\pmb V

这个公式里面的价值函数V是未知的,但好在我们可以用Bellman公式进行求解:

\pmb V_{\pi^*}(s)=\sum_a \pmb P(a|s) \sum_{s'}\pmb P(s'|s,a)[\pmb R(s)+\gamma \pmb V_{\pi^*}(s')]

将这个公式转成矩阵和向量计算的形式,用 \pi 表示行动概率向量 \pmb P(a|s) ,就可以得到:

\pmb V=\pmb R+\pi \pmb P(\gamma \pmb V)

由于我们在考虑表格式策略的价值函数,所以策略是相对固定的,公式可以进一步化简为:

\pmb V=\pmb R+\pmb P_{:,\pi^*}(\gamma \pmb V)

当价值函数收敛时,公式中的两个价值向量是相等的,于是公式可以整理为关于价值向量的形式:

\pmb V=(\pmb I-\gamma \pmb P_{\pi^*})^{-1}\pmb R

把这个公式带回前面的不等式中,求得到了我们初步的目标函数:

\mathrm{max}(\pmb P_{s,\pi^*(s)} -\pmb P_{s,a})(\pmb I-\gamma \pmb P_{\pi^*})\pmb R

s.t. (\pmb P_{s,\pi^*(s)} -\pmb P_{s,a})(\pmb I-\gamma \pmb P_{\pi^*})\pmb R \geqslant 0

于是这个问题变成了一个线性规划问题,我们要找到合适的回报向量满足这个不等式。经过上面的推导,我们终于完成问题定义的第一步,通过最优策略的定义和Bellman公式,我们将其表达出来。

14.2.2 目标函数的约束

上面的目标函数虽然向我们清晰地阐述了求解的思路,但是由于这个目标只是一个不等式,对待求的回报向量来说,这个约束有点弱,因为我们显然可以找出很多种不同的回报函数组合可以满足这个不等式,其中还有一些是平凡解,例如全部为0回报函数,这样的解同样可以满足不等式,但是实际上它是没有意义的。于是我们需要思考如何增强问题的约束。

我们将为目标函数增强两个约束:1)限制回报的范围;2)只考虑最优策略和次优策略的差异。

首先是限制回报的范围。由于这是一个线性规划问题,回报向量可以在成比例扩大的同时满足约束条件,因此我们应该对回报数值的上界做一定的限制,于是就有了这样的约束:

|\pmb R| \leqslant \pmb R_{\mathrm{max}}

这种增加约束的方法在机器学习中普遍存在,这和L1、L2正则的功能比较相似,都是为了防止参数太大。由于这种方法在机器学习的很多算法上都得到了不错的效果,在这里的效果应该也不会差。

其次就是考虑最优策略的比较对象。在前面的目标不等式中,我们需要最优策略强于所有的策略,这个约束并没有错误。但是在实际中,如果我们以相同的权重考量其他策略和最优策略的差距,就显得不那么合理了。实际上最优策略和次优策略的价值差会显得更为重要,而最优策略和其他很差的策略的价值差并没有那么重要,所以实际上最优策略只要尽可能地比次优策略强就可以了,和其他的策略进行比较并不应该拥有很高的权重。

为了解释价值差异的权重问题,我们可以以一个棋类AI的表现为例。假设有两个策略,分别为A和B,它们分别和普通玩家和高级玩家进行对弈,最终的战绩如下表所示。

普通玩家高级玩家总得分A20020B224

这里的分数表示了两者的差距,分数为正表示AI最终胜利。可以看出,策略A获得了更高的分数,但是却和高级玩家打平;而策略B的总得分虽然不及策略A,但是它获得了两场胜利,这说明策略B与策略A相比,更像一个最优策略,即使它并不能从普通玩家手上获得太多的分数。

根据上面的分析,我们可以将目标函数改变为:

\mathrm{max}_R [\mathrm{min}_a\{(\pmb P_{s,\pi^*(s)} -\pmb P_{s,a})(\pmb I-\gamma \pmb P_{\pi^*})^{-1}\pmb R\}]

从公式中可以看出,我们先选出与最优策略差距最小的策略(内层的min运算),再通过求解Reward让最优策略与它的差距变大。这样Reward的求解就变得更明确了。

将两个约束加入原问题,此时完整的问题就变成了:

\mathrm{max}_R [\mathrm{min}_a\{(\pmb P_{s,\pi^*(s)} -\pmb P_{s,a})(\pmb I-\gamma \pmb P_{\pi^*})^{-1}\pmb R\} - \lambda|\pmb R|]

s.t.

-(\pmb P_{s,\pi^*(s)} -\pmb P_{s,a})(\pmb I-\gamma \pmb P_{\pi^*})\pmb R \leqslant 0

|\pmb R| \leqslant \pmb R_{\mathrm{max}}

这样我们就得到了这个问题的完整目标,下一节我们来看看这个问题的具体求解方式。

私货时间

《强化学习精要:核心算法与TensorFlow实现》(冯超)

深入浅出介绍强化学习框架概念与实践,欢迎了解!



via 无痛的机器学习 - 知乎专栏 https://ift.tt/2JaQSEe
RSS Feed

RSS4

IFTTT

Java的序列化特性将要退出历史舞台了;Node之父ry发布新项目deno;EOS为什么不被看好?- InfoQ每周精要539期

 中文站「每周精要」
感谢您订阅每周精要第 539 期,本期内容截止于2018-06-03。
技术新闻   TECH NEWS
MySQL 8支持文档存储,并带来性能和安全方面的改进
这个版本引入了许多改进,最受关注的可能是基于文档的存储,开发人员可以在同一个数据库中使用传统关系数据和"NoSQL"文档数据。
Android Jetpack带来WorkManager、Navigation等特性
Android Jetpack为Android应用程序带来了新的组件、工具和架构指南。新组件包括WorkManager、Navigation、Paging、Slices和Android KTX。
谷歌推出ML KIT,将机器学习带到Firebase平台
谷歌近日推出了ML KIT,一个与Firebase移动开发平台完全集成的机器学习模块,可用在iOS和Android平台上。
Amazon Aurora新增"回溯"特性,让DB集群可以回退到特定时间点
Amazon Aurora是AWS中托管的一个兼容MySQL和PostgreSQL的关系型数据库。该数据库新增了"回溯"特性。借助这个特性,开发人员可以撤销他们的错误操作,如删错了表。
亚马逊发布用于以太坊和Hyperledger Fabric的区块链模板
亚马逊最近宣布为以太坊和Hyperledger Fabric引入区块链模板。
使用混沌工程增强API的可恢复性
Gremlin团队在博客上给出了一种简单的混沌实验,可用做验证一个组织的API是否具有可恢复性的方法。
架构设计   ARCHITECTURE DESIGN
Java的序列化特性将要退出历史舞台了
序列化功能堪称诞生于1997年的一个"可怕错误"。估计至少有三分之一甚至是半数Java安全漏洞都与序列化机制有关。
Facebook开源其四层网络负载均衡器Katran
近日,Facebook开源了Katran,一个四层网络负载均衡器软件包。
Git爆远程代码执行漏洞,建议尽快升级
近日,微软Visual Studio团队项目经理Edward Thomson在其博客中对外披露,Git社区最近发现了一个严重漏洞,Git 子模块在解析时可能导致git clone --recursive执行任意命令。
运维 & DevOps   OPERATIONS & DEVOPS
Service Mesh是什么,常用工具有哪些?
很多人都在讨论微服务的下一站是不是 Service Mesh,那么 Service Mesh是什么,常用工具有哪些?
Docker?Kubernetes?容器生态圈现状如何?
Kubernetes在全方位落地上还有一定难度,Docker公司的热度已经在慢慢消退,VMware也在进军容器市场……目前容器生态圈和容器技术态势如何?Kubernetes发展良好的趋势下还面临什么问题?
有货移动端DevOps,自建APM系统
有货 App 团队在资源有限的情况下,自己动手借助多种数据工具,通过简洁的架构,为有货App开发一套多维实时的监控系统,从而更好地完成自己的工作,也给其他团队在自建APM的道路上提供一个参考,为移动端的DevOps 打开一些思路。
大前端   THE FRONT END
Node之父ry发布新项目deno:下一代Node
近日,Node 之父Ryan Dahl发布新的开源项目deno,从官方介绍来看,可以认为它是下一代Node,使用Go语言代替C++重新编写跨平台底层内核驱动,上层仍然使用V8引擎,最终提供一个安全的TypeScript运行时。
我们与Kotlin的故事:从尝试到放弃
我们尝试过Kotlin,但现在开始使用Java 10重写代码。
前端每周清单:React 16.4发布,一个程序员的成长之路
前端每周清单专注大前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点;分为新闻热点、开发教程、工程实践、深度阅读、开源项目、巅峰人生等栏目。
人工智能   ARTIFICIAL INTELLIGENCE
微软市值超越谷歌,43岁老将重回全球第三
纳德拉刷新一下,微软市值一年暴涨40%。
京东AI技术武器悉数亮相,并将全部对外开放!
京东的AI野心。
AI一周热闻:GDPR生效首日,谷歌FB面临天价罚款;李彦宏推出"简单搜索",承诺绝无广告
GDPR闹的人心惶惶,但AI圈还是热闹不减。
区块链   BLOCKCHAIN
专家解读 :EOS为什么不被看好?
双重安全漏洞、背离区块链共识、只是一个分布式计算。
传统银行IT如何落地区块链技术?| 架构师必备参考
区块链在银行系统落地实务。
微众银行张开翔:开源联盟链的挑战与应对
金融如何驾驭区块链?
技术大会   CONFERENCE
GTLC:速度与秩序:网易的业务创新与发展管理方法
网易,一家没有平台可以依靠,看似没有战略的企业,却能在二十一年中不断的在很多领域实现突破、追赶和超越,背后是否有一些方法和经验?
GMTC:谷歌亲儿子Flutter到底为何如此火?
Flutter被很多人号称为一款革命性的跨平台开发框架,他到底有哪些优势?又会给前端带来怎样的影响?来听听谷歌Flutter团队高级工程师怎么说。
ArchSummit:Facebook万亿级混合复杂时空数据的处理决策
随着越来越多的移动设备,物联网设备产生海量的时空数据如何有效存储、检索、实时的k-nearest查询、关联性排序?Facebook Location Infrastructure团队处理每天万亿级混合复杂操作的时空数据背后的多个设计决策,和架构选型内容的实践了解一下?
BCCon:区块链技术在食品溯源领域的应用实践
如何通过区块链技术,在农产品的生产、检测、流通、销售全流程中鉴定身份,并将信息全部记录到区块链中?如何展示每一件商品的真实生命轨迹?
QCon:技术人都应关注的20+技术话题
新技术层出不穷,盲目实践也遇到不少的坑,QCon上海2018,邀请你来与国内外一线技术人共同探讨,听听技术大牛的奇思妙想,也欢迎你有好的话题跟大家一起分享。
极客时间App   GEEK TIME APP
开发一款小游戏有哪些知识需要掌握?
前网易游戏架构师根据22年的开发经验,梳理了游戏开发的整体流程和必备知识点,深入浅出帮你轻松上手游戏开发!
如何有效入门人工智能?
【限时优惠】优惠价58元,6月9日上涨至68元。你将获得:6大人工智能必备数学基础,15个机器学习、深度学习核心知识点,11个人工神经网络概念及实例,4大人工智能应用场景。
如何零基础学Python?
【限时优惠】原价199元,优惠价99元。你将获得:一整套视频,让你系统性学会Python ,了解Python的整个生态。多年Python经验的大牛,用多种实战案例让你在最短时间学会Python。
活动推荐   POPULAR EVENTS
ArchSummit培训:当Facebook,百度,微众银行,余额宝的技术大咖们汇聚到了一起
7月8日-9日我们有幸邀请到了技术大咖们进行授课,内容将紧紧围绕大数据、深度学习、微服务等热点技术,系统性分享其中的实践经验。
GMTC培训:当前后端分离不得不被搬上你的工作日程,你该怎么办?
6月23日-24日我们邀请到了百度资深前端工程师,Lavas团队负责人彭星为大家现场解惑,带你一同探索大前端时代下,前后端如何更好更快的协同作战以及前后端分离的深层理论与实践。
AWS技术峰会中国站点燃整个夏天
云计算界的技术盛宴首站将登陆上海,九大分会场主要议程已新鲜出炉,让我们一起先睹为快,计划你的Summit不凡之旅吧!
精彩直击|腾讯云+未来焕启智能时代
5月23日,"以我所能,为你而+",由腾讯主办的2018"云+未来"峰会在广州隆重召开。本次大会以"焕启智能未来"为主题,海内外学术专家、行业大咖及技术大牛等齐聚一堂,共话"数字中国"与行业未来。
InfoQ中文站每周日针对会员发送每周内容精要邮件,
别人转发给你的邮件?现在注册获取您自己的 InfoQ每周精要邮件吧
InfoQ微博:@InfoQ
InfoQ微信:infoqchina
InfoQ手机客户端:极客时间

不许你歧视车道线,那也是路面的一部分 | 自动驾驶感知训练

水栗子 编译自 Medium 量子位 报道 | 公众号 QbitAI

感知,大概就是感受到周遭正在发生什么,的一种能力。这项技能对自动驾驶来说太重要了。

自动驾驶汽车依靠摄像头、激光雷达以及雷达等等传感器来感知周围的变化。

一位名叫凯尔 (Kyle Stewart-Frantz) 的大叔,准备了一份指南,鼓励大家在家训练自动驾驶系统的感知能力。

当然,这个手册并不是他出于爱好写出来的,是随着Lyft和Udacity联合发起的感知挑战赛 (Lyft Perception Challenge) ,而生的。

比赛考验的就是系统能不能准确地感受到,可以行驶的路面在哪里,周围的汽车在哪里。

挑战赛中,能够倚仗的所有数据,都来自车载的前向摄像头

摄像头不存在?

这里的"摄像头数据"并非真实摄像头记录的影像,而是一个名为CARLA模拟器生成的图景。

毕竟,自动驾驶汽车的软件开发大多是在模拟器中进行的,那里快速的原型设计和迭代,比在现实世界里使用真实硬件要高效得多。

那么,来看一下CARLA给的数据长什么样——

左边是模拟摄像头捕捉的画面,右边则是与之对应的、标记好的图像。

用这样的数据来训练算法,让AI能够在从未见过的新鲜图像里,判断出哪些像素对应的是道路,哪些部分对应的是其他车辆。

这就是挑战赛的目标。

车前盖太抢镜?

要完成比赛任务,自然会想到语义分割。用这种方式来训练神经网络,成熟后的AI便可以判断每个像素里包含的物体了。

第一步,是对标记好的图像做预处理。比如,因为设定是"车载前向摄像头"拍下的画面,每一幅图像都会出现车前盖,可是如果这样就把所有图像判定为"车",就不太好了。

所以要把显示车前盖的那些像素的值设为,或者贴上其他的"非车"标签。

第二步,车道标识道路的值是不一样的,但我们希望这些标识,可以被识别为路面的一部分

所以,要把车道标识和路面,贴上一样的标签。

用Python写出来,预处理功能就长这样——

 1 def preprocess_labels(label_image):  2     labels_new = np.zeros_like(label_image)  3     # Identify lane marking pixels (label is 6)  4     lane_marking_pixels = (label_image[:,:,0] == 6).nonzero()  5     # Set lane marking pixels to road (label is 7)  6     labels_new[lane_marking_pixels] = 7  7  8     # Identify all vehicle pixels  9     vehicle_pixels = (label_image[:,:,0] == 10).nonzero() 10     # Isolate vehicle pixels associated with the hood (y-position > 496) 11     hood_indices = (vehicle_pixels[0] >= 496).nonzero()[0] 12     hood_pixels = (vehicle_pixels[0][hood_indices], \ 13                    vehicle_pixels[1][hood_indices]) 14     # Set hood pixel labels to 0 15     labels_new[hood_pixels] = 0 16     # Return the preprocessed label image  17     return labels_new

预处理过后的结果,就是标记和之前的不太一样了。

准备活动做好了,神经网络的正式训练也就可以开始了。

谁是分类小公主?

那么,大叔选的是怎样的神经网络?

定制一个FCN-Alexnet或许是个不错的选项,它擅长把每个像素分到不同的类别里。

循着以下链接,可以找到这个模型的详细信息——

代码:https://github.com/shelhamer/fcn.berkeleyvision.org/tree/master/voc-fcn-alexnet论文:https://arxiv.org/pdf/1605.06211.pdf

大叔用一个随机梯度下降solver,把全部训练数据跑了10次 (10 epochs) ,基础学习率设的是0.0001

评估训练成果

拿训练好的神经网络去跑验证数据,凯尔得到了0.6685的F2值,以及0.9574的F0.5值 (前者更重视召回率,后者更重视准确率) 。系统每秒处理6.06幅图像。

当然,视频会比这些数字更加生动——

然后还想怎样?

大叔说,要让神经网络表现更好,将来会搜集更多数据,涉及更加丰富的路况。

另外,要进行一系列的数据增强,让数据和数据之间的差异更加明显。

关于神经网络的结构,也还有其他选择,比如为细粒度预测而生的FCN-8,值得尝试。

还有,可以引入时态数据 (光流) ,来减少推断需要的帧数,同时保持比较高的准确度。

模拟器不够真?

当然,只有模拟器也是不够的,自动驾驶系统终究要接受现实的考验。

面对真实摄像头传出的画面,系统的辨识结果并没有非常理想。不过在许多帧里面,神经网络都能够在一定程度上,辨认出道路和车辆。

真实世界和模拟器里的驾驶场景,还是不一样的。

如果模拟器生成的图像和现实更加接近的话,可能结果就会好一些了。

不难看到,在和模拟器设定更为接近的路况下,系统的表现还是很不错的。

如此看来,这只AI还是很有前途。只要把模拟器造得更贴近真实,神经网络应该就能得到更有效的训练。

这里提供一段代码,可以用来查看,算法跑出的结果到底怎么样——

 1 from moviepy.editor import VideoFileClip, ImageSequenceClip  2 import numpy as np  3 import scipy, argparse, sys, cv2, os  4  5 file = sys.argv[-1]  6  7 if file == 'demo.py':  8     print ("Error loading video")  9     quit 10 11 def your_pipeline(rgb_frame): 12 13     ## Your algorithm here to take rgb_frame and produce binary array outputs! 14 15     out = your_function(rgb_frame) 16 17     # Grab cars 18     car_binary_result = np.where(out==10,1,0).astype('uint8') 19     car_binary_result[496:,:] = 0 20     car_binary_result = car_binary_result * 255 21 22     # Grab road 23     road_lines = np.where((out==6),1,0).astype('uint8') 24     roads = np.where((out==7),1,0).astype('uint8') 25     road_binary_result = (road_lines | roads) * 255 26 27     overlay = np.zeros_like(rgb_frame) 28     overlay[:,:,0] = car_binary_result 29     overlay[:,:,1] = road_binary_result 30 31     final_frame = cv2.addWeighted(rgb_frame, 1, overlay, 0.3, 0, rgb_frame) 32 33     return final_frame 34 35 # Define pathname to save the output video 36 output = 'segmentation_output_test.mp4' 37 clip1 = VideoFileClip(file) 38 clip = clip1.fl_image(your_pipeline) 39 clip.write_videofile(output, audio=False)

用到的可视化数据在这里:https://s3-us-west-1.amazonaws.com/udacity-selfdrivingcar/Lyft_Challenge/videos/Videos.tar.gz

你也一起来吧?

当然,作为Lyft感知挑战赛的研发负责人,凯尔大叔这番苦口婆心的目的,还是吸引更多的小伙伴掺和进来。

道路安全,人人有责。大概就是这个意思,吧。

入门选手的各位,感受一下Udacity的免费课程:https://www.udacity.com/course/self-driving-car-engineer-nanodegree—nd013

注:有善良的中文字幕

以及语义分割的详细步骤:

https://medium.com/nanonets/how-to-do-image-segmentation-using-deep-learning-c673cc5862ef



via 量子位 - 知乎专栏 https://ift.tt/2JlsHWN
RSS Feed

RSS5

IFTTT

入职仅一年,套现5000多万后背刺马斯克搬走 Grok 核心代码库!-InfoQ 每周精要894期

「每周精要」 NO. 894 2025/09/06 头条 HEADLINE 入职仅一年,套现 5000 多万搬走 Grok 核心代码库! 业内专家:拥有菜谱不等于能做出同样的菜 精选 SELECTED AI 公司创始人现跑路迪拜! 80% 收入烧广告、假账骗投资人,微...