2019-02-13 16:40:22 qq_21966233 阅读数 308
  • 3小时掌握深度学习(经典算法+实战案例)

    深度学习视频教程,包括经典算法与具体案例实战,该系列教程旨在帮助同学们掌握深度学习基础知识点,对复杂的神经网络模型进行通俗解读,逐步迈向深度学习两大核心模型-卷积与递归神经网络。使用当下主流深度学习框架进行实战任务,实例演示如何使用tensorflow进行建模任务。课程风格通俗易懂,接地气的方法带你走进深度学习的世界。

    4688 人正在学习 去看看 CSDN讲师

首先先让我们来定义一下什么是“深度学习”。对很多人来说,给“深度学习”下一个定义确实很有挑战,因为在过去的十年中,它的形式已经慢慢地发生了很大的变化。

先来在视觉上感受一下“深度学习”的地位。下图是AI、机器学习和深度学习三个概念的一个关系图。

AI的领域要相对较广泛,机器学习是AI的一个子领域,而深度学习是机器学习领域中的一个子集。

深度学习网络与“典型”的前馈多层网络之间是有一些区别的,如下:

  • 深度学习网络比之前的网络有更多的神经元

  • 深度学习网络具有更复杂的连接层的方式

  • 深度学习网络需要用强大的计算能力来训练

  • 深度学习网络能够进行自动特征提取

因此深度学习可以被定义为在以下四个基本网络框架中拥有大量参数和层的神经网络:

  • 无监督预训练网络(Unsupervised Pre-trained Networks)

  • 卷积神经网络(Convolutional Neural Networks)

  • 循环神经网络(Recurrent Neural Networks)

  • 递归神经网络 (Recursive Neural Networks)


在这篇文章中,我主要对后三个框架比较感兴趣。

卷积神经网络:基本上就是用共享权重在空间中进行扩展的标准神经网络。设计CNN主要是为了通过内部卷积来识别图片,内部卷积可以看到待识别物体的边。

循环神经网络:基本上是在时间上进行扩展的标准神经网络,因为边进入下一个时间步,而不是在同一时间步进入下一个层。设计RNN主要是为了识别序列,例如语音信号或者文本。它里面的循环意味着网络中存在短暂的记忆。

递归神经网络:更类似于分层网络,其中输入序列没有真正的时间面,而是输入必须以树状方式分层处理。


以下10种方法可以应用于所有这些体系结构。

1、反向传播

反向传播是“误差反向传播”的简称,它是一种计算函数(在神经网络中以函数形式存在)偏微分的方法。当你要用一个基于梯度的方法来解决一个最优问题时(注意梯度下降只是解决这类问题的一种方法),你希望在每一次迭代中计算函数梯度。


对于神经网络而言,目标函数具有合成的形式。那么如何计算梯度呢?一般情况下有两种常见的方法:

1)微分分析法。当你知道这个函数的形式时,你只需要用链式法则计算导数即可;

2)用有限差分方法来近似微分。这种方法的计算量很大,因为函数评估的数量是O(N),其中N是参数的数量。与微分分析法相比,这是比较昂贵的。不过,有限差分通常在调试时验证后端实现。


2、随机梯度下降

一个直观理解梯度下降的方法是去想象一条溯源山顶的河流。这条河流会沿着山势梯度的方向流向山麓下的最低点。

如果让人来走,可能就不一样了,你可能会先随便选一个方向,然后沿着这个方向的梯度向下走;过一会儿再随机换一个方向向下走;最后你发现自己差不多也到了谷底了。

数学化的理解就是:

随机梯度下降主要用来求解类似于如下求和形式的优化问题:

梯度下降法:

当n很大时,每次迭代计算所有的梯度会非常耗时。
随机梯度下降的想法就是每次在Delta f_i 中随机选取一个计算代替上面的Delta f_i,以这个随机选取的方向作为下降的方向。这样的方法反而比梯度下降能够更快地到达(局部)最优解。


3、学习率衰减

在训练模型的时候,通常会遇到这种情况:我们平衡模型的训练速度和损失(loss)后选择了相对合适的学习率(learning rate),但是训练集的损失下降到一定的程度后就不在下降了,比如training loss一直在0.7和0.9之间来回震荡,不能进一步下降。如下图所示:

遇到这种情况通常可以通过适当降低学习率(learning rate)来实现。但是,降低学习率又会延长训练所需的时间。

学习率衰减(learning rate decay)就是一种可以平衡这两者之间矛盾的解决方案。学习率衰减的基本思想是:学习率随着训练的进行逐渐衰减。

学习率衰减基本有两种实现方法:

  • 线性衰减。例如:每过5个epochs学习率减半;

  • 指数衰减。例如:每过5个epochs将学习率乘以0.1。


4、dropout

在当前的大规模神经网络中有两个缺点:

  • 费时;

  • 容易过拟合

Dropout 可以很好地解决这个问题。Dropout说的简单一点就是在前向传导的时候,让某个神经元的激活值以一定的概率p停止工作,示意图如下:

每次做完dropout,相当于从原始的网络中找到一个更瘦的网络。

Hinton在其论文中做了这样的类比,无性繁殖可以保留大段的优秀基因,而有性繁殖则将基因随机拆了又拆,破坏了大段基因的联合适应性;但是自然选择了有性繁殖,物竞天择,适者生存,可见有性繁殖的强大。dropout 也能达到同样的效果,它强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,消除减弱了神经元节点间的联合适应性,增强了泛化能力。


5、max pooling

池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上是一种形式的向下采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。

直觉上,这种机制能够有效地原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。 


6、批标准化

包括深度网络在内的神经网络需要仔细调整权重初始化和学习参数。批标准化使这些变得轻松许多。

