《神经网络与深度学习》—学习笔记

《神经网络与深度学习》—学习笔记_第1张图片
[nndl.github.io]
[神经网络与深度学习]
[nndl-book]

深度学习基础

深度学习是机器学习的一个分支,是指一类问题以及解决这类问题的方法。

深度学习问题是一个机器学习问题,指从有限样例中通过算法总结出一般性的规律,并可以应用到新的未知数据上。

深度学习采用的模型一般比较复杂,指样本的原始输入到输出目标之间数据流经过多个线性或非线性组件(component)。因为每个组件都会对信息进行加工,并进而影响后续的组件,所以当最后得到输出结果时,并不清楚其中每个组件的贡献是多少(贡献度分配问题 Credit Assignment Problem, CAP),贡献度分配问题关系到如何学习每个组件中的参数。

一种可以比较好的解决贡献度分配问题的模型是人工神经网络(Artificial Neural Networks, ANN)。人工神经网络(简称神经网络),是一种受人脑神经系统的工作方式启发而构造的数学模型。人脑神经系统是一个由生物神经元组成的高度复杂网络,是一个并行的非线性信息处理系统。人脑神经系统可以将声音、视觉等信号经过多层的编码,从最原始的低层特征不断加工、抽象,最终得到原始信号的语义表示。和人脑神经网络类似,人工神经网络是由人工神经元以及神经元之间的连接构成,其中有两类特殊的神经元:一类用来接收外部的信息,另一类用来输出信息。这样,神经网络可以看作信息从输入到输出的信息处理系统。如果把神经网络看作一组参数控制的复杂函数,并用来处理一些模式识别任务(比如语音识别、人脸识别等),神经网络的参数可以通过机器学习的方式来从数据中学习。因为神经网络模型一般比较复杂,从输入到输出的信息传递路径一般比较长,所以复杂神经网络的学习可以看成是一种深度的机器学习,即深度学习。

神经网络和深度学习并不等价。深度学习可以采用神经网络模型,也可以采用其他模型(比如深度信念网络是一种概率图模型)。但是,由于神经网络模型可以比较容易的解决贡献度分配问题,因此神经网络模型成为深度学习中主要采用的模型。虽然深度学习一开始用来解决机器学习中的表示学习问题,但是由于其强大的能力,深度学习越来越多的用来解决一些通用人工智能问题,比如推理、决策等。

人工智能

人工智能(Artificial Intelligence, AI)就是让机器具有人类的智能。

图灵测试:“一个人在不接触对方的情况下,通过一种特殊的方式和对方进行一系列的问答。如果在相当长的时间内,他无法根据这些问题判断对方是人还是计算机,那么就可以认为这个计算机是智能的”。图灵测试是促使人工智能从哲学探讨到科学研究的一个重要因素,引导了人工智能的很多研究方向。因为要使得计算机通过图灵测试,计算机就必须具备理解语言、学习、记忆、推理、决策等能力。这就延伸出了很多不同的子学科,比如机器感知(计算机视觉、语音信息处理)、学习(模式识别、机器学习、强化学习)、语言(自然语言处理)、记忆(知识表示)、决策(规划、数据挖掘)等。

人工智能是计算机科学的一个分支,主要研究、开发用于模拟、延伸和扩展人类智能的理论、方法、技术及应用系统等。

人工智能的定义:人工智能就是要让机器的行为看起来就像是人所表现出的智能行为一样。人工智能主要分为:

  • 感知:模拟人的感知能力,对外部刺激信息(视觉和语音等)进行感知和加工。主要研究领域包括语音信息处理和计算机视觉等。
  • 学习:模拟人的学习能力,主要研究如何从样例或从与环境的交互中进行学习。主要研究领域包括监督学习、无监督学习和强化学习等。
  • 认知:模拟人的认知能力,主要研究领域包括知识表示、自然语言理解、推理、规划、决策等。

人工智能的发展历史

  • 推理期:通过人类的经验,基于逻辑或者事实归纳出来一些规则,然后通过编写程序来让计算机完成一个任务。研究者开发了一系列的智能系统,比如几何定理证明器、语言翻译器等。
  • 知识期:研究者意识到知识对于人工智能系统的重要性。特别是对于一些复杂任务,需要专家系统来构建知识库。在这一时期,出现了各种各样的专家系统(Expert System),并在特定的专业领域取得了很多成果。专家系统可以简单的理解为“知识库+推理机”,是一类具有专门知识和经验的计算机智能程序系统。专家系统一般采用知识表示和知识推理等技术来完成通常由领域专家才能解决的复杂问题,因此专家系统也被称为基于知识的系统。一个专家系统必须具备三要素:1)领域专家级知识;2)模拟专家思维;3)达到专家级的水平。
  • 学习期:对于人类的很多智能行为(比如语言理解、图像理解等),很难知道其中的原理,也无法描述这些智能行为背后的“知识”。因此,也很难通过知识和推理的方式来实现这些行为的智能系统。为了解决这类问题,研究者开始将研究重点转向让计算机从数据中自己学习。事实上,“学习”本身也是一种智能行为。从人工智能的萌芽时期开始,就有一些研究者尝试让机器自动学习,即机器学习(Machine Learning,ML)。机器学习的主要目的是设计和分析一些学习算法,让计算机可以从数据(经验)中自动分析并获得规律,之后利用学习到的规律对未知数据进行预测,从而帮助人们完成一些特定任务,提高开发效率。机器学习的研究内容也十分广泛,涉及线性代数、概率论、统计学、数学优化、计算复杂性等多门学科。在人工智能领域,机器学习从一开始就是一个重要的研究方向。
    《神经网络与深度学习》—学习笔记_第2张图片

机器学习

机器学习(Machine Learning,ML)是指从有限的观测数据中学习(或“猜测”)出具有一般性的规律,并利用这些规律对未知数据进行预测的方法。机器学习是人工智能的一个重要分支,并逐渐成为推动人工智能发展的关键因素。

传统的机器学习主要关注如何学习一个预测模型,一般需要首先将数据表示为一组特征(Feature),特征的表示形式可以是连续的数值、离散的符号或其他形式。然后将这些特征输入的预测模型,并输出预测结果。这类机器学习可以看作浅层学习(Shallow Learning)。浅层学习的一个重要特点是不涉及特征学习,其特征主要靠人工经验或特征转换方式来抽取。

用机器学习来解决实际任务时,会面对多种多样的数据形式,比如声音、图像、文本等,不同的数据的特征构造方式差异很大。因此,在实际任务中使用机器学习模型一般会包含以下几个步骤:

  • 数据预处理:如去除噪声等。
  • 特征提取:从原始数据中提取一些有效的特征,比如在图像分类中,提取边缘、尺度不变特征变换(Scale Invariant Feature Transform,SIFT)特征等。
  • 特征转换:对特征进行一定的加工,比如降维和升维。降维包括特征抽取(Feature Extraction)和特征选择(Feature Selection)两种途径。常用特征转换方法有主成分分析(Principal Component Analysis,PCA)、线性判别分析(Linear Discriminant Analysis,LDA)等。
  • 预测:机器学习的核心部分,学习一个函数并进行预测。
    在这里插入图片描述
    机器学习的流程中,每个特征处理以及预测一般都是分开进行的。传统的机器学习模型主要关注最后一步,即构建预测函数。但是实际操作过程中,不同预测模型的性能相差不多,而前三步中的特征处理对最终系统的准确性有着十分关键的作用。特征处理一般都需要人工干预完成,利用人类的经验来选取好的特征,并最终提高机器学习系统的性能。因此,机器学习系统的主要工作量都消耗在了预处理、特征提取以及特征转换上。

表示学习

为了提高机器学习系统的准确率,需要将输入学习转换为有效的特征,或者更一般性的称为表示(Representation)。如果有一种算法可以自动的学习出有效的特征,并提高最终机器学习模型的性能,那么这种学习就可以叫作表示学习(Representation Learning)。

表示学习的关键是解决语义鸿沟(Semantic Gap)问题。语义鸿沟问题是指输入数据的底层特征和高层语义信息之间的不一致性和差异性。如果一个预测模型直接建立在底层特征之上,会导致对预测模型的能力要求过高。如果可以有一个好的表示在某种程度上能够反映出数据的高层语义特征,那么就能相对容易的构建后续的机器学习模型。

要学习到一种好的高层语义表示(一般分布式表示),通常需要从底层特征开始,经过多步非线性转换才能得到。深层结构的优点是可以增加特征的重用性,从而指数级的增加表示能力。因此,表示学习的关键是构建具有一定深度的多层次特征表示。

在传统的机器学习中,也有很多有关特征学习的方法,比如主成分分析、线性判别分析、独立成分分析等。但是,传统的特征学习一般是通过人为的设计一些准则,然后根据这些准则来选取有效的特征。特征的学习是和最终预测模型的学习分开进行的,因此学习到的特征不一定可以提升最终模型的性能。

深度学习

为了学习一种好的表示,需要构建具有一定“深度”的模型,并通过学习算法来让模型自动学习出好的特征表示(从底层特征,到中层特征,再到高层特征),从而最终提升预测模型的准确率。所谓“深度”是指原始数据进行非线性特征转换的次数。如果把一个表示学习系统看作一个有向图结构,深度也可以看作从输入节点到输出节点经过的最长路径的长度。

深度学习是一种学习方法可以从数据中学习一个“深度模型”,深度学习是机器学习的一个子问题,其主要目的是从数据中自动学习到有效的特征表示。

深度学习的数据流程,通过多层的特征转换,把原始数据变成更高层次、更抽象的表示。这些学习到的表示可以替代人工设计的特征,从而避免“特征工程”。

《神经网络与深度学习》—学习笔记_第3张图片

传统机器学习方法需要将一个任务的输入和输出之间人为的切割成很多子模块(或多个阶段),每个子模块分开学习。端到端学习(End-to_End Learning),也称端到端训练,是指在学习过程中不进行分模块或分阶段训练,直接优化任务的总体目标。在端到端学习中,一般不需要明确的给出不同模块或阶段的功能,中间过程不需要人为干预。端到端学习的训练数据为“输入-输出”对的形式,无需提供其他额外信息。因此,端到端学习和深度学习一样,都是要解决贡献分配问题。目前,大部分采用神经网络模型的深度学习也可以看作一种端到端的学习。

神经网络

人工神经网络是为模拟人脑神经网络而设计的一种计算模型,它从结构、实现机理和功能上模拟人脑神经网络。人工神经网络与生物神经元类似,由多个节点(人工神经元)互相连接而成,可以用来对数据之间的复杂关系进行建模。不同节点之间的连接被赋予了不同的权重,每个权重代表了一个节点对另一个节点的影响大小。每个节点代表一种特定函数,来自其他节点的信息经过其相应的权重综合计算,输入到一个激活函数中并得到一个新的活性值(兴奋或抑制)。从系统观点看,人工神经元网络是由大量神经元通过极其丰富和完善的连接而构成的自适应非线性动态系统。

构造一个人工神经网络比较容易,但是如何让人工神经网络具有学习能力并不是一件容易的事情。感知机是最早的具有机器学习思想的神经网络,但其学习方法无法扩展到多层的神经网络上。反向传播算法有效的解决了多层神经网络的学习问题,并成为最流行的神经网络学习算法。

人工神经网络诞生之初并不是用来解决机器学习问题。由于人工神经网络可以用作一个通用的函数逼近器(一个两层的神经网络可以逼近任意的函数),因此可以将人工神经网络看作一个可学习的函数,并将其应用到机器学习中。理论上,只要有足够的训练数据和神经元数量,人工神经网络就可以学到很多复杂的函数。

神经网络的发展历史

  • 第一阶段:模型提出
  • 第二阶段:冰河期
  • 第三阶段:反向传播算法引起的复兴
  • 第四阶段:流行度降低
  • 第五阶段:深度学习的崛起

