据悉个人口味做了删除)

(本文是基于
neuralnetworksanddeeplearning
那本书的第二章Improving the way neural networks
learn
重整而成的读书笔记,按照个人口味做了删减)

Regularization

上一章,我们学习了鼎新互连网陶冶的代价函数:交叉熵函数。今日要介绍神经互联网不难遇到的过拟合(overfitting)题目,以及缓解的法门:正则化(regularization)

L2 Regularization

在cost function后加一个L2范数项(对于矩阵来说为Forbenius norm,为\(\sum\limits_k\sum\limits_j
W_{k,j}^{[l]2}\)),L2正则化后的cost function变为:

\[J_{regularized} = \small
\underbrace{-\frac{1}{m} \sum\limits_{i = 1}^{m} \large{(}\small
y^{(i)}\log\left(a^{[L](i)}\right) + (1-y^{(i)})\log\left(1-
a^{[L](i)}\right) \large{)} }_\text{cross-entropy cost} +
\underbrace{\frac{1}{m} \frac{\lambda}{2}
\sum\limits_l\sum\limits_k\sum\limits_j W_{k,j}^{[l]2}
}_\text{L2 regularization cost} \]

L2正则化有时候也被称之为“weight
decay”(权重衰减),那是因为指点权值W更新的公式后,可以发现相当于每回换代权重都将其乘上一项$
1 – \frac{\alpha \lambda}{m} $。

L2正则化器重于这般的比方,即怀有小权重的模子比有所大权重的模型不难。由此,通过查办开销函数中权重的平方值,可以决定全数权重值较小。那使得模型越发平整,随着输入改变,输出变化更慢。

\(\lambda\)是一个足以调节的超参数,L2正则化使得模型尤其平缓。尽管\(\lambda\)过大的话,会使得模型过于平滑,恐怕使得bias增大。

贰个小的tip:在利用了正则化之后,大家修改了cost
function,加上了正则化项,大家在debug时绘制cost
function图像时,也应该带上这一项,否则看到的cost
function只怕不是连绵不断减弱的。

过拟合

Dropout Regularization

在每一步迭代中随机关闭部分神经元。

怎么着运用dropout呢?

在迈入传播中,大约包蕴4步。

  1. 设置一和\(a^{[1]}\)的样子一样的变量\(d^{[1]}\),使用np.random.rand()获得0~1之间的数。还要采用到向量化,创立3个随便矩阵\(D^{[1]} = [d^{[1](1)} d^{[1](2)} …
    d^{[1](m)}]\),和\(A^{[1]}\)的维度相同。
  2. 使用 X = (X < 0.5)keep_prob值,使得\(D^{[1]}\)在1-keep_prob)的只怕性下为0,在keep_prob的只怕性下为1。
  3. \(A^{[1]}\) = \(A^{[1]} * D^{[1]}\)
  4. inverted dropout,\(A^{[1]}\) 除以
    keep_prob,有限襄助cost的值不受使用dropout的熏陶。

在向后传出中,包含2步。

  1. 在前行传播中,对A1使用了mask \(D^{[1]}\)关闭了一点神经元,在向后传出总计dA1时,应关闭同样的神经细胞,因而对dA1也使用mask
    \(D^{[1]}\)。
  2. dA1除以keep_prob,因为微积分中一旦\(A^{[1]}\) 缩放了keep_prob,
    然后它的微分 \(dA^{[1]}\)
    也被缩放了keep_prob

在测试时,不要使用dropput。因为测试时,并不想要得到随机的展望结果。

怎么样知道dropout呢?

从全体上看,每一步迭代都关闭部分神经元,那样每一步训练中,实际上都在操练的更简便易行的神经互联网。

从单一神经元的角度出发,由于它上一层的神经细胞的输入会随便被屏弃一些,因而它不大概完全依靠于任何3个特色,所以权重就辅助于分散,即给每三个输入特征的权重都较小,那样达到了和L2正则化类似的机能。

