2018-05-23 12:01:20 qq_25011449 阅读数 458

李宏毅深度学习_Backpropagation

本文是李宏毅深度学习 (2015)的学习笔记,主要介绍了神经网络Backpropagation算法的推导过程。本文所用到的图示均来自课堂ppt。

原视频地址:李宏毅深度学习 (2015)

Background

BP的背景

为了使用Gradient Descent对网络参数进行训练,我们就要求出Cost Function对每一层参数的梯度,由于本质上wijlbil差别不大(可将bil看作wijl中的一项),因此我们这里仅对Cr/wijl进行推导,Cr/bil推导类似。

链式法则

求导链式法则

这里使用求导链式法则先将这个问题拆解成两部分,然后分别对每一部分的求导进行计算。

计算链式法则中拆解的两部分

1. 计算zil/wijl

第一部分求导

第一部分的求导分为两种情况:

  • l>1。即当权值不是第一层时,导数为ajl1
  • l=1。即权值为第一层时,导数为xjr

2. 计算Cr/zil

第二部分求导1

为了描述方便将Cr/zil描述为δil。此时利用BP的思想,先求出最后一层的δL,再找出后一层δl+1与前一层δl的关系,以此求出所有的δl

第二部分求导2

同样根据链式求导法则可以得出

δnL=σ(znL)Crynr

其中Crynr与Cost Function的选取有关。

第二部分求导3
第二部分求导4

zil的变化Δzil会对ail造成影响进而影响到下一层的zl+1

第二部分求导6

向量化后得到

δl=σ(zl)(Wl+1)Tδl+1

总结

总结

至此,我们已经完成了对Cr/wijl的推导,并且实现了向量化。Cr/bil推导类似。

2017-06-06 23:00:49 soulmeetliang 阅读数 5536

[机器学习入门] 李宏毅机器学习笔记-10 (Tips for Deep Learning;深度学习小贴士)

PDF VIDEO

Recipe of Deep Learning

这里写图片描述
这里写图片描述


在 training data上的performance不好

这里写图片描述


Deeper usually does not imply better

这里写图片描述


Vanishing Gradient Problem

这里写图片描述
这里写图片描述
这里写图片描述


ReLU(Rectified Linear Unit)

这里写图片描述
这里写图片描述
这里写图片描述

ReLU - variant

这里写图片描述

**那么除了ReLU有没有别的activation function了呢?
所以我们用 Maxout来根据training data自动生成activation function**
ReLU is a special cases of Maxout


Maxout

这里写图片描述


ReLU is a special cases of Maxout

这里写图片描述


More than ReLU

这里写图片描述
这里写图片描述


Maxout - Training

这里写图片描述
这里写图片描述


Adaptive Learning Rate

这里写图片描述
这里写图片描述


RMSProp

这里写图片描述


Hard to find optimal network parameters

这里写图片描述


Momentum(gradient descent 融入惯性作用)

这里写图片描述
这里写图片描述
这里写图片描述

所以,加了momentum后:

这里写图片描述


Adam

这里写图片描述


在testing data上performance不好

这里写图片描述


Early Stopping

这里写图片描述


Regularization

这里写图片描述
这里写图片描述
这里写图片描述


Regularization - Weight Decay

这里写图片描述


Dropout

这里写图片描述
这里写图片描述
这里写图片描述


Dropout- Intuitive Reason

这里写图片描述
这里写图片描述


Dropout is a kind of ensemble

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

2019-04-01 21:10:15 YDC123458 阅读数 689

主要记录一些学习过程,以后查阅也方便,来源:李宏毅机器学习课程

Early Stopping 

此时提前停止的testing set是有label的data,一般是自己划分出来的Val验证集数据或类似kaggle的public set 

