文章目录

  • 引言
  • 什么是机器学习策略
  • 正交化
  • 单实数评估指标
  • 优化以及满足指标
  • 训练/验证/测试集划分
  • 验证集和测试集的大小
  • 什么时候改改变验证/测试集和指标
  • 为什么要和人类的表现做比较
  • 可避免偏差
  • 理解人类的表现
  • 超过人类的表现
  • 改善模型的表现
  • 参考

引言

本文是吴恩达深度学习第三课:如何构建你的机器学习项目,也就是机器学习策略。从这次课程中可以学到如何诊断在机器学习系统中的错误、知道如何最有效的减少错误、懂得复杂的机器学习设置,比如错开的训练/测试集和如何和人类水平的表现进行比较、知道如何应用端到端学习,迁移学习和多任务学习。

第三课有以下两个部分,本文是第一部分。

  1. 机器学习策略(一)
  2. 机器学习策略(二)

什么是机器学习策略


假设你正在调试你的猫分类器,经过一段时间的调试,你的系统有90%的准确率,但是对你的应用还不够好,你可能有很多改善系统的想法。

比如说,

  • 收集更多的数据
  • 收集更多不同姿势的猫图片
  • 让梯度下降法迭代更多次数
  • 尝试不同的优化算法,如Adam
  • 尝试更大的网络
  • 尝试更小的网络
  • 试试Dropout
  • 增加L2正则
  • 修改网络的架构
    • 激活函数
    • 隐藏层单元数

你可能想尝试很多想法,但是如果尝试的方向不对,完全有可能白白浪费时间往错误的方向推进。

如果有快速有效的方法能判断哪些想法是靠谱的,甚至提出新的想法。本文就来告诉大家一些分析机器学习问题的方法,可以指引大家朝着最有希望的方向前进。

正交化

从上面可以看到,我们可以尝试的东西太多了,有时候选择太多了也不好,不知道从何下手。

本节告诉大家如何清晰的知道要调整什么。


这里用老式电视和小车为例,老式电视会有一些按钮来调节电视的画面。比如一个按钮调整宽度,另一个按钮调整高度,还有其他按钮可以旋转屏幕。

相比之下,如果有一个按钮调整的是0.1×0.1 \times0.1×图像高度 $ + 0.3 \times$图像宽度 $ - 1.7 \times$梯形角度等。即用一个按钮能微调所有的功能,如果有这样的按钮,几乎无法把电视调好,比如为了调高度,不得不影响其他属性。

在这种情况下,正交化指的是上面设计的按钮,使得旋转每个按钮只能调整一个属性。

小车的例子说一辆车的移动由方向盘、油门和刹车控制,它们一次也只能调整一个属性,也是正交化的。

所以正交化指的是,一个方向只能改变一个性质。


比如你不能同时改变方向盘的角度和汽车的速度,这样很难让汽车以你想要的速度和角度前进。这里正交意味着互为90°。

这和机器学习有什么关系呢,要弄好一个监督学习系统,通常需要确保四件事情。

  • 系统在训练集上得到不错的效果(可能意味着达到人类水平的表现,下篇文章会详细分析)
  • 系统在验证集上也有很好的表现
  • 系统在测试集上也有很好的表现
  • 最后系统在现实生活中也表现很好。

和电视例子一样,如果你的算法不能很好的拟合训练集,你可能想要一个(组)按钮来调整你的算法,让它能很好地拟合训练集。

来调整的按钮可能是训练更大的网络、切换到更好的优化算法等等。

相比之下,如果发现算法对验证集的拟合很差,那么也应该有一组独立的按钮来改善这种情况。

此时,假设算法已经在训练集上表现很好了,这是你的按钮可能是正则化、增大训练集(可以更好的归纳验证集的规律)。

像电视例子一样,假设现在调好了电视图像的高度和宽度,如果系统在验证集上做的很好,但在测试集上做得不好呢? 那么需要的按钮可能是更大的验证集(因为此时可能对验证集过拟合了)。

最后,如果在测试集上做得很好,但是在现实世界里的表现不行,比如一旦用户上传了自己的猫照片,你的分类器就无法准确识别出来。

