[nndl.github.io]
[神经网络与深度学习]
[nndl-book]
深度学习是机器学习的一个分支,是指一类问题以及解决这类问题的方法。
深度学习问题是一个机器学习问题,指从有限样例中通过算法总结出一般性的规律,并可以应用到新的未知数据上。
深度学习采用的模型一般比较复杂,指样本的原始输入到输出目标之间数据流经过多个线性或非线性组件(component)。因为每个组件都会对信息进行加工,并进而影响后续的组件,所以当最后得到输出结果时,并不清楚其中每个组件的贡献是多少(贡献度分配问题 Credit Assignment Problem, CAP),贡献度分配问题关系到如何学习每个组件中的参数。
一种可以比较好的解决贡献度分配问题的模型是人工神经网络(Artificial Neural Networks, ANN)。人工神经网络(简称神经网络),是一种受人脑神经系统的工作方式启发而构造的数学模型。人脑神经系统是一个由生物神经元组成的高度复杂网络,是一个并行的非线性信息处理系统。人脑神经系统可以将声音、视觉等信号经过多层的编码,从最原始的低层特征不断加工、抽象,最终得到原始信号的语义表示。和人脑神经网络类似,人工神经网络是由人工神经元以及神经元之间的连接构成,其中有两类特殊的神经元:一类用来接收外部的信息,另一类用来输出信息。这样,神经网络可以看作信息从输入到输出的信息处理系统。如果把神经网络看作一组参数控制的复杂函数,并用来处理一些模式识别任务(比如语音识别、人脸识别等),神经网络的参数可以通过机器学习的方式来从数据中学习。因为神经网络模型一般比较复杂,从输入到输出的信息传递路径一般比较长,所以复杂神经网络的学习可以看成是一种深度的机器学习,即深度学习。
神经网络和深度学习并不等价。深度学习可以采用神经网络模型,也可以采用其他模型(比如深度信念网络是一种概率图模型)。但是,由于神经网络模型可以比较容易的解决贡献度分配问题,因此神经网络模型成为深度学习中主要采用的模型。虽然深度学习一开始用来解决机器学习中的表示学习问题,但是由于其强大的能力,深度学习越来越多的用来解决一些通用人工智能问题,比如推理、决策等。
人工智能(Artificial Intelligence, AI)就是让机器具有人类的智能。
图灵测试:“一个人在不接触对方的情况下,通过一种特殊的方式和对方进行一系列的问答。如果在相当长的时间内,他无法根据这些问题判断对方是人还是计算机,那么就可以认为这个计算机是智能的”。图灵测试是促使人工智能从哲学探讨到科学研究的一个重要因素,引导了人工智能的很多研究方向。因为要使得计算机通过图灵测试,计算机就必须具备理解语言、学习、记忆、推理、决策等能力。这就延伸出了很多不同的子学科,比如机器感知(计算机视觉、语音信息处理)、学习(模式识别、机器学习、强化学习)、语言(自然语言处理)、记忆(知识表示)、决策(规划、数据挖掘)等。
人工智能是计算机科学的一个分支,主要研究、开发用于模拟、延伸和扩展人类智能的理论、方法、技术及应用系统等。
人工智能的定义:人工智能就是要让机器的行为看起来就像是人所表现出的智能行为一样。人工智能主要分为:
人工智能的发展历史
机器学习(Machine Learning,ML)是指从有限的观测数据中学习(或“猜测”)出具有一般性的规律,并利用这些规律对未知数据进行预测的方法。机器学习是人工智能的一个重要分支,并逐渐成为推动人工智能发展的关键因素。
传统的机器学习主要关注如何学习一个预测模型,一般需要首先将数据表示为一组特征(Feature),特征的表示形式可以是连续的数值、离散的符号或其他形式。然后将这些特征输入的预测模型,并输出预测结果。这类机器学习可以看作浅层学习(Shallow Learning)。浅层学习的一个重要特点是不涉及特征学习,其特征主要靠人工经验或特征转换方式来抽取。
用机器学习来解决实际任务时,会面对多种多样的数据形式,比如声音、图像、文本等,不同的数据的特征构造方式差异很大。因此,在实际任务中使用机器学习模型一般会包含以下几个步骤:
为了提高机器学习系统的准确率,需要将输入学习转换为有效的特征,或者更一般性的称为表示(Representation)。如果有一种算法可以自动的学习出有效的特征,并提高最终机器学习模型的性能,那么这种学习就可以叫作表示学习(Representation Learning)。
表示学习的关键是解决语义鸿沟(Semantic Gap)问题。语义鸿沟问题是指输入数据的底层特征和高层语义信息之间的不一致性和差异性。如果一个预测模型直接建立在底层特征之上,会导致对预测模型的能力要求过高。如果可以有一个好的表示在某种程度上能够反映出数据的高层语义特征,那么就能相对容易的构建后续的机器学习模型。
要学习到一种好的高层语义表示(一般分布式表示),通常需要从底层特征开始,经过多步非线性转换才能得到。深层结构的优点是可以增加特征的重用性,从而指数级的增加表示能力。因此,表示学习的关键是构建具有一定深度的多层次特征表示。
在传统的机器学习中,也有很多有关特征学习的方法,比如主成分分析、线性判别分析、独立成分分析等。但是,传统的特征学习一般是通过人为的设计一些准则,然后根据这些准则来选取有效的特征。特征的学习是和最终预测模型的学习分开进行的,因此学习到的特征不一定可以提升最终模型的性能。
为了学习一种好的表示,需要构建具有一定“深度”的模型,并通过学习算法来让模型自动学习出好的特征表示(从底层特征,到中层特征,再到高层特征),从而最终提升预测模型的准确率。所谓“深度”是指原始数据进行非线性特征转换的次数。如果把一个表示学习系统看作一个有向图结构,深度也可以看作从输入节点到输出节点经过的最长路径的长度。
深度学习是一种学习方法可以从数据中学习一个“深度模型”,深度学习是机器学习的一个子问题,其主要目的是从数据中自动学习到有效的特征表示。
深度学习的数据流程,通过多层的特征转换,把原始数据变成更高层次、更抽象的表示。这些学习到的表示可以替代人工设计的特征,从而避免“特征工程”。
传统机器学习方法需要将一个任务的输入和输出之间人为的切割成很多子模块(或多个阶段),每个子模块分开学习。端到端学习(End-to_End Learning),也称端到端训练,是指在学习过程中不进行分模块或分阶段训练,直接优化任务的总体目标。在端到端学习中,一般不需要明确的给出不同模块或阶段的功能,中间过程不需要人为干预。端到端学习的训练数据为“输入-输出”对的形式,无需提供其他额外信息。因此,端到端学习和深度学习一样,都是要解决贡献分配问题。目前,大部分采用神经网络模型的深度学习也可以看作一种端到端的学习。
人工神经网络是为模拟人脑神经网络而设计的一种计算模型,它从结构、实现机理和功能上模拟人脑神经网络。人工神经网络与生物神经元类似,由多个节点(人工神经元)互相连接而成,可以用来对数据之间的复杂关系进行建模。不同节点之间的连接被赋予了不同的权重,每个权重代表了一个节点对另一个节点的影响大小。每个节点代表一种特定函数,来自其他节点的信息经过其相应的权重综合计算,输入到一个激活函数中并得到一个新的活性值(兴奋或抑制)。从系统观点看,人工神经元网络是由大量神经元通过极其丰富和完善的连接而构成的自适应非线性动态系统。
构造一个人工神经网络比较容易,但是如何让人工神经网络具有学习能力并不是一件容易的事情。感知机是最早的具有机器学习思想的神经网络,但其学习方法无法扩展到多层的神经网络上。反向传播算法有效的解决了多层神经网络的学习问题,并成为最流行的神经网络学习算法。
人工神经网络诞生之初并不是用来解决机器学习问题。由于人工神经网络可以用作一个通用的函数逼近器(一个两层的神经网络可以逼近任意的函数),因此可以将人工神经网络看作一个可学习的函数,并将其应用到机器学习中。理论上,只要有足够的训练数据和神经元数量,人工神经网络就可以学到很多复杂的函数。
神经网络的发展历史
机器学习是让计算机从数据中进行自动学习,得到某种知识(或规律)。作为一门学科,机器学习通常指一类问题以及解决这类问题的方法,即如何从观测数据(样本)中寻找规律,并利用学习到的规律(模型)对未知或无法观测的数据进行预测。
安装训练样本提供的信息以及反馈方式的不同,将机器学习算法分为以下几类:
激活函数 增强网络的表示能力和学习能力,激活函数具备以下性质:
连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数。
激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
激活函数的导函数的值域要在一个合适的区域内,不能太大也不能太小,否则会影响训练的效率和稳定性。
神经网络中常用的激活函数:
Sigmoid型函数
Sigmoid型函数是指一类S型曲线函数,为两端饱和函数,常用的Sigmoid函数有Logistic函数和Tanh函数。
ReLU函数
通过一定的连接方式或信息传递方式进行协作的神经元即神经网络。
卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有局部连接、权重共享等特性的深层前馈神经网络。卷积神经网络是受生物学上感受野机制的启发而 提出的。感受野(Receptive Field)机制主要是指听觉、视觉等神经系统中一些神经元特性,即神经元只接受其所支配的刺激区域内的信号。
前馈神经网络最主要是用来处理图像信息,在用全连接前馈网络来处理图像时,会存在两个问题:
神经元个数=卷积核数量X输出特征图宽度X输出特征图高度
卷积层可训练参数数量=卷积核数量X(卷积核宽度X卷积核高度+1)(1表示偏置)
汇聚层可训练参数数量=卷积核数量X(1+1)(两个1分别表示相加后的系数和偏置,有的汇聚层无参数)
连接数=卷积核数量X(卷积核宽度X卷积核高度+1)X输出特征图宽度X输出特征图高度(1表示偏置)
全连接层连接数=卷积核数量X(输入特征图数量X卷积核宽度X卷积核高度+1)(输出特征图尺寸为1X1)
循环神经网络(Recurrent Neural Network, RNN )是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。循环神经网络的参数学习可以通过随时间反向传播算法来学习。随时间反向传播算法即按照时间的逆序将错误信息一步一步的往前传递。当输入序列比较长时,会存在梯度爆炸和消失问题,也称为长程依赖问题。为了解决这个问题,人们对循环神经网络进行了很多的改进,其中最有效的改进方式引入门控机制。
循环神经网络在学习过程中的主要问题是由于梯度消失或爆炸问题,很难建模长时间间隔的状态之间的依赖关系。
为了改善循环神经网络的长程依赖问题,一种非常好的解决方案是引入门控机制来控制信息的累积速度,包括有选择的加入新的信息,并有选择的遗忘之前累积的信息。
虽然神经网络具有非常强的表达能力,但是当应用神经网络模型到机器学习依然存在一些难点问题。
网络优化是指寻找一个神经网络模型来使得经验(或结构)风险最小化的过程,包括模型选择以及参数学习等。深度神经网络是一个高度非线性的模型。其风险函数是一个非凸函数,风险最小化是一个非凸优化问题,并且深度神经网络还存在梯度消失问题。
目前,深度神经网络的参数学习主要是通过梯度下降法来寻找一组可以最小化结构风险的参数。梯度下降法分为:批量梯度下降、随机梯度下降以及小批量梯度下降三种形式。根据不同的数据量和参数量,可以选择一种具体的实现形式,在训练神经网络是优化算法大体可以分为两类:1)调整学习率,使得优化更稳定;2)梯度估计修正,优化训练速度。
影响梯度下降法的主要因素:
- 1)批量大小K;
- 2)学习率 α \alpha α;
- 3)梯度估计
批量大小不影响随机梯度的期望,但是会影响随机梯度的方差。批量大小越大,随机梯度的方差越小,引入的噪声也越小,训练也越稳定,因此可以设置较大的学习率。而批量大小较小时,需要设置较小的学习率,否则模型会不收敛,学习率通常要随着批量大小的增大而相应的增大。简单有效的方法是线性缩放规则(Linear Scaling Rule):当批量大小增加m倍时,学习率也增加m倍。线性缩放规则往往在批量大小比较小时适用,当批量大小非常大时,线性缩放会使得训练不稳定。批量大小和模型的泛化能力有一定的关系,通过实验发现:批量越大,越有可能收敛到最小尖锐最小值;批量越小,越有可能收敛到平坦最小值。
除了调整学习率之外,还可以进行梯度估计(Gradient Estimation)的修正。在随机(小批量)梯度下降法中,如果每次选取样本数量比较小,损失会呈现震荡的方式下降。随机梯度下降法中每次迭代的梯度估计和整个训练集上的最优梯度并不一致,具有一定的随机性。一种有效的缓解梯度随机性的方式是通过使用最近一段时间内的平均梯度来代替当前时刻的随机梯度来作为参数更新的方向,从而提高优化速度。
神经网络的参数学习是一个非凸优化问题,当使用梯度下降法来进行优化网络参数时,参数初始值的选取十分关键,关系到网络的优化效率和泛化能力。
一种最简单的随机初始化方法是从一个固定均值和方差的分布中采样来生成参数的初始值。
基于固定方差的随机初始化方法中,比较关键的是如何设置方差,如果参数的范围取值太小,一是会导致神经元的输出过小,经过多层之后信号就慢慢消失了;二是还会使得sigmoid型激活函数丢失非线性的能力。以sigmoid型函数为例,在0附近基本上是近似线性的。这样多层神经网络的优势也就不存在了。如果参数范围取的太大,会导致输入状态过大。对于sigmoid型激活函数来说,激活值变得饱和,梯度接近于0,从而导致梯度消失问题。
为了降低固定方差对网络性能以及优化效率的影响,基于固定方差的随机初始化方法一般需要配合逐层归一化来使用。
要高效的训练神经网络,给参数选取一个合适的随机初始化区间是非常重要的。一般而言,参数初始化的区间应该根据神经元的性质进行差异化的设置。如果一个神经元的输入连接很多,它的每个输入连接上的权重就应该小一些,以避免神经元的输出过大(当激活函数WieReLU时)或过饱和(当激活函数为Sigmoid函数时)。
初始化一个深度网络时,为了缓解梯度爆炸问题,尽可能保持每个神经元的输入和输出的方差一致,根据神经元的连接数量来自适应的调整初始化分布的方差,这类方法称为方差缩放(Variance Scaling)。
基于方差的初始化方法都是对权重矩阵中的每个参数进行独立采样,由于采样的随机性,采样出来的权重矩阵依然可能存在梯度消失或梯度爆炸问题。
对于尺度敏感的模型,必须先对样本进行预处理,将各个维度的特征转换到相同的取值区间,并且消除不同特征之间的相关性,才能获取比较理想的结果。从理论上,神经网络应该具有尺度不变性,可以通过参数的调整来适应不同特征的尺度。不同输入特征的尺度差异比较大时,梯度下降法的效率也会受到影响。
逐层归一化(Layer-wise Normalization)是将传统机器学习中的数据归一化方法应用到深度神经网络中,对神经网络中隐藏层的输入进行归一化,从而使得网络更容易训练。
逐层归一化提高训练效率的原因有:
更好的尺度不变性:对每一个神经层的输入进行归一化操作,使其分布保持稳定。把每个神经层的输入分布都归一化为标准正态分布,可以使得每个神经层对其输入具有更好的尺度不变性。不论低层的参数如何变化,高层的输入保持相对稳定。另外,尺度不变性可以使得我们更加高效的进行参数初始化以及超参数选择。
更平滑的优化地形:逐层归一化一方面可以使得大部分神经层的输入处于不饱和区域,从而让梯度变大,避免梯度消失问题;另一方面还可以使得神经网络的优化地形(Optimization Landscape)更加平滑,以及使梯度变得更加稳定,从而允许使用更大的学习率,并提高收敛速度。
常用逐层归一化方法:
批量归一化(Batch Normalization, BN)是一种有效的逐层归一化方法,可以对神经网络中的任意的中间层进行归一化操作。逐层归一化不但可以提高优化效率,还可以作为一种隐形的正则化方法。在训练时,神经网络对一个样本的预测不仅和该样本自身相关,也和同一批次中的其他样本相关。由于在选取批次时具有随机性,因此使得神经网络不会“过拟合”到某个特定样本,从而提高网络的泛化能力。
层归一化
批量归一化是对一个中间层的单个神经元进行归一化操作,因此要求小批量样本的数量不能太小,否则难以计算单个神经元的统计信息。此外,如果一个神经元的净输入的分布在神经网络中是动态变化的,比如循环神经网络,那么就无法应用批量归一化操作。
层归一化和批量归一化非常类似的方法,和批量归一化不同的是,层归一化对一个中间层的所有神经元进行归一化。
超参数类型:
超参数优化困难:
超参数配置方法:
网格搜索
通过尝试所有超参数的组合来寻址合适一组超参数配置方法。
随机搜索
不同超参数对模型性能的影响有很大差异,有些超参数(比如正则化系数)对模型性能的影响有限,而另一些超参数(比如学习率)对模型影响比较大。在这种情况下,采用网格搜索会在不重要的超参数上进行不必要的尝试。一个种 在实践中比较有效的改进方法是对超参数进行随机组合,然后选取一个性能最好的配置,这就是随机搜索。随机搜索在实践中更容易实现,一般会比网格搜索更加有效。
网格搜索和随机搜索都没有利用不同超参数组合之间的相关性,即如果模型的超参数组合比较类似,其模型性能也是比较接近的。因此这两种搜索方式一般都比较低效。
贝叶斯优化(Bayesian Optimization)
是一种自适应的超参数优化方法,根据当前已经试验的超参数组合,来预测下一个可能带来最大收益的组合。
动态资源分配
神经架构搜索、
通过神经网络来自动实现架构的设计。一个神经网络的架构可以用一个变长的字符串来描述。利用元学习的思想,神经架构搜索利用一个控制器来生成一个变长的字符串来描述。利用元学习的思想,神经架构搜索利用一个控制器来生成另一个子网络的架构描述。控制器可以由一个循环神经网络来实现。控制器的训练可以通过强化学习来完成,其奖励信号为生成的自网络在开发集上的准确率。
正则化(Regularization)是一类通过限制模型复杂度,从而避免过拟合,提高泛化能力的方法。
在传统的机器学习中,提高泛化能力的方法主要是限制模型复杂度,比如正则化的方式。而在训练深度神经网络时,特别是在过度参数化时,正则化的效果往往不如浅层机器学习模型中显著。因此,训练深度学习模型时,往往还会使用其他的正则化方法,比如数据增强、提前停止、丢弃法、集成法等。
深度神经网络的优化和正则化是既对立又统一的关系。一方面我们希望优化算法能找到一个全局最优解(或较好的局部最优解),另一方面我们又不希望模型优化到最优解,这可能陷入过拟合。优化和正则化的统一目标是期望风险最小化。今年来深度学习的快速发展在一定程度上也归因于很多深度神经网络的优化和正则化方法的出现,虽然这些方法往往是经验性的,但在实践中取得了很好的效果,使得我们可以高效地、端到端的训练神经网络模型。
在优化方面,训练神经网络时的主要难点是非凸优化以及梯度消失问题。在深度学习技术发展的初期,通常需要利用预训练和逐层训练等比较低的方法来辅助优化。随着深度学习技术的发展,我们目前通常可以高效的、端到端的训练一个深度神经网络。这些提高训练效率的方法通常分为以下3个方面:
在泛化方面,传统的机器学习中有一些很好的理论可以帮助我们在模型的表示能力、复杂度和泛化能力之间找到比较好的平滑,但是这些理论无法解释深度神经网络在实际应用中的泛化能力表现。根据通用近似定理,神经网络的表示能力十分强大。从直觉上,一个过度参数化的深度神经网络很容易产生过拟合现象,因为它的容量足够记住所有训练数据。但是实验表明,深度神经网络在训练过程中依然优先记住训练数据中的一般模式(Pattern),即具有高泛化能力的模式。但目前,深度神经网络的泛化能力还没有很好的理论支持。在传统的机器学习模型中比较有效的正则化在深度神经网络中的作用也比较有限,而一些经验的做法(比如小的批量大小、大的学习率、提前停止、丢弃法、数据增强)会更有效。
根据通用近似定理,前馈网络和循环网络都有很强的能力。但由于优化算法和计算能力的限制,在实践中很难达到通用近似的能力。特别是在处理复杂任务时,比如需要处理大量的输入信息或者复杂的计算流程时,目前计算机的计算能力依然是限制神经网络发展的瓶颈。
wield减少计算复杂度,通过部分借鉴生物神经网络的一些机制,我们引入了局部连接、权重共享以及汇聚操作来简化神经网络结构。虽然这些机制可以有效缓解模型的复杂度和表达能力之间的矛盾,但是我们依然希望在不“过度”增加模型复杂度(主要是模型参数)的情况下来提高模型的表达能力。
神经网络中可以存储的信息量称为网络容量(Network Capacity)。一般来讲,利用一组神经元来存储信息时,其存储容量和神经元的数量以及网络的复杂度成正比。要存储的信息越多,神经元数量就要越多或者网络要越复杂,进而导致神经网络的参数成倍的增加。
我们人脑的生物神经网络同样存在网络容量问题,人脑中的工作记忆大概只要几秒钟的时间,类似于循环神经网络中的隐状态。而人脑每个时刻接收的外界输入信息非常多,包括来自于视觉、听觉、触觉的各种各样的信息。单就视觉来说,眼睛每秒钟都会发送千万比特的信息给视觉神经系统。人脑在有限的资源下,并不能同时处理这些过载的输入信息。大脑神经系统由两个重要机制可以解决信息过载问题:注意力机制和记忆机制。
我们可以借鉴人脑解决信息过载的机制,从两方面来提高神经网络处理信息的能力。一方面是注意力,通过自上而下的信息选择机制来过滤掉大量的无关信息;另一方面是引入额外的外部记忆,优化神经网络的记忆结构来提高神经网络存储信息的容量。
注意力是一种人类不可或缺的复杂认知功能,指人可以在关注一些信息的同时忽略另一些信息的选择能力。在日常生活中,我们通过视觉、听觉、触觉等方式接收大量的感觉输入。但是人脑还能在这些外界的信息轰炸中有条不紊的工作,是因为人脑可以有意或无意的从这些大量输入信息中选择小部分的有用信息来重点处理,并忽略其他信息。这种能力就叫作注意力(Attention)。注意力可以作用在外部的刺激(听觉、视觉、味觉等),也可以作用在内部的意识(思考、回忆等)。
注意力一般分为两种:
在计算能力有限的情况下,注意力机制(Attention Mechanism)作为一种资源配置方案,将有限的计算资源用来处理更重要的信息,是解决信息超载问题的主要手段。
当用神经网络来处理大量的输入信息时,也可以借鉴人脑的注意力机制,只选择一些关键的信息输入进行处理,来提高神经网络的效率。
在目前的神经网络模型中,我们可以将最大汇聚(Max Pooling)、门控(Gating)机制近似的看做自上而下的基于显著性的注意力机制。除此之外,自上而下的聚焦式注意力也是一种有效的信息选择方式。
当使用神经网络来处理一个边长的向量序列时,我们通常可以使用卷积网络或循环网络进行编码来得到一个相同长度的输出向量序列。
基于卷积或循环网络的序列编码都是一种局部的编码方式,只建模了输入信息的局部依赖关系。虽然循环网络理论上可以建立长距离依赖关系,但是由于信息传递的容量以及梯度消失的问题,实际上也只能建立短距离依赖关系。
如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:一种方法是增加网络的层数,通过一个深层网络来获取远距离的信息交互;另一种方法是使用全连接网络。全连接网络是一种非常直接的建模远距离依赖的模型,但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。这时我们可以利用注意力机制来“动态”的生成不同连接的权重,这就是自注意力模型(Self-Attention Model)。
在生物神经网络中,记忆是外界信息在人脑中的存储机制。大脑记忆毫无疑问是通过生物神经网络实现的。虽然其机理目前还无法解释,但直观上记忆机制和神经网络的连接形态以及神经元的活动相关。生理学家发现信息是作为一种整体效应(Collective Effect)存储在大脑组织中。当大脑皮层的不同部位损伤时,其导致的不同行为表现似乎取决于损伤的程度而不是损伤的确切位置。大脑组织的每个部分似乎都携带一些导致相似行为的信息。也就是说大脑皮层是分布式存储的,而不是存储于某个局部区域。
人脑中的记忆具有周期性和联想性。
记忆周期
虽然我们不清楚人脑记忆的存储机制,但是已经大概可以确定不同脑区参与了记忆形成的几个阶段。人脑记忆的一个特点是,记忆一般分为长期记忆和短期记忆。长期记忆(Long-Term Memory),也称为结构记忆或知识(Knowledge),体现为神经元之间的连接形态,其更新速度比较慢。短期记忆(Short-Term Memory)体现为神经元的活动,更新较快,维持时间为几秒至几分钟。短期记忆是神经连接的暂时性强化,通过不断巩固、强化可形成长期记忆。短期记忆、长期记忆的动态更新过程称为演化(Evolution)过程。
因此,长期记忆可以类比于人工神经网络中的权重参数,而短期记忆可以类比于人工神经网络中的隐状态。
工作记忆
除了长期记忆和短期记忆,人脑中还会存在一个“缓存”,称为工作记忆(Working Memory)。在执行某个认知行为(比如记下电话号码,做算术运算)时,工作记忆是一个记忆的临时存储和处理系统,维持时间通常为几秒钟。从时间上看,工作记忆也是一种短期的记忆,但和短期记忆的内涵不同。短期记忆一般指外界的输入信息在人脑中的表示和短期存储,不关心这些记忆如何被使用;而工作记忆是一个和任务相关的“容器”,可以临时存放和某项任务相关的短期记忆和其相关的内在记忆。工作记忆的容量比较小,一般可以容纳4组项目。
联想记忆
大脑记忆的一个主要特点是通过联想来进行检索的。联想记忆(Associative Memory)是指一种学习和记住不同对象之间关系的能力。
联想记忆是指一种可以通过内容匹配的方法进行寻址的信息存储方式,也称为基于内容寻址的存储(Content-Addressable Memory, CAM)。作为对比,现代计算机的存储方式是根据地址来进行存储的,称为随机访问存储(Random Access Memory, RAM)。
借鉴人脑中工作记忆,可以在神经网络中引入一个外部记忆单元来提高网络容量。外部记忆的实现途径有两种:一种是结构化的记忆,这种记忆和计算机中的信息存储方法比较类似,可以分为多个记忆片段,并按照一定的结构来存储;另一种基于神经动力学的联想记忆,这种记忆方式具有更好的生物学解释性。
Hopfield网络是一种循环神经网络模型,由一组互相连接的神经元组成。Hopfield网络也可以认为是所有神经元都相互连接的不分层的神经网络。每个神经元既是输入单元,又是输出单元,没有隐藏神经元。一个神经元好自身没有反馈相连,不同神经元之间连接权重是对称的。
注意力机制是一种受人类神经系统启发的信息处理机制。比如人视觉神经系统并不会一次性的处理所有接收到视觉信息,而是有选择性的处理部分信息,从而提高其工作效率。
无监督学习(Unsupervised Learning, UL)是指从无标签的数据中学习出一些有用的模式。无监督学习算法一般直接从原始数据中学习,不借助于任何人工给出标签或者反馈等指导信息。如果监督学习是建立输入-输出之间的映射关系,那么无监督学习就是发现隐藏的数据中的有价值信息,包括有效的特征、类别、结构以及概率分布等。
和监督学习一样,无监督学习方法也包含三个基本要素:模型、学习准则和优化算法。无监督学习的准则非常多,比如最大似然估计、最小重构错误等。在无监督学习中,经常使用的准则为最小化重构错误,同时也经常对特征进行一些约束,比如独立性、非负性或稀释性等。而在密度估计中,经常采用最大似然估计进行学习。
无监督特征学习是指从无标注的数据中自动学习有效的数据表示,从而能够帮助后续的机器学习模型更快速的达到更好的性能。无监督特征学习主要方法有主成分分析、稀疏编码、自编码等。
概率密度估计(Probabilistic Density Estimation),简称密度估计(Density Estimation),是基于一些观测样本来估计一个随机变量的概率密度函数。
集成学习(Ensemble Learning)就是同构某种策略将多个模型集成起来,通过群体决策来提高决策准确率。集成学习首要的问题是如何集成多个模型。比较常用的集成策略有直接平均、加权平均等。
监督学习往往需要大量的标注数据,而标注数据的成本比较高。因此,利用大量的无标注数据来提高监督学习的效果有着十分重要的意义。这种利用少量标注数据和大量无标注数据进行学习的方式称为半监督学习(Semi-Supervised Learning,SSL)。半监督学习算法:自训练和协同训练。
在面对不同的任务时,人脑的学习机制并不相同。即使面对一个新的任务,人们往往也可以很快找到其学习方式。这种可以动态调整学习方式的能力,称为元学习(Meta-Learning),也称为学习的学习(Learning to Learn)。
元学习的目的是从已有任务中学习一种学习方法或元知识,可以加速新任务的学习。从这个角度来说,元学习十分类似于归纳迁移学习,但元学习更侧重从多种不同(甚至不相关)的任务中归纳出一种学习方法。
和元学习比较相关的另一个机器学习问题是小样本学习(Flow-shot Learning),即在小样本上的快速学习能力。每个类别只有K个标注样本,K非常小。如果K=1,称为单样本学习(One-shot Learning);如果K=0,称为零样本学习(Zero-shot Learning)。
概率图模型(Probabilistic Graphical Model, PGM)简称图模型(Graphical Model, GM),是指一种用途结构来描述多元随机变量之间条件独立关系的概率模型,从而给研究高维空间中的概率模型带来了很大的便捷性。
图由一组节点和节点之间的边组成。在概率图模型中,每个节点都表示一个随机变量(或一组随机变量),边表示这些随机变量之间的概率依赖关系。
图模型的学习可以分为两部分:一是网络结构学习,即寻找最优的网络结构;二是网络参数估计,即已知网络机构,估计每个条件概率分布的参数。
变分法(Calculus Of Variations)主要研究变分问题,即泛函的极值问题。
概率图模型中最基本的假设是条件独立性。图形化表示直观地描述了随机变量之间的条件独立性,有利于将复杂的概率模型分解为简单模型的组合,并更好的理解概率模型的表示、推断、学习等方法。
图模型与神经网络有这类似的网络结构,但两者也有很大的不同。图模型的节点是随机变量,其图结构的主要功能是描述变量之间的依赖关系,一般是系数连接。使用图模型的好处是可以有效的进行统计推断。而神经网络中的节点是神经元,是一个计算节点。图模型中的每个变量一般有着明确的解释,变量之间依赖关系一般是人工来定义。而神经网络中的单个神经元则没有直观的解释。如果将神经网络中每个神经元看作一个二值随机变量,那神经网络就变成一个Sigmoid信念网络。
神经网络是判别模型,直接用来分类。而图模型不但可以是判别模型,也可以是生成模型。生成模型不但可以用来生成样本,也可以通过贝叶斯公式用来做分类。图模型的参数学习的目标函数为似然函数或条件似然函数,若包含隐变量则通常通过EM算法来求解。而神经网络参数学习的目标函数为交叉熵或平方误差等损失函数。
目前,神经网络和概率图模型的结合越来越紧密。一方面可以利用神经网络强大的表示能力和拟合能力来建模图模型中的推断问题,生成问题,或势能函数;另一方面可以利用图模型的算法来解决复杂结构神经网络中的学习和推断问题。
对于一个复杂的数据分布,我们往往只能观测到有限的局部特征,并且这些特征通常会包含一定的噪声。如果要对这些数据分布进行建模,就需要挖掘出可观测变量之间复杂的依赖关系,以及可观测变量背后隐藏的内部表示。
深度信念网络中包含很多层的隐变量,可以有效的学习数据的内部特征表示,也可以作为一种有效的非线性降维方法。这些学习到的内部特征表示包含了数据的更高级的、有价值的信息,因此十分有助于后续的分类和回归等任务。
玻尔兹曼机和深度信念网络都是生成模型,借助隐变量来描述复杂的数据分布,作为概率图模型,玻尔兹曼机和深度信念网络的共同问题是推断和学习问题。
玻尔兹曼机可以用来解决两类问题。一类是搜索问题:当给定变量之间的连接权重时,需要找到一组二值向量,使得整个网络的能力最低。另一类是学习问题:当给定变量的多组观测值时,学习网络的最优权重。
深度生成模型是一种有机融合神经网络和概率图模型的生成模型,将神经网络作为一个概率分布的逼近器,可以拟合非常复杂的数据分布。
变分自编码器是一个非常典型的深度生成模型,利用神经网络的拟合能力来有效的解决隐变量的概率模型中后验概率分布难以估计的问题。
生成对抗网络是一个具有开创意义的深度生成模型,突破了以往的概率模型必须通过最大似然估计来学习参数的限制。然而,生成对抗网络的训练通常比较困难。DCGAN是一个生成对抗网络的成功实现,可以生成十分逼真的自然图像。对抗生成网络的训练不稳定问题的一种有效解决方法是W-GAN,通过Wasserstein距离替代JS散度来进行训练。
虽然深度生成模型取得了巨大的成功,但是作为一种无监督模型,其主要的缺点是缺乏有效的客观评价,很难客观衡量不同模型之间的优劣。
强化学习(Reinforcement Learning, RL),也叫增强学习,是指一类从(与环境)交互中不断学习的问题以及解决这类问题的方法。强化学习问题可以描述为一个智能体从与环境的交互中不断学习以完成特定目标(比如获取最大奖励值)。和深度学习类似,强化学习中的关键问题也是贡献度匹配问题, 每一个动作并不能直接得到监督信息,需要通过整个模型的最终监督信息(奖励)得到,并且哟一定的延时性。
强化学习也是机器学习中的一个重要分支。强化学习和监督学习的不同在于,强化学习问题不需要给出“正确”策略作为监督信息,只需要给出策略的(延迟)回报,并通过调整策略来取得最大化的期望回报。
值函数是对策略的评估,如果策略有限(即状态数和动作数都有限),可以对所有的策略进行评估并选出最优策略。但是这种方式在实践中很难实现,一种可行的方式是通过迭代的方法不断优化策略,直到选出最优策略。先随机初始化一个策略,计算该策略的值函数,并根据值函数来设置新的策略,然后一直反复迭代直到收敛。
强化学习的目标是学习到一个策略来最大化期望回报。一种直接的方法是在策略空间中直接搜索来得到最佳策略,称为策略搜索。策略搜索本质是一个优化问题,可以分为基于梯度的优化和无梯度优化。策略搜索和基于值函数的方法相比,策略搜索可以不需要值函数,直接优化策略。参数化的策略能够处理连续状态和动作,可以直接学出随机性策略。
在REINFORCE算法中,每次需要根据一个策略采集一条完整的轨迹,并计算这条轨迹上的回报。这种方式的方差比较大,学习效率也比较低。我们可以借鉴时序差分学习的思想,使用动态规划方法来提高采样的效率,即从状态开始的总回报可以通过当前动作的即时奖励和下一个状态的值函数来近似估计。
演员-评论员算法(Actor-Critic Algorithm)是一种结合策略梯度和时序差分学习的强化学习方法。其中演员(Actor)是指策略函数,即学习一个策略来得到尽量高的回报,评论员(Critic)是指值函数,对当前策略的值函数进行估计,即评估演员的好坏。借助于值函数,演员-评论员算法可以进行单步更新参数,不需要等到回合结束才进行更新。在演员-评论员算法中的策略函数和值函数都是待学习的函数,需要在训练过程中同时学习。
强化学习是一种十分吸引人的机器学习方法,通过智能体不断与环境仅交互,并根据经验调整其策略来最大化其长远的所有奖励的累积值。相比其他机器学习方法,强化学习更接近生物学习的本质,可以应用多种复杂的场景,从而更接近通用人工智能系统的目标。
强化学习和监督学习的区别在于:
序列数据的特点:
线性代数主要包含向量、向量空间(或称线性空间)以及向量的线性变换和有限维的线性方程组。
微积分(Calculus)是研究函数的微分(Differentiation)、积分(Integration)及其相关应用的数学分支。
矩阵微积分(Matrix Calculus)是多元微积分的一种表达方式,即使用矩阵和向量来表示因变量每个成分关于自变量每个成分的偏导数。矩阵微积分的表示通常有两种符号约定:分子布局(Numerator Layout)和分母布局(Denominator Layout)。两者的区别是一个标量关于一个向量的导数是写成列向量还是行向量。
概率论主要研究大量随机现象中的数量规律,其应用十分广泛,几乎遍及各个领域。
样本空间是一个随机试验所有可能结果的集合。随机试验中的每个可能结果称为样本点。有些试验有两个或多个可能的样本空间,这时样本空间可以通过构建上述两个样本空间的笛卡尔乘积来得到。
随机事件(或简称事件)指的是一个被赋予概率的事物集合,也就是样本空间中的一个子集。概率(Probability)表示一个随机事件发生的可能性大小,为0到1之间的实数。
信息论(Information Theory)是数学、物理、统计、计算机科学等多个学科的交叉领域。主要研究信息的量化、存储和通信等方法。“信息”是指一组消息的激活。假设在一个噪声通道上发送消息,我们需要考虑如何对每一个信息进行编码、传输以及解码,使得接收者可以尽可能准确的重构出消息。在机器学习相关领域,信息论也有着大量的应用。比如特征抽取、统计推断、自然语言理解等。