Regularization

 

 \eta \lambda都是很小的值,因此每次update之前就相当于乘上一个接近1的数,比如0.99,这相当于前面越来越接近0,相当于在做weight decay。但是深度学习中正则化(Regularization)一般并没有SVM那样明显有帮助。正则化与early stopping所做的事是比较接近的,都是使参数不要离零太远。

 每一次update参数时,如果w为正,就是减去一个值让参数变大。如果w是特别大的正值,对于L2正则化减去的也很大,但对于L1减去的都差不多,因此L1可能会保留很多很大的值。如果考虑很小的值比如0.1,0.001,L2下降的就会很慢,因此会保留很多很小的值,而L1减去的值都是固定的值(+1或-1),因此L1的结果比较稀疏。

Dropout

training阶段每一个神经元被丢掉的概率都是p%,每一次update前都进行上图所示的dropout。 在testing时,不进行dropout,如果训练的dropout是p%,那么测试时weights都会乘上(1-p)%,这些不需要自己操作,pytorch、tensorflow等工具都已经做好了。

 上图所示,如果不乘一个值,那么就会不匹配z' = 2z,而都乘0.5时就基本相同了。

 其实dropout也相当于一种ensemble方法

 

上面两幅图就是典型的ensemble思想,dropout与此十分相似。 

每次都只用一个minibatch去train网络,每次都随机使用dropout,因此实际相当于训练了很多个network,如下图所示:

 注意:每层的weight是共享的

ensmeble思想如上图,将所有networks每个都丢一个minibatch然后输出结果进行平均,但上述实际运算太复杂,而神奇的是做测试时不做dropout,而给整个网络乘上(1-p)%效果是和ensmeble完全一样的。

New activation function

如果使用sigmoid函数,当layer越来越多时,准确率会大幅下降(在手写体数字数据集上)。这并不是由于过拟合造成,主要是因为梯度消失问题。靠近input层的梯度很小,学习也很慢;但靠近output的梯度已经很大,学习非常快,甚至已经收敛(这时候会进入local min);而且此时参数可能时random的,输出就已经收敛,这种结果是非常差的。

如何改变上述这种情况呢?可能你会想到增大输入的\Delta \omega\partial C/\partial w = ?\Delta C/\Delta w  C:cost、w:参数),那么Sigmoid函数(上图)即使input变化很大,output变化也很小,即会衰减,而通过的sigmoid越多(即network越深),衰减的也越多,所以可以看出即使\Delta \omega变化很大,造成sigmoid的input变化很大,但经过sigmoid的output变化很小,最终对输出的影响与cost也很小 ,即很难改变上述情况。

后来人们发现改一下激活函数就能有比较好的效果(即能处理梯度消失这个问题,另外它的计算速度也比sigmoid快得多),比较有代表性的就是ReLU(目前很多深度神经网络都采用ReLU)。RuLU激活函数如下图所示:

当input>0时,input= output, 即此时是线性的

当input<0时,output=0,此时这个neuron即可删掉

假设我们有下图全是ReLU激活函数的神经网络,我们将output=0的拿掉后就可以得到下图二所示的网络。

此时剩下的都是input=output的,而且是线性的,那么此时就不会出现前面sigmoid出现的衰减的问题。

注意:此时整个网络并不是线性的。

ReLU的变体:Leaky ReLU

使input<0时依旧有微分值

ReLU的变体:Parametric ReLU

参数\alpha可以通过训练数据可以学出来

Maxout(ReLU是Maxout的一种特殊情况)

是一种学习的激活函数,如下图所示,红色框圈出来就是它的形式,它实际是将经过神经元的值分成group,然后选择每个group里的最大值。

从上图可以看出,当element=2时,某一个输入对应的w和b都是0的时候,取max(z1,z2)即可得到和ReLU相同的激活函数。而element不同,其形式也会不同,如下图所示。

 

Adaptive Learning Rate

Adagard

其思想就是平坦的方向上给大的学习率,陡峭的方向上给小的学习率。

RMSProp

