CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结

  两层的神经网络
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  可以看到红框内经过了Relu的操作
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  参数经过低度下降进行调整,最终收敛,那么用什么方法进行训练呢?
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  一般用小批处理SGD(mini-batch SGD),这样的方法可以克服BGD(批处理梯度下降)的计算量巨大的缺点,也能加速SGD(Stochastic Gradient Descent)收敛,是一个比较好的这种方法,当然在深度学习的发展过程中又出现了很多其他的优化方法,具体有

  1. 动量方法(Momentum)
  2. Nesterov梯度加速法(NAG)
  3. Adagrad方法
  4. AdaDelta方法
      这里优化方法也是深度学习中的一个很重要的课题。

总览

  1. 首先设置好一次性地参数:
      如activation functions, preprocessing, weight initialization, regularization, gradient checking
  2. 动态训练过程:
      在训练的过程中调节参数,比如自适应的学习率调整。另外还有超参数的优化。
  3. 评估
      model ensemble
    CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结

Activation Functions(**函数)

CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  这同样是一个课题
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结

Sigmoid

  可以看到Sigmoid函数的函数式,将函数范围压缩在[0,1],但是在这个函数有3个问题

  1. 梯度消失问题
  2. Sigmoid的输出不是zero-centered
  3. exp()函数耗费很高的计算力
    CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
      可以看到在很大以及很小的时候梯度已经基本变为0,这样在BP的时候梯度就基本没有了,另外在计算梯度的时候会用到dLdfdfdw,其中L是Loss函数。那么在输入时正数时就会只得到同样符号的梯度,最终会导致梯度下降的方向不规则收敛很慢,如下图。
    CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结

tanh

CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
其函数形式为:tanh(x)=exexex+ex
  它是Sigmoid的一个变形可以看做tanh(x)=2sigmoid(2x)1,并且可以看出该函数是zero-centered的。
  但还是会有梯度消失的问题,实际也并不经常使用此**函数。

Relu

CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  但是当x小于0时会有Dead Relu出现,梯度也会消失。所以初始化时都初始化微小的正数。
  剩下的一些方法基本都是Relu的改良

Leaky Relu

CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结

ELU

CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结

在实践中使用**函数

CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
这里有一篇写的很好的**函数优劣总结的博客

数据预处理

CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  处理数据首先将原始数据经过zero-centered的过程,就是将数据分布调整到从0开始,然后对数据进行正规化。
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  实践中可能用到主成分分析与白化。
但是在对图片进行处理的时候可能会用到将所有的点减去平均值的方法来进行zero-centered的处理。
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结

权重初始化

  当w初始参数全部设置为0的时候,可能bp算法无法进行(因为得到的都是0)。所以很直接的有初始化很小的随机值的想法。
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  但是针对于深度一点的网络来说,这种方法并不可行,因为对于深度的网络来说,每一层的w都很小,到最后基本上wx基本上都是0,也很难再利用bp调整梯度。
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  那么我们调大初始值会发生什么?
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  这里可以看到我们将高斯分布的值乘以1作为初始值,当进行前向传播以及反向传播时最终会饱和,得到1或者-1,这时梯度基本为0,可以说梯度又消失了。这是cs231课程的笔记有推导该初始值的过程
  所以基本都是使用下列方法来进行初始化的。
Xavier initialization可以看做是从标准高斯分布中取出的并且以输入数据进行缩放
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
可以看到在使用Relu的时候这个初始化方式得不到很好的结果
因为Relu会造成一般的神经元‘死掉’所以应该讲刚才除以的规模再缩小为二分之一,得到如下形式。
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
  因此将其改进成上图形式。
这里列出有关初始值的研究如下
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结

批量正规化

CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
这种正规化处理在CNN里面经常用到,通常都是在经过卷积之后。
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
在这里有一个恢复的过程,可以让网络学习γ以及β使得可以恢复称没有经过BN的样子。
  算法步骤
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结

照顾训练过程

CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结
检查loss
CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结

超参数的调节

交叉验证找到最优超参数

CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结

总结

CS231n 2017 Spring Lecture6 Training Neural Networks Ⅰ总结