CS231N 学习笔记 Lecture 5&6 CNN及训练神经

2018-01-08  本文已影响0人  best___me

Lecture5:CNN

1. 卷积层:

卷积核的深度与原图相同

卷积层:感觉这里写错了,应该是6个5x5x3的卷积核

使用的激活函数:ReLU,多层卷积

第一层卷积是获取低级特征,例如边界;之后的mid-level获取更复杂的功能,例如拐点和斑点;之后的卷积层获取高级特征。

卷积之后的大小

N是输入,F是filter,stride是步长

padding:原因---保持与以前相同的输入大小

使用0去填充图片的边界

卷积层的总结:

 biases的个数和卷积核的总数相同

2. Pooling Layer

使得representation更小,更容易管理,分别处理每个activation map。深度不受影响

max pooling:

下采样:对于一个样值序列间隔几个样值取样一次,这样得到新序列就是原序列的下采样。

不使用zero padding

常用设置:

3.  全联接层

拉伸成一个向量

常见结构:

Lecture 6:训练神经网络1

随机梯度下降

1. 激活函数:

1) sigmoid

sigmoid:输出为0到1之间   作为“firing rate”。问题:1)饱和神经元“杀死”梯度(例如x为10或-10时),2)不是zero-centored 3)计算困难

sigmoid函数的优缺点 希望输入数据是平均值是zero

2)tanh

tanh的优缺点

3)ReLU

不会饱和,计算方便,更快收敛,与sigmiod的计算很接近。 -10 梯度为0,0的梯度也为0

ReLU的优点缺点

可能有些权重不会更新

4)Leaky ReLU

5)ELU

6) Maxout

实际使用建议:

2. Data Preprocessing

1)zero-mean  2)Normarlize规范化

协方差矩阵是一个单位矩阵

训练过程和测试过程使用同样的数据预处理

3. Weight Initialization

W初始化为0,没有gradient传播,因为隐层节点之后的所有数值均为0。非常不可取,永远不要用。

方法1: small random numbers

small random numbers

对于更深层的网络:all activations become zero

如果将W设置为1而不是0.01,那么很容易饱和

一种好的初始化方法:

使用linear activations

然而当使用ReLU时会出现问题,

解决ReLU这个问题的方法:

关于初始化的相关论文:

4. Batch Normalization

计算该批次内的均值和方差

通常跟在全连接层后:

然而非线性层是否需要单位高斯输入呢?可以控制。。。挤压或者缩放

希望给数据更多的灵活性,而不仅仅是单位高斯 算法

gamma和beta是学习参数。。。并没有失去数据的结构

测试阶段不同:

5. Babysitting the learning process

第一步,preprocessing data 第二步,选择网络结构

确保loss是正确的,接着从很小的训练集开始训练,查看模型是否正确,接着使用全部的数据,增加小的正则化项,然后找到能使得loss递减的学习速率。

如果loss基本不变,可能是学习速率太小。。。

获得nan cost,说明爆炸啦!学习速率太大

6. Hyperparameter Optimization

使用交叉验证

可能原因:bad initialization
上一篇下一篇

猜你喜欢

热点阅读