权重问题:

  • 无论权重的初始化如何,是随机的还是经验性的选择,它们离学习权重都会很远。考虑一个小批量,初期在所需的特征激活方面会有很多异常值。

  • 深层神经网络本身是病态的,初始层中的微小扰动都会导致后面层的非常大的变化。

在反向传播过程中,这些现象会导致梯度弥散。这就意味着在学习权重产生所需要的输出前,必须对梯度的异常值进行补偿,这将导致需要额外的时段来收敛。

批量归一化使这些梯度从分散到正常值并在小批量范围内流向共同目标(通过归一化)。

学习率问题:一般来说,学习率需要保持较低的值,使得只有一小部分的梯度来校正权重,原因是要使异常激活的梯度不影响已学习到的激活。通过批量标准化,可以减少这些异常激活,因此也就可以使用更高的学习率来加速学习过程。


7、long short-term memory

LSTM网络具有以下三个方面,使其与循环神经网络中的常见神经元不同:

1)它能够决定何时让输入进入神经元;

2)它能够决定何时记住上一个时间步中计算的内容;

3)它决定何时让输出传递到下一个时间步。

LSTM的美妙之处在于它能够根据当前的输入本身来决定所有这些。 所以你看下面的图表:

当前时间的输入信号x(t)决定所有上述3个点。 输入门决定点1,遗忘门决定点2,输出门决定点3。任何一条输入都能够采取所有这三个决定。这种设计其实是受到了我们大脑如何工作的启发,并且可以基于输入来处理突然的上下文切换


8、skip-gram

词嵌入模型的目标是为每个词项学习一个高维密集表示,其中嵌入向量之间的相似性显示了相应词之间的语义或句法相似性。 Skip-gram是一个学习词嵌入算法的模型。

skip-gram模型(以及许多其他的词语嵌入模型)背后的主要思想如下:两个词项相似,如果它们共享相似的上下文。

换句话说,假设你有一个句子,例如“猫是哺乳动物”;如果你用“狗”而不是“猫”,这个句子还是一个有意义的句子。因此在这个例子中,“狗”和“猫”可以共享相同的上下文(即“是哺乳动物”)。

基于上述假设,你可以考虑一个上下文窗口(一个包含k个连续项的窗口),然后你跳过其中一个单词,试着去学习一个能够得到除跳过项外的所有项的神经网络,并预测跳过的这个项。如果两个词在一个大语料库中反复共享相似的语境,则这些词的嵌入向量将具有相近的向量。


9、连续词袋

在自然语言处理问题中,我们希望学习将文档中的每个单词表示为一个数字的向量,使得出现在相似的上下文中的单词具有彼此接近的向量。在连续的单词模型中,目标是能够使用围绕特定单词的上下文并预测特定单词。

 

我们通过在一个大的语料库中采取大量的句子来做到这一点,每当我们看到一个单词时,我们就提取周围的单词。 然后,我们将上下文单词输入到一个神经网络,并预测在这个上下文中间的单词。

当我们有成千上万个这样的上下文单词和中间词时,我们就有一个神经网络数据集的实例。 我们训练神经网络,最后编码的隐藏层输出表示了特定单词的嵌入。 恰巧,当我们对大量的句子进行训练时,类似语境中的单词得到相似的向量。


10、迁移学习

让我们想一下如何在CNN中处理一张图片。假设有一张图片,你对它进行卷积处理,然后你得到的输出是像素的组合,我们姑且称之为“边”吧。我们再次使用卷积,这时候你得到的输出将是边的组合,我们称之为“线”。如果再次使用卷积,那么你将得到线的组合,等等。

每一层都是在寻找相应的特定模式。你的神经网络最后一层一般会给出非常特定的模式。也许你在处理ImageNet,你的网络最后一层可能是在找孩子、狗或飞机或别的任何东西。如果你向前两层看,网络可能是在找眼睛、耳朵、嘴巴或者轮子。

深度卷积神经网络中的每一层的深入都是在构建越来越高层次的特征表示。最后两层会产生你输入模型的数据中的特定模式。换句话说,早期的层提取的特征则广泛得多,在提取的大量的类中有很多简单的模式。

迁移学习就是当你用一个数据集训练CNN时,砍掉最后的一(些)层,再用另一个不同的数据集重新训练最后一(些)层的模型。直观地说,你在重新训练模型来识别不同的高级层次特征。作为结果,训练时间大幅减少。所以当你没有足够的数据或者训练的资源时,迁移学习是非常有用的一个工具。

2017-03-02 20:57:01 qq229873466 阅读数 5553
  • 3小时掌握深度学习(经典算法+实战案例)

    深度学习视频教程,包括经典算法与具体案例实战,该系列教程旨在帮助同学们掌握深度学习基础知识点,对复杂的神经网络模型进行通俗解读,逐步迈向深度学习两大核心模型-卷积与递归神经网络。使用当下主流深度学习框架进行实战任务,实例演示如何使用tensorflow进行建模任务。课程风格通俗易懂,接地气的方法带你走进深度学习的世界。

    4688 人正在学习 去看看 CSDN讲师
监督式学习:
逻辑回归(Logistic Regression)和反向传递神经网络(Back Propagation Neural Network)


非监督式学习:

Apriori 算法以及k-Means 算法


半监督式学习:

图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM)


强化学习:
Q-Learning 以及时间差学习(Temporal difference learning)


回归算法:
最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)


基于实例的算法:
 k-Nearest Neighbor (KNN), 学习矢量量化(Learning Vector Quantization, LVQ),以及自组织映射算法(Self-Organizing Map , SOM)  


决策树学习:
分类及回归树(Classification And Regression Tree, CART), ID3 (Iterative Dichotomiser 3), C4.5, Chi-squared Automatic Interaction Detection (CHAID), Decision Stump, 随机森林(Random Forest), 多元自适应回归样条(MARS)以及梯度推进机(Gradient Boosting Machine, GBM) 


