训练/开发/测试集

训练数据中包含训练集、简单交叉验证集(也叫验证集)、测试集
我们对训练集执行训练算法,通过验证集选择最好的模型,经过充分验证,选定最终模型,然后就可以在测试集上进行评估了。为了无偏评估算法的运行状况,在机器学习发展的小数据量时代,通常将所有数据三七分,也就是70%验证集,30%测试集。如果没有明确设置验证集,也可以按照60%训练集、20%验证集和20%测试集来划分。但在大数据时代,数据量可能是百万级别,那么验证集和测试集占数据总量的比例会趋向于变得更小。因为验证集的目的就是验证不同的算法,检验哪种算法更有效,因此验证集要足够大才能评估;测试集的主要目的是正确评估分类器的性能。假如有100万条数据,其中1万条作验证集,1万条作测试集即可,即训练集占98%、验证集和测试集各占1%。对于数据量过百万的应用,训练集可以达到99.5%,验证集和测试集各占0.25%或者测试集占0.4%、测试集占0.1%。
不管哪种划分,一定要确保验证集和测试集的数据来自同一分布。因为要用验证集来评估不同的模型,尽可能地优化性能,但由于深度学习算法需要大量的训练数据,为了获取更大规模的训练数据集,可以采用当前流行的各种创意策略,例如网页抓取,代价就是训练集数据与验证集和测试集数据有可能不是来自同一分布。但只要遵循这个经验法则,机器学习算法会变得更快。
最后一点,就算没有测试集也没关系,测试集的目的是对最终所选定的神经网络系统做出无偏评估。如果不需要无偏评估,也可以不设置测试集。所以如果只有验证集,没有测试集,要做的就是在训练集上训练,尝试不同的模型框架,在验证集上评估这些模型,然后迭代并选出适用的模型。因为验证集中已经涵盖测试集数据,所以它不再提供无偏性能评估。
在机器学习中,如果只有一个训练集和一个验证集,而没有独立的测试集,那么训练集仍被称为训练集,但验证集被称为测试集。
总结一下, 搭建训练集、验证集和测试集能够加速神经网络的集成,也可以更有效地衡量算法的偏差和方差,从而帮助我们更高效地选择合适的方法来优化算法

偏差/方差

如果给一个数据集拟合一条直线,可能得到一个逻辑回归拟合,但它并不能很好地拟合该数据集,这是偏差高的情况,也称为“欠拟合”。

如果拟合一个非常复杂的分类器,比如深度神经网络或含有隐藏单元的神经网络,但分类器方差较高,数据过度拟合,称为“过拟合”。

在这两者之间,有一种复杂程度适中,数据拟合适度的分类器,称为“适度拟合”。

在一个只有x1和x2两个特征的二维数据集中,可以绘制数据,将偏差和方差可视化。在多维空间数据中,绘制数据和可视化分割边界无法实现,但可以通过几个指标来研究偏差和方差。

沿用猫咪分类的例子,左边的是猫咪,右边的图不是:
理解偏差和方差的两个关键数据是训练集误差和验证集误差。举几个例子:
1.
假设我们可以辨别图片中的小猫,训练集错误率是1%,验证集错误率是11%。可以看出,训练集设置得非常好,而验证集设置相对较差。这可能是因为我们过度拟合了训练集,某种程度上,验证集并没有充分利用交叉验证集的作用。我们称这种情况为“高方差”。通过训练集误差和验证集误差,便可以判断算法是否具有高方差。
2.
假设训练集错误率是15%,验证集错误率是16%,该案例中人的错误率几乎为0%(人们浏览这些图片可以分辨出是不是猫),算法并没有在训练集中得到很好训练,如果训练数据的拟合度不高,就是数据欠拟合,就可以说这种算法偏差比较高。相反,它对于验证集产生的结果却是合理的,验证集中的错误率只比训练集的多了1%,所以这种算法偏差高,因为它甚至不能拟合训练集。
3.
假设训练集错误率是15%(偏差相当高),但验证集的评估结果更糟糕,验证集错误率是30%。我们会认为这种算法偏差高,因为它在训练集上结果不理想;方差也很高;这是方差偏差都很糟糕的情况。
4.
假设训练集错误率是0.5%,验证集错误率是1%,这种情况偏差和方差都很低。

