精华内容
下载资源
问答
  • 《人工智能本科专业知识体系与课程设置》笔记
    千次阅读
    2021-05-29 09:24:34

    今天看到一本书《人工智能本科专业知识体系与课程设置》,清华大学出版社出版的,由西安交大的老师们编写的,感觉里面的内容设置对于非人工智能科班出身的同学们会有一定帮助,能够了解自己哪些地方还有什么不足。但是要注意的是,这是给本科开设的课程,如果已经进入研究阶段了,一些通识性的、非必修的课可以视自身情况而决定是否有必要补上

    数学与统计课程群

    工科数学分析

    空间曲线的曲率与挠率

    实验环节:基于matlab软件的计算方法

    • 迭代法
    • 最优化方法
    • 数据拟合
    • 数据差值
    • 数值积分
    • 微分方程的数值解方法

    ###线性代数与解析几何
    ###计算机科学与人工智能的数学基础
    包括六部分:

    • 逻辑性初步
    • 集合论与组合分析
    • 图论初步
    • 矩阵论初步
    • 数值计算
    • 优化理论与运筹学

    教学目的:
    1.掌握命题逻辑中的命题符号化、命题公式及分类、等值验算、范式与基本的逻辑推理方法,了解全功能集
    2.深入理解谓词逻辑中的合式公式及解释,并学会利用谓词逻辑等值式求前束范式
    3.熟悉集合的基本概念、基本运算与集合元素的计数方法,学会利用组合分析方法对集合或多重集中的元素进行计数,了解递推方程的算法复杂度分析方法
    4.理解无限集的势和可数集,了解不可数集和常见集合的势,了解康托集
    5.熟悉直线上的开集、闭集及其性质,了解康托闭区间套定理、魏尔斯特拉斯定理等基本理论,了解勒贝格测度与可测集
    6.了解图的基本概念并学会图的矩阵表示方法,掌握一些常见的特殊图并了解重要的应用实例,掌握树的概念与基本分析方法

    7.熟悉掌握主成分分析方法,掌握矩阵的奇异分解与K-SVD算法,掌握稀疏矩阵方程求解的常用方法
    8.熟悉矩阵与向量的求导法则,并会利用求导法则解决实际问题,掌握基于帽子矩阵的多元线性回归方法
    9.掌握二分法、弦截法和迭代法等非线性方程的数值解法,理解高斯消去法、矩阵分解和迭代法等线性方程组的数值解法
    10.熟悉多项式插值和分段插值的方法,理解函数最佳逼近理论,掌握曲线拟合方法
    11.理解最优化问题,掌握凸集、凸函数、凸优化的概念
    12.学会使用最小二乘法、最速下降法、牛顿法、拟牛顿法和共轭梯度法等无约束优化方法
    13.了解单纯性法,分枝定界法等线性规划的基本解法,理解线性规划的对偶问题
    14.掌握等式约束优化、不等式约束优化和二次规划的基本方法
    15.熟悉使用C语言和matlab进行数值计算和优化方法的实现

    概率统计与随机过程

    相比CS的概率论与数理统计,多了部分随机过程的知识,包括:
    1.熟悉随机过程的概率,理解平稳过程的概念、相关函数的性质
    2.了解各态经历性的判定,掌握谱密度的概念、性质和计算方法
    3.掌握平稳时间序列的概念、线性模型及模型识别
    4.会进行有关的参数估计并会用这些方法解决一些工程和经济管理中的实际问题

    复变函数与积分变换

    博弈论(选修)

    信息论(选修)

    科学与工程课程群

    大学物理(含实验)

    电子技术与系统

    第一部分是电子器件与模拟电路,第二部分是数字系统结构与设计

    数字信号处理

    现代控制工程

    ##计算机科学与技术工程群

    计算机程序设计

    学的是C/C++

    数据结构与算法

    计算机体系结构

    个人感觉相比于CS的,多了一些内容,包括:
    1.了解向量处理器,单指令多数据以及GPU等数据并行技术
    2.熟悉线程并行技术
    3.熟悉面向领域应用的计算架构–特别是面向以深度学习为代表的人工智能应用的加速器设计

    理论计算机科学的重要思想

    以理论计算机科学的核心思想为主线,对确定型算法、随机化算法、可计算性理论、密码学、博弈论、数论、数值线性代数等展开讨论。在以上每个领域分别选择一个具体课题进行讨论,包括图灵机停机问题、卡拉楚巴算法啊、拉斯维加斯算法与蒙特卡洛算法、零知识证明、纳什均衡、连分数与无理数的逼近、条件数与病态矩阵等等。
    参考资料

    • MIT Open Courseware 6.080/6.089
    • CMU Course 15-251

    3D计算机图形学(选修课)

    就是计算机图形学

    智能感知与移动计算(选修课)

    涉及两个主题:

    • 多维信息采集与处理
    • 移动计算与移动智能

    参考书:

    • 《智能感知、无线传感器及测量》
    • 《雾计算:技术、架构及应用》

    ##人工智能核心课程群

    人工智能的现代方法

    参考书

    • 人工智能-一种现代的方法
    • 花书
    • 概率图模型-原理与技术
    • Pattern Recognition and Machine Learning

    包含两大部分:

    • 问题表达与求解
      2.从智能体的角度理解人工智能的方法论,理解基于模型反射、基于目标、基于效用、基于学习的智能体的概念
      3.掌握典型的搜索方法:迭代加深搜索、启发式搜索、贪婪最佳优先搜索、A*搜索
      4.掌握在非确定、不完全观察环境下的搜索方法,如局部搜索爬山法、模拟退火、遗传算法和信念状态表示法
      5.掌握在完整信息下的两人零和游戏的方法:极小极大算法、a-b搜索算法
      6.掌握约束满足问题的搜索求解方法
      8.掌握贝叶斯网络的有向无环图的构建方法,通过贝叶斯网络完成精确推理计算
      9.掌握回归和分类的线性模型
      10.了解马尔科夫链、蒙特卡洛方法
      11.掌握主成分分析,EM算法
      12.了解隐马尔科夫模型、卡尔曼滤波和动态贝叶斯
      13.了解制定简单决策、复杂决策的相关概念

    • 机器学习
      2.掌握随机图模型与贝叶斯分类,理解马尔科夫随机场与隐马尔科夫模型
      3.掌握核方法与支持向量机
      4.掌握集成学习与随机森林
      5.理解无监督学习与聚类、半监督学习与弱监督学习
      6.理解稀疏学习与压缩感知
      9.掌握生成模型的概念、理解生成对抗方法
      10.掌握概率采样与蒙特卡洛方法

    自然语言处理

    大纲:

    • 文本预处理技术
    • 文本正则化
    • 文本型符化
    • 文本编辑距离
    • 语言模型
    • 概率语言模型
    • n-gram语言模型
    • 数据稀疏
    • 基于神经网络的语言模型
    • 词性标注
    • 词性标注
    • 序列标注
    • 句法分析
    • 句法分析
    • 句法分析的方法
    • 文本分类与聚类
    • 文本分类
    • 文本聚类
    • 统计机器翻译
    • 机器翻译概述
    • 基于神经网络的机器翻译模型概述
    • 信息检索与推荐系统
    • 信息检索
    • 推荐系统
    • 情感分析
    • 情感分析
    • 认知与语言
    • 认知科学与语言基础
    • 认知语言学基础

    计算机视觉与模式识别

    参考教材是2004翻译的Computer Vision:A Modern Approach,和现在我们所说的CV关系不是太大
    大纲:

    • 视觉生理学与视觉认知基础
    • 视觉生理学与经典理论(视觉生理学、视觉经典理论、马尔视觉理论)
    • 视觉认知基础(视觉生理机制、视觉选择性、眼动与注意、视觉记忆与想象)
    • 图形成像与图形模型
    • 相机模型(图像传感器、针孔相机、透视投影与仿射投影、相机模型与相机参数)
    • 相机标定(最小二乘方法、相机标定的线性方法、相机畸变参数估计、奇异值分解)
    • 图像模型(颜色视觉、光辐射测度、光源与光照模型、色彩与颜色模型、本征图像分解)
    • 立体视觉
    • 两视几何(深度感知、对极几何、本质矩阵与基础矩阵、弱标定)
    • 立体匹配(立体对应、视差与视差线索、极线约束、立体标定、立体匹配模型)
    • 运动视觉
    • 图像运动(感知运动、运动场与光流场、光流方程与孔径问题、运动分解、光流估计)
    • 目标运动(刚体运动与非刚体运动、目标表示与目标匹配、运动模型与观测模型、线性动态模型与卡尔曼滤波)
    • 图像结构检测、表示与匹配
    • 图像滤波(卷积与线性尺度空间、图像金字塔、边缘与边缘检测算子)
    • 形状与纹理(滤波器组、纹理基元与纹理表示、形状基元与形状表示、形状匹配)
    • 特征检测与表示(关键点、特征描述子、梯度直方图、尺度不变性特征变换、视觉词典)
    • 特征匹配(图像表示、相似性与鲁棒匹配、哈希算法、图像检索)
    • 感知聚类与分割方法
    • 感知组织与图像分割(感知组织、组织目标与场景、格式塔原理、感知聚类、视觉内插与视觉完形、图像分割)
    • 图像分割的聚类方法(特征空间、聚类方法、k-means、亲和矩阵、谱聚类与NCuts)
    • 图像分割的概率方法(概率模型、混合模型、EM算法、模型选择)
    • 图像分割的模型拟合方法(霍夫变换、直线与曲线拟合、鲁棒估计、RANSAC)
    • 马尔科夫随机场与推理算法(随机场与马尔科夫随机场、能量模型、信任传播算法与图割)
    • 视觉模式识别方法
    • 视觉分类(感知目标属性与部件、感知功能与类别、视觉分类、检测与鉴别、判别式模型与产生式模型)
    • 集成学习与支撑向量机(组合分类器与提升算法、支撑向量机与隐支撑向量机、可形变的部件模型、人脸检测与行人检测)
    • 视觉识别的非度量方法(决策树、分类与回归树、随机蕨与决策森林、人脸检测与对齐)
    • 卷积网络(感受野/知觉场、分层结构与分布式表示、卷积神经网络、前向推理与反传算法、图像分类网络与目标检测网络)
    • 递归网络(隐马尔科夫模型、递归神经网络、循环神经网络与长短时记忆网络、前-后向算法、动作识别)
    • 图像合成方法
    • 图像变换(2D几何变换、2D透视变换与2D仿射变换、图像插值、图像变形)
    • 图像拼接(图像对齐与图像拼接、图像融合、图像编辑)
    • 基于图像的绘制(真实感绘制与非真实感绘制、场景建模、光场与光照模型、全光函数、纹理映射)
    • 图像超分辨率(图像分辨率、图像退化模型、图像重建、图像不全、超分辨率重建网络)
    • 图像生成(图像生成、产生式模型、图像采样、图像产生网络)
    • 视觉应用系统
    • 视觉ADAS(视觉辅助驾驶系统、目标检测与跟踪、视觉测量、车道偏离报警、前向碰撞报警、自适应巡航、自动紧急刹车)
    • 视觉监控系统(视觉监控系统、身份认证、异常行为检测、人群密度估计、事件检测)

    强化学习与自然计算

    参考书:

    • Richard S S.Andrew G B.Reinforcement Learning:An Indroduction.MIT Press,2015
    • 吴启迪。自然计算导论。2011

    知识涉及:

    • MDP,POMDP及值迭代方法
    • 动态规划、蒙特卡洛学习、时序差分学习等
    • 预测与控制、规划与学习
    • 基于价值的深度强化学习方法
    • 基于策略梯度的深度强化学习方法
    • 能够解决动态决策问题
    • 自然计算的统一模型
    • 进化计算与遗传算法,能够仿真模拟
    • 模拟退化算法
    • 分布估计算法
    • 蚁群算法
    • 免疫计算
    • 混沌与分形
    • 量子计算、DNA计算

    人工智能的科学理解(选修课)

    两个主题

    • 控制论与人工智能
    • 智能系统的信念

    参考书:

    • 郝季仁。控制论
    • Nils J.Nilson 理解信念。王飞跃等译

    游戏AI设计与开发(选修课)

    参考书:
    Georgios N.Y,Julian Togelius.Artificial Intelligence and Games.Berlin:Springer,2018

    虚拟现实与增强现实(选修课)

    认知与神经课程群

    认知心理学基础

    参考书:

    • Robert L.Solso et al.认知心理学
    • Robert S.Feldman.普通心理学

    神经生物学与脑科学

    参考书:

    • John G.Nicholls.神经生物学-从神经元到脑
    • 丁斐。神经生物学
    • etc。。。

    计算神经工程

    参考书:

    • Rajesh P.N.Rao脑机接口导论

    ##先进机器人技术课程群

    机器人学基础

    多智能体与人机混合智能

    参考书:

    • 王崇骏,等。多智能体系统及应用

    认知机器人

    参考:

    • 陈敏。认知计算导论
    • MIT Cognitive Robotics课程材料

    仿生机器人

    人工智能与社会课程群

    人工智能的哲学基础与伦理

    人工智能的社会风险与法律

    人工智能工具与平台课程群

    机器学习工具与平台

    • 开源机器学习工具与平台
    • 人工智能系统与应用
    • 开源AI训练平台(OpenPAI、KubeFlow)
    • 开源AI推断平台(TensorRT,TVM,ONNX)
    • 分布式AI训练(数据并行、模型并行、参数服务器、AllReduce、分布式训练工具)
    • OpenPAI分布式训练作业部署
    • Kubernetes推断部署
    • 分布式系统概述:YARN,Kubernetes
    • 面向深度学习的调度系统与算法(群调度与容量调度、支持拓扑的GPU调度)

    三维深度感知(选修课)

    人工智能芯片设计导论(选修课)

    无人驾驶平台(选修课)

    专业综合性实验

    机器人导航技术实验

    自主无人系统实验

    虚拟现实与仿真实验

    脑信号处理实验

    更多相关内容
  • 模型参考自适应控制

    2018-10-13 20:57:55
    本书为模型参考自适应控制教材,可供有需求者下载学习。
  • 自适应控制电子书(PDF格式)

    热门讨论 2011-01-14 17:26:38
    本教材由我国控制领域著名学者韩曾晋主编的经典教材之一,内容丰富翔实,对于考博、科研会有较大帮助。
  • 第1章 导论 1 1.0.1 为什么要处理图像? 1 1.0.2 什么是一幅图像? 1 1.0.3 什么是一幅数字图像? 1 1.0.4 什么是一个光谱带? 1 1.0.5 为什么大多数图像处理算法都参照灰度图像进行,而实际中遇到的都是彩色...
  • 本手册简明地介绍迁移学习的概念与基本方法,并对其中的领域自适应问题中的若干代表性方法进行讲述。最后简要探讨迁移学习未来可能的方向。 本手册编写的目的是帮助迁移学习领域的初学者快速入门并掌握基本方法,为...

        迁移学习作为机器学习的一大分支,已经取得了长足的进步。本手册简明地介绍迁移学习的概念与基本方法,并对其中的领域自适应问题中的若干代表性方法进行讲述。最后简要探讨迁移学习未来可能的方向。

        本手册编写的目的是帮助迁移学习领域的初学者快速入门并掌握基本方法,为自己的研究和应用工作打下良好基础。

        本手册的编写逻辑很简单:是什么——介绍迁移学习;为什么——为什么要用迁移学习、为什么能用;怎么办——如何进行迁移 (迁移学习方法)。其中,是什么和为什么解决概念问题,这是一切的前提;怎么办是我们的重点,也占据了最多的篇幅。为了最大限度地方便初学者,我们还特别编写了一章上手实践,直接分享实现代码和心得体会。

        本资源整理自网络,感谢原作者中国科学院计算技术研究所王晋东同学的分享,源链接:https://github.com/jindongwang/transferlearning-tutorial

     

        文末附本书最新版pdf下载地址。

     

        本手册的编写目的是帮助迁移学习领域的初学者快速进行入门。我们尽可能绕开那些非常理论的概念,只讲经验方法。我们还配有多方面的代码、数据、论文资料,最大限度地方便初学者。

        本手册的方法部分,关注点是近年来持续走热的领域自适应 (Domain Adaptation) 问题。迁移学习还有其他众多的研究领域。由于作者研究兴趣所在和能力所限,对其他部分的研究只是粗略介绍。非常欢迎从事其他领域研究的读者提供内容。

        本手册的每一章节都是自包含的,因此,初学者不必从头开始阅读每一部分。直接阅读自己需要的或者自己感兴趣的部分即可。本手册每一章节的信息如下:

        第 1 章介绍了迁移学习的概念,重点解决什么是迁移学习、为什么要进行迁移学习这两个问题。

        第 2 章介绍了迁移学习的研究领域。

        第 3 章介绍了迁移学习的应用领域。

        第 4 章是迁移学习领域的一些基本知识,包括问题定义,域和任务的表示,以及迁移学习的总体思路。特别地,我们提供了较为全面的度量准则介绍。度量准则是迁移学习领域重要的工具。

        第 5 章简要介绍了迁移学习的四种基本方法,即基于样本迁移、基于特征迁移、基于

        模型迁移、基于关系迁移。

        第 6 章到第 8 章,介绍了领域自适应的 3 大类基本的方法,分别是:数据分布自适应法、特征选择法、子空间学习法。

        第 9 章重点介绍了目前主流的深度迁移学习方法。

        第 10 章提供了简单的上手实践教程。

        第 11 章对迁移学习进行了展望,提出了未来几个可能的研究方向。

        第 12 章是对全手册的总结。

        第 13 章是附录,提供了迁移学习领域相关的学习资源,以供读者参考。

     

    本书最新版pdf下载地址

        微信公众号“深度学习与NLP”回复关键字“trs19”获取下载地址。

    往期精品内容推荐

    深度体验-深度神经网络之美

    历史最全自然语言处理测评基准分享-数据集、基准(预训练)模型、语料库、排行榜

    历史最全BERT压缩方法汇总分享

    训练神经网络的方法分享-Andrej Karpathy

    CVPR2019最新信息-论文统计及可视化分析

    经典文章推荐-《迁移学习-该做的和不该做的》

    2019年最新深度学习面试问题及答案集锦

    2019年春季全栈深度学习训练营课程分享

    2019年最新-深度学习、生成对抗、Pytorch优秀教材推荐

    吴恩达新课-《CS230-深度学习基础-2019年春》课程视频分享

    两分钟论文解读AlphaZero原理

    免费中文书籍-《神经网络与深度学习》中文版推荐

    展开全文
  • 分布式系统领域教程pdf

    热门讨论 2011-02-19 11:31:51
    6.1 导论 6.1.1 拓扑 6.1.2 交换 6.1.3 通信类型 6.1.4 路由 6.1.5 路由函数 6.2 一般类型的最短路径路由 6.2.1 Dijkstra集中式算法 6.2.2 Ford的分布式算法 6.2.3 ARPAnet的路由策略 6.3 特殊类型网络中...
  • 第1章 导论 1.1 预测与解释 1.2 预测模型的关键部分 1.3 专业术语 1.4 实例数据集和典型数据场景 1.5 概述 1.6 符号 第一部分 一般策略 第2章 预测建模过程简介 2.1 案例分析:预测燃油效能 2.2 主题 2.3 总结 第3章...
  • 需要安装超星阅读器进行阅读,与各位共同学习 。。。 第5章 死锁的预防、避免和检测 5.1 死锁问题 5.1.1 死锁发生的条件 5.1.2 图论模型 ...第7章 自适应、无死锁和容错路由 7.1 虚信道和虚网络
  • 一个自适应控制调节器实时调整石油精炼厂运转的参数。控制器在既定的边际成本基础上优化产量/成本/质量指标的平衡,而不是严格遵守工程师最初建议的参数值。 一只瞪羚在出生几分钟后开始挣扎着四肢试图站立。在一...

    译者注:此为本人自学了Sutton 第二版《Reinforcement Learning: An Introduction》之后,为了夯实记忆和温故知新所做的自译中文版,。为了共享知识,将其发布在CSDN上。为了便于阅读和理解,在翻译过程中尽量使译文接近“信、达、雅”,且对某些内容进行了注解。如有谬误与可改进之处,欢迎留下各位的宝贵意见。如需转载或引用,请注明出处。感谢。

    ————————————————————————————————————————————————

    Chapter 1 介绍

    当我们思考学习的本质时,第一个来到我们脑海中的想法便是通过与环境互动来学习。当婴儿玩耍、舞动双臂或四处张望时,尽管不存在明确的“导师”,但确是与环境产生了直接的感观联结。通过这种联结不断实践会产生大量的因果信息、行动及其产生的效果信息以及能够用来指导我们如何行动以达成特定目标的信息。在生活中,这种互动无疑是我们了解自身与自身所处环境的主要来源。无论是学习如何驾驶一辆汽车还是与他人保持谈话,我们都敏锐的关注着环境对我们的行为作出了怎样的反应(译者注:例如汽车对我们的操作如何反应或他人对我们所说的话如何反应),并且尝试通过行为来影响未来可能发生的事(译者注:例如踩刹车减速避免汽车驶出道路或说赞美他人的话使之心情愉悦)。从互动中学习是几乎所有学习理论和智能理论的基础理念。
    在本书中,我们探索一种从互动中学习知识的计算方法。其并非直接将人或动物如何学习的过程简单地理论化,而是主要探索理想化的学习情景和评估不同学习方法的效果。即,我们是从人工智能研发者和工程师的角度出发的。我们探索在科学或商业领域行之有效的机器设计,并通过数学分析或算例实验来评估这些设计。我们将这一正在探索中的学科称为强化学习,与其他机器学习方法相比,它更加关注基于互动的目标导向学习。

    1.1 强化学习

    强化学习的目的是去学习怎样行动——怎样建立从特定情境到特定行动的映射——来获取最大的利益。学习者不会被事先告知采取怎样的行动会产生最大的利益,而是必须通过尝试去发现。在多数有趣且富有挑战的案例中,行动可能不仅会影响即时获得的奖励,同时也会影响下一个情景,或通过这样的过程波及到所有后续奖励。试错搜索(trial-and-error search)和延迟奖励(delayed reward)是强化学习最重要的两个特点。
    同其他以“ing”结尾的标题如机器学习(machine learning)和登山运动(mountaineering)类似,强化学习既是一个问题,又是一类在某些特定问题上行之有效的解决方法,还是一个研究该问题和其解决方法的特殊领域。尽管为了便利用一个名称来同时代表这三个概念,但从理念上理解它们之间的区别是必要的。特别是问题与其解决方法的区别,不理解它们会在学习中产生很多的困惑。
    我们采用动态系统理论(dynamical systems theory)的观点来正式定义强化学习问题,特别地,将其视为一个不完全信息马尔可夫决策过程的最优控制问题。定义的全部细节只有等到第三章才能完全展开,但其基本理论是一个不断学习的智能体通过与环境的持续互动来实现其特定的目标。一个学习中的智能体必须能在一定程度上感知环境的状态,且能采取可以影响环境状态的行动。智能体必须有一个或多个与环境状态相关的目标。马尔可夫决策过程包括三个方面——感知,行动,目标——以它们最简单的可能形式且不忽略其中任何一个。任何适用于解决此类问题的方法都可以被归为强化学习方法。
    强化学习与监督学习(supervised learning)不同,其为目前机器学习领域最活跃的分支之一。监督学习是从一个带标签样本组成的训练集中学习知识,该带标签的训练集是由知识丰富的“外部导师”所提供。训练集中每一个样本表示系统可能经历的某一特定情境及在该情境下应当采取的正确行动(标签),通常是描述某一情境应当被划归为哪一个分类(译者注:机器学习领域中经典的分类问题)。监督学习的目的是泛化该系统,使其在面临未出现在训练集中的情境时可以选择正确的行动。这是一种重要的”学习“方法,但无法独自地来通过互动学习知识。此外,在互动问题中,同时获取到具有代表性的情境和其正确行动的样本是不现实的。在某些未知领域,我们期望能通过学习来获取最大利益,因此智能体必须具有从自身经验中学习的能力。
    强化学习也与无监督学习(Unsupervised Learning)不同,其研究内容是在无标签数据集合中发现隐藏的数据结构。监督学习和无监督学习这样的用语似乎已经将机器学习的研究范畴分割完毕,但它们并没有。尽管有人可能会认为强化学习是一种无监督学习,因为它不依赖正确的行为样本,但强化学习尝试最大化利益而不是尝试寻找隐藏结构。了解智能体经验数据的结构自然有利于强化学习,但它同样无法单独地解决以最大化利益为目标的强化学习问题。因此,我们认为强化学习是机器学习的第三个范畴,与监督学习、无监督学习或其他可能存在的范畴并列。
    仅出现在强化学习中而未见于其他机器学习范畴的一个挑战是在探索与利用之间进行权衡。为了获得高额的利益,强化学习智能体必须偏向某些在过去采用过并被发现可以有效产生利益的行动。但为了发现这些行动,它必须去尝试大量未被选择过的行动。智能体为了获利必须利用某些已经历过的行动,但为了在将来做出更好的行动选择,它必须探索未经历的行动。困境在于单独地进行探索或利用均会导致任务失败,智能体必须大量尝试并逐步偏向那些表现最佳的行动。在随机任务中,每个行动都必须被尝试多次才能获得一个关于其期望值的可靠估计。探索——利用困境已被数学家们集中研究了数十年,但仍未被解决。目前,我们认为完全的探索与利用的平衡问题并未出现在监督学习与无监督学习中,至少在它们最纯粹的形式中没有。
    另一个强化学习的关键特征是它明确地考虑一个完整的关于目标导向的智能体与不确定环境互动的问题。这与许多只考虑子问题而不关心子问题如何适应全局的方法完全相反。例如,我们已提到了许多机器学习的研究都是关于监督学习的,但是没有明确说明这种能力最终如何产生作用。其他研究者虽然提出了一些根据广义目标制定计划的理论,却未曾考虑计划在实时决策中扮演的角色或对于计划是必需的预测模型从何而来。尽管这些方法已经产生了许多有用的结果,但它们聚焦于孤立的子问题是很大的限制。
    强化学习完全从相反的路线出发,起始于一个完整的,互动的,目标导向的智能体。所有智能体有明确目标,能够感知环境的各个方面,并且能选择行动来改变环境。此外,除了面对高度不确定的环境时,通常设定智能体从一开始就必须采取行动。当涉及到计划时,强化学习方法必须解决计划与实时的行动选择之间的协调,以及环境模型如何被获取与改进的问题。当强化学习涉及到监督学习时,通常用它来确定哪些能力是关键的而哪些能力不是。为使学习研究继续下去,重要的子问题必须被剥离出来单独研究,但它们应在完整的,互动的,目标导向的智能体中扮演清晰的角色,即使智能体的所有细节还未可尽知。
    我们并不总是认为一个完整的,互动的,目标导向的智能体意味着一个完全的有机体或机器人。在许多案例中,智能体只是大型行为系统的一部分。在这种情况下,智能体直接同大系统的其余部分互动并间接同大系统的周围环境互动。一个简单的例子是智能体监控机器人的剩余电量并向机器人的控制结构传达指令。其环境是除它以外的机器人结构与机器人外部的环境。理解智能体及其外部环境的区别才能领会强化学习框架的广义性。
    现代强化学习最振奋人心的一个方面,是它同其他工程运用领域与科学领域丰富的交融。近年来,人工智能与机器学习发展的大潮流是加深与统计学,优化理论和其他数学学科的融合,强化学习是其中的一份子。例如,一些强化学习方法具有通过参数近似来学习的能力,解决了运筹学和控制论中经典的“维数灾难”问题。更加独特的是,强化学习同心理学和神经科学亦有大量的交融之处,并产生了许多可喜的成果。在机器学习所有范畴中,强化学习是一种最接近人和动物学习方式的方法,其许多核心观点都受到了生物学习系统的启发。强化学习同样通过一些与经验数据匹配度更高的学习心理模型和富有影响力的关于大脑部分激励系统的模型对心理学和神经科学有所回报。本书主体部分阐述强化学习属于工程学与人工智能范畴的观点,同心理学与神经科学相关的部分总结在第14章和第15章。
    最后,强化学习也是人工智能回归至简单通用性原则之浪潮的一部分。在1960年代晚期,许多人工智能学者推测已经不存在任何未被发现的通用性规则,自此,智能领域逐渐被大量为特殊任务设计的技巧,过程和启发式所占领。在那个时代,似乎只要将足够多的样本喂给机器,比如一百万或一亿,就能抵达智能的彼岸。构建在诸如搜索或学习等通用性原则之上的方法被认为是“弱方法”,而那些基于特定领域知识的方法被称为“强方法”。这个观点在今日依然流行,但已不再占主导地位。在我们看来,这个观点似乎来得为时过早:还未有多少精力被投入对通用性规则的研究,又怎能轻易下其不存在的结论?现代强化学习包含了大量寻找学习、搜索和决策等通用性规则的研究,同时包容并蓄地尝试容纳大量的领域知识。尽管钟锤回摆的程度还不确定,但强化学习研究确是人工智能回归更简洁、更通用规则的确定回摆。

    1.2 示例

    思考一些具有引导性的示例与应用是理解强化学习的好方法。

    • 一位国际象棋玩家选择走子的位置。这种选择同时具备计划性——预测走子可能产生的后果与对手的反应——和对某些偏爱的特定位置直接、感性的判断。
    • 一个自适应控制调节器实时调整石油精炼厂运转的参数。控制器在既定的边际成本基础上优化产量/成本/质量指标的平衡,而不是严格遵守工程师最初建议的参数值。
    • 一只瞪羚在出生几分钟后开始挣扎着四肢试图站立。在一个半小时后,它就能以20英里/小时的速度奔跑。
    • 一个机器人决定是否前往一个新房间去搜集更多的垃圾或是返程充电。这取决于它当前的电量水平与寻找之前充电点的时间与难易程度。
    • 菲尔准备他的早餐。请注意,即使如此寻常的活动依然具有一个由传统行为和具有连锁效应的目标—子目标关系组成的复杂网络:走向碗橱,打开它,选择一个谷盒,然后取出,抓取谷物,将谷盒放回。其他复杂、协同且具有互动性的行为序列有:取一个碗,勺子和奶罐。每一步均涉及一个视线移动序列以获取信息并指引自身移动和定位。如何获取目标物品或决定获取它们的先后顺序都需要连续的快速判断。每一步行动都由特定目标指导,例如获取一个勺子或前往冰箱,同时又为其他目标服务,例如一旦谷物准备完毕就拿起勺子开始进食并最终达到饱腹。无论菲尔是否注意到,他都始终在不断关注并获取他的身体状态信息,其决定了他所必需摄入的营养成分,饥饿的程度和食物的偏好。

    这些示例都具有某些过于基本以致于极易被忽视的特征。它们都涉及一个具备决策能力的智能体和它所处的外部环境之间的互动,在互动中智能体尝试去实现某个目标,即使环境具有不确定性。智能体的行动可以影响环境的未来状态(例如,国际象棋中下一步走子的位置,精炼厂储液器的剩余量,机器人下一个定位和移动后所剩余的电量),继而影响到智能体未来可以做出的选择,因此可能需要长远的规划。
    同时,在所有这些示例中,行动的效果不可能被完全预测到,因此智能体必须随时监控环境的变化并采取恰当的应对。例如,菲尔必须盯着他正倒入盛着谷物的碗中的牛奶以免其溢出。所有示例涉及的目标在某种程度上是清晰的,因此智能体能够基于直接的感知来判断目标达成的进展。国际象棋玩家了解他是否获得了胜利,精炼厂了解目前产出了多少石油,瞪羚知道它摔倒了,机器人会记录自身的剩余电量,菲尔也清楚他是否享受自己制作的早餐。
    在所有这些示例中,智能体可以随着时间的推进通过它的经历来改进其表现。国际象棋玩家改进其评价走子效果的直觉以提升棋力;瞪羚改进自身动作以实现成功奔跑;菲尔尝试重新组织准备早餐的过程。在任务开始时由智能体带入任务的先验知识——无论是先前在相关任务已取得的经验还是通过设计嵌入到任务中——会影响到关于对哪些知识是有用的或易被学习到的判断,但与环境的交互这一特点对调整行为以利用任务的特定特征是必不可少的。

    1.3强化学习的组成要素

    除了智能体与环境,可以确定强化学习系统的四个主要要素:策略,奖励信号,价值函数以及(可选的)环境模型。
    策略规定了智能体在一段给定时间内的行为方式。粗略来讲,策略是从感知获取的环境状态到在这些状态下应该采取的行动的映射。这与心理学中所谓的刺激—反应规则相似。在某些案例中策略可以是一个简单的函数或可供查询的表格,在其他案例中可能会涉及大量计算,例如一个搜索过程。策略是一个强化学习智能体的核心,在某种意义上,它独自就可以决定如何行动。一般而言,策略可能是随机的。
    奖励信号定义了强化学习的目标。在每一个时间步骤,环境会向强化学习智能体传输一个数字信号,该信号被称为奖励。智能体的唯一目标是最大化长期获得的总奖励。奖励信号为智能体定义了哪些事件是好的,哪些是坏的。在生物系统中,我们可以把奖励信号看作为或喜悦或痛苦的感受。它们是智能体所面临问题的直接且明确的特征。奖励信号是改变策略的主要基础;如果根据策略所选的某个行动获得了低收益,那么策略可能会变更未来在该状态下的行动选择。一般而言,奖励信号可能是关于环境状态与在该状态下所选行动的随机函数。
    奖励信号在实时的层面上评价特定行动或策略的优劣,而价值函数确定了长期意义下特定行动或策略的优劣。粗略来讲,某个状态的价值是从该状态开始,在未来一段时间内所有奖励累计和的期望值。奖励决定了环境状态的实时、固有的优劣程度,而价值考虑了某一状态可能的后续状态及在这些状态下可获得的奖励,意味着从长期角度考虑此状态的优劣程度。例如,一个状态可能总是产生较低的即时奖励但仍然具有很高价值,因为在其之后总是跟随能产生高即时奖励的状态,反之亦然。打个人类的比方,奖励多少有点像快乐(如果高的话)或痛苦(如果低的话),而价值则对应于一种更精细、更有远见的判断:当我们的环境处于某一特定状态时,我们会多高兴或多不高兴。
    从某种意义上说,奖励是主要的,而价值作为奖励的预测是次要的。没有奖励即没有价值,而且估计价值的目的在于获取更多的奖励。尽管如此,当我们在决策或评估决策时,价值是我们最关心的。行动选择基于价值判断。我们总是寻求那些能够带来最高价值而不是最高奖励的行动,因为最高价值的行动可以从长远角度为我们带来最高的奖励。不幸的是,确定价值远比确定奖励困难。奖励基本可以由环境直接给定,但是价值必须根据一个智能体在其整个生命周期中所做的一系列观察来反复评估。实际上,我们认为对于所有强化学习算法而言,最重要的部分是一个能有效地估计价值的方法。价值估计的核心作用可以说是过去60年来我们在强化学习中所学到的最重要的东西。
    对于一些强化学习系统而言,第四个也是最后一个要素是环境模型。它用来模仿环境的行为,或者更一般地,让智能体能够推断环境根据其行动将会如何变化。例如,给定状态和行动,模型可以预测其导致的下一个状态和相应产生的奖励。模型被用于制定计划,通过计划我们可以在某些可能的情境还未发生之前就决定相应的行动。采用计划制定与环境模型来解决强化学习问题的方法被称为有模型的方法(model-based);反之被称为免模型方法(model-free),其属于完全的试错学习器,几乎被认为是计划制定的对立面。在第8章我们探索一种强化学习系统,它既通过试错来学习,又学习环境模型并用其来制定计划。现代强化学习的研究范围从低级的、反复试错式的学习逐渐拓展至高级的、深思熟虑的计划。

    1.4 限制和适用范围

    强化学习严重依赖状态的概念——作为策略与价值函数的输入和模型的输入与输出。非正式地,我们可以将状态视为一个传递给智能体的信号,该信号包含了在特定时间“环境是怎样的”的信息。我们所使用的关于状态的正式定义在第三章由马尔科夫决策过程框架给出。然而更一般地,我们鼓励读者了解非正式的定义并将状态视为智能体可获得的任何关于环境的信息。实际上,我们假设状态信号是由某种名义上是环境一部分的预处理系统给定的。我们在本书中不讨论如何构建、改变和学习状态信号(但在第17.3章节有简短的介绍)。我们这样做并非是因为我们认为状态表示不重要,而是为了将内容聚焦在决策问题上。换言之,我们的主要精力并没有放在设计状态信号上,而是在状态信号已知时决定采取何种行动。
    本书中介绍的大部分强化学习方法都围绕着估计价值函数来建立,但这并不是解决强化学习问题的唯一方法。例如,一些诸如遗传算法,模拟退火和其他优化算法的解决方法不需要估计价值函数。此类算法同时在一段相当长的计算时间内(译者注:例如规定算法最大迭代次数,在实验中数值可以随意设置)考虑多个独立且完整的策略(译者注:例如遗传算法中的种群,种群内每一个染色体相当于一个独立的完整策略)同一个环境的实例进行交互。获得带有随机波动的最高奖励的策略被传入下一代策略集合,以此往复。我们将此类算法称为进化方法,因为它们的运作类似于生物熟练地进化繁衍出其他生物体的方式,即使在其生命周期内没有学习如何去进化和繁衍。假如策略空间足够小或者是好策略很容易被设计出来的理想情况,又或者有大量的时间可以用来搜索,那么进化算法是有效地。此外,进化算法在那些智能体无法完全感知环境状态的问题中具有优势。
    我们主要聚焦于通过与环境互动来学习的强化学习方法,而进化算法则不具备此特点。在许多案例中,能够利用个体行为互动细节的方法比进化方法更加有效。进化方法忽略了许多强化学习问题中有用的结构:它们没有考虑到其搜寻的策略是一个从状态到行动的映射;也未考虑到一个个体在其生命周期内经历了哪些状态或选择了哪些行动。尽管在某些情况下这些信息可能会产生误导(例如,状态信息被误判时),但在大多情况下,它们使得搜索更加高效。虽然进化和学习有许多共同的特点,并且可以自然地协同工作,但我们不认为进化方法本身特别适合于强化学习问题,因此,我们不在本书中讨论它们。

    1.5 一个拓展示例:井字棋

    为了例证强化学习的一般观点并将其与其他方法比较,我们更加详细的考虑一个示例。
    回想一下我们所熟悉的儿童游戏——井字棋。 两个玩家轮流在 3 × 3 的棋盘上落子, 一个玩家使用X型棋子而另一个玩家使用O型棋子,直到某位玩家有三枚棋子在水平、垂直或对角线方向(如下图所示)连成一行,则判定其获胜。如果在此之前棋盘已被棋子占满,则判定为平局。因为一名经验丰富的玩家可以使自己永远不会输,所以让我们假设在同一名技术并不完美的对手对弈,因而他可能会下错使我们获胜。让我们暂时假定平局与输棋一样糟糕。我们应当怎样构建一个下棋程序来找到对手的缺陷并最大化自身获胜的概率呢?
    在这里插入图片描述
    尽管这是一个简单的问题,但是运用传统的技术无法使其得到圆满的解决。例如,博弈论中的经典的 “极小化极大”方法在此是不适用的,因为它假设对手有一个固定的走子方式。比如说,一个极小极大下棋程序绝不会使棋局走向一个可能会导致其失败的状态,即便多数情况下由于对手不完美的走子方式可以从这些状态出发获取胜利。用于求解序列决策问题的经典优化方法如动态规划可以求得针对任意对手的最优解,但需要关于对手的完整信息——包括在棋盘的每一个状态中对手下任意一步棋的概率——作为输入。让我们假设这些信息并非先验的,如实际中的多数问题一样。另一方面,这些信息可以通过经验估计来获取,在此例中是通过与对手对弈获得。关于此问题的最好解决方法是先学习得到有一定置信度的对手行为估计模型, 然后基于给定的对手模型应用动态规划来计算最优解。最终,这种方法和我们之后在本书中探讨的一些强化学习方法并没有什么区别。
    假如运用进化方法来求解此问题,它会直接搜索策略空间来获取一个具有高概率战胜对手的策略。在此,策略是一种规则,它指导玩家在任一游戏状态(在3X3棋盘上任一可能的X型棋子与O型棋子的配置)应当如何走子。对于任一被纳入考虑的策略,其获胜概率可以通过与对手对弈数局来估计。然后这些估计值再用来指导下一次迭代应当考虑哪些策略。一个典型的进化算法能在策略空间中爬山(hill-climb),持续产生并评估策略以获得增量式的改进。或者也可以使用维护并评估一整个策略种群的类遗传算法来解决该问题。理论上有数百个优化方法可以运用于此。
    接下来介绍利用价值函数来解决井字棋问题的方法。首先我们建立一个数值表格,每一个单元格代表了游戏中每一个可能达到的状态。表格中的数值就是从每一个状态出发可能获胜的概率的最新估计,我们将其称之为状态的价值,而整张表格则是通过学习获得的价值函数。如果当前, 从状态 A 出发获胜概率的估计值比状态 B 高,那么我们称状态 A 的价值高于状态 B, 或者说状态 A 比状态 B 更 “好”。 假设我们一直执 X,那么当达到所有有三枚 X 型棋子连成一行的状态时,获胜的概率为 1, 因为我们已经赢了。 类似的, 对于所有有三枚 O 型棋子连成一行的状态或平局时, 其获胜概率为 0,因为我们不可能获胜了。对于其他状态,我们将其初始值设为 0.5, 表示我们猜测从这些状态出发有 50% 的概率获胜。
    然后我们与对手对弈了数局,为了选择走子的位置,我们需要检查所有走子之后可能到达的状态(考虑当前棋盘上每一个空白的位置)并在数值表格中查询它们目前的价值。大多数时间我们采用贪婪式走子,即选择能够在走子之后到达具有最高价值(获胜概率最大)的状态的位置。偶尔我们也随机的选择下一步走子的位置,我们将其称之为探索式走子,它们能让我们探索过去从未经历过的状态。游戏中一系列的考虑与行动可以表示为图1.1。
    在这里插入图片描述
    图 1.1: 一个井字棋走子序列。 实线表示游戏中实际走子; 虚线表示我们 (我们的强化学习程序) 考虑但没有采用的走子。 我们下的第二步棋是探索式走子, 这意味着尽管另一个同代节点 e 的估计值更高,但我们仍然随机选取了节点e。探索式走子本身不能产生新的知识学习; 但其他的步数可以, 这形成了如图中红色曲线箭头所示的更新,估计值从树的子辈结点流向父辈结点,关于这一过程的细节在下文中叙述。

    当我们在下棋时, 我们需要更改经历过的状态的价值来实现对胜率更为准确的估计。为了做到这一点,我们将贪婪式走子后到达状态的价值“回传”给走子之前的状态,如图 1.1 所示。更确切地说,早先状态的当前价值更新后向后续状态的价值靠拢。这可以通过将后续状态的价值的一部分赋予早先状态的价值来实现。 令S表示贪婪式走子前的状态,用 S 表示贪婪式走子后的状态, 那么对S的价值估计——记作 V (S)——的更新可以写作:
    V (S) = V (S) + α [ V (S) - V (S) ]
    其中 α 是一个很小的正分数,被称为步长参数,能影响学习的速率(译者注:同经典的梯度下降算法中的步长参数功能类似)。上述更新规则是时序差分学习方法的一个示例,其之所以被命名为时序差分是因为更新基于 [ V (S) - V (S) ] 这两个不同时刻的连续状态的估计价值之差。
    上述方法在这个问题上有良好的表现。 例如, 如果步长参数能随时间以合适的速率衰减,那么对于任何给定的对手, 任意状态的估计值都能收敛到从该状态出发使用最优策略而最终获胜的真实概率。更进一步说,收敛后所下的每一步 (除去探索式走子) 事实上都是针对这一 (非完美) 对手的最优下法。换言之, 此方法最终收敛为针对这一对手的最优策略。如果步长参数不随时间衰减至 0,下棋程序也能很好地应对缓慢地改变策略的对手(译者注,始终在一定的程度上持续地学习,学习的速度取决于步长参数衰减后最终的值)。
    这个示例阐明了进化方法与使用值函数的方法之间的区别。为了评估一个策略, 进化方法将该策略固定, 多次同对手对弈或使用对手的模型模拟对弈,获胜的频率给出了使用该策略获胜概率的无偏估计,然后被用来指导下一步的策略选择。但是,策略改进必须要经过数局游戏,并且只有每局游戏的最终结果被利用了——发生在游戏过程中的一切都被忽略。例如,如果程序获胜了,那么这局游戏中的所有行为都会被赋予一定的积分,而没有考虑某些行为对获胜而言有多么重要。积分甚至会被给予从未出现过的走子行为。 而使用价值函数的方法则与之相反,它允许对各个状态进行单独评估。从结果上而言,进化方法与值函数方法都是在策略空间中进行搜索, 但学习一个价值函数可以利用游戏过程中的所有信息。
    这个简单的示例说明了强化学习方法的一些关键特征。首先,强调从与环境的互动中学习,在本例中是通过同对手对弈来学习。其次,有明确的目标,且正确的动作选择要求制定长远的计划,即将行动选择的延迟效果考虑在内。例如,简单的强化学习程序可能会学会使用多步陷阱来针对目光短浅的对手。这是强化学习方法的一个显著特征:不需要一个模拟对手行动的模型,也不需要对未来可能的动作、状态序列进行显式搜索,就可以达到计划与预见的目的。

    虽然在此例证了强化学习的一些基本特征,但它实在太简单以致于可能会给人留下强化学习的应用十分有限的印象。除了井字棋这样的双人游戏外,强化学习同样适用于没有外部敌人的情形,即 “与自然斗争的游戏”。强化学习同样不局限于那些可将行为分解为独立片段的问题,例如奖励只能在每个片段(棋局)结束之后结算的井字棋游戏。其亦可应用于行为无限持续且在任意时间节点都会收到不同奖励信号的问题。与在井字棋游戏中的运用不同,强化学习甚至可以用于无法划分为离散步骤的问题。强化学习的通用规则同样适用于连续时间问题,但涉及理论更加复杂,因此不在本书中讨论。
    井字棋游戏具有相对较小的有限的状态集,而强化学习可以用于解决状态集极大甚至无穷大的问题。例如,Gerry Tesauro (1992,1995)将上述算法与一个人工神经网络结合来求解西洋双陆棋问题,其大概有1020个状态。因为状态太多我们甚至无法在一定时间内经历其中的一小部分。Tesauro的西洋双陆棋学习程序的表现远超之前的其他程序,现在已经达到了世界顶尖人类棋手的水平(见第16章)。神经网络为程序提供了从经验中泛化的能力,因此在到达一个从未经历的新状态时,神经网络会参考曾经遇到相似状态时储存的决策信息来选择行动。强化学习系统在具有如此大的状态集的问题上的表现同它是否能够很好地根据过去经验进行泛化有紧密的联系。在这个问题中,我们非常需要监督学习和强化学习的结合。但神经网络和深度学习却并非唯一与最佳的处理方式(见第9.7小节)。
    井字棋游戏中,在学习开始时没有除游戏规则外的任何先验知识,但强化学习并不一定要从空白开始。恰恰相反,先验知识可以以多种方式集成到强化学习中,且有时这对高效的学习而言是有重要意义的。此外, 在井字棋游戏中我们可以获取到真实的状态信息,但强化学习也可以应用于部分状态被隐藏的情形, 或者对学习器而言不同的状态看上去相同的情形。
    最后, 井字棋程序能够预见未来并了解其所有可能的走子所导致的状态。为了做到这一点,强化学习程序需要一个游戏的模型,其能预见环境对程序尚未走的那一步的可能反应。许多问题都与此类似, 但在有些问题中甚至连在短期内预测动作结果的模型也无法得到。强化学习在这两种情况下都适用。模型并不是必须的,但如果有现成的模型或模型可以学得,那么这些模型可以被相应的强化学习方法轻而易举地使用(第8章)。
    另一方面,这里也存在不需要任何环境模型的强化学习方法。免模型系统甚至不用预测环境对单个动作的反应。井字棋程序从某种意义上说是免模型的:因其没有任何关于对手的模型。因为模型必须要足够准确才能派上用场,所以在面对瓶颈在于难以构建足够准确的环境模型的问题时, 免模型方法比其他更复杂的方法有优势。免模型方法也可以被整合进有模型方法作为其中的一部分。本书中,我们先用数章讨论免模型方法, 然后再讨论其怎样作为组件嵌入到更复杂的有模型方法中。
    强化学习方法既可以用于系统顶层, 也可以用于系统底层。虽然在井字棋程序仅学会了游戏的基本下法, 但这不妨碍将强化学习用于更高的层次,其中可能每一个“行动” 本身就是一个复杂的问题解决方法。在分层学习系统中,强化学习可以同时服务于多个层级。

    总结

    强化学习是一种具备理解能力的和自动化的目标导向学习与决策的计算方法。因为其强调在不依赖“外部导师”或完整的环境模型条件下通过与周围环境直接交互来学习,强化学习同其他计算方法有明显区别。在我们看来,强化学习是第一个真正解决通过与环境交互中学习以达成长期目标时出现的计算问题的科学领域。
    强化学习使用正式的马尔科夫决策过程框架中的三个要素——状态,行动和奖励来定义智能体与其周围环境的互动。该框架通过一种简单的方式表达了人工智能问题中有代表性的关键特征。这些特征包括因与果,不确定性和明确目标的存在。
    价值与价值函数是本书中大多数强化学习方法的核心概念。我们认为价值函数对于策略空间中的高效搜索非常重要。价值函数的运用将强化学习方法与进化方法区别开来,后者根据对完整的策略的评估来引导在策略空间中的直接搜索。

    展开全文
  • 深度学习:卷积神经网络从入门到精通

    万次阅读 多人点赞 2019-03-28 23:30:12
    全面介绍各种卷积神经网络的模型、算法及应用,指导读者把握其形成和演变的基本脉络,以帮助读者在较短的时间内从入门达到精通的水平。有兴趣的读者可以从本书开始,通过图像分类、识别、检测和分割的案例,逐步深入...

    内容简介

    全面介绍各种卷积神经网络的模型、算法及应用,指导读者把握其形成和演变的基本脉络,以帮助读者在较短的时间内从入门达到精通的水平。有兴趣的读者可以从本书开始,通过图像分类、识别、检测和分割的案例,逐步深入卷积神经网络的核心,掌握深度学习的方法和精髓,领会 AlphaGo 战胜人类世界冠军的奥秘

    作者简介

    李玉鑑(鉴)

    北京工业大学教授,博士生导师。华中理工大学(现名为华中科技大学)本科毕业,中国科学院数学研究所硕士毕业,中国科学院半导体研究所博士毕业,北京邮电大学博士后出站。

    曾在中国科学院生物物理所工作,对意识的本质问题关注过多年,并在《21 世纪 100 个交叉科学难题》上发表《揭开意识的奥秘》一文,提出了解决意识问题的认知相对论纲领,对脑计划和类脑研究具有宏观指导意义。长期围绕人工智能的核心目标,在神经网络、自然语言处理、模式识别和机器学习等领域开展教学、科研工作,发表国内外期刊、会议论文数十篇,是本书和《深度学习导论及案例分析》的第一作者。

    本书内容

    前言

    随着谷歌的 AlphaGo、IBM 的 Watson 和百度的小度机器人等智能产品的问世,人工智能成为大众热烈讨论的焦点。深度学习作为其中的核心技术之一,经过学术界与工业界的积极推动,已经被广泛应用于计算机视觉、语音识别和自然语言处理等诸多领域。如果读者想了解深度学习的总体概况,可参考作者编写的《深度学习导论及案例分析》[1]一书。

    本书专注讨论深度学习中应用非常广泛的模型——卷积神经网络,该模型特别适用于图像分类和识别、目标分割和检测以及人工智能游戏方面,受众对象包括计算机、自动化、信号处理、机电工程、应用数学等相关专业的研究生、教师以及算法工程师和科研工作者。

    卷积神经网络是一种特殊的多层感知器或前馈神经网络,具有局部连接、权值共享的特点,其中大量神经元按照一定方式组织起来对视野中的交叠区域产生反应。其前身是日本学者 Fukushima 在感受野概念的基础上提出的神经认知机模型。利用神经认知机的思想,LeCun 等人在 1998 年提出了卷积神经网络的现代雏形 LeNet。2012 年,Krizhevsky 等人取得了卷积神经网络研究的重大突破,提出了著名的 AlexNet。AlexNet 在 ImageNet 的大规模图像分类竞赛中取得优异成绩,为深度学习的全面推广立下了汗马功劳。随后,卷积神经网络模型如雨后春笋般出现,如 VGGNet、GoogLeNet、SPPNet、ResNet、DenseNet、Faster R-CNN、YOLO、SSD、FCN、PSPNet、Mask R-CNN、SiameaseNet、SqueezeNet、DCGAN、NIN,以及在人工智能游戏中用到的深度强化模型等。

    本书的最大特色是对卷积神经网络进行由浅入深的分类描述,依次包括:现代雏形、突破模型、应变模型、加深模型、跨连模型、区域模型、分割模型、特殊模型、强化模型和顶尖成就。这种分类框架是在模型概述和预备知识的基础上逐步展开的,既方便读者入门学习,又有助于读者深入钻研。

    本书的另一大特色是结合 Caffe 或 TensorFlow 的代码来说明各种卷积神经网络模型的具体实现过程,并通过应用案例说明其价值和意义所在。典型的应用案例包括:字符识别、交通标志识别、交通路网提取、大规模图像分类、人脸图像性别分类、图像目标检测、图像语义分割、图像实例分割、人脸图像生成、Flappy Bird 智能体、AlphaGo 的仿效围棋程序等。读者可以通过运行各个应用案例的程序代码和实验数据,检验其演示效果。

    与其他深度学习的书籍相比,本书对卷积神经网络的内容涵盖更为广泛、模型讨论更为深入、应用实践更为细致。特别是,还总结了一些运行卷积神经网络的配置技巧和操作经验。比如,在运行 Mask R-CNN 的时候,需要先安装读取 COCO 数据集的程序,然后再进行训练或测试。在运行 SSD 的时候,可视化结果只给出了类别编号而没有给出类别名,作者对此已进行了修改,以方便读者按照书中所示代码显示相应的类别名。把这些经过摸索得到的技巧和经验分享给读者,对提高读者的深度学习技术水平,无疑具有很好的加速作用。

    本书是集体努力的成果,主要作者包括北京工业大学的李玉鑑、张婷、单传辉、刘兆英、聂小广和欧军。他们对全书的内容进行了精心的布局、认真的编写和细致的整理。同时,曾少锋、刘博文、穆红章、余华擎和方皓达等人在文献资料、实现代码和软件工具的收集方面也提供了积极的帮助。此外,华章公司的温莉芳副总经理和张梦玲编辑对本书的排版提出了许多宝贵的意见。最后,需要特别感谢家人的支持,他们也在不知不觉中以各种方式对此书出版做出了贡献。

    限于作者水平,本书难免在内容取材和结构编排上有不妥之处,希望读者不吝赐教,提出宝贵的批评和建议,我们将不胜感激。

    作者

    2018 年 4 月于北京工业大学


    [1] 此书已由机械工业出版社出版,书号为 ISBN 978-7-111-55075-4。——编辑注

    第 1 章 概述

    深度学习是一种实现人工智能的强大技术,已经在图像视频处理、语音处理、自然语言处理等领域获得了大量成功的应用,并对学术界和工业界产生了非常广泛的影响。卷积神经网络是深度学习中最为重要的模型,2012 年以来极大地推进了图像分类、识别和理解技术的发展。而且通过与其他技术相结合,卷积神经网络还可用于设计实现游戏智能体 Q 网络、围棋程序 AlphaGo,以及语音识别和机器翻译软件等各种应用系统,所取得的成就已经使人工智能迈进了盛况空前、影响深远的新时代。本章主要介绍深度学习的起源和发展,说明卷积神经网络的形成和演变,分析卷积神经网络的应用和影响,讨论卷积神经网络的缺陷和视图,总结卷积神经网络的平台和工具,并概括本书的内容结构及案例数据。

    1.1 深度学习的起源和发展

    深度学习的概念起源于人工神经网络,本质上是指一类对具有深层结构的神经网络进行有效训练的方法。神经网络是一种由许多非线性计算单元(或称神经元、节点)组成的分层系统,通常网络的深度就是其中不包括输入层的层数。

    最早的神经网络是心理学家 McCulloch 和数理逻辑学家 Pitts 在 1943 年建立的 MP 模型[1],如图 1.1 所示。MP 模型实际上只是单个神经元的形式化数学描述,具有执行逻辑运算的功能,虽然不能进行学习,但开创了人工神经网络研究的时代。1949 年,Hebb 首先对生物神经网络提出了有关学习的思想[2]。1958 年,Rosenblatt 提出了感知器模型及其学习算法[3]。在随后的几十年间,尽管神经网络的研究出现过一段与 Minsky 对感知器的批评有关的低潮期[4],但仍然在逐步向前推进,并产生了许多神经网络的新模型[5-10]。到 20 世纪八九十年代,这些新模型终于引发了神经网络的重生,并掀起了对神经网络研究的世界性高潮[11]。其中最受欢迎的模型至少包括:Hopfield 神经网络[8]、波耳兹曼机[9]和多层感知器[10]。最早的深度学习系统也许就是那些通过数据分组处理方法训练的多层感知器[12]。多层感知器,在隐含层数大于 1 时常常称为深层感知器,实际上是一种由多层节点有向图构成的前馈神经网络[13],其中每一个非输入节点是具有非线性激活函数的神经元,每一层与其下一层是全连接的。此外,Fukushima 提出的神经认知机可能是第一个具有“深度”属性的神经网络[14-16],并且也是第一个集成了“感受野”思想的神经网络[17-18],以便有效地对视觉输入的某些特性起反应。更重要的是,神经认知机促成了卷积神经网络结构的诞生和发展[19]。而卷积神经网络作为一种判别模型,极大地推进了图像分类、识别和理解技术的发展,在大规模评测比赛中成绩卓著[20],盛誉非凡。

    图 1.1

    在训练神经网络方面,反向传播无疑是最常用、最著名的算法[10,21]。这是一种有监督学习算法,需要教师指导信号。也就是说,应提供一组训练样本,对给定的输入,指明相应的输出。然而,直到 20 世纪 80 年代末期,反向传播似乎还只是对浅层网络有效,尽管原理上也应对深层网络有效。浅层网络主要是指具有 1 个隐含层的神经网络,如图 1.2 所示。深层网络则主要是指具有 2 个及以上隐含层的神经网络,如图 1.3 所示。在早期的应用中,大多数多层感知器都只用 1 个或很少的隐含层,增加隐含层几乎没有什么经验上的收益。这似乎可以从神经网络的单隐层感知器逼近定理中找到某种解释[22,23],该定理指出,只要单隐层感知器包含的隐含神经元足够多,就能够在闭区间上以任意精度逼近任何一个多变量连续函数。直到 1991 年的时候,关于多层感知器在增加层数时为什么难学习的问题,才开始作为一个深度学习的基本问题,得到了完全的理解。

    图 1.2 浅层(单隐层)神经网络

    图 1.3 深层神经网络

    1991 年,Hochreteir 正式指出,典型的深层网络存在梯度消失或爆炸问题,从而明确确立了深度学习的一个里程碑[24]。该问题是说,累积反向传播误差信号在神经网络的层数增加时会出现指数衰减或增长的现象,从而导致数值计算快速收缩或越界。这就是深层网络很难用反向传播算法训练的主要原因。需要指出的是,梯度消失或爆炸问题又称为长时滞后问题,在循环神经网络中也会出现[25]

    为了在一定程度上克服梯度消失或爆炸问题,1990~2000 年,Hochreiter 的深邃思想推动了若干新方法的探索[26-28]。但除了卷积神经网络以外[29],训练深层网络的问题直到 2006 年才开始得到严肃认真的对待。一个重要的原因是,1995 年之后支持向量机的快速发展减缓了神经网络的有关工作进展[30]

    普遍认为,深度学习正式发端于 2006 年,以 Hinton 及其合作者发表的两篇重要论文为标志:一篇发表在《Neural Computation》上,题目为“A fast learning algorithm for deep belief nets”[31];另一篇发表在《Science》上,题目为“Reducing the dimensionality of data with neural networks”[32]。从那以后,大量的深度学习模型开始重新受到广泛关注,或如雨后春笋般迅速发展起来,其中主要包括受限波耳兹曼机(Restricted Boltzman Machine,RBM)[33]、深层自编码器(deep AutoEncoder,deep AE)[32]、深层信念网络(deep belief net)[31]、深层波耳兹曼机(Deep Boltzman Machine,DBM)[34]、和积网络(Sum-Product Network,SPN)[35]、深层堆叠网络(Deep Stacked Network,DSN)[36]、卷积神经网络(Convolutional Neural Network,CNN)[19]、循环神经网络(Recurrent Neural Network,RNN)[25]、长短期记忆网络(Long Short-Term Memory network,LSTM network)[27]、强化学习网络(Reinforcement Learning Network,RLN)[37]、生成对抗网络(Generative Adversarial Network,GAN)[38]等。通过结合各种有效的训练技巧,比如最大池化(max pooling)[39]、丢失输出(dropout)[40]和丢失连接(dropconnect)[41],这些深度学习模型取得了许多历史性的突破和成就,例如手写数字识别[32]、ImageNet 分类[20]和语音识别[42]。而这些历史性的突破和成就,使深度学习很快在学术界掀起了神经网络的一次新浪潮。其中最主要的原因,当然是深度学习在解决大量实际问题时所表现的性能超越了机器学习的其他替代方法,例如支持向量机[30]

    在理论上,一个具有浅层结构或层数不够深的神经网络虽然在节点数足够大时也可能充分逼近地表达任意的多元非线性函数,但这种浅层表达在具体实现时往往由于需要太多的节点而无法实际应用。一般说来,对于给定数目的训练样本,如果缺乏其他先验知识,人们更期望使用少量的计算单元来建立目标函数的“紧表达”,以获得更好的泛化能力[43]。而在网络深度不够时,这种紧表达可能根本无法建立起来,因为理论研究表明,深度为 k 的网络能够紧表达的函数在用深度为 k-1 的网络来表达时有时需要的计算单元会呈指数增长[44]。这种函数表达的潜在能力说明,深层神经网络(又称深度神经网络)在一定的条件下可能具有非常重要的应用前景。随着深度学习的兴起,这种潜在能力开始逐步显现出来,特别是对卷积神经网络的全面推广应用,使得这种潜在能力几乎得到了淋漓尽致的发挥。

    1.2 卷积神经网络的形成和演变

    卷积神经网络最初是受到视觉系统的神经机制启发、针对二维形状的识别设计的一种生物物理模型,在平移情况下具有高度不变性,在缩放和倾斜情况下也具有一定的不变性。这种生物物理模型集成了“感受野”的思想,可以看作一种特殊的多层感知器或前馈神经网络,具有局部连接、权值共享的特点,其中大量神经元按照一定方式组织起来对视野中的交叠区域产生反应。1962 年,Hubel 和 Wiesel 通过对猫的视觉皮层细胞的研究,提出了感受野的概念[17-18]。1979 年,日本学者 Fukushima 在感受野概念的基础上,提出了神经认知机模型[14-16],该模型被认为是实现的第一个卷积神经网络。1989 年,LeCun 等人首次使用了权值共享技术[45]。1998 年,LeCun 等人将卷积层和下采样层相结合,设计卷积神经网络的主要结构,形成了现代卷积神经网络的雏形(LeNet)[19]。2012 年,卷积神经网络的发展取得了历史性的突破,Krizhevsky 等人采用修正线性单元(Rectified Linear Unit,ReLU)作为激活函数提出了著名的 AlexNet,并在大规模图像评测中取得了优异成绩[46],成为深度学习发展史上的重要拐点。

    在理论上,卷积神经网络是一种特殊的多层感知器或前馈神经网络。标准的卷积神经网络一般由输入层、交替的卷积层和池化层、全连接层和输出层构成,如图 1.4 所示。其中,卷积层也称为“检测层”,“池化层”又称为下采样层,它们可以被看作特殊的隐含层。卷积层的权值也称为卷积核。虽然卷积核一般是需要训练的,但有时也可以是固定的,比如直接采用 Gabor 滤波器[47]。作为计算机视觉领域最成功的一种深度学习模型,卷积神经网络在深度学习兴起之后已经通过不断演化产生了大量变种模型。

    图 1.4 标准卷积神经网络

    从结构的角度看,卷积神经网络起初只能处理黑白或灰度图像,变种模型通过把红、绿、蓝 3 个颜色通道作为一个整体输入已能直接处理彩色图像[46],有些还可以直接处理多帧图像甚至连续图像[48]。同时,变种模型可以使用多个相邻的卷积层或多个相邻的池化层,也可以使用重叠池化和最大池化,还可以使用修正线性单元、渗漏修正线性单元(Leaky ReLU,LReLU)、参数修正线性单元(Parametric ReLU,PReLU)或指数线性单元(Exponential Linear Unit,ELU)取代 sigmoid 单元作为激活函数[46,49-51],也可以在输出层采用软最大函数 softmax 替代 sigmoid 函数以产生伪概率。此外,卷积神经网络可以设计成孪生结构(siamese architecture),把原始数据映射到目标空间,产生对几何扭曲的鲁棒性[52]。最后,卷积神经网络可以设计成快道结构,允许信息通过快道无阻碍地跨越多层流动,使得用梯度下降训练非常深的网络变得更加容易[53]

    从卷积核的角度看,卷积神经网络可以通过采用非常小的卷积核,比如 1×1 和 3×3 大小,被加深成一个更深的网络,比如 16 层或 19 层的 VGGNet[54]。如果采用参数修正线性单元代替修正线性单元,可以把 VGGNet 发展成 MSRANet[55]。而且,卷积神经网络通过使用小卷积核在保持总体计算代价的条件下增加深度和宽度,并与“摄入模块(inception module)”进行集成,可以用来建立谷歌网络(GoogLeNet)[56]。此外,卷积神经网络通过使用微型多层感知器代替卷积核,还可以被扩展成更为复杂的网络,例如“网中网(Network In Network,NIN)”[57]

    从区域的角度看,区域卷积神经网络(Region-based CNN,R-CNN)可以用来抽取区域卷积特征,并通过区域提议进行更加鲁棒的定位和分类[58]。空间金字塔池化网络(Spatial Pyramid Pooling Net,SPPNet)可以克服其输入大小固定的缺点,办法是在最后一个卷积层和第一个全连接层之间插入一个空间金字塔池化层[59]。不管输入的大小如何,空间金字塔池化层都能够产生固定大小的输出,并使用多尺度空间箱(spatial bin)代替滑动窗口对在不同尺度上抽取的特征进行池化。虽然与 R-CNN 相比,空间金字塔池化网络具有能够直接输入可变大小图像的优势,但是它们需要一个多阶段的管道把特征写入硬盘,训练过程较为麻烦。为了解决这个训练问题,可以在 R-CNN 中插入一个特殊的单级空间金字塔池化层(称为感兴趣区池化层,ROI pooling layer),并将其提取的特征向量输入到一个最终分化成两个兄弟输出层的全连接层,再构造一个单阶段多任务损失函数对所有网络层进行整体训练,建立快速区域卷积神经网络(Fast R-CNN)[60],其优点是可以通过优化一个单阶段多任务损失函数进行联合训练。为了减少区域提议的选择代价,可以插入一个区域提议网络与 Fast R-CNN 共享所有卷积层,进一步建立更快速区域卷积神经网络(Faster R-CNN),产生几乎零代价的提议预测对象(或称为目标、物体)边界及有关分数[61]。为了获得实时性能极快的对象检测速度,可以把输入图像划分成许多网格,并通过单个网络构造的整体检测管道,直接从整幅图像预测对象的边框和类概率建立 YOLO 模型,只需看一遍图像就能知道对象的位置和类别[62]。为了更准确地定位对象,还可以在多尺度特征图的每个位置上,使用不同长宽比的缺省框建立单次检测器(SSD)来取代 YOLO[63]。此外,采用空间变换模块有助于卷积神经网络学到对平移、缩放、旋转和其他扭曲更鲁棒的不变性[64]。最后,可以把 Faster R-CNN 扩展成掩膜区域卷积神经网络(Mask R-CNN),在图像中有效检测对象的同时,还能够对每个对象实例生成一个高质量的分割掩膜[65]

    从优化的角度看,许多技术可以用来训练卷积神经网络,比如丢失输出[40,66]、丢失连接[41]和块归一化(batch normalization)[67]。丢失输出是一种减小过拟合的正则化技术,而丢失连接是丢失输出的推广。块归一化(或批量归一化)则是按迷你块大小对某些层的输入进行归一化处理的方法。此外,残差网络(Residual Network,ResNet)采用跨越 2~3 层的连接策略也是一种重要的优化技术,可以用来克服极深网络的训练困难。借助残差学习能够快速有效地成功训练超过 150 层甚至 1000 层的深层卷积神经网络,它在 ILSVRC&COCO 2015 的多项任务评测中发挥了关键作用[68],全部取得了第一名的突出成绩。最后,为了优化模型的结构,还可以采用火焰模块(fire module)建立卷积神经网络的挤压模型 SqueezeNet[69],也可以结合深度压缩(deep compression)技术进一步减少网络的参数[70]

    从模型演变的角度看,卷积神经网络的发展脉络如图 1.5 所示。从图中可以看出,现代卷积网络以 LeNet 为雏形,在经过 AlexNet 的历史突破之后,演化生成了很多不同的网络模型,主要包括:加深模型、跨连模型、应变模型、区域模型、分割模型、特殊模型和强化模型等。加深模型的代表是 VGGNet-16、VGGNet-19 和 GoogLeNet;跨连模型的代表是 HighwayNet、ResNet 和 DenseNet;应变模型的代表是 SPPNet;区域模型的代表是 R-CNN、Fast R-CNN、Faster R-CNN、YOLO 和 SSD;分割模型的代表是 FCN、PSPNet 和 Mask R-CNN;特殊模型的代表是 SiameseNet、SqueezeNet、DCGAN、NIN;强化模型的代表是 DQN 和 AlphaGo。

    图 1.5 卷积神经网络的演变

    1.3 卷积神经网络的应用和影响

    自从卷积神经网络在深度学习领域闪亮登场之后,很快取得了突飞猛进的进展,不仅显著提高了手写字符识别的准确率,而且屡屡在图像分类与识别、目标定位与检测等大规模数据评测竞赛中名列前茅、战绩辉煌。此外,卷积神经网络在人脸验证、交通标志识别、视频游戏、视频分类、语音识别、机器翻译、围棋程序等各个方面也获得广泛的成功应用。

    在手写字符识别方面,LeCun 等人早在 1998 年就采用卷积神经网络模型使 MNIST 数据集上的错误率达到了 0.95% 以下[19],Simard 等人在 2003 年采用交叉熵训练卷积神经网络把 MNIST 数据集上的错误率进一步降到了 0.4%,Ranzato 等人在 2006 年采用大卷积神经网络和无监督预训练又把 MNIST 数据集上的错误率降到了 0.39%,Ciresan 等人在 2012 年采用卷积神经网络的委员会模型把 MNIST 数据集上的错误率降到了目前的最低水平 0.23%。更详细的统计结果请访问网址 http://yann.lecun.com/exdb/mnist/

    在图像分类方面,由 Krizhevsky、Sutshever 和 Hinton 组织的超级视觉队(SuperVision)于 2012 年实现了一个深层卷积神经网络,参加大规模视觉识别挑战赛(ImageNet Large Scale Visual Recognition Challenge 2012,ILSVRC-2012)时获得了最好的前 5 测试错误率(16.4%),比第二名的成绩低 10% 左右[46]。这个卷积神经网络现在称为 AlexNet,使用了“dropout”优化技术和“ReLU”激活函数,以及非常有效的 GPU 实现,显著加快了训练过程。2013~2017 年的挑战赛中,成绩最好的图像分类系统分别是 Claeifai[71]、GoogLeNet[56]、残差网络[68]、六模型集成(ensemble of 6model)[72]、双通道网络(Dual Path Network,DPN)[73],它们都使用了卷积神经网络的模型结构。这些网络获得的前 5 测试错误率分别为 11.7%、6.7%、3.57%、2.99% 和 3.41%。

    在 ILSVR 2012~2017 年的单目标定位挑战赛上,获得最好错误率的系统都集成了卷积神经网络,分别是 AlexNet[46]、Overfeat[74]、VGGNet[54]、ResNet[68]、集成模型 3(ensemble 3)[72]和双通道网络[73],相应的最好错误率分别为34.2%、29.9%、25.3%、9.02%、7.71% 和 6.22%。在 ILSVRC-2014 的目标检测挑战赛上,Lin 等人将 R-CNN 和 NIN 相结合,获得了 37.2% 的平均准确率[57],Szegedy 等人使用 GoogLeNet 获得了 43.9% 的平均准确率[56]。在 ILSVRC-2015 的目标检测挑战赛上,He 等人将 Faster R-CNN 和 ResNet 相结合,获得了 62.1% 的平均准确率,比第二名高出了 8.5%[68]。在 2016 年的目标检测挑战赛上,Zeng 等人采用门控双向卷积神经网络(gated bi-directional CNN)获得了 66.28% 的平均准确率[75]。在 2017 年的目标检测挑战赛上,Shuai 等人将特征金字塔网络与门控双向卷积神经网络相结合,获得了 73.14% 的平均准确率。

    在人脸验证方面,Fan 等人于 2014 年建立了一个金字塔卷积神经网络(pyramid CNN),在 LFW 数据集上获得了 97.3% 的准确率,其中 LFW 是“Labeled Faces in the Wild”的缩写[76]。2015 年,Ding 等人利用精心设计的卷积神经网络和三层堆叠的自编码器建立了一个复杂的混合模型,在 LFW 数据集上获得了高于 99.0% 的准确率[77]。Sun 等人提出了一个由卷积层和摄入层(inception layer)堆叠而成的 DeepID3 模型,在 LFW 数据集上获得了 99.53% 的准确率[78]。此外,Schroff 等人实现了“FaceNet”系统,在 LFW 和 YouTube 人脸数据集上分别获得了 99.63% 和 95.12% 的准确率[79]

    在交通标志识别方面,Ciresan 等人于 2011 年实现了一个由卷积神经网络和多层感知器构成的委员会机器,在德国交通标志识别标准数据集(German Traffic Sign Recognition Benchmark,GTSRB)上获得了 99.15% 的准确率[80]。2012 年,Ciresan 等人提出了一个多列卷积神经网络,在 GTSRB 上获得了 99.46% 的准确率,超过了人类的识别结果[81]

    在视频游戏方面,Mnih 等人于 2015 年通过结合卷积神经网络和强化学习,开发了一个深度 Q- 网络智能体的机器玩家[37],只需输入场景像素和游戏得分进行训练,就能够让很多经典的 Atari 2600 视频游戏成功学会有效的操作策略,达到与人类专业玩家相当的水平。这种深度 Q- 网络智能体在高维感知输入和行为操纵之间的鸿沟上架起了一座桥梁,能够出色地处理各种具有挑战性的任务。

    在视频分类方面,使用独立子空间分析(Independent Subspace Analysis,ISA)方法,Le 等人于 2011 年提出了堆叠卷积 ISA 网络,能够从无标签视频数据中学习不变的时空特征。该网络在 Hollyword 2 和 YouTube 数据集上分别获得了 53.3% 和 75.8% 的准确率[82]。2014 年,Karpathy 等人对卷积神经网络在大规模视频分类上的效果进行了广泛的经验评估,在 Sports-1M 测试集的 200000 个视频上获得了 63.9% 的 Hit@1 值(即前 1 准确率)[83]。2015 年,Ng 等人采用卷积神经网络和长短期记忆循环神经网络的混合模型,在 Sports-1M 测试集上获得了 73.1% 的 Hit@1 值[84]

    在语音识别方面,Abdel-Hamid 等人于 2012 年第一次证实,使用卷积神经网络能够在频率坐标轴上有效归一化说话人的差异,并在 TIMIT 音素识别任务上将音素错误率从 20.7% 降到 20.0%[85]。这些结果在 2013 年被微软研究院的 Abdel-Hamid 等人和 Deng 等人以及 IBM 研究院的 Sainath 等人使用改进的卷积神经网络结构、预训练和池化技术拓展到大词汇语音识别上[86-87]。进一步的研究表明,卷积神经网络对训练集或者数据差异较小的任务帮助最大[88-90]。此外,通过结合卷积神经网络、深度神经网络和基于 i-vector 的自适应技术,IBM 的研究人员在 2014 年说明他们能够将 Switchboard Hub5′00 评估集的词错误率降至 10.4%。

    在机器翻译方面,Gehring 等人使用一种全新的卷积神经网络模型进行从序列到序列的学习[91],能够在非常大的标准数据集上超越循环神经网络的性能,不仅可以大幅提高翻译速度,同时也提高了翻译质量。比如,这种全新的模型在 WMT’16 英语到罗马尼亚语的翻译任务上可比以前最好的系统提高 1.8 的 BLEU 分数,在 WMT’14 英语到法语的翻译任务上可比 Wu 等人的长短期记忆神经翻译模型提高 1.5 的 BLEU 分数[92],在 WMT’14 英语到德语的翻译任务上可超过当前最高水平 0.5 的 BLEU 分数。

    在围棋程序方面,DeepMind 开发的 AlphaGo 利用深层网络和蒙特卡罗树搜索(Monte Carlo tree search),2015 年 10 月首次在完整的围棋比赛中没有任何让子以 5 比 0 战胜了人类的专业选手、欧洲冠军、职业围棋二段选手樊麾[93],这也是计算机围棋程序首次击败围棋职业棋手。2016 年 3 月,AlphaGo 又以 4 比 1 战胜了人类的顶尖高手、世界冠军、职业围棋九段选手李世石。2016 年末 2017 年初,AlphaGo 在中国棋类网站上以 Master 为注册账号与中日韩数十位围棋高手进行快棋对决,连续 60 局无一败绩。2017 年 5 月,在中国乌镇围棋峰会上,AlphaGo 以 3 比 0 战胜排名世界第一的围棋冠军柯洁。

    1.4 卷积神经网络的缺陷和视图

    从上述应用和成果不难看出,卷积神经网络已经使人工智能迈进了盛况空前、影响深远的新时代。不过这并不等于说,可以用卷积神经网络完全实现人类的智能。虽然现在卷积神经网络分类图像中的对象能够达到与人类匹敌的水平[68],但其视觉与人类的视觉相比仍然是非常不同的[94]。事实上,即使成功训练之后,卷积神经网络也仍然可能错分对抗样本。对抗样本是一种含有人类不可感知的微小扰动的非随机图像,如图 1.6 所示,在一幅熊猫图像中加入微量噪声后,它可能变成一幅对抗熊猫图像的样本,人类仍然能够轻松识别它为熊猫,但卷积神经网络却一口咬定它是长臂猿,详情请参见文献[95]。另外,有些人类根本不能识别的噪声图像,如图 1.7 所示,却可能成为卷积神经网络的欺骗图像,让卷积神经网络以高于 99% 的置信度识别它为一个熟知的对象(比如数字)[96]。因此,卷积神经网络在实际应用中仍然存在一些不易被察觉的潜在缺陷。

    图 1.6 对抗图像样本举例

    图 1.7 欺骗图像举例。随机噪声图像欺骗卷积神经网络,被识别为数字 0~9

    为了更好地理解卷积神经网络的成功与失败,一种办法是采用可视化技术来分析其数据表达并解释其工作机理[97-98],例如以某种可见视图方式来显示激活和特征。通过可视化技术,能够按照逐级上升的顺序展现卷积神经网络各层的直觉期望性质,包括组合性、不变性和类别性。常用可视化技术,比如逆变换(inversion)、激活最大化(activation maximization)和卡通化(caricaturization),是以自然原像概念为基础的。自然原像就是那些看起来具有显著自然特征的图像。通常,一幅图像经过卷积神经网络提取特征后,随着层次的深入,可视化结果会变得越来越模糊和抽象[98]。比如,图 1.8 是用 AlexNet 处理一幅狗的图像后可视化各层特征的结果,看起来逐层模糊和抽象。

    图 1.8 卷积神经网络的逐层可视化举例

    1.5 卷积神经网络的 GPU 实现和 cuDNN 库

    只采用 CPU 在大规模数据集中训练卷积神经网络的速度很慢,因此可以结合图形处理单元(Graphic Processing Unit,GPU)进行加速。GPU 具有单指令多数据流结构,非常适合用一个程序处理各种大规模并行数据的计算问题。最常用的 GPU 是英伟达(Nvidia)生产的。编写 GPU 代码可在 CUDA 环境下进行。CUDA(Compute Unified Device Architecture)是一种用于 GPU 通用计算的并行计算平台和编程模型。它以 C 语言为基础,并对 C 语言进行了扩展,能够在显卡芯片上执行程序。CUDA 提供了一个深度神经网络的 GPU 加速库 cuDNN(CUDA Deep Neural Network),完成了对卷积、池化、归一化和激活函数层等标准操作的快速实现。如果读者想了解更多的相关信息,可参考以下网站:

    1.6 卷积神经网络的平台和工具

    为了在解决各种实际问题中有效地利用深度学习模型,特别是卷积神经网络,现在已经有很多开发平台和工具可以选择。比较常用的有 Theano、TensorFlow、Caffe、Caffe 2、CNTK、MXNet、Torch、Deeplearning4J 和 Keras 等,其中 TensorFlow、Caffe 2 和 MXNet 之间的竞争可能会比较激烈。目前,这些平台和工具还没有任何一种完善到足以解决“所有”的业务问题,大多通过专有解决方案提供先进的机器学习和人工智能的功能,包括手写字符识别、图像识别、视频识别、语音识别、自然语言处理和对象识别等高级功能。下面分别对它们进行简要的说明。

    1)Theano 由蒙特利尔大学学习算法学院的 30~40 名教师和学生集体维护,其创始人是深度学习研究的重要贡献者 Yoshua Bengio。Theano 通过 BSD 许可发布,支持快速开发高效的机器学习算法。Theano 的结构相当简单,以 Python 为代码库和接口,其中 C/CUDA 代码也被打包成 Python 字符串。这对开发者来说很难驾驭、调试和重构。Theano 开创了使用符号图来编程网络的趋势,其符号 API 支持循环控制,使得循环神经网络的实现更容易、更高效。虽然 Theano 是一个很好的学术研究工具,在单个 CPU 上的运行效率较高,但缺乏分布式应用程序管理框架,只支持一种编程开发语言,在开发大型分布式应用程序时可能会遇到挑战。

    2)TensorFlow 来自早期的 Google 库 DistBelief V2,是作为 Google Brain 项目的一部分开发的专有深度网络库。由于 TensorFlow 支持广泛的功能,如图像识别、手写字符识别、语音识别、预测以及自然语言处理,所以在 2015 年 11 月 9 日以 Apache 2.0 许可开源后,谷歌立即获得了大量的关注。有些人评价 TensorFlow 是对 Theano 的重新设计。TensorFlow 在 2017 年 2 月 15 日发布了 1.0 版本,是 8 个先前版本的累积,解决了很多不完整的核心功能和性能问题。TensorFlow 的编程接口包括 Python 和 C++,并支持 Java、Go、R 和 Haskell API 的 alpha 版本接口。另外,TensorFlow 支持精细的网格层,允许用户构建新的复杂层类型,允许模型的不同部分在不同的设备上并行训练,还可以使用 C++Eigen 库在 ARM 架构上编译和优化。经过训练的 TensorFlow 模型可以部署在各种服务器或移动设备上,无须实现单独的解码器或加载 Python 解释器。

    3)Caffe 开创于 2013 年年底,可能是第一个主流的行业级深度学习工具包,由领导 Facebook AI 平台工程的贾扬清负责设计和实现,在 BSD 2-Clause 开源许可后发布。作为一种在计算机视觉界最受欢迎的工具包,Caffe 具有优良的卷积神经网络模型结构,在 2014 年 ImageNet 挑战赛中脱颖而出。Caffe 的运行速度快,学习速度为 4ms/图,推理速度为 1ms/图,在单个 Nvidia K40GPU 上每天处理超过 6000 万张图片,是研究实验和商业部署的完美选择。Caffe 是基于 C++ 的,可以在各种跨平台设备上编译,包括一个 Windows 的端口,支持 C++、Matlab 和 Python 等编程接口。而且,Caffe 拥有一个庞大的用户社区为其深层网络存储库做贡献,包括 AlexNet 和 GoogLeNet 两种流行的用户网络。Caffe 的缺点是不支持细粒度网络层,在构建复合层类型时必须以低级语言完成,对常规网络和语言建模的支持总体上很差。

    4)Caffe 2 是 Caffe 的升级版,于 2017 年 4 月 18 日由 Facebook 根据 BSD 许可协议开源,继续强力支持视觉类型问题,并增加了自然语言处理、手写识别和时间序列预测的循环神经网络和长短期记忆网络。Caffe 2 可以把 Caffe 模型轻松转换为实用程序脚本,但更侧重于模块化、卓越的移动和大规模部署,能够像 TensorFlow 一样使用 C++Eigen 库来支持 ARM 架构,并在移动设备上部署深度学习模型。随着 Facebook 最新宣布其改变航向,Caffe 2 在深度学习社区中为大众所热捧,可能超越 Caffe 成为主要的深入学习框架。

    5)CNTK 开始称为 Computational Network Toolkit(计算网络工具包),但在 CNTK 2.0Beta1 版本根据 MIT 许可发布后被正式更名为 Microsoft Cognitive Toolkit(微软认知套件)。CNTK 最早是由微软的计算机科学家开发的,目的是想要更快、更高效地提高语音识别技术,但很快就超越了语音领域并演变成了一个产品,包括一些领先的国际家电制造商和微软的旗舰产品组在内的客户依靠它来执行各种各样的深度学习任务。CNTK 可以运行在使用传统 CPU 或 GPU 的计算机上,既可以运行在一台笔记本电脑上,也可以运行在数据中心的一系列计算机上,支持使用 Python 或 C++ 编程接口的 64 位 Linux 和 Windows 操作系统,能够轻松处理从相对较小到非常巨大等各种规模的数据集。与 TensorFlow 和 Theano 的组成相似,CNTK 的网络被描述为向量运算(如矩阵的加法/乘法或卷积)的符号图,允许用户构建细粒度的网络层并创造新的复合层类型,而不像 Caffe 那样需要通过低级语言实现。此外,CNTK 又有点类似 Caffe,也是基于 C++ 的,具有跨平台的 CPU/GPU 支持,并在 Azure GPU Lab 提供了最高效的分布式计算性能。目前,CNTK 的主要不足是对 ARM 架构缺乏支持,这限制了其在移动设备上的功能。

    6)MXNet(发音为“mix-net”)起源于卡内基-梅隆大学和华盛顿大学,2017 年 1 月 30 日进入 Apache 基金会成为孵化器项目,是一个功能齐全、可编程和可扩展的深度学习框架,支持各种深度学习模型(比如卷积神经网络、循环神经网络和长短期记忆网络),也是目前唯一支持生成对抗网络模型的深度学习框架。而且,MXNet 提供了混合编程模型(命令式和声明式)的功能、大量编程语言的代码(包括 Python、C++、R、Scala、Julia、Matlab 和 JavaScript),以及强大的扩展能力(如 GPU 并行性和内存镜像、编程器开发速度和可移植性),甚至被有些人称为世界上最好的图像分类器。此外,MXNet 与 Apache Hadoop YARN(一种通用的、分布式的应用程序管理框架)集成,使其成为 TensorFlow 的竞争对手。特别是,亚马逊首席技术官 Werner Vogels 选择公开支持 MXNet,苹果公司在 2016 年收购 Graphlab/Dato/Turi 之后也传闻使用它。

    7)Torch 的主要贡献者是 Facebook、Twitter 和 Nvidia,Google Deep Mind 也有一部分功劳。Torch 按 BSD 3 开源许可发布,以非主流编程语言 Lua 实现,在员工熟练掌握之前很难提高整体效率,限制了其广泛应用。当前的版本 Torch7 提供了一个比 Caffe 更详尽的接口库,可以在上面非常方便地对已有模块实现逻辑复杂的调用。相比于 Caffe,Torch7 开放的接口更多,使用更灵活,很少会通过开发者给它实现新功能,而是依赖它去做扩展。但由于 Lua 语言本身功能偏弱,有点先天不足,所以 Torch7 不适合做层本身的组件开发。此外,Torch 缺乏 TensorFlow 的分布式应用程序管理框架。

    8)Deeplearning4J,简称 DL4J,是用 Java 和 Scala 编写的、由 Apache 2.0 授权的开放源码,支持常用的机器学习向量化工具,以及丰富的深度学习模型,包括受限波耳兹曼机、深信度神经网络、卷积神经网络、循环神经网络、RNTN 和长短期记忆网络等。DL4J 是 SkyMind 的 Adam Gibson 的创意,是唯一与 Hadoop 和 Spark 集成的商业级深度学习框架,内置多 GPU 支持,可协调多个主机线程,使用 Map-Reduce 来训练网络,同时依靠其他库来执行大型矩阵操作。DL4J 在 Java 中开源,本质上比 Python 快,速度与 Caffe 相当,可以实现多个 GPU 的图像识别、欺诈检测和自然语言处理等出色功能。

    9)Keras 是一个高层神经网络的应用程序编程接口(Application Programming Interface,API),由纯 Python 语言编写,并且使用 TensorFlow、Theano 或者 CNTK 作为后端。Keras 的设计有 4 个原则:用户友好、模块性、易扩展性和与 Python 协作。用户友好是指 Keras 提供一致而简洁的 API,以及清晰而有用的 bug 反馈,极大地减少了用户工作量。模块性是指 Keras 将网络层、损失函数、优化器、激活函数等方法都表示为独立的模块,作为构建各种模型的基础。易扩展性是指在 Keras 中只需要仿照现有的模块编写新的类或函数即可添加新的模块,非常方便。与 Python 协作是指 Keras 没有单独的模型配置文件,模型完全由 Python 代码描述,具有更紧凑和更易调试的优点。

    如果读者想了解上述开发工具的更多信息和资料,可以访问下面的网址:

    此外,必须介绍一下 CUDA-convnet。这是一个 C++/CUDA 实现的高性能卷积神经网络库,其中甚至包括更一般的前馈神经网络。目前有 CUDA-convnet 和 CUDA-convnet2 两个版本。CUDA-convnet 可以建立任意层的连通性和网络深度,实现任何有向无环图,使用反向传播算法进行训练,需要 Fermi-generation GPU(GTX 4xx、GTX 5xx 或者 Teslax 系列)。在 CUDA-convnet 的基础上,CUDA-convnet2 主要做了 3 个改进。一是在 Kepler-generation Nvidia GPU 上提高了训练速度(Geforce Titan、K20、K40);二是实现了数据并行、模型并行和二者混合并行的方式[99];三是改进了不太友好的代码,完善了一些不完整的文档,而且仍在不断补充完善。CUDA-convnet 和 CUDA-convnet2 的下载网址如下:

    1.7 本书的内容结构和案例数据

    卷积神经网络是目前应用最广的深度学习模型。本书旨在介绍其中比较重要的模型,并通过演示案例说明有关模型的应用价值。下面简述本书的内容结构及案例数据。

    1.7.1 内容结构

    本书共分为 12 章,有关应用案例的章节、框架和平台汇总在表 1.1 中。

    表 1.1 应用案例的章节、框架和平台

    各章的内容结构描述如下:

    第 1 章为概述,介绍深度学习的起源和发展,说明卷积神经网络的形成和演变,分析卷积神经网络的应用和影响,讨论卷积神经网络的缺陷和视图,总结卷积神经网络的平台和工具。

    第 2 章为预备知识,主要介绍卷积神经网络模型有关的数学基础。

    第 3 章为卷积神经网络的现代雏形 LeNet。首先介绍 LeNet 的原始模型,然后描述 LeNet 的标准模型,接着给出 LeNet 的学习算法,说明 LeNet 的 Caffe 代码,并分析 LeNet 的手写数字识别案例、交通标志识别案例和交通路网提取案例。

    第 4 章为卷积神经网络的突破模型 AlexNet。首先介绍 AlexNet 的模型结构,然后依次说明 AlexNet 的 Caffe 和 TensorFlow 代码,并分析 AlexNet 的大规模图像分类案例,最后简介其改进模型 ZFNet。

    第 5 章为卷积神经网络的应变模型。主要介绍 SPPNet 的模型结构,说明 SPPNet 的 Caffe 代码,并分析 SPPNet 的大规模图像分类案例。

    第 6 章为卷积神经网络的加深模型。主要介绍 VGGNet 和 GoogLeNet 的模型结构,说明它们的 TensorFlow 代码,并分析 VGGNet 的物体图像分类案例和 GoogLeNet 的鲜花图像分类案例。

    第 7 章为卷积神经网络的跨连模型。主要介绍快道网络、残差网络、密连网络和拼接网络。对于快道网络,只描述了模型结构。对于其余 3 个网络,还说明了核心模块的 Caffe 代码实现。此外,还分析了残差网络的大规模图像分类案例、密连网络的物体图像分类案例,以及拼接网络的人脸图像性别分类案例。

    第 8 章为卷积神经网络的区域模型。主要介绍区域卷积神经网络、快速区域卷积网络、更快速区域卷积网络、你只看一次网络和单次检测器。对于前两个网络,只描述了模型结构。对于另外 3 个网络,还说明了它们的 TensorFlow 代码,并分析了它们在 VOC 2007 数据集上的图像目标检测案例。

    第 9 章为卷积神经网络的分割模型。主要介绍全卷积网络、金字塔场景分析网络和掩膜区域卷积网络的模型结构,说明它们的 Caffe 或 TensorFlow 代码,并分析它们的图像语义分割、图像几何分割或图像实例分割等应用案例。

    第 10 章为卷积神经网络的特殊模型。主要介绍 4 种模型,包括孪生网络、挤压网络、生成对抗网络和网中网。不仅给出了它们的模型结构,说明了它们的 Caffe 或 TensorFlow 代码,也分析了它们的手写数字验证、大规模图像分类或人脸图像生成等应用案例。

    第 11 章为卷积神经网络的强化模型。主要介绍深层强化学习的标准模型、学习算法和变种模型,并分析一个笨笨鸟 Flappy Bird 智能体的游戏应用案例。

    第 12 章为卷积神经网络的顶尖成就 AlphaGo。主要介绍 AlphaGo 的设计原理和 AlphaGo Zero 的新思想,并分析一个仿效围棋程序 MuGo 的游戏应用案例。

    1.7.2 案例数据

    各章在介绍卷积神经网络的变种模型时,一般还给出了有关的应用案例。这些案例可能重复用到 13 个不同的数据集(大小信息和下载网址详见表 1.2),分别是:MNIST(Mixed National Institute of Standard and Technology)、GTSRB(German Traffic Sign Recognition Benchmark)、RRSI(Road Remote Sensing Image)、ImageNet 2012、CIFAR-10、Oxford-17、AR、VOC 2007、SIFT Flow、ADE20K、COCO(Common Objects in Context)2014、CelebA 和 Gamerecords。

    表 1.2 案例数据的信息描述和下载网址

    下面依次对每个数据集进行详细介绍。

    1)MNIST 是一个著名的手写数字数据集(如图 1.9 所示),包括 60000 个训练样本,10000 个测试样本。其中,每个样本图像的大小为 28×28 像素,仅包含一个单一的手写数字字符。像素的取值范围是[0,255],其中 0 表示黑,255 表示白,中间值表示灰度级。本书在第 3 章和第 10 章使用了 MNIST 数据集。

    图 1.9 MNIST 的手写数字图像举例

    2)GTSRB 是一个德国交通标志数据集(如图 1.10 所示)。其中有两套训练集和测试集,都包含 43 类交通标志。一套有 39209 个训练样本和 12630 个测试样本,另一套有 26640 个训练样本和 12569 个测试样本。本书在第 3 章的交通标志识别案例中选用了前一套训练集和测试集,但从中去掉了少量样本,只用了 39200 个训练样本和 12600 个测试样本。GTSRB 的图片格式是 .ppm 类型,大小在 15×15 到 250×250 之间不等,每个样本的长宽、兴趣区和标签等注释信息存放在相应的 .csv 文件中。为了便于处理,需要把它们的格式先转换成 .jpg 图像类型,并归一化为 32×32 像素大小。

    图 1.10 GTSRB 的交通标志图像举例

    3)RRSI 是一个交通路网遥感图像的数据集(如图 1.11 所示)。交通路网是指公路、城市道路和单位管辖范围允许社会机动车通行的地方,包括广场、公共停车场等用于公众通行的场所。RRSI 实际上共有 30 幅大小不等的图像和2种标注。本书在第 3 章选用了 11 幅来训练,5 幅来测试,进行路网自动提取。

    图 1.11 RRSI 的交通路网遥感图像举例

    4)ImageNet 是一个拥有超过 1500 万幅图像、约 22000 个类别的数据集(如图 1.12 所示),可用于大规模图像识别、定位和检测的研究。本书在第 4 章、第 5 章、第 7 章和第 10 章使用了 2012 年大规模图像视觉识别比赛(Large Scale Visual Recognition Competition,ILSVRC)的数据集 ImageNet(即 ImageNet 2012)设计图像分类案例。ImageNet 2012 包含 1281167 幅训练图像和 50000 幅测试图像,共有 1000 个类别。训练集中各类图像的数目可能不同,最少为 732 幅,最多为 1300 幅。而测试集中各类图像的数目都是 50 幅。

    图 1.12 ImageNet 2012 的物体图像举例

    5)CIFAR-10 是一个常见物体图像数据集(如图 1.13 所示),分为 10 个类别,包含 60000 幅 32×32 的彩色图像,50000 幅用于训练,10000 幅用于测试。注意:根据表 1.2 中的网址下载的 CIFAR-10 是经过封装的,有 3 个版本:Python、Matlab 和 Binary。本书在第 6 章和第 7 章选用了 Binary 版本。

    图 1.13 CIFAR-10 的物体图像举例

    6)Oxford-17 是一个鲜花图像数据集(如图 1.14 所示),其中包含 1360 幅图像,分为 17 类,每类 80 幅图像,大小不尽相同。本书在第 6 章随机选了 1088 幅图像作为训练集,其余 272 幅图像作为测试集,设计了 GoogLeNet 的鲜花图像分类案例。

    图 1.14 Oxford-17 的鲜花图像举例

    7)AR 是一个人脸图像数据集(如图 1.15 所示),包含 126 个人在不同表情、光照和妆容条件下的 4000 多幅人脸图像,但只能下载 100 个人的 2600 幅。本书在第 7 章的 CatNet 性别分类案例中从中选择了 40 名男性和 40 名女性的 2080 幅图像作为训练集,其余的 520 幅图像作为测试集。

    图 1.15 AR 的人脸图像举例

    8)VOC 2007(即 Pascal Voc 2007)是一个关于物体和场景的图像数据集(如图 1.16 所示),可以用于目标检测和语义分割任务。Pascal VOC 的全名是“Pattern Analysis,Statistical Modelling and Computational Learning Visual Object Classes”,指的是模式分析、统计建模、计算学习视觉物体分类。该数据集包含训练验证集文件夹 trainval 和测试集文件夹 test,分别包含 5011 幅和 4952 幅大小不同的图像。而且,这两个文件夹各自又都包含 5 个子文件夹:JPEGImages、Annotations、ImageSets、SegmentationClass 和 SegmentationObject。其中,JPEGImages 存放的是所有图像,包含 20 个类别。Annotations 存放的是 xml 格式的标签文件,每一个 xml 文件都对应于 JPEGImages 下的一幅图像。ImageSets 存放的是具体的图像信息,下设 3 个子文件夹 Layout、Main 和 Segmentation,分别存放人体部位数据(比如 head、hand、feet 等)、20 类图像物体识别数据,以及可用于分割的数据。SegmentationClass 和 SegmentationObject 用来存放分割后的图像,前者标注每个像素的类别,后者标注每个像素属于哪一个物体对象。本书在第 8 章的 Faster R-CNN、YOLO 和 SSD 的目标检测案例中使用了 VOC 2007。

    图 1.16 VOC 2007 的图像举例

    9)SIFT Flow 是一个关于不同场景的图像数据集(如图 1.17 所示),包含 2688 幅图像,其中 2488 幅训练图像、200 幅测试图像。这些图像的像素共有 33 个语义类别标记(桥、山、太阳等)和 3 个几何类别标记(水平、竖直和天空)。本书在第 9 章的 FCN 图像分割案例中使用了 SIFT Flow。

    图 1.17 SIFT Flow 的图像举例

    10)ADE20K 是一个关于不同场景的图像数据集(如图 1.18 所示),包含 20210 幅训练图像和 2000 幅测试图像。这些图像的像素被标记为 3148 个不同的语义类别。本书在第 9 章的 PSPNet 图像分割案例中使用了 ADE20K。

    图 1.18 ADE20K 的场景图像举例

    11)COCO 2014 是微软团队制作的一个图像数据集(如图 1.19 所示),可以用于物体识别、目标检测、语义分割和语义描述。其中,训练集有 82783 幅图像,验证集和测试集分别有 40504 幅图像。由于官方没有给出测试集的真实标签,所以本书在第 9 章的 Mask R-CNN 图像分割案例中使用训练集来学习,使用验证集来测试。

    12)CelebA 是一个名人人脸图像数据集(如图 1.20 所示),共包含 10177 位名人的 202599 幅人脸图像,其中训练集有 162770 幅图像,验证集有 19867 幅图像,测试集有 18962 幅图像。每幅人脸图像有 40 个不同的二值属性标注,比如是否微笑、是否戴眼镜、是否戴帽子等。本书在第 10 章的 DCGAN 人脸生成案例中使用了 CelebA。

    13)Gamerecords 是一个围棋棋局文件数据集(如图 1.21 所示),包含从 2001 年开始一直到 2017 年最新更新的棋局文件。本书在第 12 章 AlphaGo 的仿效围棋程序 MuGo 案例中,使用了 2017 年 4 月及之前发布的部分棋局文件,约 22959 个。每个棋局文件大概包含 200 个着子位置,总共约有 4591800 个着子位置,其中 4491800 个着子位置被用来训练,其余的 100000 个着子位置用来测试。

    图 1.19 COCO 2014 的物体图像举例

    图 1.20 CelebA 的人脸图像举例

    图 1.21 Gamerecords 的棋局举例

    第 2 章 预备知识
    第 3 章 卷积神经网络的现代雏形——LeNet(上)
    第 3 章 卷积神经网络的现代雏形——LeNet(下)
    第 4 章 卷积神经网络的突破模型
    第 5 章 卷积神经网络的应变模型
    第 6 章 卷积神经网络的加深模型
    第 7 章 卷积神经网络的跨连模型(上)
    第 7 章 卷积神经网络的跨连模型(下)
    第 8 章 卷积神经网络的区域模型(上)
    第 8 章 卷积神经网络的区域模型(下)
    第 9 章 卷积神经网络的分割模型(上)
    第 9 章 卷积神经网络的分割模型(下)
    第 10 章 卷积神经网络的特殊模型(上)
    第 10 章 卷积神经网络的特殊模型(下)
    第 11 章 卷积神经网络的强化模型
    第 12 章 卷积神经网络的顶尖成就——AlphaGo(上)
    第 12 章 卷积神经网络的顶尖成就——AlphaGo(下)
    附录 A Caffe 在 Windows 上的安装过程
    附录 B Caffe 在 Linux 上的安装过程
    附录 C TensorFlow 在 Windows 上的安装过程
    附录 D TensorFlow 在 Linux 上的安装过程
    参考文献

    阅读全文: http://gitbook.cn/gitchat/geekbook/5c945f90968b1d64b1e1028c

    展开全文
  • 数字通信(第三版)的pdf文件

    热门讨论 2010-04-01 09:26:29
    这本书适合作为电子工程系一年级研究生的教科书,也适合 从事数字通信系统设计的工程师作为自学课本和参考书。为阅读本书,读者应具备基本的微 积分、线性系统理论以及概率论和随机过程的预备知识等背景知识。 ...
  • 炼油厂自适应控制器实时地调整其参数。 羚羊出生后半小时就能以20英里每小时的速度奔跑。 扫地机器人判断是应该到下一个房间清理,还是回到充电位置充电。 人准备早餐的过程:通过人的感官观察环境,根据人的...
  • 炼油厂自适应控制器实时地调整其参数。 羚羊出生后半小时就能以20英里每小时的速度奔跑。 扫地机器人判断是应该到下一个房间清理,还是回到充电位置充电。 人准备早餐的过程:通过人的感官观察环境,根据人的...
  • 阿里Java面经大全(整合版)

    万次阅读 多人点赞 2018-08-03 16:10:12
    然后我就说了自认为最成功的是软件工程导论上和同学组队做的javaWeb项目,自己作为组长完成了所有后台代码、数据库设计,前端由其他组员完成。 HR姐姐问了项目是怎么开始的,怎么开发的,最后结果如何,遇到了什么...
  • =======================国外==================== Machine Learning 大家(1):M. I.... 在我的眼里,M Jordan无疑是武林中的泰山北斗。他师出MIT,现在在berkeley坐镇一方,在附近的两所名校(加stanford)中都可以...
  • 第1章 计算机图形学导论 1 1.1 计算机图形学概述 1 1.1.1 图形的表示方法 1 1.1.2 表示图形的数据准备 2 1.1.3 图形的显示 2 1.2 光栅刷新图形显示器 4 1.3 阴极射线管的基础知识 9 1.4 视频知识基础 11 ...
  • 后端架构师技术图谱

    2021-04-06 18:38:07
    死锁 操作系统 计算机原理 CPU 多级缓存 进程 线程 协程 Linux 给初学者还要部分学生提供知识体系整理好(笔记,PPT,学习视频,《java核心知识整理》共283页的PDF)免费领取群639714511,可以交流学习,群文件有...
  • 基于MK-MMD度量迁移学习的轴承故障诊断方法研究

    千次阅读 多人点赞 2022-03-19 19:27:07
    摘要 上一篇文章实验是基于凯斯...源域可以理解为用于模型训练的数据集,而目标域其实是我们需要去预测的数据集。但是往往源域数据集和目标域数据集之间是存在不同程度的数据分布差异。而目前的深度学习能够实现这...
  • 1.导论 相信很多同学已经在为今年的校招做准备了,随着AI的火热,越来越多的同学涌入了算法的行当之中。那去年校招的算法岗是有多火热?在知乎上看到这么一条帖子,先不说内容哈,足足400w+的阅读量啊。 不光是...
  • 其根据增益和自适应参考轨迹(超参数)给出了自适应奖励函数,该方法将学习满足规格的奖励函数与学习使奖励最大化的控制策略分开,以学习具有足够好性能的控制方案。 论文地址:https://arxiv.org/pdf/2103.12558.pdf ...
  • 人机交互笔记(HCI)

    2022-03-02 17:32:34
    笔记导航 导论 人类因素(human factor) 概述 输入 视觉 听觉 触觉 嗅觉和味觉 前沿技术 反应输出 手 声音 脸 大脑处理 感知过程 认知过程 记忆 总结 交互因素(interaction factor) 计算机因素 现代交互 基本原则...
  • 所有书籍PDF将全部上传到Github上面,方便广大好友下载学习。 https://github.com/yang-shuohao/Render-Books 计算机图形学基础,第5版(Fundamentals of Computer Graphics, 5th Edition) 1、介绍(Introduction...
  • 机器学习的数学基础.docx 中文版,对高等数学、线性代数、概率论与数理统计三门课的公式做了总结 2) 斯坦福大学机器学习的数学基础.pdf 原版英文材料,非常全面,建议英语好的同学直接学习这个材料 下载链接: ...
  • 说个大事儿各位吴彦祖&刘亦菲,大家好!经过深入思考,本号主决定花1-2年时间强更一个系列,暂且叫它《面霸导论》吧!《面霸导论》有几大块内容:今天这篇是《面霸导论》第一弹,文章是需要...
  • 导论 图形学应用场景 电子游戏: PBR:之狼 卡通渲染:无主之地 电影:黑客帝国 动画:疯狂动物城、冰雪奇缘 设计:概念图 可视化:虚拟现实 数码插画:模拟仿真 ...
  • 兼顾广度与深度,覆盖经典模型与方法并提供丰富的扩展阅读文献,可作为专业科研人员与工业界人士的参考书或技术手册。 点击链接了解详情并购买 扫码关注【华章计算机】视频号 每天来听华章哥讲书 更多精彩回顾 书讯...
  • BAT机器学习面试1000题系列(第1~305题)

    万次阅读 多人点赞 2017-09-28 11:37:49
    另外,这两篇文章可以做下参考:Logistic Regression 的前世今生(理论篇)、机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)。 6 overfitting怎么解决?机器学习 ML基础 中 dropout、...
  • 机器学习怎么学?看这篇就够了!!

    千次阅读 多人点赞 2020-03-30 23:14:15
    机器学习的数学基础.docx 中文版,对高等数学、线性代数、概率论与数理统计三门课的公式做了总结 2) 斯坦福大学机器学习的数学基础.pdf 原版英文材料,非常全面,建议英语好的同学直接学习这个材料 下载链接: ...
  • [转载]惯性导航专业相关书籍180多部

    千次阅读 2016-05-23 17:06:44
    在2000年左右要找一本合适的导航参考书还真是不太容易,当时图书馆只能借到屈指可数的几本,编著者们现在看来都是行业元老级人物了,膜拜。再者当时网络文献搜索还不是很方便,所以学习研究中就比较依赖于纸质的,能...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 122
精华内容 48
关键字:

模型参考自适应控制导论 pdf下载

友情链接: pywifi-master.rar