贝叶斯方法:
朴素贝叶斯算法,平均单依赖估计(Averaged One-Dependence Estimators, AODE),以及 Bayesian Belief Network(BBN)


基于核的算法:
支持向量机(Support Vector Machine, SVM), 径向基函数(Radial Basis Function ,RBF), 以及线性判别分析(Linear Discriminate Analysis ,LDA)


聚类算法:
k-Means 算法以及期望最大化算法(Expectation Maximization, EM)


人工神经网络:
感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation), Hopfield 网络,自组织映射(Self-Organizing Map, SOM)。学习矢量量化(Learning Vector Quantization, LVQ)


深度学习:
受限波尔兹曼机(Restricted Boltzmann Machine, RBN), Deep Belief Networks(DBN),卷积网络(Convolutional Network), 堆栈式自动编码器(Stacked Auto-encoders)


降低维度算法:

主成份分析(Principle Component Analysis, PCA),偏最小二乘回归(Partial Least Square Regression,PLS), Sammon 映射,多维尺度(Multi-Dimensional Scaling, MDS),  投影追踪(Projection Pursuit)


集成算法:

Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆叠泛化(Stacked Generalization, Blending),梯度推进机(Gradient Boosting Machine, GBM),随机森林(Random Forest)
2018-05-14 21:43:19 qq_32241189 阅读数 16511
  • 3小时掌握深度学习(经典算法+实战案例)

    深度学习视频教程,包括经典算法与具体案例实战,该系列教程旨在帮助同学们掌握深度学习基础知识点,对复杂的神经网络模型进行通俗解读,逐步迈向深度学习两大核心模型-卷积与递归神经网络。使用当下主流深度学习框架进行实战任务,实例演示如何使用tensorflow进行建模任务。课程风格通俗易懂,接地气的方法带你走进深度学习的世界。

    4688 人正在学习 去看看 CSDN讲师

作为深度学习领域的破冰之作,BP神经网络重新燃起了人们对深度学习的热情.它解决了DNN中的隐层传递中的权重值的计算问题.那么,BP算法思想是什么?它又是如何实现的呢?这就是本节的研究内容.

一.BP算法的提出及其算法思想

    神经网络主要是由三个部分组成的,分别是:1) 网络架构 2) 激活函数  3) 找出最优权重值的参数学习算法.

    BP算法就是目前使用较为广泛的一种参数学习算法.

    BP(back propagation)神经网络是1986年由RumelhartMcClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络    

    既然我们无法直接得到隐层的权值,能否先通过输出层得到输出结果和期望输出的误差来间接调整隐层的权值呢?BP算法就是采用这样的思想设计出来的算法,它的基本思想:学习过程由信号的正向传播(求损失)误差的反向传播(误差回传)两个过程组成。如图1所示为BP算法模型示意图.

                          

                                                                                   图1 BP算法模型示意图

二.BP算法

    2.1 BP算法的一般流程

    根据BP算法的基本思想,可以得到BP算法的一般过程:

    1) 正向传播FP(求损失).在这个过程中,我们根据输入的样本,给定的初始化权重值W和偏置项的值b, 计算最终输出值以及输出值与实际值之间的损失值.如果损失值不在给定的范围内则进行反向传播的过程; 否则停止W,b的更新.

    2) 反向传播BP(回传误差).将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据

    由于BP算法是通过传递误差值δ进行更新求解权重值W和偏置项的值b, 所以BP算法也常常被叫做δ算法.

    下面我们将以三层感知器结构为例,来说明BP算法的一般计算方法(假设个隐层和输出层的激活函数为f).

                                                           

                                                                                    图2 三层感知器结构

    BP算法网络结构的示意图如图3所示.

                                

                                                                                图3 BP算法网络结构

    2.2 BP算法的各层误差计算

    各部分输入输出如图3所示, 下面进行各层误差计算.

    1) 输出层的误差(平方和误差,前面的1/2是为了后面的计算方便)

                                                                                                                                      (1)

    2) 展开至隐层的误差(,是前面的WY的输出值,带入可以得到下面的式子)

                                                                             (2)

    3) 输入层误差(和前面一样,将VX带入f(netj))

                                               (3)

    观察上式, 我们很容易看出只有(3)式和输入x有关.E有了,那么就很简单可以看出可以使用常用的随机梯度下降法(SGD)求解.也就是求解式子中的WV,使得误差E最小.

    2.3 BP算法的示例

    已知如图4所示的网络结构.

                                         

                                                                                          图4 网络结构图

    设初始权重值w和偏置项b为:

    w=(0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65)

    b = (0.35,0.65)-->这里为了便于计算,假设从输入层到隐层之间, 隐层到输出层之间的偏置项b恒定.

    1) FP计算过程

    ① 从输入层到隐层(其实这里的b可以看成一个特征)

    h1 = w1*l1 +w2*l2 +b1*1 = 0.1*5+0.15*10+0.35*1 = 2.35

    h2 = w3*l1 +w4*l2 +b1*1 = 0.2*5+0.25*10+0.35*1 = 3.85

    h3 = w5*l1 +w6*l2 +b1*1 = 0.3*5+0.35*10+0.35*1 = 5.35

    则各个回归值经过激活函数变换后的值为:

    

    

    

    ② 隐层到输出层

    neto1 = outh1*w7 +outh2*w9 +outh3*w11+ b2*1= 2.35*0.4 + 3.85*0.5 +5.35 *0.6+0.65 = 2.10192   

    neto2 = outh1*w8 +outh2*w10 +outh3*w12 +b2*1= 2.35*0.45 + 3.85*0.55 +5.35 *0.65 +0.65= 2.24629 

    则经过激活函数变换得到:

    outo1 = 0.89109 (真实值0.01) ,  outo2 = 0.90433 (真实值0.99)

    此时的平方和误差为:

                

    与真实值不符,需要进行BP反馈计算.

    2) BP计算过程

    这里的BP计算我们分为两个部分.  ①隐层到输出层的参数W的更新   ②从输入层到隐层的参数W的更新.

    **在这里,我们主要讲述第一部分隐层到输出层的参数W的更新

                                                          

                                                                          图5 从隐层到输出层的网络结构图

    如图5所示为从隐层到输出层的网络结构图.

    首先,运用梯度下降法求解W7的值.

    目标函数:  ,由于此时求解W7,所以只与有关,则此时的损失函数为:

    可以看出, 为凸函数(开口向上), 有最小值且最小值在导数为0的点上.

    又有 neto1 = outh1*w7 +outh2*w9 +outh3*w11+ b2*1,  outo1 =  f(o1)

    则对W7求偏导数得到:

                                 (4)

    又有W的更新公式为:

                                                                                                                                                (5)

    这样将上式带入W的更新公式(5)就可以求得更新后的W值.

    最后,得到了W7的更新值为:

                 

    同理可以求得W9,W11,b2的更新值,这里就不在一一叙述了.

    ***对于从输入层到隐层的参数W的更新,其实和从隐层到输出层的几乎一样,唯一不同的就是链式求导过程中的Etotal和outo1,outo2都有关系.这里就不展开解释了.