以上这些分析都是基于假设预测的,假设人眼辨别的错误率接近0%。一般来说,最优误差也被称为贝叶斯误差,所以最优误差接近0%。
如果最优误差或贝叶斯误差非常高,比如15%,那么上面情况2的分类器中,15%的训练集错误集就是合理的,偏差不高,方差也非常低。

但是,当所有分类器都不适用时,如何分析偏差和方差呢?
比如,图片很模糊,即使是人眼,或者没有系统可以准确无误地识别图片,这种情况下,最优误差会更高。那么分析过程就要有一些改变了。
对于训练数据,训练集误差可以判断数据拟合情况,可以判断是否有偏差问题,然后查看错误率有多高。当完成训练集训练,开始验证集验证时,我们可以判断方差是否过高。从训练集到验证集的这个过程中,可以判断方差是否过高。以上分析的前提都是假设基本误差很小,训练集和验证集数据来自相同分布。如果没有这些假设作为前提,分析过程会更加复杂,之后会讨论。

机器学习基础

在训练神经网络时用到的基本方法为:
初始模型训练完成后,首先要知道算法的偏差高不高。如果偏差较高,试着评估训练集或训练数据的性能;如果偏差的确很高,甚至无法拟合训练集,那么就需要选择一个新网络,比如含有更多隐层或者隐藏单元的网络,或者花费更多时间来训练算法,或者尝试更先进的优化算法。训练学习算法时,需要不断尝试这些方法,反复尝试,直到解决掉偏差问题可以拟合数据为止,这是最低标准。
如果网络足够大,只要能扩大网络规模,通常可以很好的拟合训练集。
一旦偏差降低到可接受的数值,就需要去检查一下方差有没有什么问题。为了评估方差,需要查看验证集性能。一个性能理想的训练集就能推出验证集的性能也理想吗?如果方差高,最好的方法就是采取很多数据。但有时无法获得更多数据,那么就可以尝试通过正则化来减少过拟合。但是如果能找到更合适的神经网络框架,就有可能同时减少偏差和方差。
总之就是不断尝试,直到找到一个低偏差、低方差的框架。
其中,需要注意以下两点:
1.
高偏差和高方差是两种不同的情况,后续要尝试的方法也可能完全不同。通常用训练验证集来判断算法是否存在偏差或方差问题,然后根据结果选择尝试部分方法。比如,若算法存在高方差问题,可以准备更多训练数据;若算法存在高偏差问题,准备更多数据可能用处不大。
2.
在机器学习的初期阶段,关于所谓的偏差方差权衡的探讨屡见不鲜。因为我们能尝试的方法很多,但在初期,我们很难只减少偏差或方差却不影响到另外一方。但在当前的深度学习和大数据时代,只要持续训练一个更大的网络,只要准备了更多数据,那么只要正则适度,通常构建一个更大的网络就可以在不影响方差的同时减少偏差;而采用更多数据通常可以在不过多影响偏差的同时减少方差。这两步实际要做的工作就是训练网络,选择网络或者准备更多数据。

正则化

如果神经网络过度拟合了数据,即存在高方差问题,那么正则化是一个很有效的方法;另一个解决高方差的方法就是准备更多数据,这也是非常可靠的方法。正则化是一种非常实用的减少方差的方法,通常有助于避免过度拟合或减少网络误差。正则化时会出现偏差方差权衡问题,偏差可能略有增加,如果网络足够大,增幅通常不会太高。

L2正则化、L1正则化。
如果用的是L1正则化,W最终会是稀疏的,也就是说W向量中有很多0,这其实并没有降低太多存储内存。更常用的是L2正则化。
λ是正则化参数,通常使用验证集或交叉验证来配置这个参数。在python编程语言中,λ(lambda)是一个保留字段,因此我们将正则化参数写为lambd,以免与python中的保留字段冲突。
如何在神经网络中实现L2正则化呢?
神经网络含有一个成本函数,该函数中包含从w[1]、b[1]到w[L]、b[L]所有参数,其中L表示神经网络所含的层数。因此成本函数等于损失总和乘以训练数据m的总和,正则项为λ/2m乘以参数矩阵W的总和。称||W[l]||2为范数平方。这个矩阵范数(即平方范数)被定义为矩阵中所有元素的平方和,也被叫做**“弗罗贝尼乌斯范数”**,用下表F标注。


L2正则化有时也被称为“权重衰退”,因为它就像一般的梯度下降,w被更新为少了α乘以backprop输出的最初梯度值,同时w也乘以了这个小于1的系数。