Adagrad进阶版、可更动态的调整同一方向的学习率,不像上述Adagrad一个方向只能大或小

调整\alpha,其值越小,就相当于越相信新的梯度提供的陡峭或平滑的信息,相比Adagrad加入了新看到的梯度和旧梯度的权重。

Momentum

尽可能避免落入local minimum

红色实线是梯度方向,虚线是梯度告诉我们要更新的方向,而绿色虚线是上一个动量惯性告诉我们要走的方向,如果不加动量我们就会走红色虚线的方向,但加了动量则会走蓝线的方向。

Adam(RMSProp + Momentum)

 

------------------------------------------------------------------------------------------------------------------------

2019年4月2日   沙坡村职业技术学院 

2018-08-29 09:31:18 Jimmyzqb 阅读数 1995

上一篇博客中介绍了Keras,并使用Keras训练数据进行预测,得到的效果并不理想,接下来将以此为基础优化模型,提高预测的精度。


目录


误差分析

模型误差原因分析

在上一篇博客中,我们按照步骤建立了神经网络模型V1.0版本,效果很不理想,因此逐步回溯建模的过程,分析模型不理想的原因:

  1. 如果模型在训练集的准确率就不好,说明模型欠拟合,应该重新调整模型,提高训练集的拟合效果;
  2. 如果模型在训练集的准确率高而在测试集的准确率很低,就说明了模型存在过拟合的问题。

这里写图片描述

模型优化方案

针对这两种情况分别提出相应的优化措施。
这里写图片描述

New activation function

Vanishing Gradient Problem

常见的以sigmoid函数作为激活函数的神经网路在模型深度很高的时候往往存在梯度消失问题,接近input vector的神经层梯度小,在接近output vector的神经层梯度大,在学习速率一样的情况下,接近input vector的神经层学习速度慢,接近output vector的神经层学习速度快,因此会导致后面几层的神经层达到最优化而前面几层还没怎么进行调参,此时算法停止但并非最优解。如图,通过sigmoid函数会将变化减小,在多神经层的情况下,尽管很大,最终反映在后面几层的变动将大大减小。
这里写图片描述

ReLU

ReLU全称Rectified Linear Unit,以ReLU作为激活函数可以解决梯度消失问题,通过ReLU对于一个样本通常整个神经网络被简化为较简单的形式(剔除为output为0的神经元)。
这里写图片描述

ReLU还有多种变形:
这里写图片描述

Maxout

Maxout介绍

Maxout让神经网络自动地学习适合的激活函数,如图,(x1,x2)作为输入向量,连接4个神经元,得到4个数值,以两个为一组,取组内最大值,再重复一次得到2、4。
这里写图片描述

如图所示,可以通过Maxout得到ReLU:
这里写图片描述

更一般地,我们可以通过Maxout(可以调节更多的神经元在一组)得到其他更复杂的函数:
这里写图片描述

Maxiout方法的训练

对于一组给定的输入向量,红色框表示计算得到的各组之中的最大值,此时的激活函数相当于一个线性函数,此时再利用反向传播算法计算梯度更新参数。
这里写图片描述

Adaptive Learning Rate

传统的神经网络模型设定各个神经元在使用梯度下降算法更新参数时的学习速率是相同且恒定,为了提高模型的拟合效果,现在考虑采用自适应的学习速率进行模型拟合。

Adagrad

Adagrad是一种常见的自适应的学习速率算法,详见前博客

RMSProp

如果Loss Funtion是很复杂的函数,依赖与二阶导数相对稳定前提的Adagrad算法并不适用,现在考虑一种新的算法RMSProp。RMSProp算法考虑了Loss Funtion分布的疏密因素(Loss Funtion函数等高线越稀疏,学习速率越大),按此逻辑设置不同的学习速率。
这里写图片描述

Momentum