参考文献

[1]https://www.cnblogs.com/jhding/p/5687549.html

2018-02-08 22:00:06 abc200941410128 阅读数 43170
  • 3小时掌握深度学习(经典算法+实战案例)

    深度学习视频教程,包括经典算法与具体案例实战,该系列教程旨在帮助同学们掌握深度学习基础知识点,对复杂的神经网络模型进行通俗解读,逐步迈向深度学习两大核心模型-卷积与递归神经网络。使用当下主流深度学习框架进行实战任务,实例演示如何使用tensorflow进行建模任务。课程风格通俗易懂,接地气的方法带你走进深度学习的世界。

    4688 人正在学习 去看看 CSDN讲师

很多人都有误解,以为深度学习比机器学习先进。其实深度学习是机器学习的一个分支。可以理解为具有多层结构的模型。具体的话,深度学习是机器学习中的具有深层结构的神经网络算法,即机器学习>神经网络算法>深度神经网络(深度学习)。
关于深度学习的理论推导,太大太复杂,一些常见的深度学习算法本人也是模模糊糊的,看过好多次的,隔断时间就会忘记,现在对其系统的整理一下(从历史,致命问题出发,再看具体算法的思想,框架,优缺点和改进的方向,又总结了CNN和RNN的比较)。

一、历史:多层感知机到神经网络,再到深度学习

