动手学深度学习笔记(一)——机器学习

深度学习是机器学习的一个主要分支,为了更好的学习深度学习,需要掌握一些基本的机器学习的知识。


1.1 关键组件

1.1.1 数据(data)

每个数据集由一个个样本(example, sample)组成
通常每个样本由一组称为特征(features,或协变量(covariates))的属性组成
机器学习模型会根据这些属性进行预测。
在监督学习问题中,要预测的是一个特殊的属性,它被称为标签(label,或目标(target))
数据集的由小变大为现代深度学习的成功奠定基础。 在没有大数据集的情况下,许多令人兴奋的深度学习模型黯然失色。 就算一些深度学习模型在小数据集上能够工作,但其效能并不比传统方法高。一般来说,我们拥有的数据越多,我们的工作就越容易。 当我们有了更多的数据,我们通常可以训练出更强大的模型,从而减少对预先设想假设的依赖。
同时,仅仅拥有海量的数据是不够的,我们还需要正确的数据。 如果数据中充满了错误,或者如果数据的特征不能预测任务目标,那么模型很可能无效。

“输入的是垃圾,输出的也是垃圾。”(“Garbage in, garbage out.”)

数据集在选取的时候通常需要具有充分代表性,如果数据存在一些偏见,那么模型就很可能也存在偏见。

1.1.2 模型(model)

大多数机器学习会涉及到数据的转换。 比如,我们摄取一组传感器读数,并预测读数的正常与异常程度。 这个简单的模型能够解决如上简单的问题,但存在很多复杂问题超出了传统方法的极限,就需要用到深度学习。
深度学习与经典方法的区别主要在于:前者关注的功能强大的模型,这些模型由神经网络错综复杂的交织在一起,包含层层数据转换,因此被称为深度学习(deep learning)

1.1.3 目标函数(objective function)

机器学习,可以简单的介绍为“从经验中学习” 这里所说的“学习”,是指自主提高模型完成某些任务的效能。 但是,什么才算真正的提高呢? 在机器学习中,我们需要定义模型的优劣程度的度量,这个度量在大多数情况是“可优化”的,我们称之为目标函数(objective function)
我们通常定义一个目标函数,并希望优化它到最低点。 因为越低越好,所以这些函数有时被称为损失函数(loss function,或cost function)