为什么正则化可以减少过拟合?

在增加正则化项时,应用之前定义的代价函数J,增加了一项是为了预防权重过大。如果使用梯度下降函数,在调试梯度下降时,其中一步就是把代价函数J设计成对于梯度下降的每个调幅都单调递减的函数;如果使用正规化函数,此时J已经有了新的定义(多了一项),若再使用原函数J,也就是第一个正则化项,缺少第二个正则化项时,可能看不到单调递减的现象了。
总之,L2正则化是训练深度学习模型时最常用的一种方法。

Dropout正则化

它也是一个非常实用的正则化方法,dropout意为随机失活。
假设在训练下图这样的神经网络,它存在过拟合,这就是Dropout正则化需要处理的。

首先复制这个神经网络,dropout会遍历网络的每一层,并设置消除神经网络中节点的概率。假设网络中的每一层每个节点都以抛硬币的方式设置概率,那么每个节点得以保留和消除的概率都是0.5,设置完节点概率,就会消除一些节点。

然后删掉从该节点进出的连线,最后得到一个节点更小、规模更小的网络。

然后用backprop方法进行训练,这是网络节点精简后的一个样本。对于其他样本,照旧以抛硬币的方式设置概率,保留一类节点集合,删除其他类型的节点集合。对于每个训练样本,都将采用一个精简后的神经网络(neural networks)来训练他。
不过针对每个样本训练规模极小的网络,正则化就更为重要了。

那么如何实施dropout呢?
方法有好几种,最常用的方法为反向随机失活(inverted dropout)。用一个三层(l=3,layer)网络来举例说明:
首先定义向量d:d3表示一个三层的dropout向量。如果对a3进行因子分解,效果也是一样的。

d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep_prob

keep_prob是一个具体数字,在本例中令它为0.8,它表示保留某个隐藏单元的概率(在最开始的示例中这个数值为0.5),0.8意为消除任意一个隐藏单元的概率时是0.2,它的作用就是生成随机矩阵。

l = 3
keep_prob = 0.8#此段代码应在上一段代码之前

d3是一个矩阵,每个样本和每个隐藏单元其在d3中的对应值为1的概率都是0.8,其对应值为0的概率是0.2。

接下来要从第三层中获取激活函数,即a3含有要计算的激活函数,

a3 = np.multiply(a3, d3)#此处也可写作a3 *= d3

让a3和d3相乘的作用就是过滤d3中所有等于0的元素,在python中d3是一个布尔型数组,值为true和false,而不是1和0,但乘法运算依然有效,python会自动将true和false翻译为1和0。

最后,向外扩展a3,用它除以0.8或者除以keep_prob参数

a3 /= keep_prob

假设第三隐层上有50个单元或50个神经元,在一维上a3是50,通过因子分解将它拆分为50×m维的,保留和删除它们的概率分别是80%和20%,这意味着最后被删除或归零的单元平均有10个,那么z[4] = w[4]a[3] + b[4],我们的预期是a[3] 减少20%,也就是说a[3] 中有20%的元素被归零。为了不影响z[4]的期望值,需要用w[4]a[3]除以0.8,它将会修正或弥补我们所需的那20%,a[3]的期望值也不会变。
a3 /= keep_prob就是所谓的反向dropout方法,它的功能是不论keep_prob的值是多少,0.8、0.9或1(若设为1,那么就不存在dropout,因为它会保留所有节点),通过除以0.8,确保a1的期望值不变。

现在我们使用的是d向量,不同的训练样本,清除的隐藏单元也不同。实际上,如果通过相同训练集多次传递数据,每次训练数据的梯度不同,那么就会随机对不同隐藏单元归零;有时却并非如此,比如需要将相同隐藏单元归零,第一次迭代梯度下降时,把一些隐藏单元归零,第二次迭代梯度下降时,也就是第二次遍历训练集时,对不同类型的隐层单元归零。向量d或d3用来决定第三层中哪些单元归零,无论用foreprop还是backprop。

在测试阶段,已经给出了X,或是想预测的变量,用的是标准计数法。第0层的激活函数标注为测试样本X,a[0] = X。
我们在测试阶段不采用dropout方法,尤其是z[1] = w[1]a[0] + b[1],a[1] = g[1](z[1]),z[2] = w[2]a[1] + b[2],a[2] = g[2](z[2]),…,直到最后一层预测值为y hat。

