深度学习总结笔记(一)
一、Learning map
(1)按学习方式分类:
(2)按隐藏层深度分类:
二、浅层神经网络
神经网络是机器学习的一类算法,也称人工神经网络,是对生物神经网络的模拟,即模拟人的大脑学习过程。
1、基本单元——感知器
(1)定义
神经网络的基本单元——神经元,也叫作感知器。
感知器有如下组成部分:
l 输入权值 一个感知器可以接收多个输入(x1,x2……xn),每个输入上有一个权值wi,此外还有一个偏置项b,就是上图中的w0。
l **函数 例如阶跃函数f
这样就可以解决二分类问题。
l 输出
(2)应用
感知器可以拟合任何的线性函数,任何线性分类或线性回归问题都可以用感知器来解决。
(3)训练方法
将权重项和偏置项初始化为0,然后,利用感知器规则迭代的修改wi和b,直到训练完成。
其中
每次从训练数据中取出一个样本的输入向量x,使用感知器计算其输出y,再根据上面的规则来调整权重。每处理一个样本就调整一次权重。经过多轮迭代后,就可以训练出感知器的权重,使之实现目标函数。
2、多层感知器(前馈神经网络)
(1)定义
当面对的数据集不是线性可分的时候,例如异或问题,感知器规则可能无法收敛,这时可以采用多层感知器来处理。
多层感知器结构如下:
上图中每个圆圈都是一个神经元,每条线表示神经元之间的连接。神经元被分成了多层,层与层之间的神经元有连接,而层内之间的神经元没有连接。
按顺序为输入层——隐藏层——输出层。
(2)反向传播算法
多层感知器采用反向传播算法(Back Propagation)来训练,获取隐层的权值。
反向传播算法包括信号正向传播和误差反向传播两部分。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出不符,则转向误差的反向传播阶段。
以sigmoid**函数为例:
sigmoid函数是一个非线性函数,值域是(0,1)。
sigmoid函数的导数是: 即sigmoid函数的导数可以用它自身来表示,这在计算导数时非常方便。
l 对于输出层节点,其误差项:
其中yi是输出值,ti是目标值。
l 对于隐藏层节点,其误差项:
其中,ai是节点i的输出值,wki是节点i到它的下一层节点k的连接的权重,δk是节点i的下一层节点k的误差项。
可见,计算一个节点的误差项,需要先计算每个与其相连的下一层节点的误差项。这就要求误差项的计算顺序必须是从输出层开始,然后反向依次计算每个隐藏层的误差项,直到与输入层相连的那个隐藏层。这就是反向传播算法(Back Propagation)。
反向传播算法的核心思想是在反向传播时将所得误差分摊给各层所有的单元。
(3)梯度下降法
神经网络的优化要使目标值和输出值越接近越好,我们可以取网络所有输出层节点的误差平方和作为目标函数:
即Ed越小越好。
优化方法——梯度下降法:
找函数梯度的反方向,即函数下降最快的方向,再更新权重w:
将梯度下降公式代入sigmoid**函数的例子中,
即求出误差项后,代入此公式来更新权重,完成神经网络的训练。
三、浅层学习与深度学习
1、传统神经网络的不足
由于传统的神经网络容易出现过拟合(over fitting),例如在线性回归问题中,寻找一个函数来拟合目标值,随着函数次数逐渐增大时,training data的误差值越来越小,而当函数次数超过某个限度时,testing data 的误差值反而越来越大。
另外传统神经网络训练速度比较慢,所以深度神经网络应运而生。
2、深度学习的特点
区别于传统的浅层学习,深度学习的不同在于:
1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;
2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。
3、深度神经网络训练方法
l 传统神经网络的训练方法为什么不能用在深度神经网络?
BP算法存在的问题:
(1)梯度越来越稀疏:从顶层越往下,误差校正信号越来越小;
(2)收敛到局部最小值:尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生);
(3)一般,我们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑可以从没有标签的的数据中学习。
l deep learning训练过程具体如下:
(1)无监督预训练:使用自下而上的非监督学习(就是从底层开始,一层一层的往顶层训练):——特征学习
(2)有监督微调:自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调)。
四、深度学习常用模型
1、卷积神经网络(CNN)
一种更适合图像、语音识别任务的神经网络结构。
(1)特点
相对于全连接神经网络来说,CNN具有的特点:局部连接、权值共享、下采样。
对于图像识别任务来说,这些都可以使卷积神经网络尽可能保留重要的参数,去掉大量不重要的参数,来达到更好的学习效果。
(2)组成架构
一个卷积神经网络由若干卷积层、Pooling层、全连接层组成。
如上图所示,卷积神经网络每层的神经元是按照三维排列的,也就是排成一个长方体的样子,有宽度、高度和深度。
输入层的宽度和高度对应于输入图像的宽度和高度,而它的深度为1。
第一个卷积层对这幅图像进行了卷积操作,卷积层包含三个Filter,所以得到了三个Feature Map。
在第一个卷积层之后,Pooling层对三个Feature Map做了下采样,得到了三个更小的Feature Map。
网络的最后两层是全连接层。第一个全连接层的每个神经元,和上一层5个Feature Map中的每个神经元相连,第二个全连接层(也就是输出层)的每个神经元,则和第一个全连接层的每个神经元相连,这样得到了整个网络的输出。
何谓卷积?卷积就是图像处理里的模板操作。将filter(模板)在输入图像上移动,将filter上数值与图像对应位置上的像素相乘再相加,就得到Feature Map中的元素。如下图示例:
计算方法为:
如果卷积前的图像深度为D,那么相应的filter的深度也必须为D。计算公式为:
D是深度;F是filter的大小(宽度或高度,两者相同);wd,m,n表示filter的第d层第m行第n列权重;ad,i,j表示图像的第d层第i行第j列像素。
Pooling层通过下采样,进一步减少参数数量。
主要方法有max pooling:在n*n样本中取最大值,作为采样后的样本值。
还有mean pooling:取各样本的平均值。
对于深度为D的Feature Map,各层独立做Pooling,因此Pooling后的深度仍然为D。
(5)训练方法
卷积神经网络依旧采用反向传播训练算法,步骤如下:
1. 前向计算每个神经元的输出值aj;
2. 反向计算每个神经元的误差项δj,即网络的损失函数Ed对神经元加权输入netj的偏导数,即;
3. 计算每个神经元连接权重wji的梯度,公式为,ai表示神经元i的输出。
最后,根据梯度下降法则更新每个权重即可。
2、循环神经网络(RNN)
(1)特点
实际中某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。比如,当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列;当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列。这里可以用到循环神经网络(Recurrent NeuralNetwork)。
下图是一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成:
与全连接网络相比,循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵W就是隐藏层上一次的值作为这一次的输入的权重。
计算公式:
循环神经网络的训练算法是BPTT算法,基本原理与BP算法一致。
循环神经网络在训练中容易产生梯度消失和梯度爆炸问题,所以不能很好地处理较长的序列。
(2)应用:基于RNN的语言模型
什么是基于RNN语言模型?
把词依次输入到循环神经网络中,每输入一个词,循环神经网络就输出截止到目前为止,下一个最可能的词。就是让循环神经网络计算词典中每一个词是下一个词的概率。
怎样让神经网络输出概率呢?方法就是用softmax层作为神经网络的输出层。
Softmax函数:
softmax layer的输入是一个向量,输出也是一个向量,两个向量的维度是一样的。输入向量x=[1 2 3 4]经过softmax层之后,经过上面的softmax函数计算,转变为输出向量y=[0.03 0.09 0.24 0.64]。输出向量值的特征与概率的特征是一样的,因此我们可以把它看做概率。
然后我们使用交叉熵误差函数作为优化目标,对其进行优化。
3、长短时记忆网络(LSTM)
循环神经网络很难处理长时间的依赖,长短时记忆网络在原来隐藏层的基础上增加一个状态c来保存长期的状态。
长短时记忆网络的训练算法依旧是BP算法。
4、递归神经网络
递归神经网络用来处理树结构、图结构等更复杂的网络。
因为神经网络的输入层单元个数是固定的,因此必须用循环或者递归的方式来处理长度可变的输入。循环神经网络把句子看做是词的序列,通过将长度不定的输入分割为等长度的小块,然后再依次的输入到网络中,从而实现了神经网络对变长输入的处理。
然而,有时候把句子看做是词的序列是不够的,例如:
递归神经网络可以把一个树/图结构信息编码为一个向量,也就是把信息映射到一个语义向量空间中。这个语义向量空间满足某类性质,比如语义相似的向量距离更近。通过向量的距离,就得到了一种语义的表示。
递归神经网络的训练算法和循环神经网络类似,两者不同之处在于,前者需要将残差δ从根节点反向传播到各个子节点,而后者是将残差δ从当前时刻反向传播到初始时刻。
5、自动编码器(Auto Encoder)
(1)特点
自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。
(2)实现过程
1)给定无label数据,用非监督学习学习特征:
将input输入一个encoder编码器,得到一个code,再加一个decoder解码器,如果输出的信息和输入信号input是很像的,这个code就是靠谱的。通过调整encoder和decoder的参数,使得重构误差最小。
2)通过编码器产生特征,然后训练下一层。这样逐层训练。
3)有监督微调:
为了实现分类,在AutoEncoder的最顶的编码层添加一个分类器(例如罗杰斯特回归、SVM等),然后通过标准的多层神经网络的监督训练方法(梯度下降法)用有label样本去训练。
6、稀疏自动编码器(Sparse Auto Encoder)
如果隐藏节点比可视节点(输入、输出)少的话,被迫的降维,Auto Encoder会自动习得训练样本的特征。
所以我们对隐藏节点进行稀疏性限制:使隐藏节点中被**的节点数(输出接近1)远远小于被抑制的节点数(输出接近0)。
多层稀疏自编码器组成栈自编码器(Stacked AutoEncoders)
7、限制玻尔兹曼机(RBM)
假设有一个二部图,每一层的节点之间没有链接,一层是可视层,即输入数据层(v),一层是隐藏层(h),如果假设所有的节点都是随机二值变量节点(只能取0或者1值),同时假设全概率分布p(v,h)满足Boltzmann 分布,我们称这个模型是RestrictedBoltzmann Machine (RBM)。
RBM的结构包括隐层。可见层、偏置层。与前馈神经网络不一致的是,RBM
在可见层和隐层间链接是方向不定的和完全链接的,值可以进行双向传播。
RBM用途:
(1)对数据进行编码,然后交给监督学习方法进行分类或回归;类似于Sparse Auto Encoder。
(2)得到权重矩阵和偏移量,供BP神经网络初始化训练。
8、深度信念网络(DBN)
(1)特点
DBN由多个RBM层组成,网络被“限制”为一个可视层和一个隐层,层间存在连接,但层内的单元间不存在连接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。
(2)训练方法
逐层贪婪训练方法 (Greedy Layer-wise Training):
(1)无监督预训练:分别单独无监督地训练每一层RBM网络,确保特征向量映射到不同特征空间时,都尽可能多地保留特征信息;
(2)有监督微调:在DBN的最后一层设置BP网络,接收RBM的输出特征向量作为它的输入特征向量,有监督地训练实体关系分类器。