神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。(扯一个不相关的:由于计算技术的落后,当时感知器传输函数是用线拉动变阻器改变电阻的方法机械实现的,脑补一下科学家们扯着密密麻麻的导线的样子…)
心理学家Rosenblatt提出的单层感知机有一个严重得不能再严重的问题,即它对稍复杂一些的函数都无能为力(比如最为典型的“异或”操作)。
这个缺点直到上世纪八十年代才被Rumelhart、Williams、Hinton、LeCun等人发明的多层感知机解决,多层感知机解决了之前无法模拟异或逻辑的缺陷,同时更多的层数也让网络更能够刻画现实世界中的复杂情形。
多层感知机可以摆脱早期离散传输函数的束缚,使用sigmoid或tanh等连续函数模拟神经元对激励的响应,在训练算法上则使用Werbos发明的反向传播BP算法。这就是我们现在所说的【神经网络】,BP算法也叫BP神经网络具体过程可参见我转载的文章(http://blog.csdn.net/abc200941410128/article/details/78708319)。
但是BP神经网络(多层感知机)面临在致命问题(见下节)。随着神经网络层数的加深,有两个重大问题:一是优化函数越来越容易陷入局部最优解,并且这个“陷阱”越来越偏离真正的全局最优。利用有限数据训练的深层网络,性能还不如较浅层网络。同时,另一个不可忽略的问题是“梯度消失”现象更加严重。
2006年,Hinton利用预训练方法缓解了局部最优解问题,将隐含层推动到了7层,神经网络真正意义上有了“深度”,由此揭开了深度学习的热潮,随后的DBN、CNN、RNN、LSTM等才逐渐出现。
这里的“深度”并没有固定的定义——在语音识别中4层网络就能够被认为是“较深的”,而在图像识别中20层以上的网络屡见不鲜。
为了克服梯度消失,ReLU、maxout等传输函数代替了sigmoid,形成了如今DNN的基本形式。单从结构上来说,全链接的多层感知机是没有任何区别的。

二、深度神经网络的致命问题

随着神经网络层数的加深,有三个重大问题:一是非凸优化问题,即优化函数越来越容易陷入局部最优解;二是(Gradient Vanish)梯度消失问题;三是过拟合问题。

2.1 非凸优化问题

线性回归,本质是一个多元一次函数的优化问题,设f(x,y)=x+y
多层神经网络,本质是一个多元K次函数优化问题,设f(x,y)=xy
在线性回归当中,从任意一个点出发搜索,最终必然是下降到全局最小值附近的。所以置0也无妨(这也是为什么我们往往解线性回归方程时初值为0)。
而在多层神经网络中,从不同点出发,可能最终困在局部最小值。局部最小值是神经网络结构带来的挥之不去的阴影,随着隐层层数的增加,非凸的目标函数越来越复杂,局部最小值点成倍增长,利用有限数据训练的深层网络,性能还不如较浅层网络。。避免的方法一般是权值初始化。为了统一初始化方案,通常将输入缩放到[−1,1],但是仍然无法保证能够达到全局最优,其实这也是科学家们一直在研究而未解决的问题。
所以,从本质上来看,深度结构带来的非凸优化仍然不能解决(包括现在的各类深度学习算法和其他非凸优化问题都是如此),这限制着深度结构的发展。

2.2 (Gradient Vanish)梯度消失问题

这个问题实际上是由激活函数不当引起的,多层使用Sigmoid系函数,会使得误差从输出层开始呈指数衰减。在数学上,激活函数的作用就是将输入数据映射到0到1上(tanh是映射-1到+1上)。至于映射的原因,除了对数据进行正则化外,大概是控制数据,使其只在一定的范围内。当然也有另外细节作用,例如Sigmoid(tanh)中,能在激活的时候,更关注数据在零(或中心点)前后的细小变化,而忽略数据在极端时的变化,例如ReLU还有避免梯度消失的作用。通常,Sigmoid(tanh)多用于全连接层,而ReLU多用于卷积层。
Sigmoid
Sigmoid
ReLU
ReLU
“梯度消失”现象具体来说,我们常常使用sigmoid作为神经元的输入输出函数。对于幅度为1的信号,在BP反向传播梯度时,每传递一层,梯度衰减为原来的0.25。层数一多,梯度指数衰减后低层基本上接受不到有效的训练信号。
幸运的是,这个问题已经被Hinton在2006年提出的逐层贪心预训练权值矩阵变向减轻,最近提出的ReLu则从根本上提出了解决方案。
2012年,Hinton组的Alex Krizhevsky率先将受到Gradient Vanish影响较小的CNN中大规模使用新提出的ReLu函数。
2014年,Google研究员贾扬清则利用ReLu这个神器,成功将CNN扩展到了22层巨型深度网络,见知乎。
对于深受Gradient Vanish困扰的RNN,其变种LSTM也克服了这个问题。

2.3 过拟合问题

这就是神经网络的最后一个致命问题:过拟合,庞大的结构和参数使得,尽管训练error降的很低,但是test error却高的离谱。
过拟合还可以和Gradient Vanish、局部最小值混合三打,具体玩法是这样的:
由于Gradient Vanish,导致深度结构的较低层几乎无法训练,而较高层却非常容易训练。
较低层由于无法训练,很容易把原始输入信息,没有经过任何非线性变换,或者错误变换推到高层去,使得高层解离特征压力太大。
如果特征无法解离,强制性的误差监督训练就会使得模型对输入数据直接做拟合。
其结果就是,A Good Optimation But a Poor Generalization,这也是SVM、决策树等浅层结构的毛病。
Bengio指出,这些利用局部数据做优化的浅层结构基于先验知识(Prior): Smoothness
即,给定样本(xi,yi),尽可能从数值上做优化,使得训练出来的模型,对于近似的x,输出近似的y。
然而一旦输入值做了泛型迁移,比如两种不同的鸟,鸟的颜色有别,且在图像中的比例不一,那么SVM、决策树几乎毫无用处。
因为,对输入数据简单地做数值化学习,而不是解离出特征,对于高维数据(如图像、声音、文本),是毫无意义的。
然后就是最后的事了,由于低层学不动,高层在乱学,所以很快就掉进了吸引盆中,完成神经网络三杀。

三、深度学习里面的基本模型

深度学习里面的基本模型大致分为了3类:多层感知机模型;深度神经网络模型和递归神经网络模型。其代表分别是DBN(Deep belief network) 深度信念网络、CNN(Convolution Neural Networks)卷积神经网络、RNN(Recurrent neural network) 递归神经网络。

3.1 DBN(Deep belief network) 深度信念网络

2006年,Geoffrey Hinton提出深度信念网络(DBN)及其高效的学习算法,即Pre-training+Fine tuning,并发表于《Science》上,成为其后深度学习算法的主要框架。DBN是一种生成模型,通过训练其神经元间的权重,我们可以让整个神经网络按照最大概率来生成训练数据。所以,我们不仅可以使用DBN识别特征、分类数据,还可以用它来生成数据。

3.1.1 网络结构

深度信念网络(DBN)由若干层受限玻尔兹曼机(RBM)堆叠而成,上一层RBM的隐层作为下一层RBM的可见层。
(1) RBM
这里写图片描述
一个普通的RBM网络结构如上图所示,是一个双层模型,由m个可见层单元及n个隐层单元组成,其中,层内神经元无连接,层间神经元全连接,也就是说:在给定可见层状态时,隐层的激活状态条件独立,反之,当给定隐层状态时,可见层的激活状态条件独立。这保证了层内神经元之间的条件独立性,降低概率分布计算及训练的复杂度。RBM可以被视为一个无向图模型,可见层神经元与隐层神经元之间的连接权重是双向的,即可见层到隐层的连接权重为W,则隐层到可见层的连接权重为W’。除以上提及的参数外,RBM的参数还包括可见层偏置b及隐层偏置c。RBM可见层和隐层单元所定义的分布可根据实际需要更换,包括:Binary单元、Gaussian单元、Rectified Linear单元等,这些不同单元的主要区别在于其激活函数不同
(2) DBN
这里写图片描述
DBN模型由若干层RBM堆叠而成,如果在训练集中有标签数据,那么最后一层RBM的可见层中既包含前一层RBM的隐层单元,也包含标签层单元。假设顶层RBM的可见层有500个神经元,训练数据的分类一共分成了10类,那么顶层RBM的可见层有510个显性神经元,对每一训练数据,相应的标签神经元被打开设为1,而其他的则被关闭设为0

3.1.2 训练过程和优缺点

DBN的训练包括Pre-training和Fine tuning两步,其中Pre-training过程相当于逐层训练每一个RBM,经过Pre-training的DBN已经可用于模拟训练数据,而为了进一步提高网络的判别性能, Fine tuning过程利用标签数据通过BP算法对网络参数进行微调。
对DBN优缺点的总结主要集中在生成模型与判别模型的优缺点总结上。
1、优点:

  • 生成模型学习联合概率密度分布,所以就可以从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度;
  • 生成模型可以还原出条件概率分布,此时相当于判别模型,而判别模型无法得到联合分布,所以不能当成生成模型使用。

2、缺点:
- 生成模型不关心不同类别之间的最优分类面到底在哪儿,所以用于分类问题时,分类精度可能没有判别模型高;
- 由于生成模型学习的是数据的联合分布,因此在某种程度上学习问题的复杂性更高。
- 要求输入数据具有平移不变性。

关于 判别模型与生成模型可以参看(http://blog.csdn.net/erlib/article/details/53585134)

3.1.3 改进模型

DBN的变体比较多,它的改进主要集中于其组成“零件”RBM的改进,有卷积DBN(CDBN)和条件RBM(Conditional RBM)等。
DBN并没有考虑到图像的二维结构信息,因为输入是简单的将一个图像矩阵转换为一维向量。而CDBN利用邻域像素的空域关系,通过一个称为卷积RBM(CRBM)的模型达到生成模型的变换不变性,而且可以容易得变换到高维图像。
DBN并没有明确地处理对观察变量的时间联系的学习上,Conditional RBM通过考虑前一时刻的可见层单元变量作为附加的条件输入,以模拟序列数据,这种变体在语音信号处理领域应用较多。

3.2 CNN(Convolution Neural Networks)卷积神经网络

卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。
全链接DNN的结构里下层神经元和所有上层神经元都能够形成连接,带来了参数数量的膨胀问题。例如,1000*1000的像素图像,光这一层就有10^12个权重需要训练。此时我们可以用卷积神经网络CNN,对于CNN来说,并不是所有上下层神经元都能直接相连,而是通过“卷积核”作为中介。同一个卷积核在所有图像内是共享的,图像通过卷积操作后仍然保留原先的位置关系。图像输入层到隐含层的参数瞬间降低到了100*100*100=10^6个
卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。

3.2.1 网络结构

卷积神经网络是一个多层的神经网络,其基本运算单元包括:卷积运算、池化运算、全连接运算和识别运算。
这里写图片描述

  • 卷积运算:前一层的特征图与一个可学习的卷积核进行卷积运算,卷积的结果经过激活函数后的输出形成这一层的神经元,从而构成该层特征图,也称特征提取层,每个神经元的输入与前一层的局部感受野相连接,并提取该局部的特征,一旦该局部特征被提取,它与其它特征之间的位置关系就被确定。l
  • 池化运算:能很好的聚合特征、降维来减少运算量。它把输入信号分割成不重叠的区域,对于每个区域通过池化(下采样)运算来降低网络的空间分辨率,比如最大值池化是选择区域内的最大值,均值池化是计算区域内的平均值。通过该运算来消除信号的偏移和扭曲。
  • 全连接运算:输入信号经过多次卷积核池化运算后,输出为多组信号,经过全连接运算,将多组信号依次组合为一组信号。
    识别运算:上述运算过程为特征学习运算,需在上述运算基础上根据业务需求(分类或回归问题)增加一层网络用于分类或回归计算。

3.2.2 训练过程和优缺点

卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。卷积网络执行的是有监督训练,所以其样本集是由形如:(输入信号,标签值)的向量对构成的。

1、优点:
- 权重共享策略减少了需要训练的参数,相同的权重可以让滤波器不受信号位置的影响来检测信号的特性,使得训练出来的模型的泛化能力更强;
- 池化运算可以降低网络的空间分辨率,从而消除信号的微小偏移和扭曲,从而对输入数据的平移不变性要求不高。

2、缺点:
- 深度模型容易出现梯度消散问题。

3.2.3 改进模型

卷积神经网络因为其在各个领域中取得了好的效果,是近几年来研究和应用最为广泛的深度神经网络。比较有名的卷积神经网络模型主要包括1986年Lenet,2012年的Alexnet,2014年的GoogleNet,2014年的VGG,2015年的Deep Residual Learning。这些卷积神经网络的改进版本或者模型的深度,或者模型的组织结构有一定的差异,但是组成模型的机构构建是相同的,基本都包含了卷积运算、池化运算、全连接运算和识别运算。

3.3 RNN(Recurrent neural network) 递归神经网络

全连接的DNN除了以上问题以外还存在着另一个问题——无法对时间序列上的变化进行建模。然而,样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要。对了适应这种需求,就出现了题主所说的另一种神经网络结构——循环神经网络RNN(不知道为什么很多叫循环的。计算机术语里循环一般是同一层次的,Recurrent 其实是时间递归,所以本文叫他递归神经网络)。
在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward Neural Networks)。而在RNN中,神经元的输出可以在下一个时间戳直接作用到自身。
即:(t+1)时刻网络的最终结果O(t+1)是该时刻输入和所有历史共同作用的结果。RNN可以看成一个在时间上传递的神经网络,它的深度是时间的长度!正如我们上面所说,“梯度消失”现象又要出现了,只不过这次发生在时间轴上
为了解决时间上的梯度消失,机器学习领域发展出了长短时记忆单元(LSTM),通过门的开关实现时间上记忆功能,并防止梯度消失。

3.3.1 网络结构

这里写图片描述
左侧是递归神经网络的原始结构,如果先抛弃中间那个令人生畏的闭环,那其实就是简单“输入层=>隐藏层=>输出层”的三层结构,但是图中多了一个非常陌生的闭环,也就是说输入到隐藏层之后,隐藏层还会输入给自己,使得该网络可以拥有记忆能力。我们说递归神经网络拥有记忆能力,而这种能力就是通过W将以往的输入状态进行总结,而作为下次输入的辅助。可以这样理解隐藏状态:h=f(现有的输入+过去记忆总结)

3.3.2 训练过程和优缺点

递归神经网络中由于输入时叠加了之前的信号,所以反向传导时不同于传统的神经网络,因为对于时刻t的输入层,其残差不仅来自于输出,还来自于之后的隐层。通过反向传递算法,利用输出层的误差,求解各个权重的梯度,然后利用梯度下降法更新各个权重。
1、优点:

  • 模型是时间维度上的深度模型,可以对序列内容建模。

2、缺点:
- 需要训练的参数较多,容易出现梯度消散或梯度爆炸问题;
- 不具有特征学习能力。

3.3.3 改进模型

递归神经网络模型可以用来处理序列数据,递归神经网络包含了大量参数,且难于训练(时间维度的梯度消散或梯度爆炸),所以出现一系列对RNN优化,比如网络结构、求解算法与并行化。
近年来bidirectional RNN (BRNN)与 LSTM在image captioning, language translation, and handwriting recognition这几个方向上有了突破性进展 。

3.4 混合结构

除了以上三种网络,和我之前提到的深度残差学习、LSTM外,深度学习还有许多其他的结构。举个例子,RNN既然能继承历史信息,是不是也能吸收点未来的信息呢?因为在序列信号分析中,如果我能预知未来,对识别一定也是有所帮助的。因此就有了双向RNN、双向LSTM,同时利用历史和未来的信息。双向RNN、双向LSTM,同时利用历史和未来的信息。
事实上,不论是那种网络,他们在实际应用中常常都混合着使用,比如CNN和RNN在上层输出之前往往会接上全连接层,很难说某个网络到底属于哪个类别。
不难想象随着深度学习热度的延续,更灵活的组合方式、更多的网络结构将被发展出来。尽管看起来千变万化,但研究者们的出发点肯定都是为了解决特定的问题。如果想进行这方面的研究,不妨仔细分析一下这些结构各自的特点以及它们达成目标的手段。

3.5 CNN和RNN的比较

RNN的重要特性是可以处理不定长的输入,得到一定的输出。当你的输入可长可短, 比如训练翻译模型的时候, 你的句子长度都不固定,你是无法像一个训练固定像素的图像那样用CNN搞定的。而利用RNN的循环特性可以轻松搞定。
在序列信号的应用上,CNN是只响应预先设定的信号长度(输入向量的长度),RNN的响应长度是学习出来的。

CNN对特征的响应是线性的,RNN在这个递进方向上是非线性响应的。这也带来了很大的差别。

CNN 专门解决图像问题的,可用把它看作特征提取层,放在输入层上,最后用MLP 做分类。
RNN 专门解决时间序列问题的,用来提取时间序列信息,放在特征提取层(如CNN)之后。

RNN,递归型网络,用于序列数据,并且有了一定的记忆效应,辅之以lstm。
CNN应该侧重空间映射,图像数据尤为贴合此场景。

CNN 卷积擅长从局部特征逼近整体特征,
RNN 擅长对付时间序列。

四、一些基本概念和知识

4.1 线性回归、线性神经网络、Logistic/Softmax回归

这个参考http://blog.csdn.net/erlib/article/details/53585134
或者其他资料。

4.2 关于卷积、池化、激活函数等

入门参考:http://blog.csdn.net/u010859498/article/details/78794405
详细了解可自己谷歌百度

4.3 推荐一个比较好的入门资料

台大电机系李宏毅教授的讲义《一天搞懂深度学习》
有人做简略的翻译过
https://www.jianshu.com/p/c30f7c944b66

参考资料:
http://blog.csdn.net/erlib/article/details/53585134
https://www.zhihu.com/question/34681168/answer/156552873
http://blog.csdn.net/u010859498/article/details/78794405

2018-03-13 09:23:47 qq_28031525 阅读数 2753
  • 3小时掌握深度学习(经典算法+实战案例)

    深度学习视频教程,包括经典算法与具体案例实战,该系列教程旨在帮助同学们掌握深度学习基础知识点,对复杂的神经网络模型进行通俗解读,逐步迈向深度学习两大核心模型-卷积与递归神经网络。使用当下主流深度学习框架进行实战任务,实例演示如何使用tensorflow进行建模任务。课程风格通俗易懂,接地气的方法带你走进深度学习的世界。

    4688 人正在学习 去看看 CSDN讲师

  本文基于目前深度学习中使用较多的优化学习算法进行总结。

1 深度学习中的优化算法

  优化算法之前讨论两个问题:
  (1) 局部最小值问题
  在深度学习中,最优化问题其实并不容易困在局部最小值点。在高维度空间时(如20000维),局部最小值点需要在所有维度上都取得最小值,概率为220000,相反更容易困在鞍点处。
  同时平稳端(plateaus)也会使得学习变慢,因此可以通过自适应学习率算法如Adam或者RMSProp加速学习。
  (2) 指数加权(移动)平均(Exponentially Weighted (moving) average)
  在数据抖动较大的情况下,利用之前的整体变化趋势预测当前值。例如预测今天的气温,可以对之前一段时间的气温做平滑处理,即指数加权移动平均,一般形式为:

vt=βvt1+(1β)θt

  其中数据vt利用了前11β天的整体趋势平均。
  这里写图片描述
  为什么是前11β时刻的的指数平均可以从上图看出。当我们迭代带入数值计算时,一般认为当(tn)时刻的权重小于t时刻的e分之一((1ε)1ε1e,取β=(1ε),参数变换即β11β1e)时,就不再认为(tn)时刻前的数据参与平均。那么可以看到当β为0.9的时候,指数系数为10,也即β11β=0.910,共10个时刻的数据参与平均,当β为0.98时,指数系数为50,也即β11β=0.9850,认为共50个时刻的数据参与平均。

1.1 随机梯度下降(SGD)

  深度学习中的SGD指mini-batch gradient descent。在训练过程中,采用固定的学习率。
这里写图片描述
  其中,η是学习率,gt是梯度。SGD完全依赖于当前batch的梯度,所以η可理解为允许当前batch的梯度多大程度影响参数更新。
  通常来说,就总训练时间和最终代价而言,最优初始化学习率的效果会好于大约迭代100次后的效果。
  缺点:
  (1) 选择合适的learning rate比较困难,且对所有的参数更新使用同样的learning rate
  (2) SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点(其实在合适的初始化和step size的情况下,鞍点的影响并没有很大)

1.2 动量(momentum)

  动量方法旨在加速学习,特别是在面对小而连续的梯度但是含有很多噪声的时候。动量模拟了物体运动时的惯性,即在更新的时候在一定程度上会考虑之前更新的方向,同时利用当前batch的梯度微调最终的结果。这样则可以在一定程度上增加稳定性,从而更快的学习。
  这里写图片描述
  这里写图片描述
  特点:
  (1) 下降初期时,使用上一次参数更新,当下降方向一致时能够加速学习
  (2) 下降中后期,在局部最小值附近来回振荡时,gradient–>0,使得更新幅度增大,跳出陷阱;
  (3) 在梯度改变方向时,能减少更新。总体而言,momentum能够在相关方向上加速学习,抑制振荡,从而加速收敛

1.3 Nesterov动量

  Nesterov项在梯度更新时做出校正,避免前进太快,同时提高灵敏度。在动量中,我们将其展开为:
  这里写图片描述
  可以看到,此前积累的动量mt1并没有直接改变当前梯度gt,所以Nesterov的改进就是让之前的动量直接影响当前的动量,即:
  这里写图片描述
  所以,加上Nesterov项后,梯度在大的跳跃后,进行计算对当前梯度进行校正。
  Nesterov动量和标准动量的区别在于梯度的计算上。Nesterov动量的梯度计算是在施加当前速度之后。因此,Nesterov动量可以解释为往标准动量方法中添加了一个校正因子。

1.4 自适应学习率算法

  在训练开始的时候,我们远离最终的最优值点,需要使用较大的学习率。经过几轮训练之后,我们需要减小训练学习率。
  在采用mini-batch梯度下降时,迭代的过程中会伴随有噪音,虽然cost function会持续下降,但是算法收敛的结果是在最小值附近处摆动,而减小学习率,则会使得最后的值在最小值附近,更加接近收敛点。
  这里写图片描述

1.4.1 AdaGrad

  Divide the learning rate of each parameter by the root mean square of its previous derivatives(将每个参数除以之前所有梯度的均方和)。
  这里写图片描述
  此处,对nt从t=1开始进行递推形成一个约束项regularizer,ε保证分母非0。
  特点:
  (1) 前期gt较小的时候,regularizer较大,能够放大梯度
  (2) 后期gt较大的时候,regularizer较小,能够约束梯度
  (3) 适合处理稀疏梯度。
  缺点:
  (1) 需要手动设置一个全局的学习率
  (2) η设置过大时,会使regularizer过于敏感,对梯度的调节太大
  (3) 中后期,分母上梯度平方的累积将会越来越大,使gradient–>0,使得训练提前结束

1.4.2 Adadelta

  Adadelta是Adagrad的拓展,最初方案依旧是对学习率进行自适应约束,但是进行了计算上的简化。Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值。即:
  这里写图片描述 
  在此时Adadelta还是依赖于全局学习率,但是作者在处理后
  这里写图片描述
  此时Adadelta已经不再依赖于全局学习率了。
  特点:
  (1) 训练初中期,加速效果不错
  (2) 训练后期,反复在局部最小值附近抖动

1.4.3 RMSProp

  RMSProp可以看做为Adadalta的一个特例,也即上述式子中ρ=0.5,然后再求根的话,就变成RMS(均方根):
  这里写图片描述
  随着ηt在不同范围内(11v)的平均,对于变化较大的值方向能够抑制变化,较小的值方向加速变化,消除摆动加速收敛
  这里写图片描述
  RMSProp的特点如下,
  优点:
  (1) 由于采用了梯度平方的指数加权平均,改进了AdaGrad在深度学习中过早结束的问题,效果趋于二者之间
  (2) 适用于处理非平稳过程(也即过程依赖于时间,采用指数加权平均时对于非平稳过程处理较好)-对于RNN效果较好
  缺点:
  (1) 仍然依赖于全局学习率

1.4.4 Adam

  Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSProp,它利用了梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正(Bias correction,为了修正在训练初期的误差,当t变大后,偏置校正效果减弱)后,每一次迭代学习率都有个确定范围,使得参数比较平稳。
  偏置修正(Bias Correction)的效果:
  当初始化v0=0时,v1=0.98v0+0.02θ1(其中θ1为当前时刻的值),可以看到v1远小于当前的值θ1,接下来v2=0.98v1+0.02θ=0.980.02θ1+0.02θ2,得到的结果θ2远小于当前时刻的值θ2,因此在训练初期时与真实值会有较大误差(也即初期时绿色线和紫色线的差别)。
  因此采用vt=vt1βt时,当t较小时,vt能得到修正偏差,也即下图右边所示,而当t逐渐变大时,由于β小于1,则偏置效果减弱。
  这里写图片描述
   Adam优化算法如下:
   这里写图片描述
   通常,μ的值可以设置为0.9,v的值可以设置为0.999。其中,mt,nt分别是梯度一阶矩估计和二阶矩估计,可以看做对期望E|gt|,E|gt2|的估计,近似为对期望的无偏估计。
   特点:
   (1) 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点
   (2) 对内存需求较小(指数加权平均不需要存储大量的值就能平均)
   (3) 为不同的参数计算不同的自适应学习率
   (4) 适用于大多非凸优化 - 适用于大数据集和高维空间

深度学习之神经网络算法 

博文 来自: weixin_41012049
没有更多推荐了,返回首页