基于个人口味做了剔除)

(本文是根据
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\)是3个可以调节的超参数,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之间的数。还要选拔到向量化,创立一个随便矩阵\(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呢?

从完整上看,每一步迭代都关门部分神经元,那样每一步练习中,实际上都在教练的更简约的神经网络。

从单一神经元的角度出发,由于它上一层的神经细胞的输入会自由被打消一些,因而它不能完全依靠于其他二个表征,所以权重就帮助于分散,即给每三个输入特征的权重都较小,那样达到了和L2正则化类似的效益。

keep_prob的值应依据各层神经元的各数设置,对于神经元数目比较多的,设置更小的keep_prop值,因为神经细胞数目多的层数更易于过拟合,即便对不一样层设置不相同的keep_prop值,也有三个瑕疵就是超参数的多少增添的话运转大概会更慢。经常对于输入层一般不应用dropout。

在电脑视觉领域,由于本性维度很大,往往都不可以有丰硕的数据,因此采用dropout大概变成暗中认可,可是任何领域就不自然如此。

dropout还有二个瑕疵在于,由于自由甩掉使得cost
function的概念不那么肯定,由此无法用绘图法进行梯度下落检测。因而必要先把dropout关闭之后展开梯度降低检测确保递减,再加入dropout。

过拟合现象

在明白过拟合这些题材此前,大家先做个试验。

万一大家采取贰个有 30 个隐藏层,23860 个参数的网络来预测 MNIST
数据集。但是,大家只用多少汇总的 一千张图片举办陶冶。练习进程和以后一律,代价函数拔取接力熵函数,学习率 \(\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和迭代步数的图像,一般前者递减,后者先减小后增大,采纳五个双方均较好的迭代步数提前截至。

可以如此做的原委在于:起首河随机赋予w的权值一般是较小的(接近0),随着陶冶的进度或许持续增大,由此提前截至也等于采纳看1个当中大小的权重值。可是它的的欠缺在于同时会影响Cost
function的拟合效果,不够正交化。

接力验证集

在消除过拟合那些难点上,大家要求引入另1个数据集——交叉验证集(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%
有了显眼的增长,相当于说,正则化确实在一定水准上压制了过拟合。

近年来,大家用具有的 50000 张图片练习,看看正则化能不能起效果(那里我们设置
\(\lambda\) 为 5.0,因为 n 由原先的
一千 变为 六千0,若是 \(\lambda\)
的值和前边同一,那么 \(\frac{\eta
\lambda}{n}\) 的值就会小很大,weight decay
的作用就会大打折扣)。

图片 8

可以见见,准确率上涨到
96.59%,而且测试集准确率和教练集准确率之间的异样也愈发裁减了。

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

本条题材得以用奥卡姆剃刀(奥卡姆’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 以2个定位的常数向 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
练习时,大家先过来完整的互连网,然后继续轻易删除隐藏层中一半的神经细胞,再陶冶网络。如此循环直到教练停止。

当要动用网络预测的时候,大家会回复全数的神经细胞。由于陶冶时唯有一半的神经细胞运转,因而各类神经元的权值等价于完整网络的两倍,所以,真正使用网络预测时,大家要取隐藏层的权值的八分之四。

dropout 的怀恋可以这么理解:借使大家根据专业格局 (没有 dropout)
磨练很多一律结构的互连网,由于各种互联网的开头化不一样,操练时的批锻炼多少也会设有差异,由此各样网络的输出都会设有出入。最终大家取全数互连网的结果的均值作为最终结出(类似随机森林的投票机制)。例如,大家练习了
5 个网络,有 2个互连网将数字分类为「3」,那么大家就足以认为结果是「3」,因为其余多少个网络或然出错了。这种平均的国策很有力,因为不相同的网络可能在不一致程度上冒出了过拟合,而平均取值可以缓解一定水平的过拟合现象。dropout
每一遍练习时会 drop 一些神经元,那就像是在练习区其余互联网,dropout
的进度就像是在平均很多网络的结果,由此最后起到减小 overfitfing 的功效。

人造扩张训练多少

除外 dropout,伸张练习多少也是缓解过拟合的一蹴而就政策。

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

图片 11

正如图中所示,训练数据量的充实有助于增高分类的准确率。图中的结果看似互联网已经趋于收敛,但换到对数坐标后,那种效益就进一步精晓了:

图片 12

故此,即使大家能将数据集伸张到几八万几百万,准确率应当可以持续回升。

得到越多陶冶多少是很费力的,但是万幸大家有其他技术达到近似的法力,那就是人为增添数据。

譬如说,大家有一张 MNIST 的练习图片:

图片 13

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

图片 14

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

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

别的,数据量也足以弥补机器学习算法的阙如。假设在相同数量规模下,算法 A
要好于算法 B,但借使为算法 B
提供更加多数据,后者的效用往往会超过前者。而且,即使两者数据规模一样,但算法
B 的多少比 A 的一发助长,B 也大概跨越
A,那就是所谓好的算法不如好的数额

参考

相关文章