乐趣区

关于深度学习:深度学习教程-深度学习的实用层面

  • 作者:韩信子 @ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/35
  • 本文地址:http://www.showmeai.tech/article-detail/216
  • 申明:版权所有,转载请分割平台与作者并注明出处

珍藏 ShowMeAI 查看更多精彩内容


本系列为吴恩达老师《深度学习专项课程 (Deep Learning Specialization)》学习与总结整顿所得,对应的课程视频能够在 这里 查看。

引言

在 ShowMeAI 前一篇文章 深层神经网络 中咱们对以下内容进行了介绍:

  • 深层神经网络的构造。
  • 深层神经网络前向流传和反向流传过程。
  • 须要深层神经网络的起因。
  • 神经网络参加超参数。
  • 神经网络与人脑简略比照

本篇内容对应吴恩达老师深度学习系列第 2 门课《Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization》。在第 2 门课中,吴恩达老师展开讨论和解说了如何优化神经网络模型,例如调整超参数,进步算法运行速度等等。

1. 数据划分:训练 / 验证 / 测试集

1.1 深度学习实际迭代优化

理论利用深度学习是一个迭代过程。

在构建一个神经网络的时候,咱们须要设置许多超参数,例如 神经网络的层数 (#Layers)、每个 暗藏层蕴含的神经元个数 (#Hidden Units)、 学习速率 (,Learning Rates)、 激活函数 (Activation Functions) 的抉择等。实际上很难在第一次设置的时候就抉择到这些最佳的超参数,而是须要通过一直地迭代更新来取得。

循环迭代过程是如下这样的:

  • ① 产生想法Idea,抉择初始的参数值,构建神经网络模型构造;
  • ② 通过代码 Code 实现上述想法;
  • ③ 通过试验 Experiment 验证这些超参数对应的神经网络的体现性能。
  • ④ 依据验证后果,咱们对超参数进行适当的调整优化,再进行下一次的 Idea->Code->Experiment 循环。通过很屡次的循环,一直调整超参数,选定最佳的参数值,从而让神经网络性能最优化。

上述迭代过程中,决定整个训练过程快慢的关键在于 单次循环所破费的工夫 ,单次循环越快,训练过程越快。而设置适合的 训练集 (Training sets)、 验证集 (Development sets)、 测试集 (Test sets) 大小,能无效进步训练效率。上述数据局部来源于建设模型的过程中,咱们对于总体数据的划分:

  • 训练集(Training Sets):用训练集对算法或模型进行训练过程。
  • 验证集 ((Development Sets):利用验证集(又称为简略穿插验证集,hold-out cross validation set) 进行 穿插验证,抉择出最好的模型
  • 测试集(Test Sets):最初利用测试集对模型进行测试,获取模型运行的无偏预计(对学习办法进行评估)。

1.2 前大数据时代划分形式

在小数据量的时代,如 100、1000、10000 的数据量大小,能够将数据集依照以下比例进行划分:

  • 无验证集 的状况:70%、30%
  • 有验证集 的状况:60%、20%、20%

1.3 大数据时代划分形式

而在现在的大数据时代,对于一个问题,咱们领有的数据集的规模可能是百万级别的,所以验证集和测试集所占的比重会趋向于变得更小。

对于验证集

验证集的目标是为了验证不同的算法哪种更加无效,所以验证集只有足够大到可能验证大概 2 -10 种算法哪种更好,而不须要应用 20% 的数据作为验证集。如百万数据中抽取 1 万的数据作为验证集就能够了。

对于测试集

测试集的次要目标是评估模型的成果,如在单个分类器中,往往在百万级别的数据中,咱们抉择其中 10000 条数据也足以评估单个模型的成果。

咱们针对不同量级的大数据场景,能够采纳如下的训练集 (Training sets)、验证集(Development sets)、测试集(Test sets) 数据划分形式:

  • 100 万数据量:98%、1%、1%
  • 超百万数据量:99.5%、0.25%、0.25% (或者 99.5%、0.4%、0.1%)

1.4 数据划分倡议

倡议验证集要和训练集来自于同一个散布(数据起源统一),能够使得机器学习算法变得更快并取得更好的成果。

假如你开发一个手机 app,能够让用户上传图片,而后 app 辨认出猫的图片 。在 app 辨认算法中,你的 训练样本 可能来自 网络 下载,而你的 验证和测试样本 可能来自不同用户的上传。从网络下载的图片个别像素较高而且比拟正规,而用户上传的图片往往像素不稳固,且图片品质不一。这种状况下验证集和测试集的作用就受影响了。

如果不须要用 无偏预计 来评估模型的性能,则能够不须要测试集。

Test sets 测试集的指标次要是进行无偏预计。咱们能够通过 Train sets 训练不同的算法模型,而后别离在 Dev sets 上进行验证,依据后果抉择最好的算法模型。这样也是能够的,不须要再进行无偏预计了。如果只有 Train sets 和 Dev sets,通常也有人把这里的 Dev sets 称为 Test sets,咱们要留神加以区别。

2. 模型预计:偏差 / 方差

2.1 模型状态与评估

偏差 (Bias)方差 (Variance) 是机器学习畛域十分重要的两个概念和须要解决的问题。在传统的机器学习算法中,Bias 和 Variance 是对抗的,别离对应着欠拟合和过拟合,咱们经常须要在 Bias 和 Variance 之间进行衡量。而在深度学习中,咱们能够同时减小 Bias 和 Variance,构建最佳神经网络模型。

咱们先来梳理一下下面提到的概念:

  • 偏差(Bias):度量了学习算法的冀望预测与实在后果的偏离水平,即刻画了学习算法自身的拟合能力。
  • 方差(Variance):度量了同样大小的训练集的变动所导致的学习性能的变动,即刻画了数据扰动所造成的影响。
  • 噪声 (noise):表白了在当前任务上任何学习算法所可能达到的冀望泛化误差的下界,即刻画了 学习问题自身的难度

如图是二维立体上二分类问题对应的几种模型状态 (High Bias,Just Right,High Variance) 示例图。

其中,High Bias 对应着欠拟合 ,而High Variance 对应着过拟合。在欠拟合(underfitting) 的状况下,呈现高偏差 (High Bias) 的状况,即不能很好地对数据进行分类。

这个例子中输出特色是二维的,High Bias 和 High Variance 能够间接从图中分类线看进去。而对于输出特色是高维的状况,如何来判断是否呈现了 High Bias 或者 High Variance 呢?

这就要特地借助于上一节咱们提到几个数据集的评估来实现了 (对于模型的评估也能够参考 ShowMeAI 文章 图解机器学习 | 模型评估办法与准则)

一般般来说,训练集错误率体现了是否呈现 Bias(偏差),验证集 (和训练集差别) 错误率体现了是否呈现 Variance(方差)。当训练出一个模型当前:

  • 训练集的错误率较小,而验证集的错误率却较大,阐明模型存在较大方差(Variance),可能呈现了过拟合。
  • 训练集和验证集的错误率都较大,且两者相当,阐明模型存在较大偏差(Bias),可能呈现了欠拟合。
  • 训练集错误率较大,且验证集的错误率远较训练集大,阐明方差和偏差都较大,模型很差。
  • 训练集和验证集的错误率都较小,且两者的相差也较小,阐明方差和偏差都较小,这个模型成果比拟好。

神经网络模型甚至可能呈现 High Bias and High Variance 的蹩脚状态,如下图所示:

2.2 应答办法

模型可能处于上述提到的不同状态中,在咱们对模型状态评估结束之后,针对不同的状态,优化形式如下:

  • 模型存在 高偏差:扩充网络规模,如增加暗藏层或暗藏单元数目;寻找适合的网络架构,应用更大的 NN 构造;破费更长时间训练。
  • 模型存在 高方差:获取更多的数据;正则化(Regularization);寻找更适合的网络结构。
  • 一直尝试,直到找到低偏差、低方差的框架。

在深度学习的晚期阶段,没有太多办法能做到只缩小偏差或方差而不影响到另外一方。而在大数据时代,深度学习对监督式学习大有裨益,使得咱们不必像以前一样太过关注如何均衡偏差和方差的衡量问题,通过以上办法能够在不减少某一方的前提下缩小另一方的值。

3. 正则化(Regularization)

3.1 正则化

如果模型呈现了过拟合 (High Variance) 状态,能够通过正则化 Regularization 来缓解解决。尽管扩充训练样本数量也是减小 High Variance 的一种办法,然而通常取得更多训练样本的老本太高,比拟艰难。所以,更可行无效的方法就是应用正则。

3.2 Logistic 回归中的正则化

咱们先回顾一下之前介绍过的逻辑回归模型,咱们在 Cost Function 里增加了 L2 Regularization(详见 ShowMeAI 文章 图解机器学习 | 逻辑回归算法详解),表达式如下:

$$
J(w,b)=\frac1m \sum_{i=1}^m L(\hat y^{(i)},y^{(i)})+\frac{\lambda}{2m}||w||_2^2
$$

为什么只对 \(w\) 进行正则化而不对 \(b\) 进行正则化呢?其实也能够对 \(b\) 进行正则化。然而个别 \(w\) 的维度很大,而 \(b\) 只是一个常数。相比拟来说,参数很大水平上由 \(w\) 决定,扭转 \(b\) 值对整体模型影响较小。所以,个别为了简便,就疏忽对 \(b\) 的正则化了。

除了 L2 正则化之外,咱们在逻辑回归中也能够 增加 L1 正则化。表达式如下:

$$
J(w,b)=\frac1m\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})+\frac{\lambda}{2m}||w||_1
$$