知识体系

《神经网络与深度学习》—学习笔记_第4张图片

机器学习概述

机器学习是让计算机从数据中进行自动学习,得到某种知识(或规律)。作为一门学科,机器学习通常指一类问题以及解决这类问题的方法,即如何从观测数据(样本)中寻找规律,并利用学习到的规律(模型)对未知或无法观测的数据进行预测。

机器学习的三个基本要素

  • 模型
    《神经网络与深度学习》—学习笔记_第5张图片
  • 学习准则
    在这里插入图片描述
    《神经网络与深度学习》—学习笔记_第6张图片
    《神经网络与深度学习》—学习笔记_第7张图片
    《神经网络与深度学习》—学习笔记_第8张图片
    《神经网络与深度学习》—学习笔记_第9张图片
    《神经网络与深度学习》—学习笔记_第10张图片
  • 优化算法
    在这里插入图片描述
    《神经网络与深度学习》—学习笔记_第11张图片
    《神经网络与深度学习》—学习笔记_第12张图片
    《神经网络与深度学习》—学习笔记_第13张图片

线性回归

《神经网络与深度学习》—学习笔记_第14张图片
《神经网络与深度学习》—学习笔记_第15张图片

  • 经验风险最小化 《神经网络与深度学习》—学习笔记_第16张图片
    《神经网络与深度学习》—学习笔记_第17张图片
    《神经网络与深度学习》—学习笔记_第18张图片
  • 结构风险最小化
    《神经网络与深度学习》—学习笔记_第19张图片
  • 最大似然估计
    《神经网络与深度学习》—学习笔记_第20张图片
    《神经网络与深度学习》—学习笔记_第21张图片
  • 最大后验估计
    《神经网络与深度学习》—学习笔记_第22张图片
    《神经网络与深度学习》—学习笔记_第23张图片

机器学习算法的类型

安装训练样本提供的信息以及反馈方式的不同,将机器学习算法分为以下几类:
《神经网络与深度学习》—学习笔记_第24张图片
《神经网络与深度学习》—学习笔记_第25张图片
《神经网络与深度学习》—学习笔记_第26张图片

线性模型

《神经网络与深度学习》—学习笔记_第27张图片
在这里插入图片描述
《神经网络与深度学习》—学习笔记_第28张图片
《神经网络与深度学习》—学习笔记_第29张图片
在这里插入图片描述

Logistic回归

Softmax回归

感知器

支持向量机

《神经网络与深度学习》—学习笔记_第30张图片

前馈神经网络

神经元

激活函数 增强网络的表示能力和学习能力,激活函数具备以下性质:

  • 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数。

  • 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。

  • 激活函数的导函数的值域要在一个合适的区域内,不能太大也不能太小,否则会影响训练的效率和稳定性。
    神经网络中常用的激活函数:

  • Sigmoid型函数
    Sigmoid型函数是指一类S型曲线函数,为两端饱和函数,常用的Sigmoid函数有Logistic函数和Tanh函数。
    《神经网络与深度学习》—学习笔记_第31张图片

  • ReLU函数
    在这里插入图片描述

  • Swish函数
    《神经网络与深度学习》—学习笔记_第32张图片

  • GELU函数
    《神经网络与深度学习》—学习笔记_第33张图片

  • Maxout单元
    《神经网络与深度学习》—学习笔记_第34张图片

网络结构

通过一定的连接方式或信息传递方式进行协作的神经元即神经网络。

  • 前馈网络
    前馈网络中各个神经元按接收信息的先后分为不同的组,每一组可以看作一个神经层。每一层中的神经元接收前一层神经元的输出,并输出到下一层神经元。整个网络中的信息是朝一个方向传播,没有反向的信息传播。前馈网络可以看作一个函数,通过简单非线性函数的多次复合,实现输入空间到输出空间的复杂映射。
  • 记忆网络
    记忆网络,也称为反馈网络,网络中的神经元不但可以接收其他神经元的信息,也可以接收自己的历史信息。记忆网络中的神经元具有记忆功能,在不同的时刻具有不同的状态。记忆神经网络中的信息传播可以是单向或双向传播。
  • 图网络
    图网络是定义在图结构数据上的神经网络。图中每个节点都由一个或一组神经元构成。节点之间的连接可以是有向的,也可以是无向的。每个节点可以收到来自相邻节点或自身的信息。

卷积神经网络

卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有局部连接、权重共享等特性的深层前馈神经网络。卷积神经网络是受生物学上感受野机制的启发而 提出的。感受野(Receptive Field)机制主要是指听觉、视觉等神经系统中一些神经元特性,即神经元只接受其所支配的刺激区域内的信号。

前馈神经网络最主要是用来处理图像信息,在用全连接前馈网络来处理图像时,会存在两个问题:

  • 参数太多,如果输入图像大小为100X100的彩色图像,在全连接前馈网络中,第一个隐藏层的每个神经元到输入层都有100X100X3=30000个相互独立的连接,每个连接都对应一个权重参数。随着隐藏层神经元数量的增多,参数的规模也会急剧增加,导致整个神经网络的训练效率非常低,容易出现过拟合。
  • 局部不变性特征:自然图像中的物体都具有局部不变性特征,比如尺度缩放、平移、旋转等操作不影响其语义信息。而全连接前馈网络很难提取这些局部不变性特征,一般需要进行数据增强来提高性能。

卷积方式

  • 卷积
    实现高维特征到低维特征的转换。
  • 转置卷积
    低维特征映射到高维特征。
    《神经网络与深度学习》—学习笔记_第35张图片
    《神经网络与深度学习》—学习笔记_第36张图片
    《神经网络与深度学习》—学习笔记_第37张图片

《神经网络与深度学习》—学习笔记_第38张图片
《神经网络与深度学习》—学习笔记_第39张图片
《神经网络与深度学习》—学习笔记_第40张图片

  • 空洞卷积
    《神经网络与深度学习》—学习笔记_第41张图片
    《神经网络与深度学习》—学习笔记_第42张图片
    《神经网络与深度学习》—学习笔记_第43张图片
    《神经网络与深度学习》—学习笔记_第44张图片

卷积神经网络

  • 卷积层
    卷积层的作用是提取一个局部区域的特征,不同的卷积核相当于不同的特征提取器。卷积层虽然可以显著减少网络中连接的数量,但特征映射组中的神经元个数并没有显著减少。在卷积层之后加上一个汇聚层,从而降低特征维数,避免过拟合。
  • 特征映射(Feature Map)
    特征映射是一幅图像(或其他特征映射)在经过卷积提取到的特征,每个特征映射可以作为一类抽取的图像特征。为了提高卷积网络的表示能力,可以在每一层使用多个不同的特征映射,以更好的表示图像的特征。在输入层,特征映射就是图像本身。
  • 汇聚层(Pooling Layer)也叫子采样层(Subsampling Layer)。其作用是进行特征选择,降低特征数量,从而减少参数数量。汇聚层可以看作一个特殊的卷积层,卷积核大小为KxK,步长为SxS,卷积核为max函数或mean函数。过大的采样区会急剧减少神经元的数量,也会造成更多的信息损失。
  • 卷积网络的整体结构
    一个典型的卷积网络是由卷积层、汇聚层、全连接层交叉堆叠而成。目前,卷积网络的整体结构趋向于使用更小的卷积核,以及更深的结构。此外,卷积的操作性越来越灵活,汇聚层的作用也变得越来越小,因此目前比较流行的卷积网络中个,汇聚层的比例正在逐渐降低,趋向于全卷积网络。

几种典型的卷积神经网络

  • LeNet-5
    《神经网络与深度学习》—学习笔记_第45张图片
    《神经网络与深度学习》—学习笔记_第46张图片
    在这里插入图片描述

神经元个数=卷积核数量X输出特征图宽度X输出特征图高度
卷积层可训练参数数量=卷积核数量X(卷积核宽度X卷积核高度+1)(1表示偏置)
汇聚层可训练参数数量=卷积核数量X(1+1)(两个1分别表示相加后的系数和偏置,有的汇聚层无参数)
连接数=卷积核数量X(卷积核宽度X卷积核高度+1)X输出特征图宽度X输出特征图高度(1表示偏置)
全连接层连接数=卷积核数量X(输入特征图数量X卷积核宽度X卷积核高度+1)(输出特征图尺寸为1X1)

  • AlexNet
    《神经网络与深度学习》—学习笔记_第47张图片
    《神经网络与深度学习》—学习笔记_第48张图片
    《神经网络与深度学习》—学习笔记_第49张图片
  • Inception网络
    《神经网络与深度学习》—学习笔记_第50张图片
    《神经网络与深度学习》—学习笔记_第51张图片
    在这里插入图片描述
  • 残差网络
    《神经网络与深度学习》—学习笔记_第52张图片

循环神经网络

循环神经网络(Recurrent Neural Network, RNN )是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。循环神经网络的参数学习可以通过随时间反向传播算法来学习。随时间反向传播算法即按照时间的逆序将错误信息一步一步的往前传递。当输入序列比较长时,会存在梯度爆炸和消失问题,也称为长程依赖问题。为了解决这个问题,人们对循环神经网络进行了很多的改进,其中最有效的改进方式引入门控机制。

给网络增加记忆能力

  • 延时神经网络
  • 有外部输入的非线性自回归模型
  • 循环神经网络

简单循环网络

应用到机器学习

  • 序列到类别模式
  • 同步的序列到序列模式
  • 异步的序列到序列模式

参数学习

  • 随时间反向传播算法
  • 实时循环学习算法

长程依赖问题

循环神经网络在学习过程中的主要问题是由于梯度消失或爆炸问题,很难建模长时间间隔的状态之间的依赖关系。

  • 梯度爆炸:权重衰减或梯度截断来避免。
  • 梯度消失:改变模型

基于门控的循环神经网络

为了改善循环神经网络的长程依赖问题,一种非常好的解决方案是引入门控机制来控制信息的累积速度,包括有选择的加入新的信息,并有选择的遗忘之前累积的信息。

  • 长短期记忆网络
  • LSTM网络的各种变体
  • 门控循环单元网络

深层循环神经网络

  • 堆叠循环神经网络
  • 双向循环神经网络

扩展到图结构

  • 递归神经网络
  • 图神经网络

网络优化与正则化

虽然神经网络具有非常强的表达能力,但是当应用神经网络模型到机器学习依然存在一些难点问题。

  • 优化问题:
    • 深度神经网络的损失函数是一个非凸函数,找到全局最优解通常比较困难。
    • 深度神经网络的参数多,训练数据多,无法使用计算代价很高的二阶优化方法,一阶优化方法的训练效率非常低。
    • 深度神经网络存在梯度消失或爆炸问题,导致梯度的优化方法经常失效。
  • 泛化问题:
    • 深度神经网络的复杂度较高,并且拟合能力很强,很容易在训练集上产生过拟合。训练深度神经网络时,同时也需要通过一定的正则化方法来改进网络的泛化能力。

网络优化