keep_prob的值应根据各层神经元的各数设置,对于神经元数目相比较多的,设置更小的keep_prop值,因为神经细胞数目多的层数更便于过拟合,假如对不相同层设置不一致的keep_prop值,也有2个弱点就是超参数的多寡增添的话运维只怕会更慢。寻常对于输入层一般不行使dropout。

在处理器视觉领域,由于天性维度很大,往往都无法有充裕的多寡,由此利用dropout大约成为暗许,不过任何世界就不肯定如此。

dropout还有1个瑕疵在于,由于自由舍弃使得cost
function的概念不那么肯定,由此无法用绘图法举行梯度下落检测。因而须要先把dropout关闭之后进展梯度下跌检测确保递减,再参预dropout。

过拟合现象

在询问过拟合那个标题从前,我们先做个试验。

比方大家拔取3个有 30 个隐藏层,23860 个参数的网络来预测 MNIST
数据集。不过,我们只用数据集中的 1000张图纸展开陶冶。练习进度和过去同等,代价函数采纳接力熵函数,学习率 \(\eta = 0.5\),batch 大小为 10,并且锻炼400 轮。

下图是磨练进度中 cost 的变迁:

图片 1

能够观看,cost
是在逐步变小的。不过那是还是不是意味着网络被教练得越来越可以吗?大家来探望每一轮的准确率情形:

图片 2

在大约 280
轮练习从前,互连网的准确率确实在放缓上涨,但从此,大家看出,准确率基本没有大的改革,始终维持在
82.20 上下。这和 cost
下落的图景是反其道而行之的。那种看似赢得陶冶,其实结果很差的情况,就是过拟合(overfitting)

并发过拟合的来头在于,互连网模型的泛化能力很差。也等于说,模型对教练多少的拟合程度非凡好,但对未见过的新数据,就差了一些没什么拟合能力了。

要更进一步精晓过拟合现象,我们再来看看其余实验。

下图是陶冶进度中,在测试数据上的 cost(此前是教练多少上的):

图片 3

图中,cost 在前 15
轮训练中国和日本渐立异,但事后却又起来升高。那是网络出现过拟合的信号之一。

另一个过拟合的信号请看下图:

图片 4

那是陶冶集上的准确率。可以看来,互连网的准确率一路进步直到
百分之百。有人或然会纳闷,准确率高不是好事呢?确实,准确率高是大家要求的,但不可以不是测试集上的准确率。而教练集上的高准确率,带来的结果未必是好事。它大概代表,网络在练习多少上「钻了牛角尖」。它并不是上学出怎么着识别手写体数字,而是一味记住了教练多少长什么样。换句话说,它在操练多少上拟合太过了。

过拟合在现世神经互联网中是很广阔的题材,因为网络参数巨大,一旦训练样本不够丰裕,某个参数就或然没有练习到。为了使得地训练网络,大家要求上学可以收缩过拟合的技巧。

Other Regularization Methods

  • Data augmentation(数据扩增)

比如水平翻转,随机裁剪扭曲图片等,以扩展一些新闻量。

  • Early stopping(早停止)

绘图train set 和dev set的cost
function和迭代步数的图像,一般前者递减,后者先减小后增大,采取3个两岸均较好的迭代步数提前为止。

可以这么做的来由在于:最初步随机赋予w的权值一般是较小的(接近0),随着锻炼的长河大概无休止叠加,由此提前终止相当于接纳看壹个中路大小的权重值。可是它的的弱项在于同时会潜移默化Cost
function的拟合效果,不够正交化。

穿插验证集

在缓解过拟合那几个题材上,我们须求引入另2个数据集——交叉验证集(validation
dataset)。