与 L2 正则化相比,L1 正则化更容易失去稠密的 \(w\) 解,即最初训练失去的权重 \(w\) 中有很多为零值。L1 正则化长处是节约存储空间(因为大部分 \( w\) 为 0)。但实际上 L1 正则化在解决过拟合问题上并不优于 L2 正则化,且 L1 的在微分求导方面比较复杂。所以个别更罕用的还是 L2 正则化。

L1、L2 正则化中的 \(\lambda\) 就是正则化参数(超参数的一种)。能够设置 \(\lambda\) 为不同的值,在验证集 Dev set 中进行验证,抉择最佳的 \(\lambda\)。

3.3 神经网络中的正则化

在深度学习模型中,L2 正则化的表达式如图所示:

通常,咱们把 \(||w^{[l]}||^2\) 称为 弗罗贝尼乌斯范数(Frobenius Norm),记为 \(||w^{[l]}||_F^2\)。

因为在 Cost Function 中退出了正则化项,梯度降落算法中的 \(dw^{[l]}\) 计算表达式须要做如下批改:

$$
dw^{[l]}=dw^{[l]}_{before}+\frac{\lambda}{m}w^{[l]}
$$

$$
w^{[l]}:=w^{[l]}-\alpha\cdot dw^{[l]}
$$