为了尝试解决得到的解是局部最优的无效解,现在在梯度下降过程中引入物理学中的惯性,如图,在引入了惯性度量后,尽管局部最优点偏导数为0,但是由于惯性参数仍然会更新,因此能够一定程度上缓解局部最优化问题。
这里写图片描述

如图可以更直观地表示整个参数更新的原理和过程,初始化θ0 ,此时惯性v0为0,红色表示偏导数L,绿色表示由于之前运动所具有的关系(反向和原来的运动方向保持一致),这一点下一步的运动为Lv的矢量和。

考虑上一时刻的运动方向等价于考虑了之前所有的L
这里写图片描述

Adam

Adam是RMSProp和Momentum的结合,算法如下。
这里写图片描述

当模型在训练集拟合效果好而在测试集效果很差,说明产生了过拟合问题,

Early Stopping

当模型在训练集拟合效果好而在测试集效果很差,说明产生了过拟合问题,此时可以Early Stopping,防止过拟合问题,如图,如果模型在训练集的拟合效果好,随着epochs的增加在训练集上的Total loss应该单调递减,由于过拟合,在测试集上的Total loss先减后增,因此我们选择在测试集上的Total loss曲线上的最低点停止。
这里写图片描述

Regularization

L2正则化

现在使用正则化来解决过拟合问题,在原来的Loss Function上加上正则惩罚项,和原来没有加惩罚项的结果对比,参数更容易趋向于0,由此大大简化了模型的结构。
这里写图片描述

L1正则化

由于sgn(w)这一项使得L1相对于L2更容易得到趋近于0的解。
这里写图片描述

L2正则化vsL1正则化

L1和L2相比不同的地方在于二者都让参数接近于0,但是做法不一样:

  • L2是乘以一个固定的小于1的值(1ηλ),因此L2对比较大的参数的惩罚比较强,L2得到的参数往往聚集于0附近,但不会非常靠近
  • L1是减去一个固定的值(ηλsgn(wt)),L1不管参数大小,惩罚相同,得到的参数差距拉的比较大,0附近的参数更接近于0

Dropout

每次一次开始训练的时候,都对样本的特征、神经元进行随机p%的求其丢弃,按此结构利用反向传播算法更新参数,
这里写图片描述

在测试集运行模型时应该使用全部的特征和神经元,且此时由训练集估计出来的w应该全部乘以(1-p%)。
这里写图片描述

我们可以假设一个例子方便对第二点有一个直观的解释:
这里写图片描述

Dropout本质是一种ensemble的方法,左右两个模型近似:
这里写图片描述

举个便于理解的例子,现在假设有输入向量为二维,只有一个神经元的神经网络,Dropout有4种可能,4种可能的输出的平均值等于参数乘以(1-p%):
这里写图片描述

尽管这个关系只在激活函数为线性函数的时候才严格相等,但是在实际的运用中不管激活函数的形式如何,近似关系都成立

2018-07-31 17:22:40 lz_peter 阅读数 853

Lecture I : Introduction of Deep Learning

  • Introduction of Deep Learning
    • Step1 : define a set of function
    • Step2 : goodness of function
    • Step3 : pick the best function
  • Why Deep?
  • "Hello World" for Deep Learning

Lecture II : Tips for Training Deep Neural Network

  • Recipe of Deep Learning
    • Choosing proper loss
    • Mini-batch
    • New activation function
    • Adaptive Learning Rate
    • Momentum
    • Early Stopping
    • Weight Decay
    • Regularization
    • Dropout
    • Network Structure

Lecture III : Variants of Neural Network

  • Convolutional Neural Network(CNN)
  • Recurrent Neural Network(RNN)

Lecture IV : Next Wave

  • Supervised Learning
    • Ultra Deep Network
    • Attention Model
  • Reinforcement Learning
  • Unsuperivised Learning
    • Image:Realizing what the World Looks Like
    • Text:Understanding the Meaning of Words
    • Audio:Learning human language without supervision

 

Attention模型

阅读数 20

没有更多推荐了,返回首页