231N Lec6 课程笔记

来源:互联网 发布:手机怎样举报淘宝卖家 编辑:程序博客网 时间:2024/06/03 12:45

参考:http://m.blog.csdn.net/fffupeng/article/details/73440929 , http://blog.csdn.net/u012767526/article/details/51407443

为什么不能选择一个小的learning rate 来解决SGD的问题:

因为learning rate会作用于各个梯度,竖直方向震荡小了,但是水平方向的进度也慢了。

momentum update理解:

在某个方向上震荡较大的时候,momentum会进行抵消,震荡较小时,momentum update会进行增加。

可以自己进行一两个iteration进行推到。

直观上理解就是,mu*v就是对gradient step进行一个约束。

v 初始化为0

Nesterov Accelerated Gradient :

就是超前一步。可以参考相关论文


AdaGrad:就是对learning rate进行变化

RMSProp:对AdaGrad进行了一些优化

Adam update: 结合了momentum 和 AdaGrad。 m是用了前面梯度的指数和,稳定梯度,这就是momentum的作用。beta1 0.9,beta2 0.995

一般用这个方法。博客详解Adam 方法:http://blog.csdn.net/bixiwen_liu/article/details/52956727


learning rate: 一般用指数衰减

二阶?复杂。




- models ensemble : 就像 w_test = 0.995*w_test +0.005*w. 

     课程里面给的的直观理解就是:比如损失函数是一个碗形函数,你的模型在最小值附近跳动。当你取最小值附近的几个点的加权和时,得到的结果离最小值更进一步

- Regularization: Dropout

     前向反向都必须在同样的位置做dropout。

     减小过拟合

     增加冗余表达,因为不知道下一次会多dropout哪些节点,所以网络就会把权重进行分散。

     或者说因为每一次前向传播都会dropout不同的节点,每一次迭代就是在用不同的mini-batch训练不同的sub-network,通过这样的迭代,最终参数w就是各种sub-network的一种奇怪的组合。

     不同层的的失活数量可以不一样,在CNN中很常见。

     有同学问到了Drop Connect(自己看)

     

     At test time: 所有的神经元都是激活的,所以我们需要给每个神经元的激活函数进行scale,以确保在test的时候输出值和train的时候的期望输出值是相等的。

     实际上更常用的 inverted dropout: 在training的时候,二进制mask就除以p,在test的时候代码不变。

     有同学问到了非线性函数在其中的影响,老师说所以是approximation嘛。


- Gradient Checking

        




原创粉丝点击