机器学习(介绍篇)
# 动手学机器学习笔记1
1 介绍 常用的计算机程序几乎都是软件开发人员从零编写的。 比如,现在我们要编写一个程序来管理网上商城。 经过思考,我们可能提出如下一个解决方案: 首先,用户通过Web浏览器(或移动应用程序)与应用程序进行交互。 紧接着,应用程序与数据库引擎进行交互,以保存交易历史记录并跟踪每个用户的动态。 其中,这个程序的核心——“业务逻辑”,详细说明了程序在各种情况下进行的操作。
但是对于以下问题:
-
编写一个程序,给出地理信息、卫星图像和一些历史天气信息,来预测明天的天气。
-
编写一个程序,给出自然文本表示的问题,并正确回答该问题。
-
编写一个程序,给出一张图像,识别出图像所包含的人,并在每个人周围绘制轮廓。
-
编写一个程序,向用户推荐他们可能喜欢但在自然浏览过程中不太可能遇到的产品。
在这些情况下,即使是顶级程序员也无法从零开始,交上完美的解决方案。原因有很多,任务可能遵循一种随着时间推移而变化的模式,我们需要程序来自动调整;或任务内的关系(比如像素和抽象类别之间的关系)可能太复杂,需要数千或数百万次的计算。在这些计算也超出了我们的意识理解时。新方法——机器学习来了。
1.1机器学习(machine learning,ML)是强大的可以从经验中学习的技术。 通常采用观测数据或与环境交互的形式,机器学习算法会积累更多的经验,其性能也会逐步提高。 以上问题其实也对应了我们常见的机器学习研究领域——线性/回归预测,自然语言处理(问答系统),图像识别,个性化推荐等等。在我们开始用机器学习算法解决问题之前,我们必须精确地定义问题,确定输入和输出的性质,并选择合适的模型族。还有了解一下几个名词:参数,模型,模型族和学习算法。你可以把参数看作是旋钮,我们可以通过转动旋钮来调整程序的行为。 任一调整参数的程序后,我们称为模型(model)。 通过操作参数而生成的所有不同程序(输入-输出映射)的集合称为“模型族”。 使用数据集来选择参数的元程序被称为学习算法(learning algorithm)。
举例理解, 编写一个程序来响应一个“唤醒词“(比如“Alexa”、“小爱同学”和“Hey Siri”),响应结果为yes or no。显然,这个和机器说话交流的问题,我们不清楚如何编程,但我们可以让程序去学习。

图1.1
在机器学习中,我们一开始可能只是随机设置模型参数,所以这个模型不太可能识别出“Alexa”、“Hey Siri”或任何其他单词学习,但(learning)是一个模型的训练过程。 通过这个过程,我们可以发现正确的参数集,从而从使模型强制执行所需的行为。 换句话说,我们用数据训练(train)我们的模型。本例中,我们的模型接收一段音频作为输入(input),然后模型生成{是,否}{是,否}中的输出(output)。训练过程通常包含如下步骤:
-
从一个随机初始化参数的模型开始,这个模型基本毫不”智能“。
-
获取一些数据样本(例如,音频片段以及对应的{是,否}{是,否}标签)。
-
调整参数,使模型在这些样本中表现得更好。
-
重复第2步和第3步,直到模型在任务中的表现令你满意。

图1.2
1.2 关键组件
无论我们遇到什么类型的机器学习问题,这些核心组件都将伴随我们左右:
-
我们进行学习的数据(data)。
-
进行转换数据的模型(model)。
-
一个目标函数(objective function),用来量化模型的有效性。
-
调整模型参数以优化目标函数的算法。
1.2.1 数据 如果没有数据,那么数据科学毫无用武之地。 每个数据集由一个个样本(example)组成,样本有时也叫做数据点(data point)或者数据实例(data instance),通常每个样本由一组称为特征(features,或协变量(covariates))的属性组成。
1.2.2 模型 大多数机器学习会涉及到数据的转换。 比如,我们建立一个“摄取照片并预测笑脸”的系统。再比如,我们摄取一组传感器读数,并预测读数的正常与异常程度。深度学习就是关注功能强大的模型,这些模型由神经网络错综复杂的交织在一起,包含层层数据转换,因此被称为深度学习(deep learning)。
1.2.3 目标函数 在机器学习中,我们需要定义模型的优劣程度的度量,这个度量在大多数情况是“可优化”的,我们称之为目标函数(objective function)。 我们通常定义一个目标函数,并希望优化它到最低点。因为越低越好,所以这些函数有时被称为损失函数(loss function, 或cost function)。
1.2.4 优化算法 一旦我们获得了一些数据源及其表示、一个模型和一个合适的损失函数,我们接下来就需要一种算法,它能够搜索出最佳参数,以最小化损失函数。 深度学习中,大多流行的优化算法通常基于一种基本方法–梯度下降(gradient descent)。 简而言之,在每个步骤中,梯度下降法都会检查每个参数,看看如果你仅对该参数进行少量变动,训练集损失会朝哪个方向移动。 然后,它在可以减少损失的方向上优化参数。
浙公网安备 33010602011771号