穿插验证集可以认为是一种双管教办法。在化解过拟合时,大家会用到广大技艺,有个别技巧本人就隐含自身的参数(相当于大家说的超参数(hyper
parameter)
),如若只在测试集上考试,结果只怕导致大家消除过拟合的主意有针对性测试集的「狐疑」,可能说,在测试集上过拟合了。由此,用三个新的陆续验证集来评估化解的效应,再在测试集上考查,可以让网络模型的泛化能力更强。

多个缓解过拟合的小方法

故而称之为小方法,即那种艺术固然实惠,但要么功用很小,要么实践意义不大。

early stop

检测过拟合有一个很分明的办法,就是跟踪测试集上的准确率。当准确率不再上涨时,就停下练习(early
stop)。当然,严峻来讲,那不是过拟合的充要条件,只怕锻练集和测试集上的准确率都停下上涨了。但那种方针依旧有助于化解过拟合难点。

只是,在实践中,大家平时是跟踪验证集上的准确率,而非测试集。

增添练习多少

图片 5

上图是用装有操练多少进行练习时,练习集和测试集上准确率的变通情状。

可以看出,相比较以前只用 1000个磨练样本的情事,网络在陶冶集和测试集上的准确率只想差了 2.二分之一(此前是
17.73%)。约等于说,增加锻炼多少后,过拟合难题很大程度上缓解下来了。所以,伸张练习多少也是缓解过拟合的方法之一(而且是最简易可行的法子,所谓「算法好不如数据好」)。但是,伸张多少不是大致地将数据拷贝复制,而是让多少的品种样式越来越充分。

在实际情状中,磨练多少是很难获取的,所以那种形式执行起来很辛劳。

缩减模型参数

调减模型参数本质上和扩展陶冶多少是一样的,不过,对于神经互联网而言,参数越来越多,效果一般会更好,所以那种方法不是逼不得已,大家一般不会接纳。

正则化

L2 正则化

正则化是缓解过拟合常用的措施。在这一节中,大家将介绍最常用的正则化技巧:L2
正则化(weight decay)。

L2 正则化是在代价函数中添加正则化项(regularization
term)
。比如,上边是正则化后的穿插熵函数:
\[ C=-\frac{1}{n}\sum_{xj}{[y_j \ln
a_j^L+(1-y_j)\ln(1-a_j^L)]}+\frac{\lambda}{2n}\sum_w{w^2}
\tag{85} \]
所谓正则化项,其实就是权值的平方和,后面的 \(\lambda / 2n\) 是针对富有样本取均值,而
\(\lambda\)
就是大家说的超参数。之后会谈论 \(\lambda\)
的值该怎么取。注意,正则项中并不曾偏差,因为对不是的正则化效果不醒目,所以一般只对权值举办正则化。

L2 正则化也得以用在任何代价函数中,比如平方差函数:
\[
C=\frac{1}{2n}\sum_x{||t-a^L||^2}+\frac{\lambda}{2n}\sum_w{w^2}
\tag{86} \]
咱俩得以写出 L2 正则化的通式:
\[ \begin{eqnarray} C = C_0 +
\frac{\lambda}{2n}\sum_w w^2,\tag{87}\end{eqnarray} \]
其中,\(C_0\) 是原本的代价函数。

直观上,正则化的意义就是让学习的权值尽只怕的小。可以说,正则化就是在微小化原代价函数和寻找小权值之间找折中。而两者之间的显要由
\(\lambda\) 控制。当 \(\lambda\)
大时,网络会尽或许减小权重,反之,则尽量减小原先的代价函数。

大家先通过有些试验看看这种正则化的效果。