网络优化是指寻找一个神经网络模型来使得经验(或结构)风险最小化的过程,包括模型选择以及参数学习等。深度神经网络是一个高度非线性的模型。其风险函数是一个非凸函数,风险最小化是一个非凸优化问题,并且深度神经网络还存在梯度消失问题。

  • 网络结构多样性
    神经网络的种类非常多,不同参数在网络中的作用也有很大的差异,很难找到一种通用的优化方法,不同优化方法在不同网络结构上的表现也有比较大的差异。
  • 高维变量的非凸优化
    • 鞍点
      在高维空间中,非凸优化难点并不在于如何逃离局部最优点,而是如何逃离鞍点(Saddle Point),鞍点的梯度是0,但是在一些维度上是最高点,在另一些维度上是最低点。
    • 局部最小值
      在高维空间中,局部最小值要求在每一维度上都是最低点,这种概率非常低。大部分梯度为0的驻点都是鞍点。基于梯度下降的优化方法会在鞍点附件接近于停滞,很难从这些鞍点找那个逃离。随机梯度下降对于高维空间中的非凸优化问题十分重要,通过在梯度方向上引入随机性,可以有效的逃离鞍点。
    • 平坦最小值
      深度神经网络的参数非常多,并且有一定的冗余性,使得每单个参数对最终损失的影响都比较小,会导致损失函数在局部最小解附近通常是一个平坦的区域,称为平坦最小值(Flat Minima)。在训练神经网络时,不需要精确地找到一个局部最小解,只要在一个局部最小解的领域内就足够了。平坦最小值通常被认为和模型泛化能力有一定的关系。当模型收敛到一个平坦的局部最小值时,其鲁棒性会更好,即微小的参数变动不会剧烈影响模型能力;而当模型收敛到一个尖锐的局部最小值时,其鲁棒性也会比较差,具备良好的泛化能力的模型通常应该是鲁棒的,因此理想的局部最小值应该是平坦的。
    • 局部最小解的等价性
      在非常大的神经网络中,大部分的局部最小解是等价的,它们在测试集上性能都比较相似。此外,局部最小解对应的训练损失都可能非常接近于全局最小解对应的训练损失,虽然神经网络有一定概率收敛于比较差的局部最小值,但随着网络规模增加,网络陷入比较差的局部最小值的概率会大大降低。在训练神经网络时,我们通常没有必要找全局最小值,这反而可能导致过拟合。
  • 神经网络优化的改善方法
    神经网络优化的目标是找到更好的局部最小值和提高优化效率。
    • 使用更有效的优化算法来提高梯度下降优化方法的效率和稳定性,比如动态学习率调整、梯度估计修正等。
    • 使用更好的参数初始化方法、数据预处理方法来提高优化效率。
    • 修改网络结构来得到更好的优化地形(Optimization Landscape),比如使用ReLU激活函数、残差连接、逐层归一化等。
    • 使用更好的超参数优化方法。

优化算法

目前,深度神经网络的参数学习主要是通过梯度下降法来寻找一组可以最小化结构风险的参数。梯度下降法分为:批量梯度下降、随机梯度下降以及小批量梯度下降三种形式。根据不同的数据量和参数量,可以选择一种具体的实现形式,在训练神经网络是优化算法大体可以分为两类:1)调整学习率,使得优化更稳定;2)梯度估计修正,优化训练速度。

小批量梯度下降(Mini-Batch Gradient Descent)

影响梯度下降法的主要因素:
- 1)批量大小K;
- 2)学习率 α \alpha α
- 3)梯度估计
《神经网络与深度学习》—学习笔记_第53张图片

批量梯度大小选择

批量大小不影响随机梯度的期望,但是会影响随机梯度的方差。批量大小越大,随机梯度的方差越小,引入的噪声也越小,训练也越稳定,因此可以设置较大的学习率。而批量大小较小时,需要设置较小的学习率,否则模型会不收敛,学习率通常要随着批量大小的增大而相应的增大。简单有效的方法是线性缩放规则(Linear Scaling Rule):当批量大小增加m倍时,学习率也增加m倍。线性缩放规则往往在批量大小比较小时适用,当批量大小非常大时,线性缩放会使得训练不稳定。批量大小和模型的泛化能力有一定的关系,通过实验发现:批量越大,越有可能收敛到最小尖锐最小值;批量越小,越有可能收敛到平坦最小值。

学习率调整

  • 学习率衰减,衰减方式设置为迭代次数进行衰减。
    在这里插入图片描述
    《神经网络与深度学习》—学习笔记_第54张图片
  • 学习率预热
    为了提高训练的稳定性,可以在最初几轮迭代时,采用比较小的学习率,等梯度下降到一定程度后再恢复到初始的学习率,这种方法为学习率预热(Learning Rate Warmup)。
  • 周期性学习率调整
    为了使梯度下降法能够逃离鞍点或尖锐最小值,一种经验性的方式是在训练过程中周期性的增大学习率。当参数处于尖锐最小值附近时,增大学习率有助于逃离尖锐最小值;当参数处于平坦最小值附近时,增大学习率依然有可能在该偏袒最小值的吸引域(Basin of Attraction)内。因此,周期性的增大学习率虽然可能短期内损害优化过程,使得网络收敛的稳定性变差,但从长期来看有助于找到更好的局部最优解。
    • 循环学习率(Cyclic Learning Rate)即让学习率在一个区间周期性的增大和缩小。通常可以使用线性缩放来调整学习率,称为三角循环学习率(Triangular Cyclic Learning Rate)。
    • 带热重启的随即梯度(Stochastic Gradient Descent with Warm Restarts, SGDR)用热重启方式来替代学习率衰减的方法。学习率每间隔一定周期后重新初始化为某个预先设定值,然后逐渐衰减,每次重启后模型参数不是从头开始优化,而是从重启前的参数基础上继续优化。
  • AdaGrad算法
    在标准的梯度下降法中,每个参数在每次迭代时都使用相同的学习率。由于每个参数的维度上收敛速度都不相同,因此根据不同参数的收敛情况分别设置学习率。
  • RMSProp算法
    避免AdaGrad算法中学习率不断单调下降以至于过早衰减的缺点。RMSProp算法和AdaGrad算法的区别在于梯度的计算由累积方式变成了衰减趋势,既可以变小也可以变大。
  • AdaDelta算法
    也是AdaGrad算法的一个改进,和RMSProp算法类似,AdaDelta算法通过梯度平方的知识衰减移动平均来调整学习率。此外,AdaDelta算法还引入了每次参数更新插值的平方的指数衰减动平均。AdaDelta算法将RMSProp算法中的初始学习率改为动态计算,在一定程度上平抑了学习率的波动。

梯度估计修正

除了调整学习率之外,还可以进行梯度估计(Gradient Estimation)的修正。在随机(小批量)梯度下降法中,如果每次选取样本数量比较小,损失会呈现震荡的方式下降。随机梯度下降法中每次迭代的梯度估计和整个训练集上的最优梯度并不一致,具有一定的随机性。一种有效的缓解梯度随机性的方式是通过使用最近一段时间内的平均梯度来代替当前时刻的随机梯度来作为参数更新的方向,从而提高优化速度。

  • 动量法(Momentum)
    模拟物理中的概念,一个物体的动量指的是该物体在它运动方向上保持运动的趋势,是该物体的质量和速度的乘积。动量法(Momentum Method)是用之前积累动量来替代真正的梯度。每次迭代的梯度可以看作加速度。这样,每个参数的实际更新差值取决于最近一段时间内梯度的加权平均值。当某个参数在最近一段时间内的梯度方向不一致时,其真实的参数更新幅度变小;相反,当在最近一段时间内的梯度方向都一致时,其真实的参数更新幅度变大,起到加速的作用。一般而言,在迭代初期,梯度方向都比较一致,动量法会起到加速作用,可以更快的到达最优点,在迭代后期,梯度方向会不一致,在收敛值附近震荡,动量法胡起到减速作用,增加稳定性。从某种角度来说,当前梯度叠加上部分的上次梯度一定程度上可以近似看作二阶梯度。
  • Nesterov加速梯度(Nesterov Accelerated Gradient, NAG)
    是一种对动量法的改进。
  • Adam算法
    可以看作动量法和RMSProp算法的结合,不但使用动量作为参数更新方向,而且可以自适应调整学习率。
  • 梯度截断
    在深度神经网络中,除了梯度消失之外,梯度爆炸也是影响学习效率的 主要因素。在基于梯度下降的优化过程中,如果梯度突然增大,用大的梯度更新参数反而导致其远离最优点。为了避免这种情况,当梯度的模大于一定阈值时,就对梯度进行截断,称为梯度截断(Gradient Clipping)。
    • 按值截断
    • 按模截断

优化算法小结

《神经网络与深度学习》—学习笔记_第55张图片

参数初始化

神经网络的参数学习是一个非凸优化问题,当使用梯度下降法来进行优化网络参数时,参数初始值的选取十分关键,关系到网络的优化效率和泛化能力。

  • 预训练初始化
    不同的参数初始值会收敛到不同的局部最优解。虽然这些局部最优解在训练集上的损失比较接近,但是它们的泛化能力差异很大。一个好的初始值会使得网络收敛到一个泛化能力高的局部最优解。一个已经在大规模数据上训练过的模型可以提供一个好的参数初始化值,这种初始化方法称为预训练初始化(Pre-trained Initialization)。
    预训练任务可以分为监督学习或无监督学习任务。由于无监督学习任务更容易获取大规模的训练数据,因此被广泛采用。预训练模型在目标任务上的学习过程也称为精调(Fine-Tuning)
  • 随机初始化
    在线性模型的训练(比如感知器和Logistics回归)中,一般将参赛全部初始化为0。但是在神经网络的训练中会存在一些问题。因为如果参数都为0,在第一遍前向计算时,所有的隐藏层神经元的激活值都相同;在反向传播时,所有权重的更新也都相同,这样会导致隐藏神经元没有区分性。这种现象也称为对称权重现象。为了打破这种平衡,比较好的方式是对每个参数都随机初始化(Random Initialization),使得不同个神经元之间的区分性更好。
  • 固定值初始化
    对于一些特殊的参数,可以根据经验用一个特殊的固定值来进行初始化。比如偏置通常用0来初始化,但是有时候可以设置某些经验值以提高优化效率。

基于固定方差的参数初始化

一种最简单的随机初始化方法是从一个固定均值和方差的分布中采样来生成参数的初始值。

  • 高斯分布初始化
  • 均匀分布初始化

基于固定方差的随机初始化方法中,比较关键的是如何设置方差,如果参数的范围取值太小,一是会导致神经元的输出过小,经过多层之后信号就慢慢消失了;二是还会使得sigmoid型激活函数丢失非线性的能力。以sigmoid型函数为例,在0附近基本上是近似线性的。这样多层神经网络的优势也就不存在了。如果参数范围取的太大,会导致输入状态过大。对于sigmoid型激活函数来说,激活值变得饱和,梯度接近于0,从而导致梯度消失问题。
为了降低固定方差对网络性能以及优化效率的影响,基于固定方差的随机初始化方法一般需要配合逐层归一化来使用。

基于方差缩放的参数初始化

要高效的训练神经网络,给参数选取一个合适的随机初始化区间是非常重要的。一般而言,参数初始化的区间应该根据神经元的性质进行差异化的设置。如果一个神经元的输入连接很多,它的每个输入连接上的权重就应该小一些,以避免神经元的输出过大(当激活函数WieReLU时)或过饱和(当激活函数为Sigmoid函数时)。
初始化一个深度网络时,为了缓解梯度爆炸问题,尽可能保持每个神经元的输入和输出的方差一致,根据神经元的连接数量来自适应的调整初始化分布的方差,这类方法称为方差缩放(Variance Scaling)。

  • Xavier初始化
    《神经网络与深度学习》—学习笔记_第56张图片
  • He初始化
    《神经网络与深度学习》—学习笔记_第57张图片

正交初始化

基于方差的初始化方法都是对权重矩阵中的每个参数进行独立采样,由于采样的随机性,采样出来的权重矩阵依然可能存在梯度消失或梯度爆炸问题。
在这里插入图片描述

数据预处理

