深度学习笔记——理论与推导之DNN(三)

##DNN##
目录

  • 激励函数(ReLU以及ReLU的变形,梯度消失问题)
  • 成本函数
  • 数据处理
  • 优化
  • 一般化

###激励函数:###
####Rectified Linear Unit(ReLU)####
这里写图片描述

  • 选择Relu的原因:
    • 计算速度快
    • 生物原因
    • 类似于具有不同偏差的无限个sigmoid
    • 可以解决梯度消失问题
  • sigmoid的问题(梯度消失问题):
    sigmoid function的微分函数是蓝色的线,我们可以发现,蓝线上的所有值都处于(0,1)之间,而最大值出现在x = 0的位置,值为1/4。这会导致在backward pass中,因为每通过一个layer,Error signal就要乘以一个scalar(这个scalar就是sigmoid function的导数),导致Error signal会不断被减弱,最终会导致Gradient越来越小。这会导致在neural network中越靠近input的gradient都比较小,这时,如果你选用的是一个constant learning rate,你就会发现靠近input的weight就会都比较小,也就会导致靠近input的weight值的变化会很小,也就是它learn的速度会比较慢。
    这里写图片描述
    这里写图片描述
    这里写图片描述
  • 那么ReLU是如何解决梯度消失的问题呢?
    这是由于ReLU的导数非0即1,因此不会削弱Error signal的值。
    这里写图片描述
    这里写图片描述
    这里写图片描述
    • 这里需要考虑一个问题:
      所有连接到偏导为0的weight都不会更新:
    • 可能的解决方法:
  1. softplus function
  2. initialize with large bias
    • 然而这个问题不会照常太大影响,因为要对多个x进行训练,所以基本上他的weight都会被训练到。
  • ReLU的变形:
    • Parametric ReLU:
      这里写图片描述
    • Maxout ReLU:
      所有的ReLU变形都是特殊的Maxout案例
      这里写图片描述
      左边是一般的ReLU,绿色的线是蓝线通过ReLU以后的变化;右边是Maxout ReLU,只要找到适当的参数,Maxout也可以做出和一般ReLU一样的事情。
      这里写图片描述
      由于w和b的值是根据data所learn出来的,所以Maxout可以也是一个可以被learn出来的activation function
      这里写图片描述
      如何去training maxout呢?
      没用到的z可以直接去掉,所以train的其实就是一个thin和linear的network
      这里写图片描述