这意味着你需要回去改变验证集或成本函数,因为如果根据某个成本函数,系统在验证集上做的很好,但无法反映算法在现实世界中的表现,这意味着要么验证集分布设置的不正确,可能验证集设置的是网络抓取的精美图片,而现实世界上用户拿自己的手机任意拍摄的图像。要么是成本函数策略的指标不对,可能测量的是图像的亮度。

现在我们应该清楚了如果机器学习算法出了问题,到底是上面四个问题中的哪一个,知道如何去调整。

值得指出的是,早停法(early stopping)这里没用到,因为早停法会同时影响(一般是抑制)对训练集的拟合和改善对开发集的表现。

它违背了我们说的正交化。

单实数评估指标

无论是调整超参数,或者是尝试不同的算法,你会发现如果有一个单实数评估指标,你的进展会快得多。

下面来看一个例子,假设对于之前的猫分类器,实现了两个不同的模型(可能是同一个算法,但是参数不同;或者是两个不同的算法)。


评估你分类器的一个合理方式是使用查准率(准确率-Precision)和查全率(召回率-Recall)。

真实情况↓\模型预测→ True False
True TP FN
False FP TN
  • TP(True Positive)——将正类预测为正类的数量
  • FN(False Negative)——将正类预测为负类的数量
  • FP(False Positive)——将负类预测为正类的数量
  • TN(True Negative)——将负类预测为负类的数量

其中,查准率:
P=TPTP+FPP= \frac{TP}{TP +FP} P=TP+FPTP​

查全率:
R=TPTP+FNR= \frac{TP}{TP +FN} R=TP+FNTP​

查准率说的是分类器标记为猫的例子中有多少是真的是猫。

所以分类器A有95%的查准率意味着分类器A说某张图片里有猫的时候,有95%的机会真的是猫。

查全率就是对于所有真猫图片,你的分类器正确识别出了多少。

所以分类器A查全率是90%,意味着对于所有的猫图片,分类器A准确地分辨出了其中的90%。

事实证明,查准率和查全率之间往往需要折衷。如果你考虑两者的话,你希望当你的分类器说某张图中有猫的时候,有很大的概率里面真的有一只猫。
但是对于所有的猫图片,你也希望系统能够将大部分都识别出来。

现在有个问题是,分类器A在查全率是表现得更好;而分类器B在查准率上表现的更好。
此时你无法判断哪个分类器更好,所以需要一个新的评估指标能结合查准率和查全率。

就是F1值(F1 score),是查准率和查全率的调和均值,

F1=21P+1RF_1 = \frac{2}{\frac{1}{P} + \frac{1}{R}} F1​=P1​+R1​2​


在这个例子中,我们可以看到分类器A的F1值更高。

所以有一个明确的验证集加上一个单实数评估指标 就能快速的判断哪个分类器更好。

下面来看另一个例子,假设开发一个应用,用户是四个地址大区的爱猫人士。


假设上面是不同的分类器在不同的大区上得到的误差率。我们很难直接根据上面的数字判断出哪个分类器更好。

如果分类器更多的话,就更难了。

所以建议除了计算每个区的错误率外,还额外计算一下平均值。

这里假设平均值是一个合理的单实数评估指标,这样我们就能快速知道哪个分类器更好。
这里分类器C的平均误差率最低。
此时我们就可以继续优化分类器C。

优化以及满足指标

有时要把所有的东西组合成单实数评估指标并不容易。在这种情况中,有时设立满足和优化指标是很有用的。


假设在这个例子中你关注的是猫分类器的准确率(可以是F1值或其他精确度量)和运行时间。

这里分类器A需要80毫秒来识别一副图像,B需要95毫秒,而C需要1.5秒。

你当然可以将它们组合成线性关系来作为整体评价指标。


假设对运行时间有硬性要求,还可以这样:

比如说运行时间必须小于100毫秒,在这个条件下你希望准确率越高越好。

这里运行时间就是我们说的满足指标(Satisficing), 优化(Optimizing) 是准确率越高越好。

这种方式是对准确率和运行时间进行合理的通盘考虑。

通过定义优化以及满足指标,我们就有了挑选最优分类器的明确方向。
这上面的例子中最优的是分类器B。

更一般的说,如果你有N个关心的指标,有时候选择其中一个加以优化是个合理的策略,剩下的N-1个就是满足指标,意味着它们只要达到某个阈值就可以了。

下面举另一个例子,假设你要做唤醒词系统。

就是你好小度,HI siri。

这就是你唤醒某个声控设备所用的语句。

