作者/编辑 | 橘子 配图:深度学习导论课程slides 来源 | 橘子AI笔记(ID:datawitch)
最近在学习Coursera上的高级机器学习专项课程(Advanced Machine Learning),它的介绍页是这样写的:这门课程主要讲解了深度学习、强化学习、自然语言理解、计算机视觉和贝叶斯方法。除了理论知识,Kaggle比赛的高分选手和CERN的科学家也将分享他们解决实际问题的经验,并帮助您填补理论和实践之间的空白。在完成7门课程后,您将能够在企业中应用现代机器学习方法,并了解使用数据和配置参数时的注意事项。
深度学习导论(Introduction to Deep Learning)是专项课程系列中的第一部分,这部分包括:
第1周 - 最优化理论
第2周 - 神经网络导论
第3周 - 深度学习图像处理
第4周 - 无监督表征学习
第5周 - 深度学习文本处理
第6周 - 结课项目
本文是第1周的第2份课程笔记:线性模型(上)
往期回顾:「Coursera」深度学习导论 1-1 课程介绍 | 课程笔记
新手教程:超详细!Win10深度学习GPU开发环境搭建步骤 | 教程
这节课我们将会学习线性模型(linear model)。
首先举一个例子:现在要写一个函数,它的输入是一张图片,输出是图片中海豹的数量,这个函数应该怎么写呢?
有一种思路是尝试检测图片中出现的物体边缘,然后进行统计,但是这样的方法不如用机器学习。
用机器学习的方法怎样来数沙滩上的海豹?首先,我们要收集许多标注好的数据,比如几千张,甚至上百万张海豹图片。然后人工地去数清楚这些图片中都有几只海豹,再尝试从这些标注好的数据集中习得一个拟合效果最好的函数。
首先来讲一些基本概念,在机器学习中,我们要学习的图片、或者其他任何类型的数据,被称为一个样本(example)用x表示,每个样本都有许多特征(features),比如对图片来说,特征可以是每个像素点的数值。
在有监督学习中,每个样本还对应于一个目标值(target value)用y表示,相当于“标准答案”,比如在数海豹的问题中,我们的目标值就是每张图片中海豹的数量。这样,每个x值比如x_i就对应一个目标值y_i。
在训练集中,我们有很多对这样的x和y,合起来用X表示。这个X就包括了训练集中所有的样本及其特征,以及对应的目标值。我们用a(x)来表示模型(model)或者假说(hypothesis),机器学习的目标就是找到最能拟合(fit)训练集的模型。
01. 回归问题与分类问题
有监督学习(supervised learning)问题主要分为两类:回归(regression)和分类(classification)问题。
在回归问题中,目标值是一个实数。比如在数海豹的问题中,目标值是海豹的数量。又比如,现在给出职位描述,要求预测这个职位的薪水,薪水也是实数。再比如,给出影评,要求预测写这篇影评的用户对电影的打分(0-5分),这个打分也是实数。
在分类问题中,目标值是离散的,其数量是有限个(finite),而不是一个连续的区间。比如物体检测,我们希望找出一张照片中有没有猫啊狗啊或者自行车啊什么的,可以分为有限个类别,那这个时候就是在做分类。再比如,给出一篇新文章,希望预测出这篇文章属于什么话题:政治?体育?还是娱乐新闻什么的。这里类别的数量也是有限的。
02. 回归问题中的线性模型
我们来看一个非常简单的数据集。在这个数据集中,每个样本只有一个特征,对应于一个目标值,而目标值是实数。
通过这张图,我们可以看到它是一个线性趋势(linear trend)的关系,如果x值增大2倍,那么y值大概对应地减小2倍。所以我们应该可以用线性模型来描述这批数据,构建一个预测模型。
那么这个公式就描述了我们的线性模型。它非常简单,只有两个参数,w1和b。如果计算出w1和b的最佳数值,就会得到图中的这条直线。
虽然它不能完美、精确地根据每一个x值计算出它对应的y值,但已经能够很好地描述x和y之间的关系,能很好地拟合我们的数据集。
当然,在大多数机器学习问题中,都有不止一个特征。下图中展示的是通用线性模型的公式,对于每一个特征x_j,都乘以它对应的权重(weight)值w_j,我们把所有这些项加起来,再加上一个偏置(bias)项b,就得到了通用线性模型的表达式。
用d表示我们数据集中的特征数,那么这个公式有d+1个参数,也就是d个权重值w,加上一个偏置项b。线性模型是非常简单的模型,因为同样多的特征数如果要用神经网络模型,参数要多得多。
为了更加简化,我们可以假设在每个样本中,都有一个伪特征值,它的值是常数1,有这个特征的系数就是偏置项。所以,在后面的讲解中,我们不会单独把偏置项拿出来,而是归在权重值当中去考虑。
那么这样的话,我们就可以很方便地写出线性模型的矩阵(matrix)形式。
根据线性代数的知识,我们很容易得知上张幻灯片中讲到的形式可以写成这个点积(dot product)的形式,也就是向量(vector)的相乘、相加。线性模型的输出是权重向量和特征向量X的点积。
那么如果我们要将模型运用到整个数据集或者新的样本当中,需要怎么做呢?首先用X表示样本矩阵,它有L行d列,每行表示一个样本,每列表示该样本的所有特征。这时候X与权重矩阵w的点积就是我们的预测,这个结果是一个长度为L的向量,它包括了我们的线性模型对每个样本的预测值。
计算题:假设训练集中有10个样本,每个样本有5个特征,那么X矩阵有多少个元素?(答案见文末)
03. 损失函数
机器学习的另一个重要问题是计算损失(loss),也就是我们如何衡量预测值与数据集(训练集或者测试集)之间的差距(error)。
回归问题中最流行的一种损失函数(loss function)叫均方差损失(Mean Squared Error, MSE)。
它的表达式是这样的:比如我们的数据集是X_i,线性模型的预测结果是w与X_i的点积,我们用这个预测值减去真实的目标值y_i,来计算预测值与真实值之间的偏差(deviation),然后取一个平方,再对整个数据集上所有样本的计算结果取平均,就得到了均方差损失值。
它可以衡量我们的模型能在多大程度上去拟合我们的数据:均方差损失值越小,模型对数据的拟合效果就越好。
当然,均方差也可以写成向量形式。w矩阵与X矩阵的点积得到的向量就表示了我们对数据集中所有样本的预测值,然后我们还可以用向量的形式表示出所有样本对应的真实目标值,预测值矩阵与真实值矩阵相减,再取其欧几里得范数(Euclidean norm),表示的也是均方差。
那么现在,我们有了衡量模型拟合好坏程度的损失函数,接下来要做的就是求损失函数对参数w的最小值。也就是说,我们希望找到一组参数w,它能使得损失函数取到最小值。这就是机器学习的核心思想:我们通过优化损失函数,来找到针对某问题的最佳模型。
其实如果你懂微积分,就不难看出,我们可以通过求导并解出方程的方式得出这些最优化问题(optimization problem)的解析解(analytical solution)。但是这样做的话,会需要求逆矩阵,计算非常复杂。
而且如果特征的数量多达成百上千个,X的转置乘X这个项的逆矩阵就会很难求。即使我们可以将问题简化到用线性方程去表示,它依然是很难解的,并且会需要用到大量的计算资源。
在之后的课程中,我们将会学习针对这类优化问题的,更好、可拓展性更强的求解方式。
04. 最后的总结
回顾一下,在本节课程中,我们学习了回归问题中的线性模型。线性模型十分简单,但对深度神经网络而言也非常有效。我们明白理论上可以求得问题的解析解,但实际上难以计算。
在接下来的课程中,我们会学习到更有效的求解方法。在那之前会先学习分类问题中的线性模型。
刚才计算题的答案是:50
参考资料:
https://www.coursera.org/learn/intro-to-deep-learning/home/welcome