《python深度学习》笔记---4.1-4.2、机器学习的四个分支
一、总结
一句话总结:
弄清楚分类便于构建知识架构:监督学习、无监督学习、自监督学习、强化学习
1、虽然监督学习主要包括分类和回归,但还有更多的奇特变体,主要包括如下几种?
序列生成(sequence generation):给定一张图像,预测描述图像的文字。序列生成有时 可以被重新表示为一系列分类问题,比如反复预测序列中的单词或标记。
语法树预测(syntax tree prediction):给定一个句子,预测其分解生成的语法树。
目标检测(object detection):给定一张图像,在图中特定目标的周围画一个边界框。这 个问题也可以表示为分类问题(给定多个候选边界框,对每个框内的目标进行分类)或 分类与回归联合问题(用向量回归来预测边界框的坐标)。
图像分割(image segmentation):给定一张图像,在特定物体上画一个像素级的掩模(mask)。
2、无监督学习?
数据中的相关性:无监督学习是指在没有目标的情况下寻找输入数据的有趣变换,其目的在于数据可视化、 数据压缩、数据去噪或更好地理解数据中的相关性。
必备技能:无监督学习是数据分析的必备技能,在解 决监督学习问题之前,为了更好地了解数据集,它通常是一个必要步骤。
降维和聚类:降维(dimensionality reduction)和聚类(clustering)都是众所周知的无监督学习方法。
3、自监督学习?
没有人类参与的监督学习:自监督学习是没有 人工标注的标签的监督学习,你可以将它看作没有人类参与的监督学习。
标签从输入数据生成:标签仍然存在(因为 总要有什么东西来监督学习过程),但它们是从输入数据中生成的,通常是使用启发式算法生 成的。
自编码器:自编码器(autoencoder)是有名的自监督学习的例子,其生成的目标就是未经 修改的输入。
4、自监督学习的例子?
自编码器:自编码器(autoencoder)是有名的自监督学习的例子,其生成的目标就是未经 修改的输入。
【即用未来的输入数据作为监督】:同样,给定视频中过去的帧来预测下一帧,或者给定文本中前面的词来预测下一个词, 都是自监督学习的例子[这两个例子也属于时序监督学习(temporally supervised learning), 即用 未来的输入数据作为监督]。
5、强化学习?
玩Atari游戏:强化学习一直以来被人们所忽视,但最近随着Google 的 DeepMind 公司将其成功应用于学 习玩 Atari 游戏(以及后来学习下围棋并达到最高水平),机器学习的这一分支开始受到大量关注。
智能体(agent):在强化学习中,智能体(agent)接收有关其环境的信息,并学会选择使某种奖励最大化的行动。 例如,神经网络会“观察”视频游戏的屏幕并输出游戏操作,目的是尽可能得高分,这种神经 网络可以通过强化学习来训练。
强化学习主要在游戏领域:目前,强化学习主要集中在研究领域,除游戏外还没有取得实践上的重大成功。
6、为什么评估模型分为三个集合:训练集、验证集和测试集,而不是训练集和测试集,在训练集上训练模型,然 后在测试集上评估模型。这样简单得多?
调节模型配置:原因在于开发模型时总是需要调节模型配置,比如选择层数或每层大小[这叫作模型的超 参数(hyperparameter),以便与模型参数(即权重)区分开]
需要使用模型在验证数据上的性能:这个调节过程需要使用模型在验证数据上的性能作为反馈信号。这个调节过程本质上就是一种学习:在某个参数空间中寻找良 好的模型配置。
在验证集上过拟合:因此,如果基于模型在验证集上的性能来调节模型配置,会很快导致模型在验 证集上过拟合,即使你并没有在验证集上直接训练模型也会如此。
信息泄露:造成这一现象的关键在于信息泄露(information leak)。每次基于模型在验证集上的性能来 调节模型超参数,都会有一些关于验证数据的信息泄露到模型中。
7、将数据划分为训练集、验证集和测试集可能看起来很简单,但如果可用数据很少,还有几 种高级方法可以派上用场?
简单的留出验证、
K折验证,
以及带有打乱数据的重复 K 折验证
8、简单的留出验证 ?
留出一定比例的数据作为测试集:在剩余的数据上训练模型,然后在测试集上评估模型。
9、K 折验证 ?
K个分区取一个做验证集:K 折验证(K-fold validation)将数据划分为大小相同的K 个分区。对于每个分区 i,在剩 余的K-1 个分区上训练模型,然后在分区 i 上评估模型。最终分数等于K 个分数的平均值。
模型性能变化大很有用:对 于不同的训练集- 测试集划分,如果模型性能的变化很大,那么这种方法很有用。与留出验证 一样,这种方法也需要独立的验证集进行模型校正。
10、验证集的意义:评估模型,调整超参数?
validation_score = model.evaluate(validation_data)
11、带有打乱数据的重复 K 折验证 ?
尽可能精确地评估模型:如果可用的数据相对较少,而你又需要尽可能精确地评估模型,那么可以选择带有打乱数 据的重复K 折验证(iterated K-fold validation with shuffling)。在Kaggle 竞赛中 特别有用。
划分K折前打乱:具体做法是多次使用 K 折验证,在每次将数据划分为 K 个分区之前都先将数据打乱。 最终分数是每次K 折验证分数的平均值。注意,这种方法一共要训练和评估P×K 个模型(P 是重复次数),计算代价很大。
12、评估模型的注意事项?
打乱数据集之前先打乱:在将数据划分为训练集和测试集 之前,通常应该随机打乱数据。
时间数据不要打乱: 时间箭头(the arrow of time)。如果想要根据过去预测未来(比如明天的天气、股票走势 等),那么在划分数据前你不应该随机打乱数据,因为这么做会造成时间泄露(temporal leak):你的模型将在未来数据上得到有效训练。
去掉冗余数据:如果有冗余数据,效果非常糟糕。一 定要确保训练集和验证集之间没有交集。
二、内容在总结中
博客对应课程的视频位置: