训练、验证、测试
划分的量
- If size of the dataset is 100 to 1000000 ==> 60/20/20
- If size of the dataset is 1000000 to INF ==> 98/1/1 or 99.5/0.25/0.25
要保证数据来自一个分布
误差方差分析
若是存在high bias
- 尝试用更大的网络
- 尝试换一个网络模型
- 跑更长的时间
- 换不一样的优化算法
若是存在high variance
- 收集更多的数据
- 尝试正则化方法
- 尝试一个不一样的模型
通常来讲更大的网络更好git
正则化
正则化减小过拟合的intuition
太大会致使其为0github
Dropout
- 原始的dropout

- Inverted Dropout
咱们稍微将 Dropout 方法改进一下,使得咱们只须要在训练阶段缩放激活函数的输出值,而不用在测试阶段改变什么。这个改进的 Dropout 方法就被称之为 Inverted Dropout 。比例因子将修改成是保留几率的倒数,即
dropout分析
- 由于咱们不可以过度依赖一个特征,dropout能够必定程度将权重分出去
- 咱们能够在不一样的层设置不一样的dropout
- 输入层的dropout应该接近1,由于咱们须要从中学习信息
- CNN中dropout普遍应用
- dropout带来的问题是调试困难,一般咱们须要关掉dropout调试,确认无误再继续用dropout
其它正则化方法
数据增长(data augmentation)
就是经过一些变换获得新的图片(这种实际上是在图像领域最为普遍应用,可是思想能够推广)算法
early stopping
就是在迭代中选择验证错误再也不下降的点
好处是不用调超参,坏处是it makes us think about something else more than optimize W's and b's.网络
ensemble
训练多个模型,组合
能够带来2%左右的提高,减小泛化偏差dom
归一化输入
归一化能够加速训练
归一化的步骤
- 计算均值
- 全部数据减去均值
- 计算方差
x/=variance
归一化应该应用于:训练、验证、测试
梯度消失/爆炸
这是训练深度学习难的一个点svg
权重初始化
是解决梯度消失/爆炸的一个部分的解决方案
对于sigmoid和tanh函数
np.random.rand(shape)*np.sqrt(1/n[l-1])
对于relu学习
np.random.rand(shape)*np.sqrt(2/n[l-1]) #n[l-1] In the multiple layers.
一个方差是
,另外一个是
测试
经过数值近似计算梯度
优化算法
mini-batch
- 为了利用向量化,batch大小应该是2的指数
- 注意CPU/GPU内存大小
momentum
计算权重的指数加权平均
优化
RMSprop
Root mean square prop
使用这个算法能够选择较大的学习率
Adam
Adaptive Momentum Estimation。其实就是把rmsprop和momentem放一块儿了,另加了一个纠正
其中推荐
,
,
深度神经网络中的主要问题不是局部最小点,由于在高维空间中出现局部最优的可能性很小,可是很容易出现鞍点,鞍点会致使训练很慢,因此上面的几个方法会颇有用
调参
顺序
Learning rate.
Mini-batch size.
No. of hidden units.
Momentum beta.
No. of layers.
Use learning rate decay?
Adam beta1 & beta2
regularization lambda
Activation functions
批规范化Batch Normalization
能够加速训练
和前面的对于输入数据的处理不同,这里考虑的是对于隐层,咱们可否对A[l]进行操做,使得训练加快。
这里
和
是参数
解决了梯度弥散的问题
批规范化其实作了一点正则化的工做,若是你但愿减弱这种效果能够增大批大小。
测试用须要估计均值和方差
Reference
https://github.com/mbadry1/DeepLearning.ai-Summary