对于尺度敏感的模型,必须先对样本进行预处理,将各个维度的特征转换到相同的取值区间,并且消除不同特征之间的相关性,才能获取比较理想的结果。从理论上,神经网络应该具有尺度不变性,可以通过参数的调整来适应不同特征的尺度。不同输入特征的尺度差异比较大时,梯度下降法的效率也会受到影响。

  • 归一化(Normalization)方法泛指把数据特征转换为相同尺度的方法。神经网络中经常使用的归一化方法。
    • 最小最大值归一化(Min-Max Normalization)
    • 标准化(Standardization) 也叫Z值归一化(Z-Score Normalization),来源与统计上的标准分数。将每一个维特征都调整为均值为0,方差为1.
    • 白化(Whiting)是一种重要的预处理方法,用来降低输入数据特征之间的冗余性。输入数据经过白化处理后,特征之间相关性较低,并且所有特征具有相同的方差。白化的一个主要实现方式是使用主成分分析(Principal Component Analysis, PCA)方法去除掉各个成分之间的相关性。
      《神经网络与深度学习》—学习笔记_第58张图片

逐层归一化

逐层归一化(Layer-wise Normalization)是将传统机器学习中的数据归一化方法应用到深度神经网络中,对神经网络中隐藏层的输入进行归一化,从而使得网络更容易训练。

逐层归一化提高训练效率的原因有:

  • 更好的尺度不变性:对每一个神经层的输入进行归一化操作,使其分布保持稳定。把每个神经层的输入分布都归一化为标准正态分布,可以使得每个神经层对其输入具有更好的尺度不变性。不论低层的参数如何变化,高层的输入保持相对稳定。另外,尺度不变性可以使得我们更加高效的进行参数初始化以及超参数选择。

  • 更平滑的优化地形:逐层归一化一方面可以使得大部分神经层的输入处于不饱和区域,从而让梯度变大,避免梯度消失问题;另一方面还可以使得神经网络的优化地形(Optimization Landscape)更加平滑,以及使梯度变得更加稳定,从而允许使用更大的学习率,并提高收敛速度。
    常用逐层归一化方法:

  • 批量归一化(Batch Normalization, BN)是一种有效的逐层归一化方法,可以对神经网络中的任意的中间层进行归一化操作。逐层归一化不但可以提高优化效率,还可以作为一种隐形的正则化方法。在训练时,神经网络对一个样本的预测不仅和该样本自身相关,也和同一批次中的其他样本相关。由于在选取批次时具有随机性,因此使得神经网络不会“过拟合”到某个特定样本,从而提高网络的泛化能力。
    《神经网络与深度学习》—学习笔记_第59张图片

  • 层归一化
    批量归一化是对一个中间层的单个神经元进行归一化操作,因此要求小批量样本的数量不能太小,否则难以计算单个神经元的统计信息。此外,如果一个神经元的净输入的分布在神经网络中是动态变化的,比如循环神经网络,那么就无法应用批量归一化操作。
    层归一化和批量归一化非常类似的方法,和批量归一化不同的是,层归一化对一个中间层的所有神经元进行归一化。
    《神经网络与深度学习》—学习笔记_第60张图片

  • 权重归一化
    《神经网络与深度学习》—学习笔记_第61张图片

  • 局部响应归一化
    《神经网络与深度学习》—学习笔记_第62张图片

超参数优化

超参数类型:

  • 网络结构,包括神经元之间的连接关系、层数、每层的神经元数量、激活函数的类型等。
  • 优化参数,包括优化方法、学习率、小批量的样本数量等。
  • 正则化系数。

超参数优化困难:

  • 超参数优化是一个组合优化问题,无法像一般参数那样通过梯度下降法来优化,也没有一种通用有效的优化方法。
  • 评估一组超参数配置的时间代价非常高,从而导致一些优化方法在超出那是优化中难以应用。

超参数配置方法:

  • 网格搜索
    通过尝试所有超参数的组合来寻址合适一组超参数配置方法。

  • 随机搜索
    不同超参数对模型性能的影响有很大差异,有些超参数(比如正则化系数)对模型性能的影响有限,而另一些超参数(比如学习率)对模型影响比较大。在这种情况下,采用网格搜索会在不重要的超参数上进行不必要的尝试。一个种 在实践中比较有效的改进方法是对超参数进行随机组合,然后选取一个性能最好的配置,这就是随机搜索。随机搜索在实践中更容易实现,一般会比网格搜索更加有效。
    网格搜索和随机搜索都没有利用不同超参数组合之间的相关性,即如果模型的超参数组合比较类似,其模型性能也是比较接近的。因此这两种搜索方式一般都比较低效。

  • 贝叶斯优化(Bayesian Optimization)
    是一种自适应的超参数优化方法,根据当前已经试验的超参数组合,来预测下一个可能带来最大收益的组合。

  • 动态资源分配

  • 神经架构搜索、
    通过神经网络来自动实现架构的设计。一个神经网络的架构可以用一个变长的字符串来描述。利用元学习的思想,神经架构搜索利用一个控制器来生成一个变长的字符串来描述。利用元学习的思想,神经架构搜索利用一个控制器来生成另一个子网络的架构描述。控制器可以由一个循环神经网络来实现。控制器的训练可以通过强化学习来完成,其奖励信号为生成的自网络在开发集上的准确率。

网络正则化

正则化(Regularization)是一类通过限制模型复杂度,从而避免过拟合,提高泛化能力的方法。

在传统的机器学习中,提高泛化能力的方法主要是限制模型复杂度,比如正则化的方式。而在训练深度神经网络时,特别是在过度参数化时,正则化的效果往往不如浅层机器学习模型中显著。因此,训练深度学习模型时,往往还会使用其他的正则化方法,比如数据增强、提前停止、丢弃法、集成法等。

  • L1和L2正则化
    《神经网络与深度学习》—学习笔记_第63张图片
    《神经网络与深度学习》—学习笔记_第64张图片
  • 权重衰减
    《神经网络与深度学习》—学习笔记_第65张图片
  • 提前停止
    《神经网络与深度学习》—学习笔记_第66张图片
  • 丢弃法
    《神经网络与深度学习》—学习笔记_第67张图片
    《神经网络与深度学习》—学习笔记_第68张图片
  • 数据增强
    深度神经网络一般都需要大量的训练数据才能获得比较理想的效果。在数据量有限的情况下,可以通过数据增强(Data Augmentation)来增加数据量,提高模型鲁棒性,避免过拟合。目前,数据增强还主要应用在图像数据上,在文本等其他类型的数据上还没有太好的方法。
    图像数据的增强主要是通过算法对图像进行转变,引入噪声等方法来增强数据的多样性。增强的方法主要有几种:
    • 旋转(Rotation):将图像按顺时针或逆时针方向随机旋转一定角度。
    • 翻转(Flip):将图像沿水平或垂直方法随机翻转一定角度。
    • 缩放(Zoom In/Out):将图像放大胡缩小一定比例。
    • 平移(Shift):将图像沿水平或垂直方法平移一定步长。
    • 加噪声(Noise):加入随机噪声。
  • 标签平滑
    《神经网络与深度学习》—学习笔记_第69张图片
    《神经网络与深度学习》—学习笔记_第70张图片

总结

深度神经网络的优化和正则化是既对立又统一的关系。一方面我们希望优化算法能找到一个全局最优解(或较好的局部最优解),另一方面我们又不希望模型优化到最优解,这可能陷入过拟合。优化和正则化的统一目标是期望风险最小化。今年来深度学习的快速发展在一定程度上也归因于很多深度神经网络的优化和正则化方法的出现,虽然这些方法往往是经验性的,但在实践中取得了很好的效果,使得我们可以高效地、端到端的训练神经网络模型。

在优化方面,训练神经网络时的主要难点是非凸优化以及梯度消失问题。在深度学习技术发展的初期,通常需要利用预训练和逐层训练等比较低的方法来辅助优化。随着深度学习技术的发展,我们目前通常可以高效的、端到端的训练一个深度神经网络。这些提高训练效率的方法通常分为以下3个方面:

  • 修改网络模型来得到更好的优化地形,比如使用逐层归一化、残差连接以及ReLU激活函数等;
  • 使用更有效的优化算法,比如动态学习率以及梯度估计修正等;
  • 使用更好的参数初始化方法。

在泛化方面,传统的机器学习中有一些很好的理论可以帮助我们在模型的表示能力、复杂度和泛化能力之间找到比较好的平滑,但是这些理论无法解释深度神经网络在实际应用中的泛化能力表现。根据通用近似定理,神经网络的表示能力十分强大。从直觉上,一个过度参数化的深度神经网络很容易产生过拟合现象,因为它的容量足够记住所有训练数据。但是实验表明,深度神经网络在训练过程中依然优先记住训练数据中的一般模式(Pattern),即具有高泛化能力的模式。但目前,深度神经网络的泛化能力还没有很好的理论支持。在传统的机器学习模型中比较有效的正则化在深度神经网络中的作用也比较有限,而一些经验的做法(比如小的批量大小、大的学习率、提前停止、丢弃法、数据增强)会更有效。

注意力机制与外部记忆

根据通用近似定理,前馈网络和循环网络都有很强的能力。但由于优化算法和计算能力的限制,在实践中很难达到通用近似的能力。特别是在处理复杂任务时,比如需要处理大量的输入信息或者复杂的计算流程时,目前计算机的计算能力依然是限制神经网络发展的瓶颈。

wield减少计算复杂度,通过部分借鉴生物神经网络的一些机制,我们引入了局部连接、权重共享以及汇聚操作来简化神经网络结构。虽然这些机制可以有效缓解模型的复杂度和表达能力之间的矛盾,但是我们依然希望在不“过度”增加模型复杂度(主要是模型参数)的情况下来提高模型的表达能力。

神经网络中可以存储的信息量称为网络容量(Network Capacity)。一般来讲,利用一组神经元来存储信息时,其存储容量和神经元的数量以及网络的复杂度成正比。要存储的信息越多,神经元数量就要越多或者网络要越复杂,进而导致神经网络的参数成倍的增加。

我们人脑的生物神经网络同样存在网络容量问题,人脑中的工作记忆大概只要几秒钟的时间,类似于循环神经网络中的隐状态。而人脑每个时刻接收的外界输入信息非常多,包括来自于视觉、听觉、触觉的各种各样的信息。单就视觉来说,眼睛每秒钟都会发送千万比特的信息给视觉神经系统。人脑在有限的资源下,并不能同时处理这些过载的输入信息。大脑神经系统由两个重要机制可以解决信息过载问题:注意力机制和记忆机制。

我们可以借鉴人脑解决信息过载的机制,从两方面来提高神经网络处理信息的能力。一方面是注意力,通过自上而下的信息选择机制来过滤掉大量的无关信息;另一方面是引入额外的外部记忆,优化神经网络的记忆结构来提高神经网络存储信息的容量。

认知神经学中的注意力

注意力是一种人类不可或缺的复杂认知功能,指人可以在关注一些信息的同时忽略另一些信息的选择能力。在日常生活中,我们通过视觉、听觉、触觉等方式接收大量的感觉输入。但是人脑还能在这些外界的信息轰炸中有条不紊的工作,是因为人脑可以有意或无意的从这些大量输入信息中选择小部分的有用信息来重点处理,并忽略其他信息。这种能力就叫作注意力(Attention)。注意力可以作用在外部的刺激(听觉、视觉、味觉等),也可以作用在内部的意识(思考、回忆等)。
注意力一般分为两种:

  • 自上而下的有意识的注意力,称为聚焦式注意力(Focus Attention)。也常称为选择性注意力(Selective Attention )。聚焦式注意力是指有预定目的、依赖任务的,主动有意识的聚焦于某一对象的注意力。
  • 自下而上的无意识的注意力,称为基于显著性的注意力(Saliency-Based Attention)。基于显著性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关。如果一个对象的刺激信息不同于其周围信息,一种无意识的“赢者通吃”(Winner-Take-All)或者门控(Gating)机制就可以把注意力转向这个对象。不管这些注意力是有意还是无意,大部分的人呢脑活动都需要依赖注意力,比如记忆信息、阅读或思考等。

注意力机制