大家有时候也会听到 L2 正则化被称做 weight decay。这是因为,因为加上了正则项,\(dw^{[l]}\) 有个增量,在更新 \(w^{[l]}\) 的时候,会多减去这个增量,使得 \(w^{[l]}\) 比没有正则项的值要小一些。一直迭代更新,一直地减小。

$$
\begin{aligned}
w^{[l]} :& = w^{[l]}-\alpha\cdot dw^{[l]}\\
& = w^{[l]}-\alpha\cdot(dw^{[l]}_{before}+\frac{\lambda}{m}w^{[l]})\\
& = (1-\alpha\frac{\lambda}{m})w^{[l]}-\alpha\cdot dw^{[l]}_{before}
\end{aligned}
$$

其中,\((1-\alpha\frac{\lambda}{m})<1\)。

3.4 正则化能够减小过拟合的起因

(1) 直观解释

咱们回到下面模型状态的那张图,从左到右,别离示意了 欠拟合 刚好拟合 过拟合 三种状况。抉择图中的简单神经网络模型,那么不增加正则化的状况下,咱们可能失去图中的过拟合分类边界。

如果应用 L2 正则化,当 \(\lambda\) 很大时,\(w^{[l]}\approx0\)。\(w^{[l]}\) 近似为零,意味着该神经网络模型中的某些神经元理论的作用很小,能够疏忽。从成果上来看,其实是将某些神经元给疏忽掉了。这样本来过于简单的神经网络模型就变得不那么简单了,而变得十分简单化了。

