CS231N 学习笔记 Lecture 5&6 CNN及训练神经
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函数的优缺点 希望输入数据是平均值是zero2)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