###成本函数:###

  1. 直接输出cost function可能存在一个问题:
    虽然上面的y的cost function的值可能更小,但就我们对nerual network的理解,应该是下面的y更准确,因为值越大代表越重要。
    这里写图片描述
  2. 解决方法:softmax,将softmax layer作为output layer。
    softmax就是将所有的输出值的和变为1。
    这里写图片描述
    如果我们用softmax layer作为output,那我们应该使用怎么样的cost function呢?
  • 什么样的cost function是算是好的呢?output和pred相差很大时,我们的cost function需要得到较大的Error Signal,这样在fixed learning rate时我们就能快速的学习。
  • 什么样的cost function可以搭配softmax function呢?
    这里不要考虑除了r的其他维,因为我们这时候使用的是softmax,如果r维为1,或者r维尽量大,那么其他维度就会变小。
    这里写图片描述
  • 接下来我们来看一下cost entropy的error signal(因为我们需要cost function越大时,error signal也要越大)
    如果yr和1的差距越大,那么error signal就会越大,反之越小,这样的话就满足了我们的要求。
    i=r的时候:
    这里写图片描述
    下面计算i≠r的时候
    这里写图片描述
    ###数据处理:###
    ###优化###
  • Vanilla Graident Descent(就是之前的Gradient Descent)
    • 如何判断learning rate是否过大(过小):
      • 当cost不减小,并且上下波动时,表示learning rate过大。
      • 当cost递减速度比较慢时,表示learning rate过小
      • 当cost第一次下降就很多时,可能表示learning rate适当。
    • 如何确定learning rate:
      • 一个比较简单的方法:在每次输出中,减少learning rate的值
        • 在开始的时候我们需要比较大的learning rtae
        • 在靠近结尾的时候,我们会减小learning rate的值。
        • 例如:这里写图片描述
      • Adagrad:将每个参数的学习率除以它前面一系列偏导数的平均平方根。
        这里写图片描述
        下面是Adagrad的步骤:
        这里写图片描述
        这里写图片描述
      • 什么是最好的步伐呢(即learning rate)?
        • 难道Larger gradient,larger steps一定是对的吗?
          这里写图片描述
          如上图所示,如果从x0要到达最低点-b/2a,那么他的最好的步伐应该是|x0+b/2a|也就是|2ax0+b|/2a,2ax0+b其实就是曲线在x0的一阶导数,表面上看larger gradient确实和larger steps成正比,然而我们忽略了2a,这个2a其实就是曲线在x0的二阶导数,因此最好的步伐应该是|一阶导数|/|二阶导数|。
        • 如果是多个参数呢?如下:
          这里写图片描述
      • 然而你如果算二次微分的速度很慢的话,这样计算learning rate就没有意义。因为如果你的learning rate设置很小,那么理论上说是可以达到一个比较好的结果的。这时候Adagrad就起到作用了,因为虽然这里Adagrad只做了一次微分,但是它的分母对二次微分做了估算。
    • 遇到local minima 和saddle point 怎么办?
      • Momentum(动量):
        动量其实就是模拟物理中小球下滑的过程,即Momentum不仅仅基于gradient,还基于上一次的movement(即上次下滑的gradient),如下:
        这里写图片描述
        这里写图片描述
        Momentum的流程:
        这里写图片描述

###一般化###

  • 万灵丹:
    • 增加更多的training data
    • 产生更多的training data,如旋转等
  • Early Stop(早点停下不迭代到指定的次数,不容易做到)
  • Weight Decay:
    我们在选参数的时候,我们都是根据training-set和cost function来决定,但其实我们更喜欢的是接近0的参数,因为如下情况:
    这里写图片描述
    因此,我们在做learning的时候,我们想要找的不仅仅是一组可以minimizing original cost的parameter,跟是希望parameter趋近于0,如下,定义一个cost function
    这里写图片描述
    接下来我们对新的cost function做偏微分
    这里写图片描述
    这也就是wt+1会小于wt
  • Dropout:
    • 在神经网络中,大规模的神经网络有两个缺点:费时和容易过拟合。而dropout的程序可以很好的解决过拟合问题,每次做完dropout,相当于从原始的网络中找到一个更瘦的网络。
    • dropout就是在每次迭代中,丢弃p%的神经元。
    • 要注意的是如果在training中dropout=0.5,wij = 1,那么在Test中wij应该等于wij = 1(1-0.5) = 0.5*
      因为这个时候的testing中的z这个时候就是training中z的两倍,因此weights就需要乘以(1-dropout)%
      这里写图片描述
    • 为什么dropout的效果更好呢?
      可以将其理解为训练不同的网络后,对不同网络进行集成,虽然从直观上看dropout是集成(ensemble)在分类性能上的一个近似,然而实际中,dropout毕竟还是在一个神经网络上进行的,只训练出了一套模型参数,那么为什么dropout有效呢?因为dropout强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,达到好的效果。消减了神经元节点之间的联合适应性,增强了泛化能力。如下:
      这里写图片描述
      使用一个data训练一个网络,在这个网络中还有参数共享的部分,如果有一共有M个神经元,那么就能构建出2^M个可能的网络。
      这里写图片描述
    • 对于dropout的一些可行性建议:
      • 更大的网络:如果你需要n个神经元,那么对于dropout = p%的网络来说,你的网络就需要n/(1-p)个神经元。
      • 更长的训练时间:
      • 更高得到learning rate:
      • 更大的momentum:
        ###总结###
        这里写图片描述

猜你喜欢

转载自blog.csdn.net/sysstc/article/details/75311310
今日推荐