理论上,只需要多次运行预测处理过程,每一次不同的隐藏单元会被随机归零,预测处理遍历它们,但是计算效率低,得出的结果也几乎相同,与这个不同程序产生的结果极为相似。反向dropout方法没必要在测试阶段额外添加尺度参数,这与训练阶段不同。

理解Dropout

dropout的功能类似于L2正则化,不同的是被应用的方式不同,dropout也会有所不同,甚至更适用于不同的输入范围。
实施dropout的另一个细节是要选择keep_prob参数的值,并且不同层的keep_prob也可以变化。

对于上面这个,第一层矩阵w[1]是3×7,第二个权重矩阵是7×7,w[3]是7×3,以此类推。这样,w[2]是最大的权重矩阵,因为w[2]拥有最大参数集,即7×7。为了预防矩阵的过拟合,对于这一层,即第二层,它的keep_prob值应该相对较低,假设是0.5(缺点是为了使用交叉验证,需要搜索更多的超级参数);对于其它层,过拟合的程度可能没那么严重,它们的keep_prob值可能高一些,假设是0.7;如果在某一层,不必担心其过拟合的问题,那么keep_prob可以为1(keep_prob=1意味着保留所有单元,并且不在这一层使用dropout)。对于有可能出现过拟合且含有诸多参数的层,可以把keep_prob值设置成比较小的值,以便应用更强大的dropout。事实上,也可以对输入层使用dropout,但我们一般让其为1或比较高的值,如0.9。
dropout在计算机视觉领域是很常用的,因为在此领域没有足够的数据,所以一直存在过拟合,它几乎成为一种默认方法。但是!dropout是一种正则化方法,它有助于预防过拟合,因此,除非算法过拟合,不然是不用使用dropout,所以它在其他领域应用的比较少。
dropout的一大缺点就是代价函数J不再被明确定义,每次迭代都会随机移除一些节点,且所优化的代价函数J实际上并没有明确定义,或者说在某种程度上很难计算。
排除dropout的bug的方法就是:先不使用dropout,即令keep_prob值为1,看看代价函数J是否是单调下降的,再去设置keep_prob值

其他正则化方法

除了L2正则化和随机失活(dropout)正则化,还有几种方法可以减少神经网络中的过拟合。

1.数据扩增
假设我们正在拟合猫咪图片分类器,想要通过扩增训练数据来解决过拟合,但扩增训练数据代价高,而且有时无法扩增数据,但可以通过随意翻转、裁剪图片来增加训练集,额外生成假训练数据。虽然训练集有冗余,不如额外收集一组新图片好,但这样节省了获取更多猫咪图片的花费。
像这样人工合成数据的话,还要通过算法验证,比如图片裁剪之后猫还在上面。
对于光学字符识别,可以通过随意旋转或扭曲数字来扩增数据。

2.early stopping
运行梯度下降时,可以绘制训练误差或只绘制代价函数J的优化过程,在训练集上用0-1记录分类误差次数,呈单调下降趋势。通过early stopping还可绘制验证集误差,它可以是验证集上的分类误差,或是验证集上的代价函数、逻辑损失和对数损失等。
验证集误差通常会先呈下降趋势,然后在某个节点处开始上升。early stopping的作用就是神经网络已经在这个迭代过程中表现得很好了,就在还未上升处停止训练,得到验证集误差
其工作原理就是:当还未在神经网络上运行太多迭代过程的时候,参数w接近0,因为随机初始化w值时,它的值可能都是较小的随机值。所以在长期训练神经网络之前,w依然很小,在迭代过程和训练过程中,w的值会变得越来越大。当神经网络中参数w的值已经非常大了,early stopping要做的就是在中间点停止迭代过程,从而得到一个w值中等大小的佛罗贝尼乌斯范数。early stopping就表示提早停止训练神经网络
机器学习过程包括的步骤中,其中一步是选择一个算法来优化代价函数J,可以用梯度下降来解决这个问题,也可以用momentum算法、RMSprop、Adam等等。但是优化代价函数J之后,不希望发生过拟合,就可以通过正则化、扩增数据等方法去解决。在机器学习中,超级参数激增,算法的选择也变得复杂。如果用一组工具优化代价函数J ,留意w和b,让J(w,b)的值越小越好,机器学习就会变得简单。在预防过拟合的同时,也要减小方差。在一个时间做一个任务,这个原理有时被称为“正交化”。而early stopping的缺点就是不能独立地处理降低方差和预防过拟合这两个问题,因为提早停止梯度下降,也就是停止了优化代价函数J,所以代价函数J可能不是很小,同时又不希望出现过拟合。
early stopping的优点是只运行一次坡度下降,就可以找出w的较小值、中间值和较大值,而无需像L2正则化那样,尝试超级参数λ的很多值。
(个人比较偏向L2正则化,多尝试一些值,少做一些计算)

