Setting up your Machine Learning Application
- Train/Dev/Test sets
总体数量在1000左右时,6:2:2的比例分配Train/Dev/Test sets大小;
总体数量在一百万以上时,98:1:1的比例分配Train/Dev/Test sets大小;
三个数据集需来自相同的分布,Dev/Test数据集大小2000-10000即可,没有test-sets,只有Dev-sets也是可以。 Bias/Variance
Trainset error 1% 15% 15% 0.5% Dev set error 11% 16% 30% 1% high var high bias high bias&high var low bias &low var 训练集有high-bias表现时,延长训练时间,增大网络结构
验证集有high-var表现时,需要更多的数据和正则化处理
Regularizing your neural network
Regularization
L1正则 L2正则
在机器学习或者模式识别中,会出现overfitting,而当网络逐渐overfitting时网络权值逐渐变大,为了避免出现overfitting,会给误差函数添加一个惩罚项,其用来惩罚大的权值。
weight decay(权值衰减惩罚项)使得权值收敛到较小的绝对值,而惩罚大的权值。因为大的权值会使得系统出现过拟合,降低其泛化性能。Why regularization reduces overfitting?
L1正则项是为了使得那些原先处于零(即|w|≈0)附近的参数w往零移动,使得部分参数为零,从而降低模型的复杂度(模型的复杂度由参数决定),从而防止过拟合,提高模型的泛化能力。
L2正则项起到使得参数w变小加剧的效果,但是为什么可以防止过拟合呢?如下图:tanh函数,在0值附近表现为linear,在远离0值的地方更加复杂。一个通俗的理解便是:更小的参数值w意味着模型的复杂度更低,对训练数据的拟合刚刚好(奥卡姆剃刀),不会过分拟合训练数据,从而使得不会过拟合,以提高模型的泛化能力。
Dropout Regularization
神经网络中预防过拟合的方法
- Understanding Dropout
Intuition:Can’t rely on any one features, so have to spread out weights.
不能依赖于某一个特征,所以需要把权重传播。
和L2正则相似,可以防止过拟合,方式不一样。
dropout 也可以应用在input层,但是一般很少这么用,及时用也是设置成0.9,而不可能设置成0.5,因为如果这样,就会丢掉一大半的特征。
在计算机视觉中很常用。 - Other regularization methods
除了L2和dropout以外,数据集增强(data augument):图像左右反转、旋转、扭曲生成新的训练集;stop early等.
Setting up your optimization problem
- Normalizing inputs
为什么要标准化处理,经过标准化处理后保证所有的特征都在一个数量级, cost function 的优化变得更加简单和快速
- Vanishing / Exploding gradients
在很深的网络中,梯度会指数级的增加或减小,即产生梯度爆炸或梯度消失的现象
Weight Initialization for Deep Networks
如果把所有的weights初始值设置为0会导致所有的hidden层计算是完全重复的(forward propagation和backward propagation时,值完全相同),所以需要随机初始化。随机初始化时比较常见的会选择服从正态分布的随机值。
为什么随机值要选的很小比如0.01,而不可以选100之类的数,因为如果weight设为100,z值会很大,经过sigmod后,梯度或者斜率会变得很小,不利于backward propagation。
除了随机初始化,练习里还提到了 He initialization,随机数的范围是上一层网络的节点数量,sqrt(2./layers_dims[l-1])。比如正常是np.random.randn(..,..) by 10,在这里是 2/(dimension of the previous layer)^0.5.
He initialization works well for networks with ReLU activations.Numerical approximation of gradients
- Gradient checking
梯度校验的数值校验公式:
g(θ)≈J(θ+ϵ)−J(θ−ϵ)/2ϵ,常将 ϵ 设为一个很小的常量,比如 10−4 数量级 - Gradient Ghecking Implementation Notes