1.1 训练/开发/测试集
小数据的时候我们一般7 3分,或者6 2 2分,但是大数据后,我们只需要其中的一部分作为验证机和测试集
![](https://i-blog.csdnimg.cn/blog_migrate/a582a7a4537ed119f93c0c0f346fa76d.jpeg)
有一条经验法则,尽量确保你的训练集和测试集来自同一分布
1.2 偏差与方差
从做左右是高偏差(欠拟合),ok,高方差(过拟合)
![](https://i-blog.csdnimg.cn/blog_migrate/7e2a7c43effb716f9a40f838f79cdc6c.png)
列举了一些可能情况
高方差,过拟合,训练误差小,测试误差大
高偏差,欠拟合,训练误差大,测试误差大
![](https://i-blog.csdnimg.cn/blog_migrate/08ccb480b47605207ddd684447c6671d.jpeg)
高方差,高偏差图上表示为一部分过拟合,一部分欠拟合
![](https://i-blog.csdnimg.cn/blog_migrate/58a6e5ea8a64f97908121ecc4e73bc1c.jpeg)
,偏差是机器学习模型中预测值与实际值之间的差异,而方差则是这些预测值的分布情况。
偏差:泛华误差的这部分误差是由于错误的假设决定的。例如实际是一个二次模型,你却假设了一个线性模型,一个高偏差的模型最容易出欠拟合
方差:这部分误差由于模型对微小变化较为敏感,一个多自由度的模型更容易有高的方差(例如高阶多项式)因此容易过拟合
1.3机器学习基础
(1)如果高偏差,即欠拟合(针对训练误差):可以A:增加更多的特征个数 B:使用更复杂的模型,使用更复杂的网络 C:新的激活函数 D 自适应学习率
(2)如果高方差,即过拟合(针对测试误差):可以A:增加更多的数据 B:正则化 C:早停 D:dropout
1.4 正则化
L2范数
在损失函数加上超参数乘以L2范数
![](https://i-blog.csdnimg.cn/blog_migrate/228cb0dea24a59d94e3192e6b2cc0125.jpeg)
加上L2范数后的梯度更新公式,最后在权重前面加了个小于1的参数,那么每次迭代权重都会逐渐变小,所以也叫权重衰减
![](https://i-blog.csdnimg.cn/blog_migrate/efbd7410a7147aa65546fe2fb11460d4.jpeg)
why?
更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。
L1范数
![](https://i-blog.csdnimg.cn/blog_migrate/f8e31ab8247360ac46a3799165c7b229.jpeg)
比原始的更新规则多出了η * λ * sgn(w)/n这一项。当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。
1.5 为什么正则化可以减少过拟合
说法一
箭头的方向就是lamda逐渐变大,w逐渐变小的过程
![](https://i-blog.csdnimg.cn/blog_migrate/469cd1cc86606f1db875ea5009fbe48f.jpeg)
说法二
以tanh激活函数为例,因为lamda变大,w变小,导致输入到激活函数的值z变小,整体函数近似线性,线性函数模型简单。
![](https://i-blog.csdnimg.cn/blog_migrate/30b166ccf22d48dfe9150a107967f11e.jpeg)
L1比L2更容易获得稀疏解
A:图表解释
首先我们要明白,L1或L2等值线上与平方误差等值线相切的点,是该等值线上可以使总损失函数最小的点。理由,我们那图中L1举例,任取一点w2和相切点w1,
![](https://i-blog.csdnimg.cn/blog_migrate/8ae389d61863c11a1f2867cc19fa37cd.jpeg)
w1损失=w1平方误差+w1 L2函数值
w2损失=W2平方误差+ w2 L2函数值
因为处于等值线上,所以L2函数值是相等的。但是w1平方误差<w2平方误差,所以相切点总损失函数最小
然后,我们通过图表就可以发现,平方损失函数与两个损失函数相切点,L1更容易使0点,即更容易稀疏
B:公式解释b
假设只有一个参数为w,损失函数为L(W),分别使用L1正则化和L2正则化的导数分别为
J
L
1
(
w
)
=
L
(
w
)
+
λ
∣
w
∣
J_{L1}(w)=L(w)+\lambda|w|
JL1(w)=L(w)+λ∣w∣
J
L
2
(
w
)
=
L
(
w
)
+
λ
w
2
J_{L2}(w)=L(w)+\lambda w^2
JL2(w)=L(w)+λw2
假设L(W)在0处的导数为
d
0
d_{0}
d0 ,即
(
∂
L
(
w
)
∂
w
)
w
=
0
=
d
0
(\frac {\partial L(w)} {\partial w})_{w=0}=d_0
(∂w∂L(w))w=0=d0,分别使用L1正则和L2正则化的导数
L2正则化在0处的导数
(
∂
L
2
(
w
)
∂
w
)
w
=
0
=
d
0
+
2
λ
w
=
d
0
(\frac {\partial L2(w)} {\partial w})_{w=0}=d_0+2\lambda w=d_0
(∂w∂L2(w))w=0=d0+2λw=d0
L1正则化在0处的导数:
(
∂
L
1
(
w
)
∂
w
)
w
=
0
−
=
d
0
−
λ
(\frac {\partial L1(w)} {\partial w})_{w=0^-}=d_0-\lambda
(∂w∂L1(w))w=0−=d0−λ
(
∂
L
1
(
w
)
∂
w
)
w
=
0
+
=
d
0
+
λ
(\frac {\partial L1(w)} {\partial w})_{w=0^+}=d_0+\lambda
(∂w∂L1(w))w=0+=d0+λ
可见,引入L2正则时,代价函数在0的导数仍是d0,无变化。而引入L1正则化后,代价函数在0处的导数有一个突变,如果d0−λ<0,d0+λ>0,则在0处会是一个极小值点,因此优化时,很可能优化到该极小值电商,即w=0处
这里只解释了只有一个参数的情况,如果有更多的参数,也是类似的,因此用L1正则更容易产生稀疏解。
1.6 dropout正则化
dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。
1.7 理解dropout
说法一
下图,紫色点这个神经元,不愿意把赌注放给任意输入(或特征),因为他们随时可能被删除,不愿给任何一个输入加上太多权重,因此该单元通过这种方法积极的传播开来,并为四个输入增加一点权重,通过传播所有权重,dropout将产生收缩平方范数的效果
![](https://i-blog.csdnimg.cn/blog_migrate/95074f0b10c7ec1b32d1e295e7a5f5c7.jpeg)
说法二
![](https://i-blog.csdnimg.cn/blog_migrate/81ed5f013dc4de3e37cb5d301b475aec.jpeg)
1.8其他正则化方法
- 数据增强
- 早停技术,不用向L2正则化那样去尝试大量lamba参数
1.9正则化输入
训练神经网络,其中一个加速训练的方法就是归一化输入
数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在一些数据比较和评价中常用到。典型的有归一化法,还有比如极值法、标准差法。
归一化方法的主要有两种形式:一种是把数变为(0,1)之间的小数,一种是把有量纲表达式变为无量纲表达式。在数字信号处理中是简化计算的有效方式。
归一化处理的好处:
1 加快梯度下降的求解速度,即提升模型的收敛速度
两个特征区间相差非常大时,如左图中的x1[0-2000]和x2[1-5],形成的等高线偏椭圆,迭代时很有可能走“之字型”路线(垂直长轴),从而导致需要迭代很多次才能收敛。
而右图对两个特征进行了归一化,对应的等高线就会变圆,在梯度下降进行求解时能较快的收敛。
因此在机器学习中使用梯度下降法求最优解时,归一化也很有必要,否则模型很难收敛甚至有时不能收敛。
![](https://i-blog.csdnimg.cn/blog_migrate/081e91657a1f8532b77a6660922ae779.jpeg)
2 有可能提高模型的精度
一些分类器需要计算样本之间的距离,如果一个特征的值域范围非常大,那么距离计算就会主要取决于这个特征,有时就会偏离实际情况
标准化/归一化处理的类型及含义:
- 线性归一化(min-max normalization)
x ′ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x'=\frac{x-min(x)}{max(x)-min(x)} x′=max(x)−min(x)x−min(x)
这种归一化适合数值比较集中的情况,缺陷就是如果max和min不稳定,很容易使得归一化结果不稳定,使得后续的效果不稳定,实际使用中可以用经验常量来代替max和min。 - 标准差标准化(z-score standardization)
x ′ = x − u σ x'=\frac{x-u}{\sigma} x′=σx−u
经过处理的数据符合标准正态分布,均值为0,标准差为1。 - 非线性归一化
经常用在数据分化较大的场景,有些数值大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括log、指数、反正切等。需要根据数据分布的情况,决定非线性函数的曲线。
log函数:x = lg(x)/lg(max);反正切函数:x = atan(x)*2/pi
梯度消失和梯度爆炸
![](https://i-blog.csdnimg.cn/blog_migrate/3163a90571d74d58f333daae8a1deb31.jpeg)
如上图所示的网络结构,我们在进行反向传播更新w1权值的时候,公式如下
![](https://i-blog.csdnimg.cn/blog_migrate/5a3417cd9241da723c784b2f3df32521.jpeg)
sigmod函数导数如下图所示
从图中可以看出最大值是0.25,所以存在一下两种现象
![](https://i-blog.csdnimg.cn/blog_migrate/baaa10052f2d1b66ebe381b2e30f83ba.jpeg)
ReLu函数
relu函数解决问题的方式很简单,如果偏导数是1的话就不存在爆炸与消失的问题了,relu函数图像如下
![](https://i-blog.csdnimg.cn/blog_migrate/8515f1261c2475391d1b3ab47d5120e4.jpeg)
从上图中,我们可以很容易看出,relu函数的导数在正数部分是恒等于1的,因此在深层网络中使用relu激活函数就不会导致梯度消失和爆炸的问题。
神经网络权重初始化
#梯度的数值逼近
假设导函数是3 theta 平方,如果使用单边求导,误差是0.3
![](https://i-blog.csdnimg.cn/blog_migrate/475bed4290ca84e03d66f2cb858bb7b2.jpeg)
如果是双边误差,误差是0.0001
![](https://i-blog.csdnimg.cn/blog_migrate/dafc4c8cd522e5a15f85df4967bb1bdd.jpeg)
#梯度检验
#梯度检验笔记
参考文献
- https://zhuanlan.zhihu.com/p/21560667?refer=intelligentunit