正则化输入

加速神经网络训练的方法之一就是归一化输入,它需要两个步骤,即零均值化和归一化方差(让x1、x2…的方差均为1)。然后用同样的方法调整测试集,而不是在训练集和测试集上分别预估μ和σ2,因为希望训练数据和测试数据都是通过相同的μ和σ2定义的相同数据转换,其中μ和σ2都是通过数据计算得到的。
如果输入特征处于不同范围内,可能有些特征值从0到1,有些从1到1000,那么归一化特征值就非常重要了;如果特征值处于相似范围内,那么归一化就不是很重要了。但执行这类归一化并不会产生什么危害。

梯度消失与梯度爆炸

当训练神经网络时,导数或坡度有时会变得非常大,或非常小,甚至以指数方式变小,这会加大训练的难度。

假设正在训练这样一个极深的神经网络:

假设使用线性激活函数g(z),忽略b,那么
y hat= w[L] w[L-1] w[L-2]… w[3] w[2] w[1]X = w[L] w[L-1] w[L-2]… w[3] w[2] z[1] = w[L] w[L-1] w[L-2]… w[3] z[2] = …,其中w[1]X = z[1],a[1] = g(z[1]) = z[1],a[2] = g(z[2]) = g(w[2]a[1])。
假设每个权重矩阵w[l] = [[1.5, 0], [0, 1.5]](比1稍微大一点),那么y hat= w[L][[1.5, 0], [0, 1.5]]L-1X = 1.5L-1X,对于一个深度神经网络来说,L值较大,那么y hat的值也会非常大,因此对于一个神经网络,y的值将爆炸式增长。
相反的,如果权重是0.5,它比1小,该项会变成0.5L,因此每个矩阵都小于1,假设x1、x2都是1,那么激活函数将变成0.5,0.5,第二层就是0.25…直到最后一项变成1/2L,所以作为自定义函数,激活函数的值将以指数级下降,它是与网络层数量L相关的函数。
权重w[l]只比1大一点,或者说只比单位矩阵大一点,深度神经网络的激活函数将爆炸式增长;如果w[l]比1略小一点,在深度神经网络中,激活函数将以指数级递减。

神经网络的权重初始化

针对梯度消失和梯度爆炸问题,提出了一个不完整的解决办法,虽然不能彻底解决问题,却有助于为神经网络更好地选择随机初始化参数。
先举一个神经单元权重初始化的例子,然后再演变到整个深度网络。

只有一个神经元时:

单个神经元可能有4个输入特征,从x1到x4,经过a=g(z)处理,最终得到y hat。
z = w1x1 + w2x2 +…+ wnxn ,令b=0,暂时忽略它。为了预防z值过大或过小,可以看出,n越大,希望 wi越小,最合理的方法就是设置 wi = 1/n,其中n表示神经元的输入特征数量。事实上要做的就是设置某层权重矩阵W[l]
W[l] = np.random.randn(shape) * np.sqrt(1/n[l-1])。
如果使用的是Relu激活函数,g[l](z)=Relu(z),那么方差设置为2/n,而不是1/n效果会更好。

梯度的数值逼近

在实施backprop时,有一个测试叫做梯度检验,其作用是确保backprop正确实施。为了逐渐实现梯度检验,首先对计算梯度做数值逼近

较大的三角形(底边从0.99-1.01)的高宽比值更接近于θ的导数,我们得到的是一个双边公差,而不是单边公差。
对于这个大三角形,右边式子就是它的高宽比:

g(θ)和大三角形的高宽比非常接近,逼近误差为0.0001。所以使用双边误差的方法更逼近导数。
在梯度检验和反向传播中使用该方法时,它与运行两次单边公差的速度一样,但结果更准确,因此还是很值得使用的。

梯度检验

