前言:本系列将集中展示PaddlePaddle的开源项目,即PaddlePaddle研发团队在深度学习领域的前沿研究成果。首先展示DeepNav自动驾驶船项目,本次呈现背景以及支撑理论,后续将逐步呈现项目从设计到落地的全过程。文章素材来源于百度美国研究院王益老师的知乎专栏,希望能够给大家带来新启发。

自动驾驶船的诞生背景

DeepNav 是百度美国研究院最近开始的一个自动驾驶船的研究项目。和 Google、Baidu 的无人车技术以及很多远洋货轮的自动驾驶系统采用 rule-based 的知识库不同,DeepNav 意在探索用 deep imitation learning 来让船(和车)学习人类的驾驶技法,同时做一些人类划定的安全范围之内的探索 —— 如果在自主探索中,船和车发现自己面对窘境且无法自拔,会求助人类教练的指导。

DeepNav 目前还处在刚开始的阶段。我们开设这个专栏,是为了记录下我们的点滴足迹,一方面方便和行内专家交流,一方面也便于我们自己回顾过程、总结经验教训。

DeepNav 是一个开源项目。设计文档、硬件设计和规格、以及软件的源码都放在 DeepNav/DeepNav

(https://github.com/deepnav/deepnav)中。欢迎大家多提宝贵意见。

理论基础

深度学习

深度学习系统(包括 TenosrFlow、Caffe2、MxNet、PyTorch、PaddlePaddle 等)是为了方便深度学习者(人称 deep learners)们写人工智能程序的开发工具。要做好一个开发工具,得先了解客户的需求。而 deep learners 的需求和 deep learning 解决的问题密切相关。

深度学习发展到今天,解决了很多统计学多年来没能解决好的问题。每一类问题的解决,背后往往是一种深度学习技术的发明;而深度学习工具往往随着这些技术进化,以方便 deep learners 们使用这些技术来创作新的模型。到目前为止,一系列重要发明大致可用如表格所示

上表中,自主探索(reinforcement learning) 一栏中的工具(OpenAI 和 AlphaGo)已经不是一般大家理解中的深度学习系统了。而学习加探索(imitation learning) 更是没有广为接受的工具。这是因为自主探索 和学习加探索 不再有明显的“训练”(training)和“推演”(inference)的划分;而是在学习过程中,机器既要不断更新自己的知识(所谓的训练)也要利用现有的知识做尝试(所谓的推演)。

在无人车/船/飞机等应用中,这样复杂的计算则是

1.  和传感器以及人类教练实时结合、并且运行在嵌入式系统里(而不是服务器上)的;

2. 控制代码和机器学习代码交织。

PaddlePaddle 的发展方向,希望是面向未来的。那么先得弄明白这个问号所在的格子里的工具,应该解决什么样子的问题。这里需要了解 immitation learning,并同步了解reinforcement learning—— 这是大名鼎鼎的 AlphaGo 背后使用的技术。

自主探索(Reinforcement Learning)

自主探索要解决的问题是学习一个函数(人称策略函数)a=π(s);其中 s 表示当前状态,π 应该根据当前状态返回应该做的操作 a。

拿围棋举例:s 是当前棋局,有19x19个落子位置,每个位置可以有黑子、白子、或者无子三种状态。所以 π 要能处理 (19x19)³ 种状态。在每种状态下,π 返回的选择应该是在某个无子的位置落子。所谓的“学习”,就是把 π 表示为一个神经元网络时,估计其参数,从而确定 π 的函数形式。

我们可以很容易地写一个程序,来记录棋局。如果局面上已经没有可以落子的地方了,这个程序就数数双方谁的地盘大,从而判断输赢。这个程序就是围棋的模拟器。

有了模拟器,自主探索算法可以自己跟自己下棋 —— 如果一系列的决定导致某一方赢了(或者吃掉了对方一片地盘),那么这一系列的决定可能都是不错的选择;否则,则可能是下次应该避免的。这个过程的核心思想是“探索” —— 有了模拟器,机器可以尝试在任何地方落子 —— 最不济就是输一盘。通过利用超级计算机,AlphaGo 的探索超过了整个人类几千年来的探索!

在和人类棋手对弈的时候,AlphaGo 下了一招“臭棋”。所谓臭棋,就是人类曾经多次试着这么下,结果发现接下来“很容易输”,以至于师傅会告诫徒弟,甚至大家都会注意避免。但是请注意,臭棋只是意味着接下来“很可能输”。而 AlphaGo 在探索过程中发现其实有一种“接下来”的策略,可以翻转局面,并且利用了它发现的这样的知识,击败了重量级人类棋手。这是探索的力量。

AlphaGo 的成功应用自主探索,借助了两个要素:

1. 围棋可以有模拟器,所以可以让 AlphaGo 无尽地探索

2. 现代计算能力(大机群和GPU等计算加速硬件)

以至于它不需要向人类棋手学习,而是可以自主探索。

学习加探索(Imitation Learning)

但是无人车/船/飞机这类更“有用“的应用是没法写一个真切的模拟器的,因为其中物理过程太过复杂,以至于写一个真切的模拟器比机器学习本身更难。所以对这类应用,大家只好用真的车/船/飞机。

当我们依赖物理设备的时候,机器学习算法就不能“任意尝试”了。在围棋模拟器里,机器可以任意落子,看看后果 —— 最不济就是输一盘。而如果让机器任意尝试开车,那可能就会车毁人亡。

为了限制“任意探索”,最好就是让机器先学习人类的驾驶技法,然后在学到的知识基础上,做有限的自主尝试。这就是 学习加探索。

要不是有“有限的自主尝试”,这个主意听上去就完全是 supervised learning 了。可是如果只做 supervised learning,那是不够的。因为人类的示范,出于安全性的考虑,是会让船保持在“正常”状态的。所以机器学习不到如何应付不正常的、危险状态。那么在实际运行中,一旦进入到不正常状态,就几乎一定车毁人亡了。

为了学习和理解学习加探索如何即向人类学习又能做有限度自主探索,笔者和同事王鹤麟一起请教了百度 IDL 在美国研究院的几位做 自主探索和学习加探索的同事:余昊男、张海超和连晓晨。从这篇论文 Imitation Learning: A Survey of Learning Methods的调研部分开始学习各种算法,并选定了 Dagger([1011.0686] A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning )。

Dagger 算法要求我们知道在给定一系列状态下的最优策略 π*。在不少论文里,这个最优策略是通过写一个模拟器来实现的 —— 但是如上文所述,很多真实应用是没法写真切的模拟器的。另外一些论文里假设可以有人类专家来标注状态对应的策略 —— 这也不切实际。

参考文献链接

1.Hussein A, Gaber MM, Elyan E, Imitation Learning: A Survey of Learning Methods[J].2017.

(https://dl.acm.org/citation.cfm?id=3054912)

*为了方便大家使用PaddlePaddle,遇到问题可在中文社区提问,值班同学将在24小时内响应!更有精品案例、课程提供,让大家学习使用框架,轻松无忧!直达链接:

https://ai.baidu.com/forum/topic/list/168

理论基础

前沿|开源项目DeepNav“无人船”修炼日记(一)相关推荐

  1. 前沿|PaddlePaddle开源项目DeepNav“无人船”炼成记(二)

    前言:本篇继续讲述DeepNav自动驾驶船项目,本次讲解无人船的设计思路和硬件搭建过程.文章素材来源于百度美国研究院王益老师的知乎专栏,欢迎小伙伴们持续关注. 同时,对项目理论基础感兴趣的小伙伴,可以 ...

  2. react 开源项目_无良老板拖欠程序员工资,一怒开源冲上 GitHub TOP1

    作者 | 沭七 出品 | CSDN(ID:CSDNnews) GitHub Trending 一直都是程序员关注 GitHub 最新技术潮流最热开源项目的地方,今天它的 TOP1 项目着实让人有点儿心 ...

  3. AI开发者大会之AI学习与进阶实践:2020年7月3日《如何转型搞AI?》、《基于AI行业价值的AI学习与进阶路径》、《自动机器学习与前沿AI开源项目》、《使用TensorFlow实现经典模型》

    AI开发者大会之AI学习与进阶实践:2020年7月3日<如何转型搞AI?>+<无行业不智能:基于AI行业价值的AI学习与进阶路径>.<自动机器学习与前沿AI开源项目> ...

  4. 用ardupilot 做无人船项目的总结

    用apm做无人船项目,前后一共两年,无人船主控的自动巡航精度与船的整体性能基本稳定,IPD小批量(业务量小,小批量足以).下一代无人船系统框架刚讨论出来,项目成员由于各种原因,散了,还是挺怀念当初一起 ...

  5. 开源DIY:WiFi,4G,5G远程控制无人机/无人船,图传/数传/遥控一体化!

    前提: 首先你得会用APM或Pixhawk飞控.电机.电调.舵机.GPS.电池  装好一台多旋翼或固定翼无人机.或无人车/船,不会装的话就去百度,这个不在本贴的介绍范围. 至于图传.数传电台.增程设备 ...

  6. DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了

    DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了 参考文章: (1)DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + ...

  7. android移动日记代码,Android开源项目-小熊日记源码

    前言 一直是接着别人的代码来做App的,所以没有完整的开发App体验,总感觉有所缺少.于是,就利用业余时间亲自操刀开始了我的第一次开源项目.本文将讲述开源项目的整个开发过程. 项目初衷 开始这个项目的 ...

  8. 市面上开源项目这么多,别无脑上,需谨慎行事

    市面上开源项目这么多,别无脑上,需谨慎行事 本次分享使用开源软件的几点注意事项. 开源软件没处不在,有潜力帮助企业加快开发和提高软件质量.但假如不谨慎行事,它们可能是一个挑战. 下面是五个成功利用开源 ...

  9. 开源项目推荐:推荐5款前端的开源项目,vue、uniapp、react学无止境用无止境_

    vue开源项目 1. vue-element-admin git地址:https://gitee.com/panjiachen/vue-element-admin.git 这是一款基于vue2.x+e ...

最新文章

  1. [operator]ubuntu + git
  2. 一种c#深拷贝方式完胜java深拷贝(实现上的对比)
  3. 448. Find All Numbers Disappeared in an Array
  4. 如何批量在文件夹中建立php,怎么批量创建文件夹_一次性创建多个文件夹方法_一聚教程网...
  5. 设计模式-UML关系基础
  6. MYSQL第一章 创建表 修改表名 删除字段 添加字段 修改地段名
  7. 经验总结24--捕捉异常的重要性
  8. 如何取消提交我在Git中的最后一次提交[重复]
  9. CodeForces 621C 数学概率期望计算
  10. 最全的测试计划模板参考
  11. android 获取经纬度的三种方法,Android简单获取经纬度的方法
  12. 【爬虫进阶】验证码处理:打码平台的使用(反反爬)
  13. compute的c语言用法,词汇精选:compute的用法和辨析
  14. 亚马逊运营实用教程 上线前三个月如何做
  15. android获取本地连接ip地址,参照第二步将本地连接改成自动获取IP地址即可
  16. 安卓GB28181跨网段语音对讲
  17. C语言读写SQLite数据库
  18. 蓝桥杯2020年第十一届C/C++B组(第一次)省赛习题题解
  19. Linux常用命令——grep用法
  20. tensorflow笔记:tf.argmax()和tf.equal()的使用

热门文章

  1. 华为路由交换学习篇-链路聚合
  2. (DES)Single-Shot Object Detection with Enriched Semantics
  3. python中,除法运算后取整数的几种情况
  4. Curator基本操作(Zookeeper节点增删改查)
  5. java 生成条形码
  6. IT职业规划:大公司VS小公司,怎样选择更有前途?
  7. Java8 stream流式表达式用法
  8. 面向对象程序设计(Java)实验
  9. 微信小程序中布局使用的css布局语法
  10. 免费简单好用的屏幕录制工具——Captura