通常,损失函数是根据模型参数定义的,并取决于数据集。 在一个数据集上,我们通过最小化总损失来学习模型参数的最佳值。 该数据集由一些为训练而收集的样本组成,称为训练数据集(training dataset,或称为训练集(training set))。 然而,在训练数据上表现良好的模型,并不一定在“新数据集”上有同样的效能,这里的“新数据集”通常称为测试数据集(test dataset,或称为测试集`(test set))。

综上所述,我们通常将可用数据集分成两部分:**训练数据集**用于拟合模型参数,**测试数据集**用于评估拟合的模型。 然后我们观察模型在这两部分数据集的效能。 你可以把“一个模型在训练数据集上的效能”想象成“一个学生在模拟考试中的分数”。 这个分数用来为一些真正的期末考试做参考,即使成绩令人鼓舞,也不能保证期末考试成功。 换言之,测试性能可能会显著偏离训练性能。 当一个模型在训练集上表现良好,但不能推广到测试集时,我们说这个模型是“过拟合”(overfitting)。 就像在现实生活中,尽管模拟考试考得很好,真正的考试不一定百发百中。

1.1.4 算法(algorithm)

一旦我们获得了一些数据源及其表示、一个模型和一个合适的损失函数,我们接下来就需要一种算法,它能够搜索出最佳参数,以最小化损失函数。 深度学习中,大多流行的优化算法通常基于一种基本方法–梯度下降(gradient descent)。 简而言之,在每个步骤中,梯度下降法都会检查每个参数,看看如果你仅对该参数进行少量变动,训练集损失会朝哪个方向移动。 然后,它在可以减少损失的方向上优化参数。

1.2 各种机器学习问题

1.2.1 监督学习

从给定的训练数据集中学习出一个函数(模型参数),当新的数据到来时,可以根据这个函数预测结果。
一个具体的例子: 假设我们需要预测患者是否会心脏病发作,那么观察结果“心脏病发作”或“心脏病没有发作”将是我们的标签。 输入特征可能是生命体征,如心率、舒张压和收缩压。

监督学习过程:从已知大量数据样本中随机选取一个子集,为每个样本获取基本的真实标签。 有时,这些样本已有标签(例如,患者是否在下一年内康复?); 有时,我们可能需要人工标记数据(例如,将图像分类)。 这些输入和相应的标签一起构成了训练数据集。 随后,我们选择有监督的学习算法,它将训练数据集作为输入,并输出一个“完成学习模型”。 最后,我们将之前没见过的样本特征放到这个“完成学习模型”中,使用模型的输出作为相应标签的预测。

在这里插入图片描述
虽然监督学习只是几大类机器学习问题之一,但是在工业中,大部分机器学习的成功应用都是监督学习。 这是因为在一定程度上,许多重要的任务可以清晰地描述为:在给定一组特定的可用数据的情况下,估计未知事物的概率。

1.2.1.1 回归

回归(regression)是最简单的监督学习任务之一。
可以很好的解决“有多少”的问题,比如:

  • 这个手术需要多少小时?
  • 在未来六小时,这个镇会有多少降雨量?

根据自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。
线性回归通常是学习预测模型时首选的技术之一。在线性回归中,因变量是连续的,而自变量可以是连续的的也可以是离散的,回归线的性质是线性的。

1.2.1.2 分类

在分类问题中,我们希望模型能够预测样本属于哪个类别(category,正式称为类(class))。
可以很好的解决“哪一个”的问题,比如:

  • 最简单的分类问题是只有两类,我们称之为“二元分类”。 例如,数据集可能由动物图像组成,标签可能是 {猫,狗} 两类。
  • 当我们有两个以上的类别时,我们把这个问题称为多元分类(multiclass classification)问题。 常见的例子包括手写字符识别 {0,1,2,…9,a,b,c,…} 。

1.2.1.3 标记问题

学习预测不相互排斥的类别的问题称为多标签分类(multi-label classification)
举个例子,人们在技术博客上贴的标签,比如“机器学习”、“技术”、“小工具”、“编程语言”、“Linux”、“云计算”、“AWS”。 一篇典型的文章可能会用5-10个标签,因为这些概念是相互关联的。 关于“云计算”的帖子可能会提到“AWS”,而关于“机器学习”的帖子也可能涉及“编程语言”。
比如这张图片:
在这里插入图片描述
图中有一只猫,一只公鸡,一只狗,一头驴,背景是一些树。 取决于我们最终想用我们的模型做什么,将其视为二元分类问题可能没有多大意义。 取而代之,我们可能想让模型描绘输入图像的内容,一只猫、一只狗、一头驴,还有一只公鸡。

1.2.1.4 搜索

有时,我们不仅仅希望输出为一个类别或一个实值。 在信息检索领域,我们希望对一组项目进行排序。 以网络搜索为例,我们的目标不是简单的“查询(query)-网页(page)”分类,而是在海量搜索结果中找到用户最需要的那部分。 搜索结果的排序也十分重要,我们的学习算法需要输出有序的元素子集。 换句话说,如果要求我们输出字母表中的前5个字母,返回“A、B、C、D、E”和“C、A、B、E、D”是不同的。 即使结果集是相同的,集内的顺序有时却很重要。

该问题的一种可能的解决方案:首先为集合中的每个元素分配相应的相关性分数,然后检索评级最高的元素。

1.2.1.5 推荐系统

另一类与搜索和排名相关的问题是推荐系统(recommender system),它的目标是向特定用户进行“个性化”推荐。
如,对于电影推荐,科幻迷和喜剧爱好者的推荐结果页面可能会有很大不同。 类似的应用也会出现在零售产品、音乐和新闻推荐等等。
在某些应用中,客户会提供明确反馈,表达他们对特定产品的喜爱程度。 例如,亚马逊上的产品评级和评论。 在其他一些情况下,客户会提供隐性反馈。 例如,某用户跳过播放列表中的某些歌曲,这可能说明这些歌曲对此用户不大合适。 总的来说,推荐系统会为“给定用户和物品”的匹配性打分,这个“分数”可能是估计的评级或购买的概率。 由此,对于任何给定的用户,推荐系统都可以检索得分最高的对象集,然后将其推荐给用户。以上只是简单的算法,而工业生产的推荐系统要先进得多,它会将详细的用户活动和项目特征考虑在内。 推荐系统算法经过调整,可以捕捉一个人的偏好。

1.2.1.6 序列学习

以上大多数问题都具有固定大小的输入和产生固定大小的输出。在这些情况下,模型只会将输入作为生成输出的“原料”,而不会“记住”输入的具体内容。
如果输入的样本之间是相互独立的,以上模型可能完美无缺。 但是如果输入是连续的,我们的模型可能就需要拥有“记忆”功能。
例如在对视频片段的处理中:
每个视频片段可能由不同数量的帧组成。 通过前一帧的图像,我们可能对后一帧中发生的事情更有把握。 语言也是如此,机器翻译的输入和输出都为文字序列。

1.2.2 无监督学习

数据中不含有“目标”的机器学习问题为无监督学习(unsupervised learning)

  • 聚类(clustering)问题:没有标签的情况下,我们是否能给数据分类呢?比如,给定一组照片,我们能把它们分成风景照片、狗、婴儿、猫和山峰的照片吗?同样,给定一组用户的网页浏览记录,我们能否将具有相似行为的用户聚类呢?
  • 主成分分析(principal component analysis)问题:我们能否找到少量的参数来准确地捕捉数据的线性相关属性?比如,一个球的运动轨迹可以用球的速度、直径和质量来描述。再比如,裁缝们已经开发出了一小部分参数,这些参数相当准确地描述了人体的形状,以适应衣服的需要。
  • 因果关系(causality)和概率图模型(probabilistic graphical models)问题:我们能否描述观察到的许多数据的根本原因?例如,如果我们有关于房价、污染、犯罪、地理位置、教育和工资的人口统计数据,我们能否简单地根据经验数据发现它们之间的关系?
  • 生成对抗性网络(generative adversarial networks):为我们提供一种合成数据的方法,甚至像图像和音频这样复杂的非结构化数据。潜在的统计机制是检查真实和虚假数据是否相同的测试.

1.2.3 与环境的互动

不管是监督学习还是无监督学习,我们都会预先获取大量数据,然后启动模型,不再与环境交互。 这里所有学习都是在算法与环境断开后进行的,被称为离线学习(offline learning)
在这里插入图片描述
这种简单的离线学习有它的魅力。 好的一面是,我们可以孤立地进行模式识别,而不必分心于其他问题。 但缺点是,解决的问题相当有限。但是如果我们需要人工智能能够与环境进行互动,而不是简单的预测,做到“智能代理”,就需要考虑到互动行为可能会影响未来的观察结果。

1.2.4 强化学习

强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益。
其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。这是一类明确考虑与环境交互的问题。
举几个具体的例子:

  • TaskBot-阿里小蜜的任务型问答技术
  • 淘宝电商搜索
  • 强化学习中的 Q-learning 可以用来处理动态定价问题

强化学习所涉及和实际运用的场景十分广泛,也相对比较复杂,感兴趣可以再多了解一下。

猜你喜欢

转载自blog.csdn.net/qq_52118067/article/details/122432222