梯度检验可以用来调试和检验backprop,非常好用。假设网络中含有参数W[1]、b[1]、…、W[L]、b[L]
1.为了执行梯度检验,首先需要把所有参数转换为一个巨大的向量数据,也就是把所有矩阵W转换成向量,作连接运算,得到一个巨型向量θ。代价函数J则有:J(W[1],b[1],…,W[L],b[L]) = J(θ)。

2.接着可以得到与W和b顺序相同的数据dW[1], db[1], …, dW[L], db[L]。用他们来初始化大向量dθ,dθ和θ的维度相同。同样的,dW[1]也转化成一个矩阵,且它与W[1]具有相同维度;db[1]与b[1]具有相同维度。经过相同的转换和连接运算操作之后,就可以把所有导数转换成一个大向量dθ。

3.dθ和代价函数J的梯度或坡度的关系就是实施梯度检验(grad check)的过程。现在J是超级参数θ的一个函数,J(θ) = J(θ1, θ2,…),不论超级参数向量θ的维度是多少。为了实施梯度检验,需要做的就是循环执行,从而对每个i,也就是对每个θ组成元素,使用双边误差计算dθapprox[i] = [J(θ1, θ2, … , θi+ε, …) - J(θ1, θ2, … , θi-ε, …)] / 2ε,只对θi加减ε,其他项保持不变。这个值应该逼近dθ[i] = δJ/ δθi ,对i的每个值都执行这个运算。

4.最后得到两个向量dθapprox和dθ,它们具有相同的维度,需要我们验证它们是否接近。
计算这两个向量的距离(欧几里得范数)||dθapprox - dθ||2,即误差平方之和,然后求平方根,得到欧式距离。
然后用向量长度做归一化,结果为||dθapprox - dθ||2 / [||dθapprox||2 + ||dθ||2],分母是用于预防这些向量太小或太大,分母使这个方程式变成比率。如果我们使用的ε为10-7,算出来的这个值小于或接近10-7,那么导数逼近就很有可能是正确的;如果算出来的值接近10-5,就需要注意了,也许这个值没问题,但还需要再次检查这个向量的所有项,确保没有一项误差过大,否则可能有bug;如果算出来是10-3,就需要很担心是否存在bug了,计算结果应该比10-3小很多才对,应检查所有的θ项,看是否有一个具体的i值,使得dθapprox和dθ大不相同,并用它来追踪一些求导计算是否正确。

关于梯度检验实现的注记

  1. 不要在训练中使用梯度检验,它只用于调试。
  2. 如果算法的梯度检验失败,要检查所有项。
  3. 在实施梯度检验时,如果使用正则化,要注意正则项(代价函数J不要少项)。
  4. 梯度检验不能与dropout同时使用。
    因此dropout可作为优化代价函数J的一种方法,但是代价函数J被定义为对所有指数极大的节点自己求和,而在任何迭代过程中,这些节点都有可能被消除,所以很难计算代价函数J。
  5. 在随机初始化过程中,当W和b接近0时,梯度下降的实施是正确的;但在运行梯度下降时,W和b变得更大,可能只有在W和b接近0时,backprop的实施才是正确的,但是当W和b变大时,它会变得越来越不准确的。

  1. 3 ↩︎

