文章目录
- 1 Setting up your Machine Learning Application
- 2 Regularizing your Neural Network
- 3 Setting Up your Optimization Problem
- 4 Optimization Algorithm
- 4.1 Mini-batch Gradient Descent
- 4.2 Undnierstanding Mini-batch Gradient Descent
- 4.3 Exponentially Weighted Averages
- 4.4 Understanding Exponentially Weighted Averages
- 4.5 Bias Correction in Exponentially Weigted Average
- 4.6 Gradient Descent with Momentum
- 4.7 RMSprop
- 4.8 Adam Optimization Algorithm
- 4.9 Learning Rate Decay
- 4.10 The Problem of Local Optima
- 5 Hyperparameter Tuning
- 6 Batch Normalization
- 7 Multi-class Classification
1 Setting up your Machine Learning Application
1.1 Train / Dev / Test sets
- 训练集
- hold-out 交叉验证集 -> 开发集 dev set
- 测试集
1.2 Bias / Variance
- 偏差(偏离度)
- 方差(集中度)
1.3 Basic Recipe
- 训练集 -> 高偏差(训练误差) -> 不行 -> 找新的网络 -> 循环得到低偏差
- 开发集 -> 高方差(验证误差) -> 不行 -> 更多数据 / 正则化(减小过拟合) / 新的神经网络 -> 循环得到低方差
- 最终,找到低偏差低方差的网络和数据
改进网络:
- 找到是高偏差的问题还是高方差的问题
- 然后针对性进行上述改进
- 增大网络总能减小偏差而不增大方差(+正则化,代价:计算效率)
2 Regularizing your Neural Network
2.1 Regularization
- 如有w和b,正则化主要是对于w,因为主要的参数在w中,b只是众多参数中的一个,对结果影响不大
- L2正则化,又称为权重衰减
2.2 Why regularization reduces overfitting
为什么正则化可以防止过拟合?
对于上述的例子,要求J最小化,若把正则项
λ
\lambda
λ设置的很大,那么很多
ω
\omega
ω会非常接近于0,这些对应的隐藏单元影响被消除,神经网络被简化为一个非常小的类似与逻辑回归的网络。
从右边high variance到左边high bias,
λ
\lambda
λ存在一个中间值,使得刚好为中间值,just right
λ \lambda λ很大的情况,网络还是网络,只不过相当于只取了中间一部分,接近于线性
即使是很深的网络,每层使用线性激活函数,还是只能计算线性的函数
2.3 Dropout Regularization
随机失活算法
- 常见:反向随机失活(inverted dropout)
描述80%的概率被抛弃
为了保证最后的值变化不大,最后还需要除以(保留的概率,0.8)->解决了网络可能存在的一个缩放问题
2.4 Understanding Dropout
- 任何一个输入上的重量,都可能会消失 -> 分散权重
- Dropout有类似于L2正则化的效果
- 计算机视觉没有足够高的数据 -> 容易过拟合 -> 常用dropout
2.5 Other Regularization Methods
缓解过拟合 -> 扩大数据集 -> 翻转、旋转、缩放
数据增强是一种接近正则化的技术
提前结束训练
3 Setting Up your Optimization Problem
3.1 Normalizing Inputs
归一化:所有维度
避免一个维度变化过小,另一个维度变化过大
第一种需要较小的学习率,第二种都可以
3.2 Vanishing / Exploding Gradients
- Vanishing Gradients:消失的梯度
- Exploding Gradients:爆炸的梯度
本节课主要介绍了这两种梯度的问题,在权重大于1的情况,深层网络的累积,呈指数级增长,爆炸;在权重小于1的情况,深层网络的累积,呈指数级减小,很快趋近于0;
3.3 Weight Initializatiion for Deep Networks
解决部分问题的方法:更好、更细致地随机初始化神经网络
根据数理知识确定的范围,既不会比1大很多,也不会比1小很多,有效缓解梯度问题
3.4 Numerical Approximation of Gradients
梯度的数值逼近
取双侧插值来近似,同时+
ϵ
\epsilon
ϵ和-
ϵ
\epsilon
ϵ,计算大的三角形
3.5 Gradient Checking
用梯度检查调试代码
让估计的值和真值作比较,
- 相距的量级 -> 1 0 − 7 10^{-7} 10−7 -> 好的
- 相距的量级 -> 1 0 − 5 10^{-5} 10−5 -> 可能有错误
- 相距的量级 -> 1 0 − 3 10^{-3} 10−3 -> 应该有错误
用于找出神经网络可能存在的错误
3.6 Gradient checking implementation notes
梯度检测实施笔记
- 不要在训练期间使用(训练太慢了) —— 仅仅在调试debug时
- 如果算法没有通过梯度检测,检查每个组件 例如举例中 d Θ d\Theta dΘ中包含 d b l db^l dbl和 d ω l d\omega^l dωl,可以找到错误实在b层或者 ω \omega ω的某一层
- 记住使用正则化
- 不能和dropout随即失活一起使用(因为dropout随机失活一写节点,对应的代价函数不好求)
- 随机初始化参数w、b是运行,也许经过一会儿训练再开始梯度检测
4 Optimization Algorithm
4.1 Mini-batch Gradient Descent
mini-batch:小批量训练集
一次处理一个小批量而不是整个数据集,比单纯的梯度下降快很多
4.2 Undnierstanding Mini-batch Gradient Descent
两种损失函数的下降曲线,一次导入整体的话,会不断下降,但是mini-batch,总体是下降的,但细节上存在上下起伏
- 批量梯度下降:(全局性好)方向是对的
- 随机梯度下降:(局部性)可能会走错,但最后也能走到附近点,但是不会到达
- 随机 ~ :一次只加载一个,失去向量优势
- 批量 ~ :一次迭代需要较长时间
minibatch size选择,一般是64/128/256/512
4.3 Exponentially Weighted Averages
- Exponentially:指数型
- Exponentially Weighted Averages:指数加权(滑动)平均
例子讲述
背后部分原理
右移动:更大的窗口计算的平均温度
公式
就是指数加权滑动平均
是后续一个超参数的选择,选择红色线最好
4.4 Understanding Exponentially Weighted Averages
根据将后面的式子展开,如果
β
\beta
β为0.9,那么十天后的系数回非常小,故此时式子主要关注前10的天气,后面的影响较小。
ϵ
≈
1
1
−
β
\epsilon \approx \frac{1}{1-\beta}
ϵ≈1−β1,他告诉多少天作为平均气温
优点:存储空间小,只要要一行数字,基于新数值不断更新运算,只需要一行代码即可实现。
4.5 Bias Correction in Exponentially Weigted Average
使滑动平均更加精准
在一个实际例子中,就是如图,如果
β
\beta
β为0.98,正常来说应该得到如绿色这条线,但是实际得到的是紫色这条线(因为前面的没有值嘛/很小,基本只剩下
θ
\theta
θ),我们需要修复它。
除以这个数值,使得整体系数就变大了,因为前面为0,相当于增大了已有的几个的重要性
4.6 Gradient Descent with Momentum
动量梯度下降算法:计算梯度的指数加权平均
比标准梯度下降算法更快
如图所示,纵轴上,平均是0,上下抵消,但是横纵上都偏右,所以平均后的效果更好
最常使用
β
=
0.9
\beta = 0.9
β=0.9,对应的是前10次的平均
4.7 RMSprop
Root Mean Square prop
又称为加速梯度下降
这里dw、db分别是垂直方向何水平方向,实际上它们都是非常高纬度地参数向量
square是因为对导数求了评分,最后取了平方根
一般加上这个
ϵ
\epsilon
ϵ是防止根号地数太小/趋近于0,一般取值
1
0
−
8
10^{-8}
10−8
能降低振荡 -> 故可以使用更大的学习率
4.8 Adam Optimization Algorithm
基于momentum和RMSprop
超参数选择,
α
\alpha
α是在一个范围内试出来的
Adam:adaptive moment estimation
4.9 Learning Rate Decay
学习率变小
将训练epoch作为分母参与进来,这样损失epoch变大,学习率降低,实现动态调整
4.10 The Problem of Local Optima
local optima:局部最优
第一幅图:低维空间人们理解的局部最优
但在高维,如20000维,很难找到每个维度不都是凹/凸函数,更多是像图二的鞍点Saddle point
吴恩达之灵魂画手篇hhhh
停滞区,让训练变得非常缓慢
一般来说,并不会陷入局部最优(数据维数太高,很难满足各个维数梯度都为0,概率很小)
5 Hyperparameter Tuning
5.1 Tuning Process
调整过程
学习速率
α
\alpha
α是最重要的需要调优的超参数
超参数从网格点 -> 随机采样
不知道哪个参数重要,对于情况1,如果参数2不重要,那么训练了25次,才得到5个不同的参数1,但是对于第二种,可以得到25个不同的参数1
区域限定的随机采样,发现右下角三个点效果都不错,就在这块区域附近随机取
5.2 Using an Appropriate Scale to pick Hyperparameters
不是线性尺度随机取值,而应该在对数尺度上随机取值
实现在[a, b]区间内取值的方法以参数
β
\beta
β为例,0.9代表前10天温度的平均
为什么不要线性取值:因为前者变化对结果的影响非常小,而后者可能对结果产生巨大的影响
- 0.999是对前1000的平均
- 0.995是对前2000的平均
5.3 Hyperparameters Tuning in Practice: Pandas vs. Caviar
熊猫 vs 鱼子酱
6 Batch Normalization
批量归一化
- 超参数搜索变简单
- 神经网络更具有鲁棒性
- 超参数选择不那么敏感
- 更容易训练非常深的网络
6.1 Normalizing Activations in a Network
普通的归一化就是减去均值除以方差,神经网络训练的归一化是对神经元
具体实施过程
γ
\gamma
γ、
β
\beta
β是分别执行想要的方差和均值,同时归一化输入和隐藏层
6.2 Fitting Batch Norm into a Neural Network
BN要使用均值和方差归一化之后的z值
用学习率来更新参数
实际使用miniBN
因为BN会让均值为0,所以b就不重要了,加上参数
β
\beta
β用来表示位移
6.3 Why does Batch Norm work?
- 加入BN,虽然输入在变,但是输出的方差1/ β \beta β和均值0/ γ \gamma γ不变
- BN减少输入值变化所产生的问题,使这些值变得稳定
- BN层减小了不同层直接的耦合,允许每一层独立学习
- BN有轻微正则化效果(不是正则化方法)
- 使用更大的mini-batch,可以减小BN正则化效果
综合来说,将BN算法用于隐藏单元激活函数用以加速学习的方法,正则化只是副作用
6.4 Batch Norm at Test Time
批处理:一次性处理一批数据,
μ
\mu
μ和
σ
2
\sigma^2
σ2是在批次上得到的
测试:一次一个实例,测试只用一个实例不合理 -> 通过指数加权平均数来估算,平均数是根据批次算的
保持一个xx加权平均/移动均值来记录每一层的
μ
\mu
μ、
σ
\sigma
σ
最后计算公式
7 Multi-class Classification
7.1 Softmax Regression
一些例子