机器学习 Machine Learning
Andrew. NG(Stanford. CS229)
自己记录着的学习心得,欢迎讨论!
1 监督学习 Supervised Learning
监督学习:给定一个训练集用来学习函数,使得
能很好的预测
,
叫做假设(hypothesis)。
如果被预测的是连续取值的,则该问题称为回归问题(regression);相反,
如果取值是离散的,则称为分类问题(classification)
专用名词:
- 输入变量/特征
—— input variable or features
- 输出变量/目标
—— output variable or target
- 训练样本
—— training example # 第
组样本
- 训练集
——training set
:训练集的数量
:特征数量
:参数
1.1 回归问题 Regression Problem
1.1.1 线性回归 Linear Regression
对于一组训练集样本,如果
近似为线性关系,则我们可以对
作出如下假设
:
判断假设好坏的标准:误差 越小越好
于是,引入成本函数(cost function):
使得最小的一组
值即为最优假设。
使用梯度下降算法(gradient descent algorithm) 寻找值:
首先对
设定一个初始的猜测值(一般设为0),接着沿着梯度下降的方向不断的调整
,直到
最小
称为学习速率,决定每一次迭代的步进大小
在只有一个样本的情况下,初步理解一下这个算法:
首先,推导梯度的表达式
于是,单个样本的更新规则为:
该规则叫做LMS更新规则( Least Mean Squares,最小均方),也被称为Widrow-Hoff学习规则
规则有一些直观的特性,更新的幅度大小与
即假设与真值的误差成正比,当误差非常大的时候,算法可以较大范围的调整参数
,使得
迅速收敛;当误差很小的时候,假设与真值拟合的非常好,参数的值也就在每次迭代的过程中变化很小了。
要值得注意的是,根据导数或梯度的性质,如果有多个极小值,使用LMS更新规则往往会收敛到局部极小值,而不是最小值。
但是由于我们的假设是线性的,所求得的成本函数
为二次函数,所以梯度下降算法总是收敛到全局最小值。
a. 批量梯度下降算法 Batch Gradient Descent
这是多样本情况下的一种LMS更新规则
多样本情况下的成本函数为
求其梯度:
于是得到了批量梯度下降算法( Batch Gradient Descent)的更新规则:
这个算法在每一个步长内遍历一次训练集,然后更新的值,一步一步地收敛在
的最小值
显然,批量梯度下降算法在训练集较小的情况下非常易于计算,但是不适用于大规模的训练集。
b. 随机梯度下降算法 Stochastic Gradient Descent
在训练集规模比较大的情况下,我们采用另一种LMS更新规则——随机梯度下降算法( Stochastic Gradient Descent),又叫增量梯度下降算法(Incremental Gradient Descent):
这个算法针对每一个样本点,更新一次值,使得
快速变化。
但是这种算法往往会在最小值附近震荡,而无法收敛到最小值。不过通常情况下,在最小值附近的这些
值也足够满足精度要求。故通常更加推荐随机梯度下降算法,而不是批量梯度下降算法,尤其是在训练集规模大的时候。
c. 正规方程组算法 The Normal Equations
梯度下降法是一种找出最小值的迭代方法,现在介绍一种基于最小二乘法(Least Squares Revisited)的非迭代算法—— 正规方程组算法 (The Normal Equations)
首先,写出各变量和参数的矩阵形式:
对于成本函数:
最后,我们的目标是使的值最小,取其极值点,即导数为零的点。
令式为0,得到正规方程 (The Normal Equations):
三种算法的比较(基于线性回归)
| 算法 | 批量梯度下降 | 随机梯度下降 | 正规方程组 |
|---|---|---|---|
| 算法原理 | 最小均方 | 最小均方 | 最小二乘 |
| 计算过程 | 需要多次迭代 | 需要多次迭代 | 不需要多次迭代 |
| 复杂度 | O(n2)(一次迭代) | O(n2) | O( |
对于梯度下降的迭代算法,有如下特点:
- 需要预先选定学习速率
- 多次迭代
- 需要特征缩放(Feature Scaling)(简单来说就是为特征值分配不同的权重)
- 时间花费相对较少,收敛性有保证,最终总会有结果
对于正规方程组算法,有如下特点
- 无需设定学习速率和特征缩放
- 无需多次迭代,直接求得精确参数
- 耗费较多的时间,求逆也会存在数值不稳定(不可逆)的情况
批量梯度下降算法与随机梯度下降算法的比较:
-
批量梯度下降算法:总是沿着梯度最小的方向迭代,使得最终求解的是全局最优解,但对于大规模样本效率低下。
-
随机梯度下降算法:虽然不是每次迭代都是向着最优解方向,但是整体方向是朝向最优解的,最终的结果往往在最优解附近。但算法效率更高,适用于大规模训练样本的情况。
总结
算法的选取与特征值的数量n和训练集的样本数量m有关。
线性回归的概率解释
在解决线性回归问题的时候,我们选取了成本函数为,但是为什么选取的判断标准是二者之差的二次方而不是绝对值,或者四次方呢?现在给出基于概率学的解答。
首先假设我们的目标变量和输入特征之间存在着某种等量关系:
其中是第
项样本的误差项,可以认为是遗漏掉的特征、随机噪音、测量精度等等所造成的误差总和。
由中心极限定理知,无论它是何种原因造成的何种分布的误差,在极限情况下,误差的总和都最终归化为正态分布。
中心极限定理可以描述为:
故假设服从均值为0,方差为
的正态分布:
进一步假设,对于不同的样本,
之间可以认为是独立同分布的(IID ,independently and identically distributed) 。这样可以将假设写为
则有
上式表示给定随机变量和参数
的值,
的分布函数
我们对参数
进行极大似然估计(Maximum Likelihood Estimate)
似然函数可以写为
我们的目的是要找到一个能使似然函数最大,即概率最大的
值。我们对函数做一下计算上的处理
发现,使或
最大也就意味着
取到最小,实际上就是上节提到的成本函数最小。
总结:利用成本函数判别假设的好坏程度,在概率统计学上讲,是一种概率最大的参数估计方法。
1.1.2 非线性回归
初识:欠拟合与过拟合
在实际生活中,我们拟合的数据往往并不是线性的关系。在下图的例子中我们可以明显的看出数据的趋势并不是一条直线,所以我们用直线去拟合就不是最佳的办法。
那我们尝试着增加一个二次项来拟合数据,假设 (注意区分这里的上角标“2”意思是
的平方,而前面章节的上角标
仅仅表示第
组样本)
通过二次项的拟合,我们得到了比较理想的曲线。
那么,是否高次项越多越好呢?
根据待定系数法,6个样本点可以列6个方程,可以解出6个未知参数,它最高能确定一个五次方的曲线,于是我们得到了一条完全经过6个样本点的曲线,然而这是否是我们想要的结果呢?虽然这条拟合曲线完美的通过了所有的样本点,但是我们仍认为这条曲线不是一个很好的预测工具,样本点的规律(随着的增大,
逐渐增大,但
增大的速率逐渐变缓)被完全掩盖掉。甚至在两端出现了反常的反比关系。
现在我们给出过拟合与欠拟合的定义:
欠拟合(underfitting):使用简单的模型(直线)去拟合复杂数据(曲线)时,会导致模型很难拟合数据的真实分布,这时模型便欠拟合了,或者说有很大的偏差(Bias, 即为模型的期望输出与其真实输出之间的差异) 过拟合(overfitting):为了得到比较精确的模型而过度拟合训练数据,或者模型复杂度过高时,可能连训练数据的噪音也拟合了,导致模型在训练集样本上的拟合效果非常好,但实际应用中效果却很差,这时模型便过拟合了,或者说有很大的方差( Variance, 刻画了模型的输出与期望输出之间的差异,此时在不同训练集上得到的模型波动比较大)。
在后面章节我们会进一步讨论欠拟合与过拟合,并给出概念的详细定义。
局部加权线性回归 Locally Weighted Linear Regression
在本节,我们简要地讲一下局部加权线性回归(LWR,locally weighted linear regression)
假设我们有足够多的样本数据,我们的成本函数设置为加权成本函数。
设定为类高斯型曲线,实际上也可以取其他形状的曲线。
这里的控制了权重变化的速率,
越大,曲线形状越宽,
越小,曲线形状越尖。
利用加权后的成本函数,我们再对样本进行线性回归计算,在拟合点附近的样本点权重比较大,离
越远,样本点权重也就越小。这样远离拟合点的样本对
的影响就可以忽略掉,而只关心在拟合点附近的样本点的对
的影响。
其实,为了更加方便理解,我们可以将加权函数换成如下:
也就是说我们只选择离拟合点较近的样本进行拟合,在以内的数据权重都是1,而超过
的样本点权重均为0.
这样,我们只对范围内的样本进行线性回归,拟合的直线在拟合点附近效果是最好的。
很明显,局部加权线性回归所求得的只是相对于一个拟合点而言的。如果我们变换拟合点的位置,则参数
需要重新计算。也就是说,给定一个拟合点
,我们可以得到一个假设
,
取遍所有的值,则能得到
的整条拟合曲线,但实际上
与
的具体表达式,我们并没有求出来,这是一种非参数算法。
我们之前学习的无权重线性回归是一种参数学习算法,它通过有限个参数拟合了训练集的数据,之后便不再保留训练集样本了,对实际需求的预测,我们只需要通过便可求得。
而如果我们使用局部加权线性回归算法,则必须一直保留整个训练集。每一次对实际需求的预测,都需要基于训练集去计算预测值
1.2 分类问题 Classification Problem
分类问题和回归问题类似,但是预测的值是离散的。我们首先来讨论二值问题,即
只取0、1。大部分的内容也可以扩展到多值情况。这里我们规定:
- 0为消极类别( " - ",nagative class)
- 1为积极类别(" + ",positive class)
1.2.1 逻辑回归 Logistic Regression
我们的假设为:
其中:
这个函数叫做逻辑函数(logistic function)。
为什么我们要这样构造一个假设函数呢?因为只有0、1取值,而我们的目标是寻找将
分为两类的界限。这种界限的区分实际上也可以使用阶跃函数等其他方式来分割,之后的感知器章节中会讲到为什么选择逻辑函数来分割。
逻辑函数的导数有如下特性:
有了假设,那我们怎么去拟合
呢?在线性回归中我们用成本函数
来衡量拟合的好坏,而其中的原理是概率统计学中的最大似然估计。那我们同样也可以用最大似然估计来推出非线性下的成本函数。
我们的假设需要作一些等价的变换
更简洁的写法是:
那么最大似然函数可以写成:
使似然函数最大,使用梯度上升算法,也就是
为方便理解,我们还是先从只有一组训练样本开始:
上式用到了之前的导数性质。
我们得到了随机梯度上升规则:
我们对比一下之前我们线性回归的梯度下降更新规律
梯度下降:
似乎……好像是一样的数学形式,但是,这并不是同一个算法,在分类问题上我们将定义成了离散的值,并将假设
也作了相应形式的变换。
这看似偶然的巧合其实背后隐藏着更深层次的原因,在后续的广义线性模型中,我们会进一步探讨。
离散:感知器学习算法
我们岔开话题,聊一下关于逻辑回归假设的选定,我们之前讲到,因为?取值的离散性,所以我们要修改
的形式使得它的输出变得有意义。在上节中,我们使用逻辑函数迫使
输出在0-1之间,而其
实际意义变成取
的概率。
如果我们单纯的想要实现上述的目的,其实更直接的想法是将假设设置为一个阶跃函数。
如果设置成这样的形式,我们再次使用极大似然法去计算(单样本情况下)
以上是在未代入时的推导,
我们知道又知道单位阶跃函数的导数是单位冲击函数,仍可以写成形式
单位阶跃和单位冲击函数常用在数字电路中,可以计算出家用电器在通电瞬间的电流值,这叫做电器设备的启动电流。
算到这里我们发现,用阶跃函数最后的参数更新规则仍为:
这种算法叫做感知器学习算法
感知器在深度学习网络中也叫做神经元。感知器是生物神经细胞的简单抽象,单个神经细胞可被视为一种只有两种状态的机器——激动时为‘是’,而未激动时为‘否’。
这个算法也是我们后续在本课程中讲学习理论时候的起点。
但要注意,感知器学习算法看上去和我们之前的算法很相似,但实际上它是一类与逻辑回归、最小二乘线性回归等算法在性质上完全不同的算法。尤其是,很难对感知器的预测赋予有意义的概率解释。
这里我认为的意思是,逻辑回归的预测结果
其实是介于0-1之间的一个实数,而其概率学解释是这个样本有
的概率确信结果为1,或者有
的概率确信结果为0。
而感知器算法得到的预测没有这种概率学的意义
这里有如下几个小疑问
在浏览资料的过程中,发现这样一段话:
事实上,感知器不仅仅能实现简单的布尔运算。它可以拟合任何的线性函数,任何线性分类或线性回归问题都可以用感知器来解决。前面的布尔运算可以看作是二分类问题,即给定一个输入,输出0(属于分类0)或1(属于分类1)。如下面所示,
and运算是一个线性分类问题,即可以用一条直线把分类0(false,红叉表示)和分类1(true,绿点表示)分开。
然而,感知器却不能实现异或运算,如下图所示,异或运算不是线性的,你无法用一条直线把分类0和分类1分开。
第一个疑问
逻辑回归能不能实现异或问题的运算呢?
第二个疑问
如果感知器模型很难赋予概率学解释,那么是否预测结果只有0/1.而没有其他的数呢
第三个疑问
原文中有一句话“很难用极大似然估计推出感知器学习算法",而我上面的推导就是基于极大似然估计法。是不是说阶跃函数和冲激函数的性质是很难推导的,而我恰恰把最难推导的当成定理记住了。
这些疑问自己慢慢的取解决吧。QAQ