【深度学习】2.1深度学习的实用层面相关推荐

  1. 吴恩达深度学习笔记5-Course2-Week1【深度学习的实用层面】

    改善深层神经网络:超参数调试.正则化以及优化 深度学习的实用层面 一.训练.验证.测试集 样本数据分成以下三个部分: 训练集(train set): 用于对模型进行训练. 验证集(hold-out c ...

  2. Andrew Ng - 深度学习工程师 - Part 2. 改善深层神经网络:超参数调试、正则化以及优化(Week 1. 机器学习的实用层面)...

    ===========第1周 机器学习的实用层面================ ===1.1 训练/开发/测试=== 早期机器学习时代(数据规模较小),如果不需要dev set,常见的划分有 70% ...

  3. 3.深度学习的实用层面

    第一周:深度学习的实用层面 项目进展得一个关键性得因素就是划分高质量得训练集,验证集,测试集.这有助于提高循环迭代得效率.验证集也称为development set 也称为dev set. 验证集主要 ...

  4. 吴恩达【优化深度神经网络】笔记01——深度学习的实用层面

    文章目录 引言 一.训练集/验证集/测试集(Train/Dev/Test sets) 1. 数据集选择 2. 补充:交叉验证(cross validation) 二.偏差和方差(Bias/Varian ...

  5. 自学机器学习、深度学习、人工智能的学习资源集合

    本人美国top50本科统计就读,想当初我的机器学习和深度学习就是靠自学入门的.现在行业中对于人工智能自学这一方法众说纷纭,也有很多人质疑那些通过自学获得的技术及实力.就我个人而言,我体验过各种各样的课 ...

  6. 基于深度学习下的稳定学习究竟是什么?因果学习?迁移学习?之一

    机器学习 | 稳定学习 | DGBR 深度学习 | 迁移学习 | 因果学习 众所周知,深度学习研究是机器学习领域中一个重要研究方向,主要采用数据分析.数据挖掘.高性能计算等技术,其对服务器的要求极其严 ...

  7. 深度强化学习系列(1): 深度强化学习概述

    机器学习是人工智能的一个分支,在近30多年已发展为一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.计算复杂性理论等的学科.强化学习(RL)作为机器学习的一个子领域,其灵感来源于心理学中的行为主 ...

  8. 动手学习深度学习-前言(深度学习介绍) 学习笔记

    前言 机器学习(machine learning,ML)是强大的可以从经验中学习的技术. 通常采用观测数据或与环境交互的形式,机器学习算法会积累更多的经验,其性能也会逐步提高. 相反,对比电子商务平台 ...

  9. SVO 学习笔记(深度滤波)

    SVO 学习笔记(深度滤波) 这篇博客 论文中的深度滤波 深度滤波的代码流程 更新Seed对象 初始化Seed对象 结尾 这篇博客  这篇博客将介绍SVO论文中的Mapping部分,主要介绍深度滤波器 ...

  10. 吴恩达深度学习ppt_【深度学习】吴恩达谈深度学习:数据科学家需要知道这些...

    数据科学家需要什么深度学习知识?吴恩达 (Andrew Ng)用机器看图说话,机器问答等实例告诉大家.本文是吴恩达在2015年12月在ExtractConf上的演讲摘录,含20分钟视频与ppt. An ...

最新文章

  1. cocoapods使用教程
  2. CSS布局基础之二认识Viewport
  3. 关于base target=_self 等
  4. leetcode 131. Palindrome Partitioning | 131. 分割回文串(递归解法)
  5. 蓝牙模块音频BLE数据数传串口AT指令的使用方法
  6. 其他机器无法访问php,PHP 局域网其他机器无法访问的问题
  7. xshell6 不更新无法使用_世纪金花商联卡无法正常使用 客服:因门店面临改造,涉及品牌、规则每天都在更新...
  8. 学不动的前端人,该如何跟上前端技术的发展
  9. 2999元起!苹果悄然发布两款iPad新品 升级至A12处理器
  10. linux shell指令 amp,shell入门基础amp;常见命令及用法
  11. conda添加清华镜像源在cmd环境下执行下列命令
  12. 马来西亚国家银行暂无发行央行数字货币计划
  13. PostgreSQL 摘得 DB-Engines 2020 年度数据库
  14. APE到底比MP3文件“好听”多少
  15. Android基于ksoap2调用WCF服务(二):Android篇
  16. B bearBaby loves sleeping
  17. 仓储室内定位系统—企业物流的“数字化”转型
  18. [转]在线生成条形码(39码、EAN-13)
  19. python 宝典 笔记 第十二章 存储数据和对象 (各种对象转换成字符串)
  20. linux lvm分区表丢失,重启系统后lvm分区没了,附带错误信息

热门文章

  1. 光驱刻录空盘提示函数不正确
  2. linux shell搜索某个字符串,然后在后面加上字符串?字符串后面插入字符串?sed字符串后面插入字符串?...
  3. 任正非,马云,马化腾:真正顶级厉害的人,都有一个共同特点
  4. 【源码共读】Python 标准模块 collections 中 Counter 类详解
  5. 关于Error:Execution failed for task ':app:transformClassesWithDexForDebug'的解决方法
  6. 使用proxychains匿名浏览,清理痕迹(六)
  7. 基于whisper模型的在线添加视频字幕网站(持续更新)
  8. 人类2100年长啥样?3D建模模拟出来让人惊掉下巴!
  9. 10个免费网页统计与分析工具
  10. 百度云离线下载含有违规内容检测方法分析