在计算能力有限的情况下,注意力机制(Attention Mechanism)作为一种资源配置方案,将有限的计算资源用来处理更重要的信息,是解决信息超载问题的主要手段。
当用神经网络来处理大量的输入信息时,也可以借鉴人脑的注意力机制,只选择一些关键的信息输入进行处理,来提高神经网络的效率。

在目前的神经网络模型中,我们可以将最大汇聚(Max Pooling)、门控(Gating)机制近似的看做自上而下的基于显著性的注意力机制。除此之外,自上而下的聚焦式注意力也是一种有效的信息选择方式。

《神经网络与深度学习》—学习笔记_第71张图片
《神经网络与深度学习》—学习笔记_第72张图片
《神经网络与深度学习》—学习笔记_第73张图片

注意力机制的变体

  • 硬性注意力
    《神经网络与深度学习》—学习笔记_第74张图片
  • 键值对注意力
    《神经网络与深度学习》—学习笔记_第75张图片
  • 多头注意力
    在这里插入图片描述
  • 结构化注意力
    《神经网络与深度学习》—学习笔记_第76张图片
  • 指针网络
    《神经网络与深度学习》—学习笔记_第77张图片

自注意力模型

当使用神经网络来处理一个边长的向量序列时,我们通常可以使用卷积网络或循环网络进行编码来得到一个相同长度的输出向量序列。
《神经网络与深度学习》—学习笔记_第78张图片
基于卷积或循环网络的序列编码都是一种局部的编码方式,只建模了输入信息的局部依赖关系。虽然循环网络理论上可以建立长距离依赖关系,但是由于信息传递的容量以及梯度消失的问题,实际上也只能建立短距离依赖关系。

如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:一种方法是增加网络的层数,通过一个深层网络来获取远距离的信息交互;另一种方法是使用全连接网络。全连接网络是一种非常直接的建模远距离依赖的模型,但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。这时我们可以利用注意力机制来“动态”的生成不同连接的权重,这就是自注意力模型(Self-Attention Model)。
《神经网络与深度学习》—学习笔记_第79张图片
《神经网络与深度学习》—学习笔记_第80张图片
《神经网络与深度学习》—学习笔记_第81张图片

人脑中的记忆

在生物神经网络中,记忆是外界信息在人脑中的存储机制。大脑记忆毫无疑问是通过生物神经网络实现的。虽然其机理目前还无法解释,但直观上记忆机制和神经网络的连接形态以及神经元的活动相关。生理学家发现信息是作为一种整体效应(Collective Effect)存储在大脑组织中。当大脑皮层的不同部位损伤时,其导致的不同行为表现似乎取决于损伤的程度而不是损伤的确切位置。大脑组织的每个部分似乎都携带一些导致相似行为的信息。也就是说大脑皮层是分布式存储的,而不是存储于某个局部区域。

人脑中的记忆具有周期性和联想性。

  • 记忆周期
    虽然我们不清楚人脑记忆的存储机制,但是已经大概可以确定不同脑区参与了记忆形成的几个阶段。人脑记忆的一个特点是,记忆一般分为长期记忆和短期记忆。长期记忆(Long-Term Memory),也称为结构记忆或知识(Knowledge),体现为神经元之间的连接形态,其更新速度比较慢。短期记忆(Short-Term Memory)体现为神经元的活动,更新较快,维持时间为几秒至几分钟。短期记忆是神经连接的暂时性强化,通过不断巩固、强化可形成长期记忆。短期记忆、长期记忆的动态更新过程称为演化(Evolution)过程。
    因此,长期记忆可以类比于人工神经网络中的权重参数,而短期记忆可以类比于人工神经网络中的隐状态。

  • 工作记忆
    除了长期记忆和短期记忆,人脑中还会存在一个“缓存”,称为工作记忆(Working Memory)。在执行某个认知行为(比如记下电话号码,做算术运算)时,工作记忆是一个记忆的临时存储和处理系统,维持时间通常为几秒钟。从时间上看,工作记忆也是一种短期的记忆,但和短期记忆的内涵不同。短期记忆一般指外界的输入信息在人脑中的表示和短期存储,不关心这些记忆如何被使用;而工作记忆是一个和任务相关的“容器”,可以临时存放和某项任务相关的短期记忆和其相关的内在记忆。工作记忆的容量比较小,一般可以容纳4组项目。

  • 联想记忆
    大脑记忆的一个主要特点是通过联想来进行检索的。联想记忆(Associative Memory)是指一种学习和记住不同对象之间关系的能力。
    联想记忆是指一种可以通过内容匹配的方法进行寻址的信息存储方式,也称为基于内容寻址的存储(Content-Addressable Memory, CAM)。作为对比,现代计算机的存储方式是根据地址来进行存储的,称为随机访问存储(Random Access Memory, RAM)。

借鉴人脑中工作记忆,可以在神经网络中引入一个外部记忆单元来提高网络容量。外部记忆的实现途径有两种:一种是结构化的记忆,这种记忆和计算机中的信息存储方法比较类似,可以分为多个记忆片段,并按照一定的结构来存储;另一种基于神经动力学的联想记忆,这种记忆方式具有更好的生物学解释性。

记忆增强神经网络

《神经网络与深度学习》—学习笔记_第82张图片
《神经网络与深度学习》—学习笔记_第83张图片
《神经网络与深度学习》—学习笔记_第84张图片

  • 端到端的记忆网络
    端到端记忆网络(End-to-End Memory Network,MemN2N)采用一种可微的网络结构,可以多次从外部记忆中读取信息。在端到记忆网络中,外部记忆单元是只读的。
    《神经网络与深度学习》—学习笔记_第85张图片
    《神经网络与深度学习》—学习笔记_第86张图片
  • 神经图灵机
    《神经网络与深度学习》—学习笔记_第87张图片
    《神经网络与深度学习》—学习笔记_第88张图片
    《神经网络与深度学习》—学习笔记_第89张图片
    《神经网络与深度学习》—学习笔记_第90张图片

记忆神经动力学的联想记忆

《神经网络与深度学习》—学习笔记_第91张图片

  • Hopfield网络
    神经完了除了作为一种机器学习模型的输入-输出映射函数,其参数学习方法是通过梯度下降方法来最小化损失函数。除了作为机器学习模型外,神经网络还可以作为一种记忆的存储和检索模型。

Hopfield网络是一种循环神经网络模型,由一组互相连接的神经元组成。Hopfield网络也可以认为是所有神经元都相互连接的不分层的神经网络。每个神经元既是输入单元,又是输出单元,没有隐藏神经元。一个神经元好自身没有反馈相连,不同神经元之间连接权重是对称的。
《神经网络与深度学习》—学习笔记_第92张图片
《神经网络与深度学习》—学习笔记_第93张图片
《神经网络与深度学习》—学习笔记_第94张图片
《神经网络与深度学习》—学习笔记_第95张图片
《神经网络与深度学习》—学习笔记_第96张图片
《神经网络与深度学习》—学习笔记_第97张图片

  • 使用联想记忆增加网络容量
    《神经网络与深度学习》—学习笔记_第98张图片

总结

注意力机制是一种受人类神经系统启发的信息处理机制。比如人视觉神经系统并不会一次性的处理所有接收到视觉信息,而是有选择性的处理部分信息,从而提高其工作效率。

《神经网络与深度学习》—学习笔记_第99张图片

无监督学习

无监督学习(Unsupervised Learning, UL)是指从无标签的数据中学习出一些有用的模式。无监督学习算法一般直接从原始数据中学习,不借助于任何人工给出标签或者反馈等指导信息。如果监督学习是建立输入-输出之间的映射关系,那么无监督学习就是发现隐藏的数据中的有价值信息,包括有效的特征、类别、结构以及概率分布等。

《神经网络与深度学习》—学习笔记_第100张图片

和监督学习一样,无监督学习方法也包含三个基本要素:模型、学习准则和优化算法。无监督学习的准则非常多,比如最大似然估计、最小重构错误等。在无监督学习中,经常使用的准则为最小化重构错误,同时也经常对特征进行一些约束,比如独立性、非负性或稀释性等。而在密度估计中,经常采用最大似然估计进行学习。

无监督特征学习

无监督特征学习是指从无标注的数据中自动学习有效的数据表示,从而能够帮助后续的机器学习模型更快速的达到更好的性能。无监督特征学习主要方法有主成分分析、稀疏编码、自编码等。

  • 主成分分析
    主成分分析(Principal Component Analysis,PCA)是一种最常用的数据降维方法,使得在转换后的空间中总数据的方差最大。
    主成分分析是一种无监督学习方法,可以作为监督学习的数据预处理方法,用来去除噪声并减少特征之间的相关性,但是它并不能保证投影后数据的类别可分性更好。提高两类可分性的方法一般为监督学习方法,比如线性判别分析(Linear Discriminant Analysis,LDA)。
  • 稀疏编码
    《神经网络与深度学习》—学习笔记_第101张图片
    • 训练方法
      《神经网络与深度学习》—学习笔记_第102张图片
    • 稀疏编码的优点
      《神经网络与深度学习》—学习笔记_第103张图片
  • 自编码器
    《神经网络与深度学习》—学习笔记_第104张图片
    《神经网络与深度学习》—学习笔记_第105张图片
    《神经网络与深度学习》—学习笔记_第106张图片
  • 稀疏自编码器
    在这里插入图片描述
  • 堆叠自编码器
    《神经网络与深度学习》—学习笔记_第107张图片
  • 降噪自编码器
    《神经网络与深度学习》—学习笔记_第108张图片

概率密度估计

概率密度估计(Probabilistic Density Estimation),简称密度估计(Density Estimation),是基于一些观测样本来估计一个随机变量的概率密度函数。

参数密度估计

《神经网络与深度学习》—学习笔记_第109张图片

  • 正态分布
    《神经网络与深度学习》—学习笔记_第110张图片
  • 多项式分布
    《神经网络与深度学习》—学习笔记_第111张图片
    《神经网络与深度学习》—学习笔记_第112张图片

非参数密度估计

《神经网络与深度学习》—学习笔记_第113张图片
《神经网络与深度学习》—学习笔记_第114张图片

  • 直方图方法
    《神经网络与深度学习》—学习笔记_第115张图片
    《神经网络与深度学习》—学习笔记_第116张图片
  • 核方法
    《神经网络与深度学习》—学习笔记_第117张图片
    《神经网络与深度学习》—学习笔记_第118张图片
  • K近邻方法
    《神经网络与深度学习》—学习笔记_第119张图片

模型独立的学习方式

集成学习

集成学习(Ensemble Learning)就是同构某种策略将多个模型集成起来,通过群体决策来提高决策准确率。集成学习首要的问题是如何集成多个模型。比较常用的集成策略有直接平均、加权平均等。
《神经网络与深度学习》—学习笔记_第120张图片

自训练和协同训练

监督学习往往需要大量的标注数据,而标注数据的成本比较高。因此,利用大量的无标注数据来提高监督学习的效果有着十分重要的意义。这种利用少量标注数据和大量无标注数据进行学习的方式称为半监督学习(Semi-Supervised Learning,SSL)。半监督学习算法:自训练和协同训练。

  • 自训练
    《神经网络与深度学习》—学习笔记_第121张图片
  • 协同训练
    协同训练(Co-Training)是自训练的一种改进方法,通过两个基于不同视角(view)的分类器来互相促进。
    《神经网络与深度学习》—学习笔记_第122张图片
    《神经网络与深度学习》—学习笔记_第123张图片
    《神经网络与深度学习》—学习笔记_第124张图片

多任务学习

《神经网络与深度学习》—学习笔记_第125张图片
《神经网络与深度学习》—学习笔记_第126张图片
《神经网络与深度学习》—学习笔记_第127张图片
《神经网络与深度学习》—学习笔记_第128张图片

迁移学习

《神经网络与深度学习》—学习笔记_第129张图片

  • 归纳迁移学习
    《神经网络与深度学习》—学习笔记_第130张图片
    在这里插入图片描述
    《神经网络与深度学习》—学习笔记_第131张图片
  • 转导迁移学习
    《神经网络与深度学习》—学习笔记_第132张图片

终身学习

《神经网络与深度学习》—学习笔记_第133张图片

元学习

在面对不同的任务时,人脑的学习机制并不相同。即使面对一个新的任务,人们往往也可以很快找到其学习方式。这种可以动态调整学习方式的能力,称为元学习(Meta-Learning),也称为学习的学习(Learning to Learn)。

元学习的目的是从已有任务中学习一种学习方法或元知识,可以加速新任务的学习。从这个角度来说,元学习十分类似于归纳迁移学习,但元学习更侧重从多种不同(甚至不相关)的任务中归纳出一种学习方法。

和元学习比较相关的另一个机器学习问题是小样本学习(Flow-shot Learning),即在小样本上的快速学习能力。每个类别只有K个标注样本,K非常小。如果K=1,称为单样本学习(One-shot Learning);如果K=0,称为零样本学习(Zero-shot Learning)。

  • 基于优化器的元学习
    《神经网络与深度学习》—学习笔记_第134张图片
  • 模型无关的元学习
    《神经网络与深度学习》—学习笔记_第135张图片

概率图模型

概率图模型(Probabilistic Graphical Model, PGM)简称图模型(Graphical Model, GM),是指一种用途结构来描述多元随机变量之间条件独立关系的概率模型,从而给研究高维空间中的概率模型带来了很大的便捷性。
《神经网络与深度学习》—学习笔记_第136张图片

模型表示

图由一组节点和节点之间的边组成。在概率图模型中,每个节点都表示一个随机变量(或一组随机变量),边表示这些随机变量之间的概率依赖关系。
《神经网络与深度学习》—学习笔记_第137张图片

  • 有向图模型
    有向图模型(Directed Graphical Model),也称为贝叶斯网络(Bayesian Network)或信念网络(Belief Network,BN),是一类用有向图来描述随机向量概率分布的模型。
    条件独立性 ,在贝叶斯网络中,如果两个节点是直接连接的,它们肯定是非条件独立的,是直接因果关系。父节点是“因”,子节点是“果”。
    局部马尔可夫性质,对一个更一般的贝叶斯网络,其局部马尔可夫性质为:每个随机变量在给定父节点的情况下,条件独立于它的非后代节点。
  • 常见的有向图模型
    • Sigmoid信念网络
      为了减少模型参数,可以使用参数化模型来建模有向图模型中的条件概率分布。一种简单的参数化模型为Sigmoid信念网络。
      《神经网络与深度学习》—学习笔记_第138张图片
    • 朴素贝叶斯分类器
      《神经网络与深度学习》—学习笔记_第139张图片
      《神经网络与深度学习》—学习笔记_第140张图片
    • 隐马尔科夫模型
      《神经网络与深度学习》—学习笔记_第141张图片
  • 无向图模型
    无向图模型,也称为马尔可夫随机场(Markov Random Field,MRF)或马尔可夫网络(Markov Network),是一类用无向图来描述一组具有局部马尔可夫性质的随机向量的联合概率分布的模型。
  • 无向图模型的概率分解

    • 《神经网络与深度学习》—学习笔记_第142张图片
      《神经网络与深度学习》—学习笔记_第143张图片
    • 因子分解
      无向图中的联合概率可以分解为一系列定义在最大团上的非负函数的乘积形式。
    • 吉布斯分布
      吉布斯分布一定满足马尔可夫随机场的条件独立性质,并且马尔可夫随机场的概率分布一定可以表示成吉布斯分布。
  • 常见的无向图模型
    • 对数线性模型
    • 条件随机场
  • 有向图和无向图之间的转换
    有向图和无向图可以相互转换,但将无向图转为有向图通常比较困难。在实际应用中,将有向图转为无向图更加重要,这样可以利用无向图上的精确推断算法,比如联合树算法。无向图模型可以表示有向图模型无法表示的一些依赖关系,比如循环依赖;但它不能表示有向图模型能够表示的某些关系,比如因果关系。

学习

图模型的学习可以分为两部分:一是网络结构学习,即寻找最优的网络结构;二是网络参数估计,即已知网络机构,估计每个条件概率分布的参数。

  • 不含隐变量的参数估计
    如果图模型中不包含隐变量,即所有变量都是可观测的,那么网络参数一般可以直接通过最大似然来进行估计。无向图模型的参数估计要比有向图更为复杂。在有向图中,每个局部条件概率的参数是独立的;而在无向图中,所有的参数都是相关的,无法分解。
  • 含隐变量的参数估计
    如果图模型中包含隐变量,即有部分变量是不可观测的,就需要用EM算法进行参数估计。
    • EM算法
      EM算法是含隐变量图模型的常用参数估计方法,通过迭代的方法来最大化边际似然。EM算法具体分为两个步骤:E步和M步。这两步不断重复,直到收敛到某个局部最优解。
    • 高斯混合模型
      高斯混合模型(Gaussian Mixture Model,GMM)是由多个高斯分布组成的模型,其总体密度函数Wie多个高斯密度函数的加权组合。如果一个连续随机变量后连续随机向量的分布比较复杂,那么我们通常可以用高斯混合模型来估计其分布情况。

推断

《神经网络与深度学习》—学习笔记_第144张图片

  • 精确推断
    精确推断(Exact Inference)算法是指可以计算出条件概率的精确解的算法。
    • 变量消除法
      利用动态规划的思想,每次消除一个变量,来减少计算边际分布的计算复杂度,称为变量消除法(Variable Elimination Algorithm)。随着图模型规模的增长,变量消除法的收益越大。变量消除法可以按照不同的顺序来消除变量。但是在计算多个边际分布时存在很多重复的计算。
    • 信念传播算法
      信念传播(Belief Propagation, BP)算法,也称为和积(Sum-Product)算法或消息传递(Message Passsing)算法,是将变量消除法中的和积操作看作消息,并保存起来,这样可以节省大量的计算资源。
      《神经网络与深度学习》—学习笔记_第145张图片
  • 近似推断
    在实际应用中精确推断一般用于结构比较简单的推断问题。当图模型的结构比较复杂时,精确推断的计算开销会比较大。此外,如果图模型中的变量是连续的,并且其积分函数没有闭式(Closed-Form)解,那么也无法使用精确推断。因此,在很多情况下也常常采用近似的方法来进行推断。
    《神经网络与深度学习》—学习笔记_第146张图片

变分推断

变分法(Calculus Of Variations)主要研究变分问题,即泛函的极值问题。
《神经网络与深度学习》—学习笔记_第147张图片
在这里插入图片描述
《神经网络与深度学习》—学习笔记_第148张图片

基于采样法的近似推断

《神经网络与深度学习》—学习笔记_第149张图片

  • 采样法
    采样法(Sampling Method)也称为蒙特卡罗方法(Monte Carlo Method)或统计模拟方法,是通过随机采样来近似估计一些计算问题数值解的方法。随机采样指从给定概率密度函数中抽取出符合其概率分布的样本。采样法的难点是如何进行随机采样,即如何让计算机生成满足概率密度函数的样本。如果要随机生成服从某个非均匀分布的样本,就需要一些间接的采样方法。
  • 拒绝采样
    拒绝采样(Rejection Sampling)是一种间接采样方法,也称为接受-拒绝采样(Acceptance-Rejection Sampling)。假设原始分布难以直接采样,可以直接引入一个容易采样的分布,称为提议分布,然后以某个标准来拒绝一部分的样本使得最终采集的样本服从原始分布。
    判断一个拒绝采样方法的好坏就是看其采样效率,即总体的接受率,如果提议分布函数远大于原始分布函数,拒绝率会比较高,采样效率会非常不理想。但是要找到一个和原始分布比较接近的提议分布往往比较困难,特别是在高维空间中,其采样率会非常低,导致很难应用到实际问题中。
  • 重要性采样
    如果采样的目的是计算分布函数的期望,那么实际上抽取的样本不需要严格服从原始分布,可以直接通过提议分布,直接采样并估计期望。重要采样是通过引入重要性权重,将原始分布下的期望变为提议分布下期望的近似计算。
  • 马尔科夫链蒙特卡罗方法
    《神经网络与深度学习》—学习笔记_第150张图片
    • Metropolis-Hastings算法
      在这里插入图片描述
    • Metropolis算法
      《神经网络与深度学习》—学习笔记_第151张图片
    • 吉布斯采样
      《神经网络与深度学习》—学习笔记_第152张图片

总结

《神经网络与深度学习》—学习笔记_第153张图片
概率图模型中最基本的假设是条件独立性。图形化表示直观地描述了随机变量之间的条件独立性,有利于将复杂的概率模型分解为简单模型的组合,并更好的理解概率模型的表示、推断、学习等方法。

图模型与神经网络有这类似的网络结构,但两者也有很大的不同。图模型的节点是随机变量,其图结构的主要功能是描述变量之间的依赖关系,一般是系数连接。使用图模型的好处是可以有效的进行统计推断。而神经网络中的节点是神经元,是一个计算节点。图模型中的每个变量一般有着明确的解释,变量之间依赖关系一般是人工来定义。而神经网络中的单个神经元则没有直观的解释。如果将神经网络中每个神经元看作一个二值随机变量,那神经网络就变成一个Sigmoid信念网络。

神经网络是判别模型,直接用来分类。而图模型不但可以是判别模型,也可以是生成模型。生成模型不但可以用来生成样本,也可以通过贝叶斯公式用来做分类。图模型的参数学习的目标函数为似然函数或条件似然函数,若包含隐变量则通常通过EM算法来求解。而神经网络参数学习的目标函数为交叉熵或平方误差等损失函数。

目前,神经网络和概率图模型的结合越来越紧密。一方面可以利用神经网络强大的表示能力和拟合能力来建模图模型中的推断问题,生成问题,或势能函数;另一方面可以利用图模型的算法来解决复杂结构神经网络中的学习和推断问题。

深度信念网络

对于一个复杂的数据分布,我们往往只能观测到有限的局部特征,并且这些特征通常会包含一定的噪声。如果要对这些数据分布进行建模,就需要挖掘出可观测变量之间复杂的依赖关系,以及可观测变量背后隐藏的内部表示。

深度信念网络中包含很多层的隐变量,可以有效的学习数据的内部特征表示,也可以作为一种有效的非线性降维方法。这些学习到的内部特征表示包含了数据的更高级的、有价值的信息,因此十分有助于后续的分类和回归等任务。

玻尔兹曼机和深度信念网络都是生成模型,借助隐变量来描述复杂的数据分布,作为概率图模型,玻尔兹曼机和深度信念网络的共同问题是推断和学习问题。

玻尔兹曼机

《神经网络与深度学习》—学习笔记_第154张图片
玻尔兹曼机可以用来解决两类问题。一类是搜索问题:当给定变量之间的连接权重时,需要找到一组二值向量,使得整个网络的能力最低。另一类是学习问题:当给定变量的多组观测值时,学习网络的最优权重。

  • 生成模型
  • 能量最小化与模拟退火
  • 参数学习

受限玻尔兹曼机

《神经网络与深度学习》—学习笔记_第155张图片

  • 生成模型
  • 参数学习
    • 对比散度学习算法
  • 受限玻尔兹曼机的类型

深度信念网络

《神经网络与深度学习》—学习笔记_第156张图片

  • 生成模型
  • 参数学习
    • 逐层预训练
    • 精调

深度生成模型

《神经网络与深度学习》—学习笔记_第157张图片
《神经网络与深度学习》—学习笔记_第158张图片

概率生成模型

  • 密度估计
    《神经网络与深度学习》—学习笔记_第159张图片
  • 生成样本
    《神经网络与深度学习》—学习笔记_第160张图片
  • 应用于监督学习
    《神经网络与深度学习》—学习笔记_第161张图片

