声明:
1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的。
2)根据看的论文以及博客总结了深度学习常用的方法和模型,便于以后自己回顾,记性太猪了,唉,快赐予我过目不忘的本领吧。
3)文中部分参考了某些博主的内容,觉得没人家总结的好,会表明出处,还望博主海涵。@zouxy09
4)如果有什么错误的地方希望大家一起讨论,自己还是个菜鸟,请多多指教。
5)本文内容对于很多知识点没有很详尽的描述,只是提供个框架,只是整理下常用方法。
目录:
一: MultiLayer Perceptron(多层感知器)
二:Convolutional Neural Networks(卷积神经网络)
三:Autoencoders||Denoising Autoencoders(DA)||Stacked Denoising Autoencoders(SDA)(自动编码器||降燥自动编码器||堆降燥自动编码器)
四:Restricted Boltzmann Machines(RBM受限波尔茨曼机)
五:Deep Belief Networks(DBNs深度信念网络)
前言:
deep learning训练过程
2006年,hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简单的说,分为两步,一是每次训练一层网络,二是调优,使原始表示x向上生成的高级表示r和该高级表示r向下生成的x'尽可能一致。方法是:
1)首先逐层构建单层神经元,这样每次都是训练一个单层网络。
2)当所有层训练完后,Hinton使用wake-sleep算法进行调优。
将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于“认知”,向下的权重用于“生成”。然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。比如顶层的一个结点表示人脸,那么所有人脸的图像应该激活这个结点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。Wake-Sleep算法分为醒(wake)和睡(sleep)两个部分。
1)wake阶段:认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。也就是“如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的”。
2)sleep阶段:生成过程,通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念”。
deep learning训练过程具体如下:
1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):
采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是feature learning过程):
具体的,先用无标定数据训练第一层,训练时先学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型capacity的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别得到各层的参数;
2)自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):
基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deep learning效果好很大程度上归功于第一步的feature learning过程。
一:MultiLayer Perceptron(多层感知器)
这里我们介绍的是只有一层隐含层的多层感知器(感觉辜负了多层,哈哈,拥有多隐含层的MLP才更具有深度学习的基本特性,感觉深度学习就体现在深度二字上,深度=多层),这个单隐含层的MLP可以看做是一个逻辑回归分类器,(其实多隐含层的话,每层也可以看做是逻辑回归分类器)这个分类器的输入要经过非线性学习转换函数处理(就是常用的activition function函数或者叫transform function),它将输入数据映射到一个线性可分的空间里。中间的一层是隐含层。
1 模型
通常,拥有一层隐含层的多层分类器可以用以下函数表示:,是输入向量的size,那么自然就是输出向量的size了,那么用矩阵表示法就是: 分别为输入层到隐含层的偏置项和隐含层到输出层的偏置项,为对应的权重矩阵,,为为激活函数。构成了隐含层,,每一列表示输入单元与第i个隐含单元之间的权重。激活函数通常采用或者函数,后来又出现了ReLu,等激活函数,其中的效果还没有验证。输出由函数得到。
训练过程:
① 先逐层训练每层神经网络,得到每层的激活函数值,权重矩阵,偏置向量,代价函数
②利用梯度下降法最小化代价函数,经典的就是用BP算法来求解梯度使得代价函数最小。
反向传播算法的思路如下:给定一个样例 ,我们首先进行“前向传导”运算,计算出网络中所有的激活值,包括 的输出值。之后,针对第 层的每一个节点,我们计算出其“残差”,该残差表明了该节点对最终输出值的残差产生了多少影响。如果知道了网络的本层误差,那么对Wn和Xn-1的导数就可以通过反向传播得到。
反向传播算法可表示为以下几个步骤:
- 进行前馈传导计算,利用前向传导公式,得到 直到输出层 的激活值。
- 对输出层(第 层),计算:
- 对于