因此你可能关心唤醒词系统的准确率,就是某人说了某个唤醒词,实际上能唤醒你的设备的可能性有多大。

也有可能会关心FP的次数,就是没人说这个唤醒词,设备却被唤醒的概率有多大。

所以这种情况下,组合这两个评估指标的一个合理做法可能就是最大化准确率(优化),同时要确保24小时内只有一次不是被唤醒词触发唤醒(满足指标)。

这些验证集必须在训练集/验证集/测试集上评估计算,所以还有一件要做的事情就是建立训练集/开发集/测试集。

训练/验证/测试集划分

在本节中主要介绍如何设置验证集(development set,或者叫开发集)和测试集。

机器学习的工作流程是,尝试了很多思路,在训练集上训练不同的模型,然后用验证集来评估不同的思路,从中选择一个。然后不断迭代取改善验证集的性能,直到最后得到一个让你满意的成品。 然后再用测试集去评估。

以上面的猫分类器为例,假设你开发了一个猫分类器,然后在下面这些地区运营:

那如何设置验证集合测试集呢

一种不好的做法是选择其中4个地区的数据构成验证集,然后剩下的四个地区数据构成测试集。

为什么说不好呢,因为这个例子中验证集和测试集来自不同的分布。通常在一个分布中表现好的分类器,在另一个分布中表现不会很好。

所以让你的验证集和测试集来自同一分布很重要,记住一个很重要的点,设定验证集和你的评估方法就像设定你的目标。


因为你一旦确定了验证集合评估方法,你就可以快速地尝试各种不同的方法,进行试验,很快利用验证集和评估方法来选择最好的一个。

所以让测试集和验证集来自不同的分布,就像你用很长的时间瞄准一个目标,但是过了很久,瞄准好了以后,在测试集测试的时候变成要打另一个目标。

所以上面的例子中,推荐把所有的数据随机打乱(类似洗牌操作)然后分为验证集和测试
集。让验证集和测试集都拥有八个地区的数据,这样它们的分布就是一样的了。

下面是以真实情况改编的例子。

某个机器学习团队花费了几个月来优化一个验证集,其中包括中产地区贷款审批信息。这个机器学习的任务是对某一贷款申请的输入XXX,预测该申请是否应该通过,以及为什么。

开发集来自中产地区的贷款申请,做了几个月的努力后,团队突然决定在低收入地区测试这个模型。因为中产地区的数据和低产地区的数据分布很不一样,因此这个它们花费了很大精力的分类器在低产地区表现的很糟糕。以至他们不得不重新花时间训练一个新的模型。

所以,选择同分布的验证集和测试集要能反映出将来预计得到的数据和你认为重要的数据

验证集和测试集的大小


在机器学习早期,数据量少的时候,按照上面的比例划分训练集/验证集/测试集的大小是合适的。

在现代机器学习中,通常都会操作规模大得多的数据集,比如有100万个样本。


此时训练集/验证集/测试集 按照98%/1%/1%的比例分就可以了。

因为你有100万份数据,1万份数据对于验证集和测试集来说已经足够了。

那测试集大小呢,记住测试集的目的是完成系统开发后来评估投产系统的性能,让你的训练集足够大,能以高置信度评估系统整体性能就可以了。通常有1万个样本就有足够的置信度来给出性能指标了。

也有些应用不需要对系统性能有置信度很高的评估,也许只要训练集合验证集(也有人说是一个训练集合一个测试集)就可以了。

这里建议还是不要省略测试集,有个单独的测试集会让你比较安心。

什么时候改改变验证/测试集和指标

假设你决定构建一个猫分类器,试图找到很多猫的照片,并展示给爱猫人士看。你决定使用分类误差作为评估指标。

此时算法A和B的表现如上。看起来A的表现更好,但是当你实际测试这些算法时,发现算法A由于某种原因,会将很多色情图片也分类为猫!

如果使用A算法,确实识别准确率会高一些,但也会向用户推送黄图。相比之下,算法B的错误率虽然高一点,但是不会有黄图。显然这种情况下算法B更好。

但是如果根据你设定的评估指标,会更倾向于选择算法A,而实际上你应该选择算法B。

所以在这种情况下,当你的评估指标无法正确地对算法进行优劣排序时,这时就应该修改评估指标,可能也要修改验证集或测试集。

