PS:Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization和Neural Networks and Deep Learning 两门课的课程笔记大纲梳理,我用我觉得的理解进行归类,方面以后查找 ~
神经网络基础
一、以神经网络的结构看逻辑回归
- sigmoid函数
- loss function 损失函数和 cost funcrion 代价函数
- Gradient Descent 梯度下降法
二、向量化(Vectorization)(对应到硬件就是并行计算)
三、广播(broadcasting)
浅层神经网络
一、计算神经网络的输出 (数学角度)
二、向量化实现 (代码实现)
三、激活函数
四、神经网络的反向梯度下降(数学和代码)
五、参数随机初始化
深层神经网络
一、使用深层表示的原因
二、搭建深层神经网络块
三、矩阵的维度
优化(一) — 过拟合
一、数据划分:训练 / 验证 / 测试集(训练之前)
二、模型估计:偏差 / 方差(训练之后,对训练结果的评估)
1.高偏差的解决:
(1)扩大网络规模,如添加隐藏层或隐藏单元数目
(2)寻找合适的网络架构,使用更大的 NN 结构
(3)花费更长时间训练,增加迭代次数
2.高方差的解决:
(1)获取更多的数据
(2)正则化(regularization),防止过拟合
(3)寻找更合适的网络结构
三、解决高方差的方法:正则化(regularization),防止过拟合(对于训练结果不理想的解决方法)
1. L2
加入的正则化项,衰减了W的权重
2. dropout
神经元不会特别依赖于任何一个输入特征。反向随机失活(Inverted dropout)是实现 dropout 的方法。
3.数据扩增(Data Augmentation)
4.早停止法(Early Stopping)
优化(二)— 加快学习的算法
一、对于训练集的处理
Mini-Batch
每次处理训练集的一部分进行梯度下降,避免了遍历完整个训练集才完成一次参数更新
二、初始化参数W、b
在参数W,b初始化时就进行优化,应对反向传播时会出现的梯度消失和梯度爆炸(vanishing/exploding gradient)问题
1.He Initialization
激活函数使用 ReLU 时,Var(wi)=2/n[l-1] He Initialization
2.Xavier initialization
激活函数使用 tanh 时,Var(wi)=1/n[l-1] Xavier initialization
三、反向传播加速梯度下降的过程
1.Momentum
将前几次梯度下降的指数平均作为梯度值来更新参数(避免震荡)
2.RMS Prop
使波动大的维度参数更新慢,波动小的维度参数更新快
3.Adam
将Momentum 和 RMS Prop相结合
四、改变学习率加速收敛
学习率衰减:初期学习率大,梯度下降快,后期学习步长小,有助于收敛至最优解
五、标准化、归一化 Normalization
1.标准化输入(Normalization)
对于输入特征标准化,加快学习速度
2.Batch Normalization
通过对隐藏层各神经元的输入标准化,提高神经网络训练速度
减小不同的样本分布(Covariate Shift )对后面几层网络的影响。样本分布改变,使得前面层的权重变化后,输出Z发生很大变化,但是在Batch Normalization作用下,归一化后的Z分布相比于前一次迭代的归一化的Z,并没有发生很大变化,所以作为这一层的输出,并不会对后面一层的输入的分布产生很大影响,从而减少各层 W、b 之间的耦合性,增强鲁棒性(robust)
(这里表扬一下自己,感觉自己太厉害了,竟然在厕所里想通了Covariate Shift 的意思,哈哈哈~)
Batch Normalization 也起到微弱的正则化(regularization)效果
PS:我老是把Normalization和Regularization弄混淆 ~
超参数调试
1.超参数重要程度排序
最重要:
学习率 α
其次重要:
β:动量衰减参数,常设置为 0.9
hidden units:各隐藏层神经元个数
mini-batch 的大小
再次重要:
β1,β2,ϵ:Adam 优化算法的超参数,常设为 0.9、0.999、10−810−8
layers:神经网络层数
decay_rate:学习衰减率
2.调参技巧
随机选择点进行调试
3.为超参数选择合适调试范围
优化会遇到的问题
一、判断梯度计算是否正确
由于微分分析计算梯度容易出错 ,实际操作时常常将分析梯度法的结果和数值梯度法的结果作比较,以此来检查其实现的正确性
注意:只适用于debug,判断梯度计算是否正确,且不能和dropout同时使用
二、高维度优化遇到的问题
1.低维度:局部最优会阻碍找到全局最优的解
2.高维度:不存在局部最优的阻碍,但是鞍点会降低学习速度,通过Adama算法加速提高效率