1、线性回归(Linear Regression)
1.1、线性回归模型与解决方案
考虑下面的情况,这里给了一个房屋面积和价格的数据表:
并画出其数据:
这时候我们如何预测其他不同面积的房屋的价格?
方案是利用图中的点集拟合出一条合理的曲线(这个问题里拟合一条直线),然后用这条曲线预测新来的房屋的价格。
使用线性回归解决的话,h(Hypothesis)假设函数如下:
hθ(x)表示函数 h以 θ为参数,有时候为了简略也会写成 h(x)。对于一般的问题,如特征不只有房屋面积,还有卧室个数、卫生间个数、大厅个数等n个特征的情况下,有如下公式:
最后边的公式里参数 θ和输入 x都被视为向量,即 θT=[θ0θ1⋯θn], x=⎡⎣⎢⎢⎢⎢x0x1⋮xn⎤⎦⎥⎥⎥⎥
下面引出要优化的目标函数,同时它也是最小二乘法(Least squears)的成本函数(Cost function):
在上式中, 12会在求导的过程中被消去,只是为了让式子变得好看点,对直线的拟合工作不产生实际影响。
x与 y括号里的上标 (i)表示数据集里的第 i个样本里的数据,如果把数据集里第一行的数据视为第一个样本,第二行数据视为第二个样本,以此类推,则 x(1)=2104, y(1)=400, x(2)=1600, y(2)=330,……
hθ(x)表示利用拟合出来的直线得到的房屋价格的预测值, y表示房屋价格的实际值,对这个成本函数的直观理解就是——每个房屋的预测值与实际值之差的平方和。
我们的目标⟹
找到一条直线预测新来的房屋价格怎么画这条直线 ⟹参数 θ决定
怎么对 θ取值使预测结果尽量准确 ⟹最小化 J(θ),使每一个房屋的预测值与实际值之差的平方和最小,即误差最小
这样我们的目标就已经转移到了 minJ(θ)
。
1.2、方案可靠性研究——最小二乘的概率解释
这里有个问题,既然是要让误差最小,为什么不是计算预测值与实际值之差的绝对值∣∣hθ(x(i))−y(i)∣∣
之和呢?一个是因为比较难算,还有一个就是因为这里有个对 J(θ)
的概率解释。
首先,让我们承认误差的存在,当预测值加上一个误差时,才能得到实际值:
第二,我们假设误差 ϵ服从正态分布(Normal distribution),也称为高斯分布(Gaussian distribution): ϵ(i)~ N(0,σ2)
误差服从正态分布这个假设有两个原因,一个是影响误差的因素有很多,这些因素都是随机分布的,但是它们在整体上会趋向于正态分布,另一个是因为在把误差假设为服从正态分布后,相应的工作一般都能取得比较好的效果,虽然它们还是没有非常精确,但是已经足够了。
通过这个假设以及正态分布的公式 f(x)=12π√σexp(−(x−μ)22σ2),我们可以得到 ϵ(i)的概率密度:
再把(4)式代进来,我们可以得到:
p(y(i)∣x(i);θ)可以读作“给定参数 θ时,在 x(i)发生了的情况下, y(i)发生的概率是多少”。注意里面的分号,分号是用来区别条件与参数的,如果把分号改成了逗号,如 p(y(i)∣x(i),θ),此时就应该读作“在 θ与 x(i)同时发生的情况下, y(i)发生的概率是多少”
第三,假设 ϵ(i)是独立同分布(Independent and identical distribution)随机变量,这样我们就可以引出似然函数(Likelihood function):
y⃗ 是实际值集合的向量, X是特征的集合,m是样本的数量:
我们回过头来看 L(θ)=L(θ;X,y⃗ )这个式子的含义,我读作“ X和 y⃗ 被观测到时,参数为 θ的概率是多少“,它与 p(y⃗ ∣X;θ)所描述的是同一件事情,只是换了个角度来描述而已。
在这个表达下, X和 y⃗ 都是常量,表示被观测到的值,比如一开始就提供的房屋面积与相应价格的数据表,同时参数 θ成为了变量,即在观测到 X和 y⃗ 的前提下,每一个 θ都有一个相对应的概率值。
举个例子:有两个箱子,甲箱里有99个白球1个黑球,乙箱里有1个白球99个黑球。参数θ
是箱子里黑白球的配置比例, X是摸球这件事, y⃗ 是指摸到白球。概率的问法是:从箱子里摸出白球的概率是多少?
答: p(y⃗ ∣X;θ甲)=0.99, p(y⃗ ∣X;θ乙)=0.01
用似然性的问法是:摸出来一个白球,猜是从哪个箱子里摸出来的?
答:甲箱。为什么?因为甲箱里摸到白球的概率更大。
现在,在X
和 y⃗ 被观测到的情况下(摸到白球),猜是从哪条由 θ画出来的直线上观测到的(哪个箱子)?选择使 X和 y⃗ 出现的概率最大的那个 θ,这也是最大似然估计(Maximum likelihood)的原则。所以接下来的工作是对 L(θ)求最大值,同时为了计算方便,我们选择最大化单调递增的 logL(θ)
:
因为(10)式左边是常数,右边有负号的关系,最大化l(θ)
就是最小化 12(y(i)−θTx(i))2,也就是第一节中提到的 minJ(θ)。当 J(θ)最小时, L(θ)的概率最大,即我们观测到的数据出现的概率最大,取这个时候的参数 θ,即可画出一条最合理的直线用于预测。下面提供两种求解最小二乘参数 θ
的方法,一种是梯度下降,另一种是最小二乘的正规方程。
1.3、最小二乘解法一——梯度下降(Gradient descent)
对于梯度下降,Ng在课上给了一个比喻:想象你正站在一个山坡上,你环顾四周,找到一个坡度最陡的方向,往那个方向走一步,然后再往坡度最陡的方向走出相同长度的一步,当你用同样的方式走了很多步的时候,你最终会到达一个最低点。
这里有两个地方需要注意,第一,这个方法让你走到的不一定是整座山的最低点,可能是某个山洼,即局部最小,对初始值敏感;第二,因为步长的关系,你可能会在最低点附近徘徊,注意调整步长。
所以梯度下降是一个需要进行迭代的,求局部最小值的一个算法。下面直接给出迭代规则:
把 J(θ)带入并求 θj的偏导数即可得到更新规则, :=在这里表示赋值,当只有一个样本的时候,更新规则如下:
带入(11),得到:
每做一次求导都表示找到了当前位置梯度最陡的方向, α代表学习速率,即步长,下山的时候每一步跨出的长度。下面提供两种具体的实施方式。
一种叫做批量梯度下降(Batch gradient descent),重复如下操作直至收敛:
每一次迭代都需要把所有的样本(共m个)取到,把每一个样本的真实值减去预测值,再把这个差值乘上该样本的第i个特征。重复迭代p次之后收敛了(当两次迭代的值几乎不发生变化时,可判断收敛),获得了参数之一(如 θ0),然后又重复如上步骤获得 θ1、 θ2、…… θn,最后取得最终的参数向量 θ,去画出我们的预测直线。
还有一种方法叫做随机梯度下降(Stochastic gradient descent),不断地随机取值,使其一直循环:
没错这跟公式(13)是同个公式。随机梯度下降会很快接近最小值但是很难真正收敛,会在最小值附近震荡,它在实际应用中效果不错,在数据量很大的时候,比起批量梯度下降,更喜欢用到它。
1.4、最小二乘解法二——正规方程组(The normal equations)
上面提到梯度下降是一个需要进行迭代的,求局部最小值的一个算法。
相反的,正规方程组是一个不需要进行迭代的,利用观测到的全部数据直接计算出全局最小值的方法。
由公式(8)和公式(9)(这是被观测到的所有数据)可以得到:
这里有一个公理,对于向量 z,有 zTz=∑iz2i,又因为上式是一个向量,有:
由上面可知 J(θ)是一个常量,同时 ∇θ表示对 θ求偏导数, trA=∑ni=1Aii,下面开始对正规方程组求解:
第一行 tra=a;第二行带入;第三行求括号内转置;第四行打开;第五行去掉与 θ无关的 y⃗ Ty⃗ ,并因为 θTXTy⃗ 是常数,有 aT=a;第六行把 12∇θtr乘进去;第七行左边多项式利用公 ∇ATtrABATC=BTATCT+BATC,并令 AT=θ, B=BT=XTX, C=I;第七行右边多项式利用 trAB=trBA与 ∇AtrAB=BT;第八步结束。
得到结果后另倒数为0,有:
这样,我们就利用所有的数据计算出了参数 θ。这就是最小二乘正规方程组的解法。
顺便给出一个拟合完成的图:
1.5、局部加权线性回归(Locally weighted linear regression)
局部加权线性回归是线性模型的扩展,目的是解决对不规则函数进行回归时容易出现的欠拟合与过拟合问题,如下图所示:
如果仍然直接使用线性模型,如左图,可以看到会出现较大的误差,称为欠拟合;如果直接拟合一条高次曲线,如右图,尽管能做到非常好的拟合,但是却因为模型太复杂而很容易出现过拟合的情况。
局部加权线性回归选择和预测点相近的点来做线性回归,通过加权的方式来忽略远处的点对预测的影响,一点一点地画直线的方式,近似地达到右图的效果。它的目标函数是加权的最小二乘:
权值 w(i)要达到的效果是,离预测点越近的点权重越大,离预测点越远的点权重越小。下面是一个常用的函数:
在这里,它是这么一个指数函数: w(i)=e−t,其中 t=(x(i)−x)2,该指数函数图像如下图:
x(i)是样本点, x是预测点,这两个点离得越近, t=(x(i)−x)2越小, w的值就越大(因为 t=(x(i)−x)2≥0,故 w满权重为1);两个点离得越远, t=(x(i)−x)2越大, w的值就会越逼近0,那么这个样本点在拟合直线时几乎就不起作用,乃至被忽略。
原式中τ
是衰减速率, τ越大衰减越慢, τ越小衰减越快。式(21)跟正态分布长的很像,但是两者之间没有关系,只要能达到越远的点越被忽略这个效果, w也可以是另外的式子。
整个算法有点微分的意思,x轴上的每个点都根据附近的样本点画出了一条尽可能小的曲线,当这些曲线连接起来的时候,就达到了上面右图中的效果。
但是相应的,每次预测时都需要调用所有的样本来拟合那段曲线,否则它是不知道哪些点会对它的拟合产生实质性影响的,所以在数据量巨大的时候,它的代价会非常高。
2、logistic回归(Logistic regression)
2.1、logistic回归模型
logistic回归也称为逻辑回归,与线性回归这样输出是连续的、具体的值(如具体房价123万元)不同,逻辑回归的输出是0~1之间的概率,但可以把它理解成回答“是”或者“否”(即离散的二分类)的问题。回答“是”可以用标签“1”表示,回答“否”可以用标签“0”表示。
比如,逻辑回归的输出是“某人生病的概率是多少”,我们可以进一步理解成“某人是否生病了”。设置一个阈值如0.5,如果输出的是“某人生病的概率是0.2”,那么我们可以判断“此人没有生病”(贴上标签“0”)。
下面直接给出其假设:
其中:
这个函数被称为逻辑函数(Logistic function)或者是S形函数(Sigmoid function),它是由伯努利分布通过广义线性模型求解得到的,不是凭空捏造的。下面是它的函数图像:
可以看到 z在0附近比较敏感,当 z>>0s时它的输出很接近1,当 z<<0s时它的输出很接近0。这样我们在确定参数 θ之后,就可以对新到来的数据进行预测(分类)了。
同时直接给出其求导结果:
2.2、logistic回归解决方案
到了这里,怎么才能得到参数θ
?其实这跟求解上面的线性回归问题是同样的套路,前后改变了的地方只有 P不同,而概率 P不一样是因为模型不一样(一个高斯分布一个两点分布),所以计算概率的方式也不一样,前后求解的思路都是一样的。就连具体处理方式都是类似的梯度法,就像线性回归是让你计算 29+36,逻辑回归是让你计算 57+28,同样是计算一个加法算式,区别只在具体相加的数字的变化,没有本质的不同。
线性回归中用概率解释了最小二乘成本函数的由来,这里也用概率来得出我们要优化的目标函数,然后通过最大似然估计来求解 θ
。
让我们做出如下假设,这实际上是一个伯努利分布(Bernoulli distribution),也称为两点分布:
这两个式子可以写在一起:
当 y=1,式(26)是式(25)的第一个式子;当 y=0,式(26)是式(25)的第二个式子。
有了概率我们就能得到似然函数,并且为了计算方便这里同样取log:
这里,我们就有了目标函数 l(θ)即 J(θ),当它的概率最大的时候,其对应的 θ就是我们所寻求的参数。
2.3、具体求解方法:梯度上升(Gradient ascent)
在上面线性回归中,我们对J(θ)
提出了两种解法,一种是梯度下降,另一种是正规方程组。类似地,我们这里使用梯度上升,迭代规则为 θ:=θ+α∇θl(θ)。注意这里是加号不是减号。为什么上面用梯度下降这里用梯度上升?因为线性回归中式(10)它最大化的目标项 12之前有一个负号,为了把这个负号去掉,转而去求没有负号的目标项的最小值,故而采用了梯度下降,在式(27)中没有负号的问题,就使用了梯度上升。它们的本质都是在使似然函数 l(θ)
最大化。
下面直接给出一个样本下求导后的结果:
相应的迭代规则就是:
没错它跟式(13)长得一模一样,但是要注意的是,因为 hθ(x)不一样,所以实际上它们是两个不同的算法,只是迭代规则一样而已,这几乎是一种通用的规则。同样的,我想在真正训练的时候,也是可以使用批量或随机梯度法的。
2.4、感知器算法(The perceptron learning algorithm)
逻辑回归通过输出0~1的概率值,拐了个弯来做分类,感知器算法则直接输出0或1的离散值,下面是其假设:
通过式(29)同样的迭代,即可得到感知器算法。感知器算法是神经网络的基础,它会被作为分析的起点。
2.5、牛顿方法(Newton’s method)
在这里提出牛顿方法是因为它跟梯度法一样,可以用来求解最大化似然函数l(θ)
的问题,而且往往牛顿法的收敛速度更快。牛顿方法本身是一个求解多项式实根的迭代法,如 f(x)=4x3+2x2+x+1是一个难解的高次多项式,如果要求其 f(x)=0
的实根,牛顿法是一个不错的选择。下面配图以说明牛顿法的思想:
随机初始化一个值,此处令 θ(0)=4.5为初始值,在 f(θ(0))处做一条切线与 x轴相交,令该切线与 x轴的交点为 θ(0)的迭代值,此处为 θ(1)=2.8,在 f(θ(1))处再做切线,再取该切线与 x轴的交点做迭代,直到 f(θ(n))=0,该 θ(n)即为 f(θ)的实根。
下面推导其迭代规则:令Δ=θ(0)−θ(1)
,我们可以得到 f(θ)在 θ(0)处切线的斜率为 f′(θ(0))=f(θ(0))Δ,由此可以得到 Δ=f(θ(0))f′(θ(0)),从而有 θ(1)=θ(0)−Δ=θ(0)−f(θ(0))f′(θ(0)),化为更一般的情况我们就有了迭代规则:
那么我们如何把牛顿法应用在最大化 l(θ)的问题上呢?
上面我们说到,牛顿法是用来求解 f(θ)=0的解的,相对应的,我们原来是如何使 l(θ)最大化的?
之前的方法都是对 l(θ)求导并使其导数为0,即“ l′(θ)=0”。
所以我们只要令 f(θ)=l′(θ),并求解出 θ,即可使 l′(θ)最大化。此时的迭代规则为:
上面是 θ是实数的情况,当 θ是向量时,迭代规则如下:
其中 H是函数 l(θ)的二次导数矩阵,被称为 Hessian矩阵,矩阵中每一个元素的值为:
H是一个 n∗n矩阵, n是向量参数 θ的长度。
牛顿法相比起梯度往往法收敛速度更快,特别是迭代值距离收敛值比较近的时候,每次迭代都能使误差变成原来的平方,但是在高维时矩阵 H的逆计算会非常耗时。
3、广义线性模型(Generalized Linear Models)
3.1、构造广义线性模型
上面我们已经看到了一个线性回归的例子,和一个逻辑回归分类的例子,这两个例子都是由广义线性模型推导出来的。接下来我们就从广义线性模型的假设开始,把这两个模型推导出来。下面是GLM的三个假设:
- y∣x;θ
- 。
其中,所有可以表示成如下形式的概率分布,都属于指数分布族:
在式(35)中, η成为分布的自然参数(Nature parameter); T(y)是充分统计量(Sufficient statistic),通常情况下 T(y)=y。当参数a、b、T都固定的时候,久定义了一个以 η为参数的函数族。
3.2、线性回归模型在广义线性模型下的推导
在上文中我们是通过对高斯分布的概率解释来获得确信的J(θ)
的,那我们就尝试着将高斯分布放在广义线性模型下推导,看看能做出来什么模型。
首先我们看向第1点,将高斯分布表示成式(35)的形式:
其中:
这就正好表示成了式(35)的形式,符合了第1点假设的要求,接下来我们看向第2点,使我们的假设函数等于高斯分布的期望:
最后我们看向第3点,令 η=θTx,又因为我们在式(37)中有 η=μ,则:
这就是最开始的式(2)的由来,惊不惊喜,刺不刺激。
3.3、逻辑回归模型在广义线性模型下的推导
逻辑回归的假设里是用到了伯努利分布的,我们同样地将伯努利分布放在广义线性模型下进行推导,看看是不是能得到逻辑回归的hθ(x)
,如式(22)。
还是从第一点看起,把伯努利分布表示成指数分布族的形式:
相应的参数为:
接下来执行第二点与第三点,令假设函数 hθ(x)等于伯努利函数的期望,并且令 η=θTx:
这就是逻辑回归的假设函数式(22)的由来了。
除了高斯分布与伯努利分布,大多数的概率分布都能表示成指数分布族的形式,如多项式分布(Multinomial),对有K个离散结果的事件建模;泊松分布(Poisson),对计数过程进行建模,如网站访问量的计数问题;指数分布(Exponential),对有间隔的证书进行建模,如预测公交车的到站时间的问题;等等,然后通过进一步的推导,就能得到各自的线性模型,这大大扩展了线性模型可解决问题的范围。
3.4、多分类回归模型(Softmax regression)在广义线性模型下的推导
3.4.1、多项式分布
接下来再来利用多项式分布进行建模,得到解决多分类问题的模型,它是逻辑回归二分类模型的扩展。
首先我们给出多项式分布的一些公式:
其中 y∈{ 1,2,3,⋯,k},又因为 ϕi累加为1,我们可以只保留 k−1个参数:
3.4.2、从两点分布出发
为了有个直观的理解,我们先来看k=2
时的情况。此时 p(y=1)=ϕ1, p(y=2)=ϕ2,并且 ϕ1+ϕ2=1,于是有 ϕ2=1−ϕ1
当 y=1时,只取 ϕ1;当 y=2时,只取 ϕ2,即 1−ϕ1,又因为只有一个参数 ϕ1了,干脆就直接令 ϕ1=ϕ。这与两点分布所要表达的意义是一模一样的,只不过两点分布只做二分类,就采取了取0和1的方式,使得整个式子更简洁(参考式(40)的第一行)。
3.4.3、多项式概率分布
那么在更一般的多分类问题中,其概率分布为:
这个式子所要表达的意思是,当 y的值取到 i的时候,只取相应的 ϕi的值。因为当 k的取值不同之时, ϕi的指数表示形式会不一样(如上面的例子,同是两点分布,仅是取值不同就会使得其指数表达不一样)。
为了更方便的表达,引入了上面的指示器函数(Indicator function),如果判断条件为真,输出1,反之输出0:
如 I{3=3}=1, I{3=2}=0。
所以,当 y=1时,式(47)的第一个乘子 ϕ1的指数为1,其他所有的乘子的指数全部为0,进一步推广到所有取值的情况,就起到了当y的值取到i的时候,只取相应的ϕi的值的作用。
但是这个指示器函数是一个抽象的东西,如何才能确实地实现这个作用呢?我们给出如下所示的 T(y):
这样 T(y)中的某个元素可以表示成:
举例来说,当 y=2时, T(2)中的第一个元素为: T(2)1=I{2=1}=0; T(2)中的第二个元素为: T(2)2=I{2=2}=1,这就解决了指数上标什么时候取0什么时候取1的问题。
于是我们从式(46)中进一步得到具体的多项式分布的概率分布:
3.4.4、在广义线性模型下的推导
还是从广义线性模型的第一点开始做起,将式(50)的概率分布表示成指数分布族的形式:
我们有:
观察式(52)我们可以发现,向量 η的第 i个元素为:
令其累加,得到:
把 ϕk带入式(53),即可得到多项式分布的期望:
那么接下来的第二步与第三步,令假设函数 hθ(x)等于多项式分布的期望,并且令 η=θTx,就显得非常地顺理成章了:
这就是softmax回归的模型了。
如果要求取参数 θ,还是和线性回归与逻辑回归一样,取其log似然函数做最大似然估计,具体方法可以选择梯度法或者牛顿法。