加上正则化项后,梯度下落的偏导数会生出一些变更:
\[ \begin{eqnarray} \frac{\partial
C}{\partial w} & = & \frac{\partial C_0}{\partial w} +
\frac{\lambda}{n} w \tag{88}\\ \frac{\partial C}{\partial b} & =
& \frac{\partial C_0}{\partial b}. \tag{89}\end{eqnarray}
\]
其中,\(\partial C_0/\partial w\)
和 \(\partial C_0/\partial b\)
可以由此 BP 算法计算,由此,新的偏导数很简单总括:
\[ \begin{eqnarray} w & \rightarrow &
w-\eta \frac{\partial C_0}{\partial w}-\frac{\eta \lambda}{n} w
\tag{91}\\ & = & \left(1-\frac{\eta \lambda}{n}\right) w -\eta
\frac{\partial C_0}{\partial w}. \tag{92}\end{eqnarray} \\
\]

\[ \begin{eqnarray} b & \rightarrow & b
-\eta \frac{\partial C_0}{\partial b}. \tag{90}\end{eqnarray}
\]

在批锻炼时,梯度降低公式变为:
\[ \begin{eqnarray} w \rightarrow
\left(1-\frac{\eta \lambda}{n}\right) w -\frac{\eta}{m} \sum_x
\frac{\partial C_x}{\partial w}, \tag{93}\end{eqnarray}
\]
(注意,式子前半片段除的是教练多少大小 n,后半部分是批操练的 m)

现行,在 一千 个训练样本的例子中,我们投入正则化项(\(\lambda\)
设为0.1,其余参数和前边一样),并探望训练的结果什么:

图片 6

图片 7

可以看出,准确率较此前的 82.27%
有了醒目标增高,相当于说,正则化确实在必然水平上压制了过拟合。

近来,大家用装有的 陆仟0 张图纸磨练,看看正则化能或不能起功能(那里我们设置
\(\lambda\) 为 5.0,因为 n 由原先的
一千 变为 肆仟0,若是 \(\lambda\)
的值和事先同一,那么 \(\frac{\eta
\lambda}{n}\) 的值就会小很大,weight decay
的功力就会大打折扣)。

图片 8

可以看来,准确率回涨到
96.1/4,而且测试集准确率和陶冶集准确率之间的歧异也尤为减少了。

为什么正则化能减小过拟合

以此标题能够用奥卡姆剃刀(奥卡姆’s
Razor)
来诠释。奥卡姆剃刀的思维是,倘诺八个模型都能拟合数据,那么大家事先选项不难的模型。

正则化给神经互联网带来的震慑是:权值 (相对值)
会更小。权值小的便宜是,当输入暴发轻微的转变时,网络的结果不会时有发生大的不定,相反地,假使权值
(相对值)
过大,那么一点点变化也会爆发很大的响应(包涵噪声)。从那点来看,大家得以认为正则化的互联网是相比不难的模子。

本来,不难的模子也不一定是当真实用的,更主要的是要看模型的泛化能力是不是丰硕好。关白一骢则化,人们直接没办法找出连串科学的解释。由于神经网络中,正则化的职能往往不错,因而大部分情状下,大家都会对互联网开展正则化。

其他正则化技巧

L1 正则化

L1 正则化的样式和 L2 很像,只但是正则化项略有分裂:
\[ C=C_0+\frac{\lambda}{n}\sum_w{|w|}
\tag{95} \]
下边来看望 L1 正则化对网络发出的熏陶。

先是,大家对 (95) 式求偏导:
\[ \begin{eqnarray} \frac{\partial
C}{\partial w} = \frac{\partial C_0}{\partial w} +
\frac{\lambda}{n} \, {\rm sgn}(w), \tag{96}\end{eqnarray}
\]
其中,\({\rm sgn}(w)\) 表示 \(w\) 的符号,如果 \(w\) 为正,则为 +1,否则为 -1。

如此,梯度下落的公式就改为:
\[ w \rightarrow w’=w-\frac{\eta
\lambda}{n}{\rm sgn}(w)-\eta \frac{\partial C_0}{\partial w}
\tag{97} \]
比较 L2 的公式 (93),大家发现,五个姿态都有缩短 weight
的功能,那跟从前分析正则化能起效果的原因是同一的。只可是 weight
裁减的法子差距。在 L1 中,正则化项让 weight 以二个稳定的常数向 0
靠近(weight 是多亏负都一样),而 L2 中weight 减小的量跟 weight
自己存在二个比例关系(也等于说,weight 越小,这几个量也越小)。所以,当
weight 的断然值很大时,L2 对 weight 的平抑成效比 L1 大。