如图所示,整个简化的神经网络模型变成了一个逻辑回归模型。问题就从 High Variance 变成了 High Bias 了

因而,总结一下,直观的一种了解是:正则化因子设置的足够大的状况下,为了使老本函数最小化,权重矩阵 \(W\) 就会被设置为靠近于 0 的值,直观上相当于打消了很多神经元的影响,那么大的神经网络就会变成一个较小的网络。当然,实际上暗藏层的神经元仍然存在,然而其影响削弱了,过拟合可能性大大减小。

(2) 数学解释

假如神经元中应用的激活函数为 \(g(z) = tanh(z)\) (sigmoid 同理)。(对于激活函数的常识回顾能够查看 ShowMeAI 文章 浅层神经网络

在退出正则化项后,当 \(\lambda\) 增大,导致 \(W^{[l]}\) 减小,\(Z^{[l]} = W^{[l]}a^{[l-1]} + b^{[l]}\) 便会减小。通过上图咱们会发现,在 \(z\) 较小 (靠近于 0) 的区域里,\(tanh(z)\) 函数近似线性,所以每层的函数就近似线性函数,整个网络就成为一个简略的近似线性的网络,因而不会产生过拟合。

(3) 其余解释

在权值 \(w^{[L]}\) 变小之下,输出样本 \(X\) 随机的变动不会对神经网络模造成过大的影响,神经网络受部分乐音的影响的可能性变小。这就是正则化可能升高模型方差的起因。

4.Dropout 正则化

在神经网络中,另外一种很无效的正则化形式叫做 Dropout(随机失活),它是指在神经网络的暗藏层为每个神经元结点设置一个随机敞开的概率,保留下来的神经元造成一个结点较少、规模较小的网络用于训练。网络模型失去简化,从而防止产生过拟合。

4.1 反向随机失活(Inverted Dropout)

Dropout 有不同的实现办法,一种罕用的办法是Inverted Dropout。假如对于第 l 层神经元,设定保留神经元比例概率 keep_prob=0.8,即该层有 20% 的神经元进行工作。\(dl\) 为 Dropout 向量,设置 \(dl\) 为随机 vector,其中 80% 的元素为 1,20% 的元素为 0。

Dropout vector 的生成 python 代码如下所示

keep_prob = 0.8    # 设置神经元保留概率
dl = np.random.rand(al.shape[0], al.shape[1]) < keep_prob
al = np.multiply(al, dl)
al /= keep_prob
  • 最初一步 al /= keep_prob 是因为 \(a^{[l]}\) 中的一部分元素失活(相当于被归零),为了在下一层计算时不影响 \(Z^{[l+1]} = W^{[l+1]}a^{[l]} + b^{[l+1]}\) 的期望值,因而除以一个keep_prob

Inverted Dropout 的另外一个益处就是在对该 Dropout 后的神经网络进行测试时可能缩小 scaling 问题。因为在训练时,应用 scale up 保障 al 的期望值没有大的变动,测试时就不须要再对样本数据进行相似的尺度伸缩操作了。

  • 对于 \(m\) 个样本,单次迭代训练时,随机删除掉暗藏层肯定数量的神经元;
  • 而后,在删除后的剩下的神经元上正向和反向更新权重 \(w\) 和常数项 \(b\);
  • 接着,下一次迭代中,再复原之前删除的神经元,从新随机删除肯定数量的神经元,进行正向和反向更新 \(w\) 和 \(b\)。
  • 一直反复上述过程,直至迭代训练实现。

留神:应用 Dropout 训练完结后,在测试和理论利用模型时,不须要进行 Dropout 和随机删减神经元,所有的神经元都在工作。

4.2 了解 Dropout

4.2.1 Dropout 了解视角 1

Dropout 通过每次迭代训练时,随机抉择不同的神经元,相当于每次都在不同的神经网络上进行训练,相似机器学习中 Bagging 的办法 (具体思维能够浏览 ShowMeAI 文章 图解机器学习 | 随机森林分类模型详解),可能避免过拟合。

4.2.2 Dropout 了解视角 2

第 2 个了解的视角是 Dropout 会减小权重 \(w\) 的值。

对于某个神经元来说,某次训练时,它的某些输出在 Dropout 的作用被过滤了。而在下一次训练时,又有不同的某些输出被过滤。通过屡次训练后,某些输出被过滤,某些输出被保留。这样,神经元不会再特地依赖于任何一个输出特色。也就是说,对应的权重 \(w\) 不会很大。这从成果上来说,与 L2 正则化是相似的,都是对权重 \(w\) 进行「惩办」,减小了 \(w\) 的值

因而,通过流传过程,Dropout 将产生和 \(L2\) 正则化雷同的膨胀权重的成果。

4.3 Dropout 取值

一般来说,神经元多的暗藏层,keep_prob能够设置得小一些,例如 0.5;神经元越少的暗藏层,keep_out能够设置的大一些,例如 0.8,设置是 1。

理论利用中,不倡议对输出层进行 Dropout,如果输出层维度很大,例如图片,那么能够设置 Dropout,但 keep_prob 应设置的大一些,例如 0.8,0.9。

总体来说,就是越容易呈现 overfitting 的暗藏层,其 keep_prob 就设置的绝对小一些。没有精确固定的做法,通常能够依据 validation 进行抉择。

留神 :Dropout 的一大毛病是老本函数无奈被明确定义。因为每次迭代都会随机打消一些神经元结点的影响,因而无奈确保老本函数枯燥递加。因而,应用 Dropout 时,先将keep_prob 全副设置为 1.0 后运行代码,确保 \(J(w, b)\) 函数枯燥递加,再关上 Dropout。

5. 其余正则化办法

5.1 数据扩增(Data Augmentation)

数据扩增 (Data Augmentation) 是深度学习中常见和无效的技巧,特地的,在计算机视觉畛域,它指的 通过图片的一些变换(翻转,部分放大后切割等),失去更多的训练集和验证集。如下图所示:

5.2 早进行法(Early Stopping)

因为深度学习的训练过程是一个一直迭代优化训练集 cost function 的过程,然而迭代次数过多会导致模型适度拟合训练集而对其余数据泛化能力变弱。一个解决办法是应用早进行法(Early Stopping)。

在早进行法 (Early Stopping) 中,咱们会把训练集和验证集进行梯度下降时的老本变动曲线画在同一个坐标轴内。当训练集误差升高但验证集误差升高,两者开始产生较大偏差时及时进行迭代,并返回具备最小验证集误差的连贯权和阈值,以防止过拟合。

Early Stopping 也有其本身毛病

回顾咱们利用机器学习训练模型有两个指标:① 优化 Cost Function,尽量减小 \(J\);② 避免过拟合,心愿在新数据上有好的泛化能力。这两个指标彼此对抗的,即减小 \(J\) 的同时可能会造成过拟合,反之亦然。

后面提到过,在深度学习中,神经网络能够同时减小 Bias 和 Variance,构建最佳模型。然而,Early Stopping 的做法通过缩小得带训练次数来避免过拟合,这样 \(J\) 就不会足够小。也就是说,Early Stopping 将上述两个指标交融在一起,同时优化,但可能没有「分而治之」的成果好

比照 Early Stopping,L2 正则化能够实现「分而治之」的成果:迭代训练足够多,减小 \(J\),而且也能无效避免过拟合。而 L2 正则化的毛病之一是最优的正则化参数 \(\lambda\) 的抉择比较复杂,这点上 Early Stopping 比较简单

总体上 \(L2\) 正则化更加罕用一些。

6. 标准化输出

6.1 标准化输出操作

在训练神经网络时,对输出标准化能够进步训练的速度。标准化就是对训练数据集进行归一化的操作,行将原始数据减去其均值 \(\mu\) 后,再除以其方差 \(\sigma^2\):

$$
\mu=\frac1m\sum_{i=1}^mX^{(i)}
$$

$$
\sigma^2=\frac1m\sum_{i=1}^m(X^{(i)})^2
$$

$$
X:=\frac{X-\mu}{\sigma^2}
$$

下图展现二维数据的归一化过程及其散布变动:

留神:理论建模利用时,对于测试集,应该应用训练集同样的 \(\mu\) 和 \(\sigma^2\) 对其进行标准化解决。这样保障了训练集和测试集的标准化操作统一。

6.2 标准化输出起因

标准化输出能够让所有输出调整到同样的尺度 scale 上,不便进行梯度降落算法时可能更快更精确地找到全局最优解。

以二维数据为例,如果输出数据有 \(x_1\) 和 \(x_2\) 两个维度,\(x_1\) 的范畴是 \([1,1000]\),\(x_2\) 的范畴是 \([0,1]\)。

(1) 未做标准化的情景

不进行标准化解决的状况下,\(x_1\) 与 \(x_2\) 之间散布极不均衡,训练失去的 \(w_1\) 和 \(w_2\) 也会在数量级上差异很大。这种情景下的 Cost Function 与 \(w\) 和 \(b\) 的关系可能是一个十分修长的椭圆形碗,如图左所示。

对这种 Cost Function 进行梯度降落优化时,因为 \(w_1\) 和 \(w_2\) 数值差别很大,只能抉择很小的学习因子 \(\alpha\),来防止 \(J\) 产生振荡。一旦 \(\alpha\) 较大,必然产生振荡,\(J\) 不再枯燥降落。

(2) 做完标准化的情景

如果进行了标准化操作,\(x_1\) 与 \(x_2\) 散布平均,\(w_1\) 和 \(w_2\) 数值差异不大,失去的 Cost Function 与 \(w\) 和 \(b\) 的关系是相似圆形碗,如右图所示。对其进行梯度降落优化时,\(\alpha\) 能够抉择绝对大一些,且 \(J\) 个别不会产生振荡,保障了 \(J\) 是枯燥降落的。

如果输出特色之间的范畴原本就比拟靠近,那么不进行标准化操作也是没有太大影响的。然而,标准化解决在大多数场合下还是值得做的。

7. 梯度隐没和梯度爆炸

7.1 梯度爆炸与梯度隐没

在深度神经网络里,咱们在计算损失函数梯度时,有时会呈现以指数级递增或者递加的状况,它们别离对应神经网络的梯度爆炸和梯度隐没问题。

举个例子来阐明,假如一个多层的每层只蕴含两个神经元的深度神经网络模型,如下图所示:

为了简化复杂度,便于剖析,咱们令各层的激活函数为线性函数,且疏忽各层常数项 \(b\) 的影响,即假设 \(g(z) = z\),\(b^{[l]} = 0\),对于指标输入 \(\hat{y}\) 有:

这种叠乘会带来上面 2 种状况:

  • 对于 \(W^{[l]}\) 的值大于 1 的状况,激活函数的值将以指数级递增;
  • 对于 \(W^{[l]}\) 的值小于 1 的状况,激活函数的值将以指数级递加。

计算梯度是一个相似的过程,依据求导链式法则,也会有叠乘状况呈现,梯度函数会以指数级递增或递加,导致训练导数难度回升,梯度降落算法的步长会变得十分小,须要训练的工夫将会十分长。

7.2 权重初始化缓解梯度隐没和爆炸

那么怎么改善梯度隐没和爆炸问题呢?一种办法是对权重 \(w\) 进行一些初始化解决。(其余的一些办法如 ShowMeAI 文章 经典 CNN 网络实例详解 中提到的 ResNet 等网络结构调整)

深度神经网络模型中,以单个神经元为例,其输入计算为 \(\hat{y}\):

为了让 \(\hat{y}\) 不会过大或者过小,思路是让 \(w\) 与 \(n\) 无关,且 \(n\) 越大,\(w\) 应该越小才好。一种办法是在初始化 w 时,令其方差为 \(1/n\),这里称为Xavier initialization

# 针对 tanh 激活函数的 Xavier 初始化
WL = np.random.randn(WL.shape[0], WL.shape[1]) * np.sqrt(1/n)

其中 \(n\) 是输出的神经元个数,即WL.shape[1]

这样,激活函数的输出 \(x\) 近似设置成均值为 0,规范方差为 1,神经元输入 \(z\) 的方差就正则化到 1 了。尽管没有解决梯度隐没和爆炸的问题,但其在肯定水平上的确减缓了梯度隐没和爆炸的速度。

如果应用的是 ReLU 激活函数,权重 \(w\) 的初始化个别令其方差为 \(2/n\) 对应 python 代码如下:

w[l] = np.random.randn(n[l],n[l-1])*np.sqrt(2/n[l-1])

8. 梯度测验(Gradient checking)

8.1 梯度的数值迫近

咱们晓得梯度降落法会大程度依赖梯度来实现,在数学上,咱们能够基于微分的定义,应用极限的计算去迫近导数,咱们有如下的「单边误差法 」和「 双边误差法」,其中后者精度要高一些。

(1) 单边误差

(2) 双边误差求导(即导数的定义)

当 \(\varepsilon\) 越小时,后果越靠近实在的导数,也就是梯度值。能够应用这种办法来判断反向流传进行梯度下降时,是否呈现了谬误。

8.2 梯度测验

当咱们计算出数值梯度后,要进行梯度查看,来验证训练过程中是否有问题。

(1) 连贯参数

将 \(W^{[1]}\),\(b^{[1]}\),…,\(W^{[L]}\),\(b^{[L]}\) 全副连贯进去,成为一个巨型向量 \(\theta\)。

同时,对 \(dW^{[1]}\),\(db^{[1]}\),…,\(dW^{[L]}\),\(db^{[L]}\) 执行同样的操作失去巨型向量 \(d\theta\),它和 \(\theta\) 有同样的维度。

当初,咱们须要找到 \(d\theta\) 和代价函数 \(J\) 的梯度的关系。

(2)进行梯度测验

求得一个梯度迫近值 \(d\theta_{approx}[i]\),应该 \(\approx d\theta[i] = \frac{\partial J}{\partial \theta_i}\)。

因而,咱们用梯度测验值测验反向流传的施行是否正确。其中,\({||x||}_2\) 示意向量 \(x\) 的 2- 范数(也称「 欧几里德范数」)。

如果梯度测验值和 \(\varepsilon \) 的值相近,阐明神经网络的施行是正确的,否则要去查看代码是否存在 bug

8.3 在神经网络施行梯度测验的实用技巧和注意事项

在进行梯度查看的过程中有几点须要留神的中央:

  • 不要在整个训练过程中应用梯度测验,它仅仅用于调试。
  • 如果算法的梯度测验失败,找到对应出错的梯度(即 \( d\theta \approx [i]\) 与 \(d\theta\) 的值相差比拟大的项),查看其推导是否呈现谬误。
  • 计算近似梯度时,要带上正则项。
  • 梯度查看时敞开 dropout,查看结束后再关上 dropout。

参考资料

  • 图解机器学习 | 模型评估办法与准则
  • 图解机器学习 | 逻辑回归算法详解
  • 图解机器学习 | 随机森林分类模型详解

ShowMeAI 系列教程举荐

  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读

举荐文章

  • 深度学习教程 | 深度学习概论
  • 深度学习教程 | 神经网络根底
  • 深度学习教程 | 浅层神经网络
  • 深度学习教程 | 深层神经网络
  • 深度学习教程 | 深度学习的实用层面
  • 深度学习教程 | 神经网络优化算法
  • 深度学习教程 | 网络优化:超参数调优、正则化、批归一化和程序框架
  • 深度学习教程 | AI 利用实际策略(上)
  • 深度学习教程 | AI 利用实际策略(下)
  • 深度学习教程 | 卷积神经网络解读
  • 深度学习教程 | 经典 CNN 网络实例详解
  • 深度学习教程 | CNN 利用:指标检测
  • 深度学习教程 | CNN 利用:人脸识别和神经格调转换
  • 深度学习教程 | 序列模型与 RNN 网络
  • 深度学习教程 | 自然语言解决与词嵌入
  • 深度学习教程 | Seq2seq 序列模型和注意力机制

退出移动版