假设你的评估指标是这样的:

1mdev∑i=1mdevI(ypred(i)≠y(i))\frac{1}{m_{dev}} \sum_{i=1}^{m_{dev}} I(y_{pred}^{(i)} \neq y^{(i)}) mdev​1​i=1∑mdev​​I(ypred(i)​​=y(i))
mdevm_{dev}mdev​是验证集,I(⋅)I(\cdot)I(⋅)是指示函数。

这个指标的问题在于将黄图和非黄图一视同仁,改良这个评估指标的一种方法是在这里加入一个权重项w(i)w^{(i)}w(i):

1mdev∑i=1mdevw(i)I(ypred(i)≠y(i))\frac{1}{m_{dev}} \sum_{i=1}^{m_{dev}} w^{(i)} I(y_{pred}^{(i)} \neq y^{(i)}) mdev​1​i=1∑mdev​​w(i)I(ypred(i)​​=y(i))

当x(i)x^{(i)}x(i)不是黄图时令w(i)=1w^{(i)}=1w(i)=1,否则为更大的数值101010或100100100。

所以当算法错误地将黄图分类为猫时,会得到更大的误差值。

如果需要归一化,还要对w(i)w^{(i)}w(i)进行求和:

1∑iw(i)∑i=1mdevw(i)I(ypred(i)≠y(i))\frac{1}{\sum_i w^{(i)}} \sum_{i=1}^{m_{dev}} w^{(i)} I(y_{pred}^{(i)} \neq y^{(i)}) ∑i​w(i)1​i=1∑mdev​​w(i)I(ypred(i)​​=y(i))

这里关于如何定义新的指标不是重点,而是当你发现你的指标无法胜任时,就要考虑更换指标。


我们要把机器学习任务看成两个独立的步骤,用打靶作比喻,第一步是设定目标,即定义评估指标;

如何精确瞄准,如何命中目标是第二步,即如何是算法在评估指标上表现最好。

下面举另一个指标和验证集/测试集出问题的例子。


假设你的两个猫分类器A和B在以网上精美的照片作为测试集的表现分别为3%和5%的错误率。

但也许你在部署算法时发现算法B看起来表现更好,你发现你一直用从网上下载的高质量图片训练,但当你部署到线上后,算法应用到用户上传的图片时,这些图片取景不专业,可能还很模糊

这时你发现算法B在用户的图片上表现得更好,这是另一个指标和验证集/测试集出问题的例子。

所以方针是,如果你在指标+当前的验证集/测试集上表现的很好,但是实际应用时表现不好,那么就应该修改指标或验证集/测试集。

此时应该取用户上传的图片作为验证/测试集。

为什么要和人类的表现做比较

如何比较机器学习系统和人类的表现这个问题越来越受到重视。

因为现在有些机器学习模型的表现变得很好了,甚至比人类的表现还要好。


随着时间的推移,机器学习算法的表现越来越好,甚至超过了人类的表现,但是随后增长的越来越慢,但是无法超过理论上最好的表现,这是理论上最好的表现就是贝叶斯最优错误率,一般认为是理论上可能达到的最优错误率。

比如对于猫分类器来说,有些图片非常模糊,不管是人类还是机器都无法判断该图片中是否有猫。所以完美的准确度可能不是100%。

这里为什么当机器学习算法超过人类的表现后进展会慢下来,一个原因是人类水平在很多任务中离贝叶斯最优错误率已经不远了,比如人类非常擅长识别图片。

第二个原因是,只要机器学习算法的表现比人类的表现更差,那么实际上可以使用某些工具来提高性能,而一旦超过了人类的表现,这些工具就没那么好用了。

人类确实擅长做很多任务,只要机器学习比人类表现差,你就可以:

  • 人工标记数据,这样就有更多的数据喂给机器学习算法
  • 分析为什么人能做对,算法却做错了
  • 更好地分析偏差和方差

而一旦你的算法比人类表现还好了,上面三种策略就不好用了。

可避免偏差

什么是可避免偏差呢,举个例子说明

以猫分类器为例,假设人类有几乎完美的准确度,人类水平的错误率是1%。

此时,你的学习算法有8%的训练错误率和10%的验证错误率。
假设你想在训练集上得到更好的效果,因为你的算法此时和人类表现还有很大的察觉,说明你的算法拟合的不好。