变分自编码器

  • 含隐变量的生成模型
    《神经网络与深度学习》—学习笔记_第162张图片
    《神经网络与深度学习》—学习笔记_第163张图片
  • 推断网络
    《神经网络与深度学习》—学习笔记_第164张图片
  • 生成网络
    《神经网络与深度学习》—学习笔记_第165张图片
    《神经网络与深度学习》—学习笔记_第166张图片
  • 模型汇总
    《神经网络与深度学习》—学习笔记_第167张图片
  • 再参数化
    《神经网络与深度学习》—学习笔记_第168张图片
  • 训练
    通过再参数化,变分自编码器可以通过梯度下降法来学习参数,从而提高变分自编码器的训练效率。

生成对抗网络

  • 显示密度模型和隐式密度模型
    《神经网络与深度学习》—学习笔记_第169张图片
  • 网络分解
    《神经网络与深度学习》—学习笔记_第170张图片
    《神经网络与深度学习》—学习笔记_第171张图片
    • 判别网络
      《神经网络与深度学习》—学习笔记_第172张图片
    • 生成网络
      《神经网络与深度学习》—学习笔记_第173张图片
  • 训练
    对抗网络的训练比较难,需要平衡两个网络的能力。对于判别网络来说,一开始的判别能力不能太强,否则难以提升生成网络的能力。但是,判别网络的判别能力也不能太弱,否则针对它训练的生成网络也不会太好。在训练时需要使用一些技巧,使得在每次迭代中,判别网络比生成网络的能力强一些,但又不能强太多。每次迭代时,判别网络更新K次而生成网络更新一次,即首先要保证判别网络足够强才能开始训练生成网络。实践中K是一个超参数,其取值一般取决于具体任务。
  • 一个生成对抗网络的具体实现:DCGAN
    生成对抗网络是指一类采用对抗训练方式来进行学习的深度生成模型,其包含的判别网络和生成网络都可以根据不同的生成任务使用不同的网络结构。深度卷积生成对抗网络(Deep Convolutional Generative Adversarial Network, DCGAN)的判别网络是一个传统的深度卷积网络,但使用了带步长的卷积来实现下采样操作,不用最大汇聚操作;生成网络使用了一个特殊的深度卷积网络来实现,使用微步卷积来生成64x64大小的图像,第一层是全连接层,输入是从均匀分布中随机采样的100维向量,输出是4x4x1024的向量,重塑为4x4x1024的张量;然后是四层的微步卷积,没有汇聚层。
    《神经网络与深度学习》—学习笔记_第174张图片
    DCGAN的主要优点是通过一些经验性的网络结构设计使得对抗网络训练更加稳定。1)使用带步长的卷积(在判别网络中)和微步卷积(在生成网络中)来代替汇聚操作,以免损失信息;2)使用批量归一化;3)去除卷积层之后的全连接层;4)在生成网络中,除了最后一层使用Tanh激活函数外,其余层都使用ReLU函数;5)在判别网络中,都使用LeakyReLU激活函数。
  • 模型分析
    在生产对抗网络中,当判别网络为最优时,生成网络的优化目标是最小化真实分布和模型分布之间的JS散度。
    • 训练稳定性
      在实际训练生成对抗网络时,一般不会将判别网络训练到最优,只进行行一步或多步梯度下降,使得生成网络的梯度依然存在。另外,判别网络也不能太差,否则生成网络的梯度为错误的梯度。但是,如何在梯度消失和梯度错误之间取得平衡并不是一件容易的事,这个问题使得生成对抗网络在训练时稳定性比较差。
    • 模型坍塌
      JS散度为有界函数,因此生成网络的目标更多的是受逆向KL散度影响,使得生成网络更倾向于生成一些更“安全”的样本,从而造成模型坍塌(Model Collapse)问题。
  • 改进模型
    在生成对抗网络中,JS散度不适合衡量生成数据分布和真实数据分布的距离。由于通过优化交叉熵(JS散度)训练生成对抗网络会导致训练稳定性和模型坍塌问题,因此要改进生成对抗网络,就需要改变其损失函数。W-GAN是一种通过用Wasserstein距离替代JS散度来优化训练的生成对抗网络。

总结

深度生成模型是一种有机融合神经网络和概率图模型的生成模型,将神经网络作为一个概率分布的逼近器,可以拟合非常复杂的数据分布。
变分自编码器是一个非常典型的深度生成模型,利用神经网络的拟合能力来有效的解决隐变量的概率模型中后验概率分布难以估计的问题。
生成对抗网络是一个具有开创意义的深度生成模型,突破了以往的概率模型必须通过最大似然估计来学习参数的限制。然而,生成对抗网络的训练通常比较困难。DCGAN是一个生成对抗网络的成功实现,可以生成十分逼真的自然图像。对抗生成网络的训练不稳定问题的一种有效解决方法是W-GAN,通过Wasserstein距离替代JS散度来进行训练。
虽然深度生成模型取得了巨大的成功,但是作为一种无监督模型,其主要的缺点是缺乏有效的客观评价,很难客观衡量不同模型之间的优劣。

强化学习

强化学习(Reinforcement Learning, RL),也叫增强学习,是指一类从(与环境)交互中不断学习的问题以及解决这类问题的方法。强化学习问题可以描述为一个智能体从与环境的交互中不断学习以完成特定目标(比如获取最大奖励值)。和深度学习类似,强化学习中的关键问题也是贡献度匹配问题, 每一个动作并不能直接得到监督信息,需要通过整个模型的最终监督信息(奖励)得到,并且哟一定的延时性。
强化学习也是机器学习中的一个重要分支。强化学习和监督学习的不同在于,强化学习问题不需要给出“正确”策略作为监督信息,只需要给出策略的(延迟)回报,并通过调整策略来取得最大化的期望回报。

强化学习问题

  • 典型例子
    • 多臂赌博机问题
    • 悬崖行走问题
  • 强化学习定义
    在强化学习中,哟两个可以及进行交互的对象:智能体和环境。
    (1)智能体(Agent)可以感知外界环境的状态(State)和反馈的奖励(Reward),并进行学习和决策。智能体的决策功能是指根据外界环境的状态来做出不同的动作(Action),而学习功能是指根据外界环境的奖励来调整策略。
    (2)环境(Environment)是智能体外部的所有事物,并受智能体动作的影响而改变其状态,并反馈给智能体相应的奖励。
    《神经网络与深度学习》—学习笔记_第175张图片
    《神经网络与深度学习》—学习笔记_第176张图片
  • 马尔科夫决策过程
    《神经网络与深度学习》—学习笔记_第177张图片
    《神经网络与深度学习》—学习笔记_第178张图片
    《神经网络与深度学习》—学习笔记_第179张图片
  • 强化学习的目标函数
    • 总回报
      《神经网络与深度学习》—学习笔记_第180张图片
    • 目标函数
      《神经网络与深度学习》—学习笔记_第181张图片
  • 值函数
    • 状态值函数
    • 状态-动作值函数
    • 值函数的作用
      在这里插入图片描述
  • 深度强化学习
    深度强化学习(Deep Reinforcement Learning)是将强化学习和深度学习结合在一起,用强化学习来定义问题和优化目标,用深度学习来解决策略和值函数的建模问题,然后使用误差反向传播算法来优化目标函数。深度强化学习在一定程度上具备解决复杂问题的通用智能,并在很多任务上都取得了很大的成功。

基于值函数的学习方法

值函数是对策略的评估,如果策略有限(即状态数和动作数都有限),可以对所有的策略进行评估并选出最优策略。但是这种方式在实践中很难实现,一种可行的方式是通过迭代的方法不断优化策略,直到选出最优策略。先随机初始化一个策略,计算该策略的值函数,并根据值函数来设置新的策略,然后一直反复迭代直到收敛。

  • 动态规划算法
    • 策略迭代算法
      • 策略评估(Policy Evaluation),计算当前策略下每个状态的值函数。
      • 策略改进(Policy Improvement) ,根据值函数来更新策略。
    • 值迭代算法
      策略迭代算法中的策略评估和策略改进是交替轮流进行,其中策略评估也是通过一个内部迭代来进行计算,其计算量比较大。事实上,我们不需要每次都计算出每次策略对应的精确的值函数,也就是说内部迭代不需要执行到完全收敛。
      值迭代算法将策略评估和策略改进两个过程合并,来直接计算出最优策略。最优策略对应的值函数称为最优值函数,其中包括:最优状态值函数和最优状态-动作值函数。
  • 蒙特卡罗方法
    在很多应用场景中,我们一般需要智能体和环境进行交互并收集一些样本,然后根据这些样本来求解马尔可夫决策过程最优策略。这种模型未知,基于采样的学习算法也称为模型无关的强化学习(Model-Free Reinforcement Learning)算法。如果模型未知,Q函数(状态-动作值函数)可以通过采样进行计算,这就是蒙特卡罗方法。在近似估计出Q函数后,可以进行策略改进,然后在新的策略下重新通过采样来估计Q函数,并不断重复,直至收敛。
    • 利用和搜索
    • 同策略
    • 异策略
  • 时序差分学习方法
    蒙特卡罗方法一般需要拿到完整的轨迹,才能对策略进行评估并更新模型,因此效率比较低,时序差分学习(Temporal-Difference Learning)方法是蒙特卡罗方法的一种改进,通过引入动态规划算法来提高学习效率,时序差分学习方法是模拟一段轨迹,每行动一步(或者几步),即利用贝尔曼方程来评估行动前状态的价值。
  • 深度Q网络
    深度Q网络采取两个措施来解决目标不稳定,参数学习的目标依赖于参数本身和样本之间有很强的相关性。一是目标网络冻结,即在一个时间段内固定目标中的参数,来稳定学习目标;二是经验回收,即构建一个经验池来去除数据相关性。经验池是由智能体最近的经历组成的数据集。
    训练时,随机从经验池中抽取样本来代替当前的样本用来进行训练。这样就打破了和相邻训练样本的相似性,避免模型陷入局部最优。经验回放在一定程度上类似于监督学习。先收集样本,然后在这些样本上进行训练。

基于策略函数的学习方法

强化学习的目标是学习到一个策略来最大化期望回报。一种直接的方法是在策略空间中直接搜索来得到最佳策略,称为策略搜索。策略搜索本质是一个优化问题,可以分为基于梯度的优化和无梯度优化。策略搜索和基于值函数的方法相比,策略搜索可以不需要值函数,直接优化策略。参数化的策略能够处理连续状态和动作,可以直接学出随机性策略。

  • REINFORCE算法
  • 带基准线的REINFORCE算法

演员-评论员算法

在REINFORCE算法中,每次需要根据一个策略采集一条完整的轨迹,并计算这条轨迹上的回报。这种方式的方差比较大,学习效率也比较低。我们可以借鉴时序差分学习的思想,使用动态规划方法来提高采样的效率,即从状态开始的总回报可以通过当前动作的即时奖励和下一个状态的值函数来近似估计。
演员-评论员算法(Actor-Critic Algorithm)是一种结合策略梯度和时序差分学习的强化学习方法。其中演员(Actor)是指策略函数,即学习一个策略来得到尽量高的回报,评论员(Critic)是指值函数,对当前策略的值函数进行估计,即评估演员的好坏。借助于值函数,演员-评论员算法可以进行单步更新参数,不需要等到回合结束才进行更新。在演员-评论员算法中的策略函数和值函数都是待学习的函数,需要在训练过程中同时学习。

总结

