改善深层神经网络 | 偏差、方差 | |
减少偏差 更大的网络
减少方差 更多数据 正则化 | ||
正则化 (Regularization) | L2正则 ||w||^2,w是高维参数,可以加b,也可以不加
正则化权重lambda过大时,w很小,wx+b接近0,经过激活函数(sigmod/tanh)后,神经网络的效果接近LR
inverted dropout(反向随机失活) d3 = np.random.rand(a3.shape[0],a3.shape[1]) < keep-prob a3 = np.multiply(a3,d3) #a3是隐层单元(hidden units) a3 /= keep-prob (<—保持期望不变) 测试阶段不用dropout dropout之所以有效,是因为随机删除结点后,不能依赖特定的特征,它会压缩结点的权重,类似L2正则的效果。在过拟合的时候使用,通常用在计算机视觉,因为数据样本不够。缺点是使损失函数变得不确定。
数据扩充(data augmentation) 图片旋转变形,扩充训练集
early stopping 验证集误差上升时停止训练 | |
归一化(Normalize) | 梯度下降更快 | |
参数初始化和梯度校验 | 激活函数或者梯度函数指数增长和衰减导致梯度爆炸/消失 exploding gradients vanishing gradients(前面的隐藏层学习速度特别小,难以训练)
神经网络的权重初始化 目标:每一层输出的方差尽量相等,使网络中的信息能更好的流动,不依赖某些结点 w = np.random.randn(input_shape,hiden_shape)/sqrt(input_shape) https://www.cnblogs.com/adong7639/p/9547789.html https://blog.csdn.net/qq_30815237/article/details/88930436
梯度检验 计算前向传播的梯度和反向传播的梯度,有没有明显差别 https://www.jianshu.com/p/26c5ad2be5b1 和dropout不能同时使用 | |
梯度下降优化 | mini-batch | 一个epoch执行多次梯度下降,大数据集下训练速度更快 mini-batch size = m ~~ batch gradient descend 每个迭代训练时间过长 mini-batch size = 1 ~~ stochastic gradient descend 噪声更多,向量化计算的好处丢失 mini-batch 向量化计算;下降速度快
|
momentum RMSprop Adam | 指数加权平均(exponentially weighted average) 近似1/(1-β) 天的移动平均数,β越小,当前参数θ_t的影响越大,一般取0.9
momentum 梯度下降,平滑处理,减小摆动(oscillations)
RMSprop (root mean squre均方根)进一步优化摆动幅度过大的问题,使各方向的摆动幅度都较小
Adam Adam(Adaptive Moment Estimation)算法是将Momentum算法和RMSProp算法结合起来使用的一种算法 | |
| 学习速率 | 衰减学习速率 指数衰减 阶段衰减 |
局部最优 | 高维空间 saddle points 鞍点 > 局部最优 plateaus Adam能更快走出平稳段 | |
超参调试技巧 | 超参数 | 重要性 1.学习速率alpha 2.momentum beta,mini-batch, hidden units 参数重要性不一样,随机取值而不是用网格法(Grid),然后coarse to fine 缩小范围
参数取值范围 hidden units均匀取值,alpha对数坐标轴上均匀取值 |
Batch Norm | batch normalize
| 归一化z还是a,默认z (激活函数之前的值)
归一化为什么有效 1.每一层输出的方差尽量相等,使网络中的信息能更好的流动,不依赖某些结点,梯度下降迭代的更快 2.解决covariate shift问题,减少输入值改变的问题,输入值更稳定,使每层能有独立学习的能力,加快学习速度 3.轻微正则化的作用,mini-batch 执行batch norm,均值方差增加了噪声
测试的时候,均值和方差可以用mini-batch上计算的均值方差指数加权平均 |