所以从减少偏差和方差这个角度来看,此时我们需要减少偏差。
此时可以训练更大的神经网络,或者让梯度下降迭代更多。

但现在我们看看同样的训练错误率和验证错误率的情况下,假设人类的表现不是1%,而是7.5%。

也许因为数据集中的图片非常模糊,哪怕人类也很难准确判断。

此时你会觉得系统在训练集上的表现还可以,它只比人类的表现差一点点,此时你可能想减少方差,那么可以试试正则化。

用人类水平的表现代贝叶斯最优错误率,在计算机视觉领域中是非常合理的,因为人类十分擅长计算机视觉任务的,根据定义,人类的误差率会比贝叶斯错误率要高一点,因为贝叶斯错误率是理论上的上限。

所以这里比较意外的是取决于人类水平错误率是多少,具有同样的训练错误率和验证错误率的情况下,左边的例子中我们认为要减少偏差,而右边的例子要减少方差。

左边的例子中,你认为8%的错误率很高,你觉得可以降到1%;而在右边的例子中,你认为贝叶斯错误率是7.5%,你觉得没有太多的改善空间了,此时你决定去改善验证集的错误率。


这里把贝叶斯错误率和训练错误率之间的差值称为可避免偏差,你希望能一直提高训练集表现。

而训练错误率和验证错误率之间的差值说明你的算法在方差问题上还有很多改善空间。

可避免偏差这个词说明有一些别的偏差或错误率有个无法超越的最低水平,比如

红框的这个例子,你不能说你算法的训练错误率是8%,而应该说可避免偏差可能在0.5%左右。此时验证集和训练集的差值有2%,因此你要改善验证集上的表现,降低方差。

而左边的例子中,可避免偏差为7%,此时需要专注于减少偏差。

只要我们理解了人类水平表现,就可以在不同的场景中专注于不同的策略。
下一节中我们深入了解人类水平表现的真正意义。

理解人类的表现

我们用人类的表现来估计贝叶斯错误率。

下面来看看医学图像分类例子,

同样是人类水平的表现,但是因为术业有专攻,有些人会更擅长某个方面,这里比如是医学图像分类。

假设普通人经过简单的学习能达到3%的错误率;而专业的医生能达到1%的错误率;资深专家级医生能达到0.7%的错误率;假设有个团队有很多专家级医生,他们通过讨论作出判断,能达到0.5%的错误率。

那么应该如何界定人类水平错误率呢?

如果你想要估计贝叶斯错误率,那么专家级医生团队经过讨论后可以达到0.5%的错误率,根据定义,最优错误率必须在0.5%以下。
虽然可能有另外一个团队能做得更好,但是我们知道最优错误率不能高于0.5%。

因此,这里我们可以用0.5%来估计贝叶斯错误率,所以将人类水平定义为0.5%。


为了部署系统,也许人类水平错误率的定义可以不一样,只要你的系统能超过专业医生的表现,那么你的系统就有部署的价值了。

要点是在定义人类水平错误率时要清楚你的目标所在,如果要表明你可以超越单个人类,那么就有理由在某些场合部署你的系统。

但是如果你的目标是估计贝叶斯错误率,那么应该选上面最小的值。

下面来看一个错误率分析的例子。

在医学图像识别中,假设你的算法的训练误差是5%,验证误差是6%,而人类水平的表现取决于你如何定义,可以是1%、0.7%或0.5%。


在这个例子中,不管你人类水平表现如何定义,可避免偏差都在4%到4.5%之间,大于方差错误率1%。

所以这种情况下,你应该专注于减少偏差的技术。

现在来look第二例子。

假设你的算法的训练误差是1%,验证误差是5%,而人类水平的表现取决于你如何定义,可以是1%、0.7%或0.5%。

此时不管你如何定义人类水平表现,你的可避免偏差都在0%到0.5%之间,远小于方差错误率的4%。

所以此时应该专注于减少方差的技术。

上面说的两个例子中如何定义人类水平表现似乎都关系不大,真正关系大的是下面这个例子:

此时假设你的算法的训练误差是0.7%,验证误差是0.8%。

此时如果你定义人类水平表现为0.7,那么可避免偏差就是0%,就可以忽略可避免偏差了,此时应该试试能否在验证集上做得更好; 而如果定义人类水平表现为0.5%,此时可避免偏差就是0.2%,是你测量到的方差问题0.1%的两倍,此时就要考虑减少偏差。

