深度学习

Posted ming-michelle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习相关的知识,希望对你有一定的参考价值。

深度学习

  1. 深度学习 定义,

    深度学习是机器学习研究中的一个新的领域,
    其动机在于建立、模拟人脑进行分析学习的神经网络,
    它模仿人脑的机制来解释数据,例如图像,声音和文本。
    
    深度学习是无监督学习的一种
    深度学习的概念源于人工神经网络的研究。
    含多隐层的多层感知器就是一种深度学习结构。
    深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,
    以发现数据的分布式特征表示。
    

 

    以前:
    1)比较容易过拟合,参数比较难tune,而且需要不少trick;
    2)训练速度比较慢,在层次比较少(小于等于3)的情况下效果并不比其它方法更优;

 

    Deep learning与传统的神经网络之间有相同的地方也有很多不同。

    二者的相同在于:
        deep learning采用了神经网络相似的分层结构,
        系统由包括输入层、隐层(多层)、输出层组成的多层网络,
        只有相邻层节点之间有连接,
        同一层以及跨层节点之间相互无连接,
        每一层可以看作是一个logistic regression(回归)模型;
        这种分层结构,是比较接近人类大脑的结构的。

    可以看出,这个单一“神经元”的输入-输出映射关系其实就是一个逻辑回归(logistic regression)。

 

    机器学习(Machine Learning)是一门专门研究计算机怎样模拟或实现人类的学习行为,
    以获取新的知识或技能,
    重新组织已有的知识结构使之不断改善自身的性能的学科。

 

    由于SIFT对尺度、旋转以及一定视角和光照变化等图像变化
    都具有不变性,
    并且SIFT具有很强的可区分性

    一个是抽象,一个是迭代
  1. 损失函数 损失函数就是用来表现预测与实际数据的差距程度

损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。

  1. Cnn rnn 卷积神经网络CNN

循环神经网络RNN

  1. 卷积 循环神经网络 定义

简答题

2. 深度学习的算法步骤

1定义很多函数 2训练函数 3找到最佳函数,开始学习

百度研究院

深度网络最主要的优势在于,它能以更加紧凑简洁的方式来表达比浅层网络大得多的函数集合,换言之,它具有更强的表征能力。

Deep learning与传统的神经网络之间有相同的地方也有很多不同。

二者的相同在于deep learning采用了神经网络相似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个logistic regression模型;这种分层结构,是比较接近人类大脑的结构的。

而为了克服神经网络训练中的问题,DL采用了与神经网络很不同的训练机制。传统神经网络中,采用的是back propagation的方式进行,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和label之间的差去改变前面各层的参数,直到收敛(整体是一个梯度下降法)。而deep learning整体上是一个layer-wise的训练机制。这样做的原因是因为,如果采用back propagation的机制,对于一个deep network(7层以上),残差传播到最前面的层已经变得太小,出现所谓的gradient diffusion(梯度扩散)。这个问题我们接下来讨论。


那我们是否可以将稀疏自编码神经网络堆叠多层,然和加一个分类器,

通过反向传播算法来训练网络呢?答案是否定的。

主要原因在于: 1、数据获取问题:使用上面提到的方法,我们需要依赖于有标签的数据才能进行训练。然而有标签的数据通常是稀缺的,因此对于许多问题,我们很难获得足够多的样本来拟合一个复杂模型的参数。

2、局部极值问题:由于其深度较深,使得常常会涉及到求解一个高度非凸的优化问题,非常容易陷入很坏的局部最小。

3、梯度弥散问题:由公式我们可知,当深度较深时,残差闯到前面的时候已经非常小了,使得前几层不能有效进行调节,训练速度很慢。

那怎么解决这些问题呢?

我们知道造成神经网络容易陷入局部最小的主要原因是开始时对权的随机初始化的问题。

那我们是否可以获得一个好的初始权重呢?

我们可以通过逐层贪婪训练方法来初始化权重。其主要思想就是:每次只训练网络中的一层,即我们首先训练一个只含一个隐藏层的网络,仅当这层网络训练结束之后才开始训练一个有两个隐藏层的网络,以此类推。

通过逐层贪婪训练方法,我们有效的解决数据的获取问题和获得一个更好的局部极值。

在数据获取问题上,由于我们采用逐层贪婪训练方法,利用了大量的无标签数据来训练网络,初始化了网络的权重,随后,利用有标签数据进行微调,就能很快的收敛。

对于易于陷入坏的局部最优值,我们通过以上步骤,就获得了一个比较好的起点,较为接近好的结果,这样防止了收敛于坏的结果。


传统神经网络的训练方法为什么不能用在深度神经网络

BP算法作为传统训练多层网络的典型算法,实际上对仅含几层网络,该训练方法就已经很不理想。深度结构(涉及多个非线性处理单元层)非凸目标代价函数中普遍存在的局部最小是训练困难的主要来源。

BP算法存在的问题:

(1)梯度越来越稀疏:从顶层越往下,误差校正信号越来越小;

(2)收敛到局部最小值:尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生);

(3)一般,我们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑可以从没有标签的的数据中学习;

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过程。


技术分享图片 技术分享图片 技术分享图片 技术分享图片 技术分享图片


2)Deep learning未来 深度学习目前仍有大量工作需要研究。目前的关注点还是从机器学习的领域借鉴一些可以在深度学习使用的方法特别是降维领域。例如:目前一个工作就是稀疏编码,通过压缩感知理论对高维数据进行降维,使得非常少的元素的向量就可以精确的代表原来的高维信号。另一个例子就是半监督流行学习,通过测量训练样本的相似性,将高维数据的这种相似性投影到低维空间。另外一个比较鼓舞人心的方向就是evolutionary programming approaches(遗传编程方法),它可以通过最小化工程能量去进行概念性自适应学习和改变核心架构。 Deep learning还有很多核心的问题需要解决: (1)对于一个特定的框架,对于多少维的输入它可以表现得较优(如果是图像,可能是上百万维)? (2)对捕捉短时或者长时间的时间依赖,哪种架构才是有效的? (3)如何对于一个给定的深度学习架构,融合多种感知的信息? (4)有什么正确的机理可以去增强一个给定的深度学习架构,以改进其鲁棒性和对扭曲和数据丢失的不变性? (5)模型方面是否有其他更为有效且有理论依据的深度模型学习算法? 探索新的特征提取模型是值得深入研究的内容。此外有效的可并行训练算法也是值得研究的一个方向。当前基于最小批处理的随机梯度优化算法很难在多计算机中进行并行训练。通常办法是利用图形处理单元加速学习过程。然而单个机器GPU对大规模数据识别或相似任务数据集并不适用。在深度学习应用拓展方面,如何合理充分利用深度学习在增强传统学习算法的性能仍是目前各领域的研究重点。

 

以上是关于深度学习的主要内容,如果未能解决你的问题,请参考以下文章

学习--基于深度学习命名实体识别综述

学习--基于深度学习命名实体识别综述

深入浅出计算机组成原理:GPU(下)-为什么深度学习需要使用GPU?(第31讲)

Nature 亮点丨精确预测蛋白结构可以依赖Google吗?DeepMind团队开发新型深度学习算法精确预测蛋白结构

IOS开发-OC学习-常用功能代码片段整理

java SpringRetry学习的代码片段