强化学习是一种十分吸引人的机器学习方法,通过智能体不断与环境仅交互,并根据经验调整其策略来最大化其长远的所有奖励的累积值。相比其他机器学习方法,强化学习更接近生物学习的本质,可以应用多种复杂的场景,从而更接近通用人工智能系统的目标。
强化学习和监督学习的区别在于:

  • 强化学习的样本通过不断与环境进行交互产生,即试错学习,而监督学习的样本由人工收集并标注;
  • 强化学习的反馈信息只有奖励,并且是延迟的,而监督学习需要明确的指导信息(每一个状态对应的动作)。
    强化学习可以追溯到两个来源:
  • 一个是心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯行为;
  • 另一个是控制论领域的最优控制问题,即在满足一定约束条件下,寻求最优控制策略,使得性能指标取极大值或极小值。
    强化学习的算法非常多,大体上可以分为基于值函数的方法(包括动态规划、时序差分学习等)、基于策略函数的方法(包括策略梯度等)以及融合两者的方法。
    《神经网络与深度学习》—学习笔记_第182张图片
    一般而言,基于值函数的方法在策略更新时可能会导致值函数的改变比较大,对收敛性有一定影响,而基于策略函数的方法在策略更新时更加平稳些。但后者因为策略函数的解空间比较大,难以进行充分的采样,导致方差较大,并容易收敛到局部最优解。演员-评论员算法通过融合两种方法,取长补短,有着更好的收敛性。
    《神经网络与深度学习》—学习笔记_第183张图片

序列生成模型

序列概率模型

序列数据的特点:

  • 样本是变长的
  • 样本空间非常大

N元统计模型

深度序列模型

  • 模型结构
    • 嵌入层
    • 特征层
    • 输出层
  • 参数学习

评价方法

  • 困惑度
  • BLEU算法
  • ROUGE算法

序列生成模型中的学习问题

  • 曝光偏差问题
  • 训练目标不一致问题
  • 计算效率问题

序列到序列模型

  • 基于循环神经网络的序列到序列模型
  • 基于注意力的序列到序列模型
  • 基于自注意力的序列到序列模型

数学基础

线性代数

线性代数主要包含向量、向量空间(或称线性空间)以及向量的线性变换和有限维的线性方程组。

向量和向量空间

  • 向量
    《神经网络与深度学习》—学习笔记_第184张图片

  • 向量空间
    《神经网络与深度学习》—学习笔记_第185张图片

    • 欧式空间
      《神经网络与深度学习》—学习笔记_第186张图片
    • 线性子空间
      在这里插入图片描述
    • 线性无关
      在这里插入图片描述
    • 基向量
      《神经网络与深度学习》—学习笔记_第187张图片
    • 内积
      《神经网络与深度学习》—学习笔记_第188张图片
    • 正交
      在这里插入图片描述
  • 范数
    《神经网络与深度学习》—学习笔记_第189张图片
    《神经网络与深度学习》—学习笔记_第190张图片

  • 常见的向量
    《神经网络与深度学习》—学习笔记_第191张图片

矩阵

  • 线性映射
    《神经网络与深度学习》—学习笔记_第192张图片
  • 仿射变换
    《神经网络与深度学习》—学习笔记_第193张图片
  • 矩阵操作

    • 《神经网络与深度学习》—学习笔记_第194张图片
    • 乘积
      《神经网络与深度学习》—学习笔记_第195张图片
    • 转置
      《神经网络与深度学习》—学习笔记_第196张图片
    • Hadamard积
      《神经网络与深度学习》—学习笔记_第197张图片
    • Kronecker积
      《神经网络与深度学习》—学习笔记_第198张图片
    • 外积
      《神经网络与深度学习》—学习笔记_第199张图片
    • 向量化
      《神经网络与深度学习》—学习笔记_第200张图片

    • 在这里插入图片描述
    • 行列式
      《神经网络与深度学习》—学习笔记_第201张图片

    • 《神经网络与深度学习》—学习笔记_第202张图片
    • 范数
      《神经网络与深度学习》—学习笔记_第203张图片
  • 矩阵类型
    • 对称矩阵
      在这里插入图片描述
    • 对角矩阵
      《神经网络与深度学习》—学习笔记_第204张图片
    • 单位矩阵
      《神经网络与深度学习》—学习笔记_第205张图片
    • 逆矩阵
      《神经网络与深度学习》—学习笔记_第206张图片
    • 正定矩阵
      《神经网络与深度学习》—学习笔记_第207张图片
    • 正交矩阵
      《神经网络与深度学习》—学习笔记_第208张图片
    • Cram矩阵
      在这里插入图片描述
  • 特征值与特征向量
    《神经网络与深度学习》—学习笔记_第209张图片
  • 矩阵分解
    一个矩阵通常可以用一些比较简单的矩阵来表示,称为矩阵分解(Matrix Decomposition,or Matrix Factorization)。
    • 特征分解
      《神经网络与深度学习》—学习笔记_第210张图片
    • 奇异值分解
      《神经网络与深度学习》—学习笔记_第211张图片
      《神经网络与深度学习》—学习笔记_第212张图片

微积分

微积分(Calculus)是研究函数的微分(Differentiation)、积分(Integration)及其相关应用的数学分支。

微分

  • 导数
    《神经网络与深度学习》—学习笔记_第213张图片
    《神经网络与深度学习》—学习笔记_第214张图片
    《神经网络与深度学习》—学习笔记_第215张图片
  • 微分
    《神经网络与深度学习》—学习笔记_第216张图片
  • 泰勒公式
    《神经网络与深度学习》—学习笔记_第217张图片

积分

《神经网络与深度学习》—学习笔记_第218张图片

矩阵微积分

矩阵微积分(Matrix Calculus)是多元微积分的一种表达方式,即使用矩阵和向量来表示因变量每个成分关于自变量每个成分的偏导数。矩阵微积分的表示通常有两种符号约定:分子布局(Numerator Layout)和分母布局(Denominator Layout)。两者的区别是一个标量关于一个向量的导数是写成列向量还是行向量。

  • 标量关于向量的偏导数
    《神经网络与深度学习》—学习笔记_第219张图片
  • 向量关于标量的偏导数
    《神经网络与深度学习》—学习笔记_第220张图片
  • 向量关于向量的偏导数
    《神经网络与深度学习》—学习笔记_第221张图片
  • 导数法则
    • 加(减)法则
      在这里插入图片描述
    • 乘法法则
      《神经网络与深度学习》—学习笔记_第222张图片
    • 链式法则
      《神经网络与深度学习》—学习笔记_第223张图片

常见函数的导数

  • 向量函数及其导数
    《神经网络与深度学习》—学习笔记_第224张图片
  • 按位计算的向量函数及其导数
    《神经网络与深度学习》—学习笔记_第225张图片
    • Logistic函数
      《神经网络与深度学习》—学习笔记_第226张图片
      《神经网络与深度学习》—学习笔记_第227张图片
    • Softmax函数
      《神经网络与深度学习》—学习笔记_第228张图片
      《神经网络与深度学习》—学习笔记_第229张图片

数学优化

《神经网络与深度学习》—学习笔记_第230张图片

数学优化的类型

  • 离散优化和连续优化
    根据输入变量X的值域是否为实数域,数学优化问题可以分为离散优化问题和连续优化问题。
    • 离散优化问题
      《神经网络与深度学习》—学习笔记_第231张图片
    • 连续优化问题
      在这里插入图片描述
  • 无约束优化和约束优化
    《神经网络与深度学习》—学习笔记_第232张图片
  • 线性优化和非线性优化
    《神经网络与深度学习》—学习笔记_第233张图片

优化算法

《神经网络与深度学习》—学习笔记_第234张图片

  • 全局最小解和局部最小解
    《神经网络与深度学习》—学习笔记_第235张图片
  • 梯度下降法
    《神经网络与深度学习》—学习笔记_第236张图片
    《神经网络与深度学习》—学习笔记_第237张图片

拉格朗日乘数法与KKT条件

《神经网络与深度学习》—学习笔记_第238张图片

  • 等式约束优化问题
    《神经网络与深度学习》—学习笔记_第239张图片
  • 不等式约束优化问题
    《神经网络与深度学习》—学习笔记_第240张图片
    《神经网络与深度学习》—学习笔记_第241张图片
    《神经网络与深度学习》—学习笔记_第242张图片

概率论

概率论主要研究大量随机现象中的数量规律,其应用十分广泛,几乎遍及各个领域。

样本空间

样本空间是一个随机试验所有可能结果的集合。随机试验中的每个可能结果称为样本点。有些试验有两个或多个可能的样本空间,这时样本空间可以通过构建上述两个样本空间的笛卡尔乘积来得到。
《神经网络与深度学习》—学习笔记_第243张图片

事件和概率

随机事件(或简称事件)指的是一个被赋予概率的事物集合,也就是样本空间中的一个子集。概率(Probability)表示一个随机事件发生的可能性大小,为0到1之间的实数。

  • 随机变量
    在随机试验中,试验的结果可以用一个数X来表示,这个数X是随着试验结果的不同而变化的,是样本点的一个函数。我们把这种数称为随机变量(Random Variable)。
    • 离散随机变量
      《神经网络与深度学习》—学习笔记_第244张图片
      《神经网络与深度学习》—学习笔记_第245张图片
    • 连续随机变量
      《神经网络与深度学习》—学习笔记_第246张图片
      《神经网络与深度学习》—学习笔记_第247张图片
    • 累积分布函数
      《神经网络与深度学习》—学习笔记_第248张图片
  • 随机向量
    在这里插入图片描述
    • 离散随机向量
      《神经网络与深度学习》—学习笔记_第249张图片
      《神经网络与深度学习》—学习笔记_第250张图片
    • 连续随机向量
      《神经网络与深度学习》—学习笔记_第251张图片
      《神经网络与深度学习》—学习笔记_第252张图片
  • 边际分布
    《神经网络与深度学习》—学习笔记_第253张图片
    《神经网络与深度学习》—学习笔记_第254张图片
  • 条件概率分布
    《神经网络与深度学习》—学习笔记_第255张图片
  • 贝叶斯定理
    《神经网络与深度学习》—学习笔记_第256张图片
  • 独立与条件独立
    《神经网络与深度学习》—学习笔记_第257张图片
  • 期望和方差
    《神经网络与深度学习》—学习笔记_第258张图片
    《神经网络与深度学习》—学习笔记_第259张图片
    • Jensen不等式
      《神经网络与深度学习》—学习笔记_第260张图片
    • 大数定律
      《神经网络与深度学习》—学习笔记_第261张图片

随机过程

《神经网络与深度学习》—学习笔记_第262张图片

  • 马尔可夫过程
    《神经网络与深度学习》—学习笔记_第263张图片
    《神经网络与深度学习》—学习笔记_第264张图片
  • 高斯过程
    《神经网络与深度学习》—学习笔记_第265张图片

信息论

信息论(Information Theory)是数学、物理、统计、计算机科学等多个学科的交叉领域。主要研究信息的量化、存储和通信等方法。“信息”是指一组消息的激活。假设在一个噪声通道上发送消息,我们需要考虑如何对每一个信息进行编码、传输以及解码,使得接收者可以尽可能准确的重构出消息。在机器学习相关领域,信息论也有着大量的应用。比如特征抽取、统计推断、自然语言理解等。

  • 自信息和熵
    《神经网络与深度学习》—学习笔记_第266张图片
  • 熵编码
    《神经网络与深度学习》—学习笔记_第267张图片
  • 联合熵和条件熵
    《神经网络与深度学习》—学习笔记_第268张图片

互信息

《神经网络与深度学习》—学习笔记_第269张图片

交叉熵和散度

  • 交叉熵
    《神经网络与深度学习》—学习笔记_第270张图片
  • KL散度
    《神经网络与深度学习》—学习笔记_第271张图片
  • JS散度
    《神经网络与深度学习》—学习笔记_第272张图片
  • Wasserstein距离
    《神经网络与深度学习》—学习笔记_第273张图片

你可能感兴趣的:(深度学习)