从这些例子中,希望大家能看到为什么当你的算法接近了人类水平的表现后进展会越来越难。

如果你只知道单个专业医生能达到1%错误率,在第三个例子中就很难知道该去减少训练集的偏差还是验证集的方差了。

这种问题只会出现在你的算法已经做得很好的时候,所以机器学习项目的进展在已经做得很好的时候,很难更进一步。


今天这节内容和之前的不同之处在于,之前我们比较的是训练错误率和0%,直接用它们的差值来估计偏差,因为有时候贝叶斯错误率是不可能为0%的,因此比较训练错误率和贝叶斯错误率更加合理。这样可以帮助我们更好的做出决策,正确选择减少偏差的策略或减少方差的策略。

超过人类的表现

有些特定的任务中,机器学习模型能超过人类的表现。
我们知道机器的表现在接近人类水平的时候进展会变得越来越慢。


还是以医学图像识别为例,假设专家组的误差率是0.5%,单个医生的误差率是1%,而你的算法训练误差率是0.6%,验证误差率是0.8%。

此时可避免偏差是多少呢,

此时应该定义人类水平表现为0.5%的误差率,因此可避免偏差和方差分别为0.1%和0.2%。

下面看另一组数据,


假设现在你的算法训练误差率为0.3%,验证误差率为0.4%,那此时可避免偏差是多少呢?

因为你的训练误差率为0.3%,可能意味着你过拟合了0.2%,还是因为贝叶斯错率率实际上是0.1%呢。

基于本例给出的信息,实际上没有足够的信息来判断你的算法应该减少偏差还是方差。

并且在这种情况下,你的算法已经超过了专家团队的结果,此时通过人类直觉去判断算法还能在什么方向优化就很难了。

现在有机器学习有很多任务可以超越人类水平了,比如:

  • 网络广告-估计某个用户点击广告的可能性
  • 推荐系统
  • 物流预测-从A地到B地开车需要多久
  • 贷款申请-预测某人是否会还款

这四个例子都是从结构化数据中学习得来的,这里你可能有个数据库来记录用户点击网页的历史、用户的购物数据库、从A地到B地需要多久的数据库、历史贷款申请及结果数据库。

这些并不是自然感知问题(计算机视觉、语音识别、自然语音处理等),人类在自然感知任务中往往表现非常好,对机器来说,在自然感知任务的表现要超越人类要更难一些。

并且上面的四个例子都有大量的数据,可能机器能看到的数据量比人类能看到的都多,这样能容易超越人类的水平。

改善模型的表现

我们已经学习了正交化、如何设立开发集和测试集、用人类水平来估计贝叶斯误差以及如何估计可避免偏差和方差。

本节就把它们组合起来,写成一套指导方针。

想让一个监督学习算法达到实用,基本上希望能够完成两件事情。

  1. 算法对训练集拟合的很好(可避免误差就很低)
  2. 在验证集/测试集上也表现很好(方差不大)

根据正交化的思想,有两组技巧可以修正可避免偏差问题,比如训练更大的神经网络、训练更久;
还有一套独立的技巧可以用来处理方差问题,比如正则化或收集更多训练数据。

参考

  1. 吴恩达深度学习 专项课程

