1.深度学习的实践层面

1.1 训练集 开发集 测试集

开发集(验证集):dev set 用来做交叉验证,检验不同的模型算法哪种最有效,最终我们的目的就是费尽全力改善模型在开发集上面的性能!

合理的调整这三个集合的比例,对模型整体至关重要。

样本很小的时候,开发集和测试集可以各占20%

样本很大的时候 比如100w的数据集,开发集和测试集的比例可以降低到很低,比如各占1%

后续会讲解更详细的确定比例准则。

经验:用到大量爬虫数据的时候。确保开发集和测试集数据分布相同

1.2 偏差Bias 方差Variance

预备基础知识:

欠拟合过拟合:

【小萌五分钟】机器学习 | 鱼与熊掌 Tradeoffs: 前置小知识点之欠拟合(underfitting)&过拟合(overfitting)_哔哩哔哩_bilibili

偏差方差:

偏差: 预测值的数学期望与真实值之前的差值

方差:预测值和真实值的差值的平方和的和 除个5 就是方差。

假定训练集误差是 1% ,为了方便论证,假定验证集误差是 11% ,可以看出训练集设置
得非常好,而验证集设置相对较差,我们可能过度拟合了训练集,在某种程度上,验证集并
没有充分利用交叉验证集的作用,像这种情况,我们称之为 高方差 。(也就是过拟合)

假设训练集误差是 15% ,我们把训练集误差写在首行,验证集误差是 16% ,假设该案例
中人的错误率几乎为 0% ,人们浏览这些图片,分辨出是不是猫。算法并没有在训练集中得
到很好训练,如果训练数据的拟合度不高,就是数据欠拟合就可以说这种算法偏差比较高
相反,它对于验证集产生的结果却是合理的,验证集中的错误率只比训练集的多了 1% ,所
以这种算法偏差高,因为它甚至不能拟合训练集,但是方差低。

总结:
偏差:训练集可以看出算法是否拟合训练数据,总结出是否有偏差。

方差:当完成训练集训练,开始使用验证集验证时,我们可以判断方差是否过高,从训练集
到验证集的这个过程中,我们可以判断方差是否过高。(Dev set和train set之间的差)

1.3 机器学习的基本配方

1.先看有没有高偏差 --看train set表现

有的话就换更大的网络(更多隐藏层更多隐藏单元)或者别的算法 或者训练时间更长

2.看看有无方差问题

有的话引入更多数据 或者正则(可以减少过拟合问题)

3.Done

1.4 正则化

正则化参数: 在逻辑回归函数中加入正则化,只需添加参数 λ
Python 编程语言中, 𝜆 是一个保留字段,编写代码时,我们删掉 𝑎 ,写
𝑙𝑎𝑚𝑏𝑑 ,以免与 Python 中的保留字段冲突,
对参数w正则:
因为 𝑤 通常是一个高维参数矢量,已经可以表达高偏差问题, 𝑤 可能包含有很多参数,
我们不可能拟合所有参数,而 𝑏 只是单个数字,所以 𝑤 几乎涵盖所有参数,而不是 𝑏 ,所以不用对b正则。
L2正则化:
神经网络中实现L2正则化:
使用L2正则化实现梯度下降:

1.5 为什么正则化能防止过拟合

就会导致很多隐藏单元的影响变得微乎其微。

另一个例子:

tanh函数。

1.6 dropout正则化(随机失活)

之前介绍了L2正则,这里介绍另一种正则。

工作原理:

随机让节点失活,清除这些节点上的计算。这样我们实际上计算的就是一个小的多的神经网络。

反向随机失活:

它表示保留某个隐藏单元的概率,此处 keep-prob 等于 0.8
它意味着消除任意一个隐藏单元的概率是 0.2 ,它的作用就是生成随机矩阵

1.7 理解随机失活

意义就是:我用紫色圈起来的这个单元,它不能依靠任何特征,因为特征 都有可能被随机清除,或者说该单元的输入也都可能被随机清除。

总结一下,如果你担心某些层比其它层更容易发生过拟合,可以把某些层的 keep-prob
值设置得比其它层更低,缺点是为了使用交叉验证,你要搜索更多的超级参数,另一种方案
是在一些层上应用 dropout ,而有些层不用 dropout ,应用 dropout 的层只含有一个超级参
数,就是 keep-prob
但要牢记一点, dropout 是一种正则化方法,它有助于预防过拟合,因此除非算法过
拟合,不然我是不会使用 dropout 的,所以它在其它领域应用得比较少,主要应用于计算机 视觉领域

1.8 其他的正则化方法

早终止法

1.9 归一化输入

输入特征取值范围差异很大的时候需要用到归一化输入,如其中一个从 1 1000,另一个从 0 1,这对优化算法非常不利。使用归一化输入,可以大大加速神经网络的计算。

归一化需要两个步骤:

1.零均值

2. 归一化方差;

1.10 梯度消失和爆炸

权重W在深层神经网络意义重大,会让激活函数a指数级爆炸增长或者指数级递减.

1.11 神经网络的权重初始化

通用初始化公式:

1.12 梯度的数值近似

梯度检验使用双侧差值:

1.13 梯度检查

损耗函数J 最终可以转换成相对于sita的函数。

dsita同理,dsita维度和sita相同。 dsita是代价函数J的梯度(斜率)

针对sita的所有分量sitai都按照上图方法计算一遍,最后得到两个向量。

10-5需要仔细检查向量的每个分量。

1.14 梯度检查实施须知

1. 不要在训练中使用梯度检验,它只用于调试---因为实在是太慢
2. 如果算法的梯度检验失败,要检查所有项,检查每一项,并试着找出 bug
一旦dsitaapprox和dsita差值过大如何处理:
检查不同的i值,看看哪些i的时候sitaapprox和dsita差值特别大
3.如果使用正则项,别忘了代价函数J要带着正则项计算
4. 梯度检验不能和随机失活一起使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值