七月算法深度学习笔记5--CNN训练注意事项与框架使用

这套笔记是跟着七月算法五月深度学习班的学习而记录的,主要记一下我再学习机器学习的时候一些概念比较模糊的地方,具体课程参考七月算法官网:

http://www.julyedu.com/ 

 

1. 神经网络的训练

1.1 Mini-batch SGD

不断循环:
1  采样一个batch数据(比如32张,可以做镜像对称)
2  前向计算得到损失loss
3  反向传播计算梯度(一个 batch上的)
4  用这部分梯度迭代更新权重参数

未必找到全局最优,但是会找到相对好的解

1.2 两种方法去均值:

Subtract the mean image (mean image=[]32,32,3 array) 对一幅图像求均值

Subtract per-channel mean(mean along each channel = 3 numbers)对每个通道分别求均值

不要做标准化,PCA,和白化。

1.3 权重初始化

a. 为什么W不初始化为0? 使得每层的Input都相等(对称性)。传回的梯度也相等,使得网络中每个神经元学到同样的内容。而我们需要每个神经元学不同的东西

b. 用非常小的随机数初始化权重(eg.高斯分布), 希望W中正数和负数比例为1:1.(避免权重向某一侧倾斜)

   对于层次不深的网络OK

   深层网络容易带来整个网络(激活传递)的不对称性

c .

从图上可以看到,第一层的输出呈现高斯分布,而后面几层的输出均值和方差均趋近于0.

如果很小的值不行,那么很大的值可不可以。


均值和方差频繁波动。输出不是1就是-1

可以看到这种方式不适合训练深度网络

c . Xavier Initialization



我们希望输出的方差和输入层的方差基本一致。

这中方式在提出ReLU后就不好用了。


后续的做法:


其取值将原来sqrt(n)换成sqrt(n/2)


1.4 .后来谷歌提出的方式:关于Batch Normalization

如何约束W.
  期望激励过后的结果是高斯分布的,那我们就手动修一下


做法:




关于Batch Normalization好处
    梯度传递(计算)更为顺畅
    学习率设高一点也没关系
    对于初始值的依赖减少了!!!
    说起来,其实这里也可以看做一种正则化,减少了对dropout的需求。


1. 5. 训练时注意事项

构建简单网络验证搭建是否正确

先把正则化调小,观察是否loss下降


监控一下loss


通过准确率看看网络大小是否设置合适


2. Dropout

神经网络的正则化方式:别一次开启所有学习单元


随机关闭一些神经元。

简单的实现方式:


设置阈值。

2.2 为什么能防止过拟合?
    别让你的神经网络记住那么多东西(知道你记忆力好)
    就是一只猫而已,要有一些泛化能力


另外的理解方式:
   每次都关掉一部分感知器,得到一个新模型,最后做融合。不至于听一家所言。



参考资料:

七月算法:http://www.julyedu.com/

图片来自于课程PPT



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值