李宏毅机器学习——学习笔记(8)Deep Learning

Deep Learning

  • Deep learning的结果不够好,不仅仅是因为over fitting的问题,有可能在training data上的结果就不算很好;如果在testing data上结果不算很好就是over fitting的问题。
  • 解决deep learning 上效果不好的方式对应也有两类解决方式。前两种用于解决在training data上效果不好的问题,后三种用于解决over fitting的问题。
    1. 设计新的activation function

      (1) 由于sigmod函数在较大差别输入的情况下,输出的差别较小,逐层消减影响。所以靠近input layer的几层网络更新速度较为缓慢,而靠近output layer的几层网络更新速度较快,当前几层参数还处于随机数状态时,后面几层就已经收敛了。因而在traning data上表现不佳。
      可以使用ReLu(Rectified Linear Unit) function来代替,ReLu的计算更快,可以看作不同bias的sigmod函数结合,更重要的是可以解决传统激活函数的梯度下降速率不一致的问题。
      李宏毅机器学习——学习笔记(8)Deep Learning_第1张图片
      (2)Maxout函数是一种可以自主学习激活函数的一种函数,由多段的线性函数所组成,Relu函数只是其中的特例。
      李宏毅机器学习——学习笔记(8)Deep Learning_第2张图片
      虽然maxout函数不是所有的地方都可以求导,但是在给定输入的情况下,这个网络就是一个线性函数,可以直接进行gradient descent。对于不同的example,训练不同网络上不同连接线上的权重,所以可以达到对整个网络进行训练的结果。

    2. 自适应的learning rate:

      (1)RMSProp:由于loss函数是比较高维的函数,在每个参数上loss的变化情况很难被刻画出来,有的时候需要较大的learning rate去跨越“峡谷”,有的时候又希望是较小的learning rate。
      李宏毅机器学习——学习笔记(8)Deep Learning_第3张图片
      (2)在原来gradient descent的基础上,加入“惯性”这个指标,将前一次gradient descent的指标考虑进去,希望能够跨越小的“峡谷和平原”。
      李宏毅机器学习——学习笔记(8)Deep Learning_第4张图片
      实现过程与蚁群算法有点相似,考虑这一次的gradient descent方向和上一次的更新方向,得到这一次的更新方向。其中adam是RMSprop和Momentum的结合。

    3. 解决overfiting的三种方式:

      (1)Early Stopping:使用validation set来实现这一操作。当validation set上的performance变差的时候,我们就停止训练。
      李宏毅机器学习——学习笔记(8)Deep Learning_第5张图片
      (2)Regularization:在loss后面加上正则项,去除无用链接,防止模型随着输入的变化而波动过大。
      李宏毅机器学习——学习笔记(8)Deep Learning_第6张图片
      每一次的更新过程都是让w乘以一个小于1的值,如果该参数对模型的loss没什么影响,当迭代次数逐渐增加的时候,w的值就去趋近于零了。
      李宏毅机器学习——学习笔记(8)Deep Learning_第7张图片
      L2范式和L1范式不一样的地方在与,L2范式上是乘性惩罚,对较大参数惩罚较大,而L1范式对于每个参数都是加减同样的值。因而L2范式得到的值都趋近于0,而L1范式得到的参数值可能差距较大。
      (3)Dropout:指的是在进行training之前,对每次的mini-batch都会先随机抽取一些neuro消失,且与之连接的weight也失去作用了,从而使得网络的结构发生变化。在testing的时候,是不进行dropout的,但是如果training的时候p%的概率dropout,那个每个weight要乘以(1-p%)。

      为什么要乘以(1-p%)呢?因为训练过程中,只有少部分的weight被用得到目标预测值,所以真正testing的时候,如果用所有的权重,所得到的结果会大于目标值,让权重乘以(1-p%)为了将权重削弱,让最终的结果接近于目标值。

      dropout 是ensemble的一种极致表现,每一个mini_batch训练一种neural network,由于不同的neural network上的参数是共享的,因而不用担心一个mini_batch训练不了一个neural network的问题。而且在testing data上,不是所有的neural network上得到的结果求平均,而是将所有的weight乘以(1-p%),所得到的值就约等于平均值。这种方式只有在linear的情况下才成立,在有non-linear(例如,sigmod函数)的情况下是不成立的。但是dorpout依然有作用。

你可能感兴趣的:(李宏毅机器学习——学习笔记(8)Deep Learning)