吴恩达深度学习——机器学习策略(一)相关推荐

  1. 深度学习入门首推资料--吴恩达深度学习全程笔记分享

    本文首发于微信公众号"StrongerTang",可打开微信搜一搜,或扫描文末二维码,关注查看更多文章. 原文链接:(https://mp.weixin.qq.com/s?__bi ...

  2. 吴恩达深度学习教程——中文笔记网上资料整理

    吴恩达深度学习笔记整理 内容为网上博主博文整理,如有侵权,请私信联系. 课程内容: Coursera:官方课程安排(英文字幕).付费用户在课程作业中可以获得作业评分,每门课程修完可获得结课证书:不付费 ...

  3. 吴恩达深度学习资料 Quiz+ 编程+ ppt+学习笔记(可jupyter笔记本实战)

    网上有很多关于吴恩达深度学习的资源(视频,或者是编程的讲解) 我找了很长时间,发现了可以进行自己应用jupyter笔记本进行编程的方式. 里面有每节课的Quiz以及应用jupyter笔记本进行每周的编 ...

  4. 吴恩达.深度学习系列-C4卷积神经网络-W2深度卷积模型案例

    吴恩达.深度学习系列-C4卷积神经网络-W2深度卷积模型案例 (本笔记部分内容直接引用redstone的笔记http://redstonewill.com/1240/.原文整理的非常好,引入并添加我自 ...

  5. 加拿大银行首席分析师对吴恩达深度学习课程的领悟心得

    吴恩达先生(Andrew Ng)的3门课程都超级有用,教会了我许多实用的知识.吴教授擅长过滤掉流行词汇,用一种清晰简洁的方式解释了一切.比如他阐明了监督式深度学习(supervised deep le ...

  6. 吴恩达深度学习笔记——结构化机器学习项目(Structuring Machine Learning Projects)

    深度学习笔记导航 前言 传送门 结构化机器学习项目(Machine Learning Strategy) 机器学习策略概述 正交化(orthogonalization) 评价指标 数字评估指标的单一性 ...

  7. 吴恩达深度学习笔记(四)

    吴恩达深度学习笔记(四) 卷积神经网络CNN-第二版 卷积神经网络 深度卷积网络:实例探究 目标检测 特殊应用:人脸识别和神经风格转换 卷积神经网络编程作业 卷积神经网络CNN-第二版 卷积神经网络 ...

  8. 【吴恩达深度学习】自然语言处理---个人总结(持续更新)

    这门大课主要知识点有: 吴恩达深度学习专业-自然语言处理--个人总结 一.GRU--Gated Recurrent Unit 二.LSTM-- Long short-term memory 三.Wor ...

  9. [转载]《吴恩达深度学习核心笔记》发布,黄海广博士整理!

    红色石头 深度学习专栏 深度学习入门首推课程就是吴恩达的深度学习专项课程系列的 5 门课.该专项课程最大的特色就是内容全面.通俗易懂并配备了丰富的实战项目.今天,给大家推荐一份关于该专项课程的核心笔记 ...

  10. 737 页《吴恩达深度学习核心笔记》发布,黄海广博士整理!

    点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 深度学习入门首推课程就是吴恩达的深度学习专项课程系列的 5 门课.该专项课程最大的特色就是内容 ...

最新文章

  1. Java 多线程(七) 线程间的通信
  2. MySQL【环境搭建 03】腾讯云 Linux 环境踩坑 loading shared libraries: libnuma.so.1 + quit without updating PID file
  3. 左右声道测试_小说:少年参加测试,直接挑战十只狗恐兽,众人见了惊呼:SS级...
  4. pip: command not found
  5. 今后几个月的IT读书计划
  6. Windows Server 2008 R2之二从介质安装 AD DS
  7. pandas之Dataframe 菜鸟教程
  8. 17_多易教育之《yiee数据运营系统》用户画像-技术架构方案篇
  9. 绿幕抠图与无绿幕抠图区别
  10. Core、处理器(CPU)核、处理器(CPU)、处理器(CPU)架构、微结构、指令集、指令集架构、ARMv7 内核架构
  11. 手机浏览网页或打开app时莫名弹出支付宝领红包界面的原因及预防措施
  12. 详解电脑怎么截图按什么键
  13. Kmplayer音频设置
  14. Html页面上展示Excel表格 --Handsontable
  15. 计算机进程管理与虚拟机实验答案,实验四虚拟机实验报告解读.doc
  16. 曾国藩:成大事者不纠结
  17. CUDA、CUDNN在windows下的安装及配置
  18. copper铜, bronze青铜和brass黄铜
  19. 挖掘城市ip_大咖齐聚泉州 为城市IP发声
  20. 一文读懂区块链隐私技术系列之环签名

热门文章

  1. ORACLE 字符串操作
  2. PPC丢失后,手机信息如何保护?(C#)
  3. 程序员面试题之解读构造函数
  4. 【vs2019MFC】msvcrtd.lib(exe_main.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 “int __cdecl invoke_mai
  5. 含有空格或者逗号的字符串反转最有效的办法——栈
  6. Apache Flume的介绍安装及简单案例
  7. 疯狂Java讲义(十一)---- 初始化块
  8. ADFS3.0 Customizing the AD FS Sign-in Pages
  9. C# Invoke 和 BeginInvoke的区别和共同点
  10. (LINQ 学习系列)(3)学习Linq的几个基础知识