在上式中,存在二个弱点:当 \(w=0\)
时,\(|w|\)
是没办法求导的。那些时候,我们只必要不难地令 \({\rm sgn}(w)=0\) 即可。

dropout

dropout 和 L① 、L2
存在很大分别,它不会修改代价函数,相反地,它修改的是互联网的布局。

假设大家要磨练如下的网络:

图片 9

在梯度下跌时,dropout
会随机删除隐藏层中四分之二的神经细胞,如下(虚线表示删除的神经细胞):

图片 10

让网络在那种「残缺」的意况下练习。

当开头下一轮 batch
磨炼时,我们先过来完整的网络,然后继续轻易删除隐藏层中50%的神经细胞,再陶冶互联网。如此循环直到锻炼甘休。

当要运用网络预测的时候,大家会东山再起全体的神经细胞。由于练习时唯有5/10的神经细胞运维,因此各样神经元的权值等价于完整网络的两倍,所以,真正使用网络预测时,大家要取隐藏层的权值的3/6。

dropout 的盘算可以那样驾驭:假使大家根据正规方式 (没有 dropout)
磨练很多平等结构的互连网,由于各种网络的最先化不一样,训练时的批陶冶多少也会设不一样,由此各样网络的输出都会设有出入。最终大家取全数互联网的结果的均值作为最后结出(类似随机森林的投票机制)。例如,大家训练了
5 个互连网,有 二个网络将数字分类为「3」,那么大家就足以认为结果是「3」,因为其余八个互联网恐怕出错了。那种平均的策略很有力,因为区其他网络恐怕在不相同程度上冒出了过拟合,而平均取值可以缓解一定程度的过拟合现象。dropout
每回操练时会 drop 一些神经元,那似乎在陶冶不相同的网络,dropout
的经过如同在平均很多互联网的结果,因此最后起到减小 overfitfing 的效用。

人为扩充磨炼多少

而外 dropout,伸张陶冶多少也是化解过拟合的有效性政策。

为领会练习多少集对结果的影响,大家准备做几组实验。每组实验的教练集大小不等,训练的轮数和正则化的参数
\(\lambda\)
也会做相应调整,其余参数则保持不变。

图片 11

正如图中所示,陶冶数据量的加码有助于增强分类的准确率。图中的结果看似互连网已经趋于收敛,但换到对数坐标后,那种效应就进一步由此可知了:

图片 12

据此,尽管我们能将数据集扩张到几九万几百万,准确率应当可以持续上涨。

得到更多陶冶多少是很困难的,可是幸亏大家有其他技术达到近似的效益,那就是人为扩张数据。

譬如,我们有一张 MNIST 的教练图片:

图片 13

旋转 15º 后,大家就拿到另一张样本图片:

图片 14

那两张图片肉眼都足以观望是「5」,但在像素级别上,它们差异很大,因而不失为不错的陶冶样本。重复那种做法(旋转运动等等操作),我们得以获取数倍于原陶冶多少集大小的范本。

那种做法效果明摆着,在众多试行中都获取成功。而且,那种思考不仅仅局限于图片识别,在此外职务(如:语音识别)中,那种做法无异于奏效。

其它,数据量也得以弥补机器学习算法的阙如。就算在同一数量规模下,算法 A
要好于算法 B,但一旦为算法 B
提供愈来愈多多少,后者的功能往往会领先前者。而且,尽管两者数据规模一样,但算法
B 的数据比 A 的更为丰裕,B 也或者超越A,那就是所谓好的算法不如好的多少

参考

相关文章