Cs229学习笔记

Published: by Creative Commons Licence

  • Tags:

基本流程

将训练数据(training set)喂给某个学习算法(learning algorithm),之后算法计算出一个假说(hypothesis),h。之后对于给定的输入x,假说会估算出来结果h(x)

现在的问题是该如何表示一个假说h

我们记录n为输入向量的长度,k为训练集的大小。因此训练集可以表示为(x(1),y(1)),,(x(k),y(k))。其中每个元素(x(i),y(i))叫做一个训练样本。

如果我们有多个假说,我们还需要设计一套误差计算的函数Dh在第i个样本上的误差为D(h(x(i))y(i))。而在所有训练集上的总误差一般为J(h)=ki=1D(h(x(i))y(i))。这样我们就能比较两个不同的假说的优劣了。

线性回归(linear regression)

在线性回归中,假说h(x)=ax+b,即一个仿射函数。

举个例子。通过房子的信息,我们要估算房子的价格。其中x是一个长度为2的列向量(sizeofhouse,numberofbedrooms),而a则是一个1×2的矩阵,b是一个实数。为了让公式更加紧凑,我们可以将x增加一个维度,增加的维度的值始终是一个守护值1,这样我们就可以将假说重写为h(x)=θx,一个线性函数。

线性回归算法的目标就是为你选择合适的A来产生尽可能精确的结果。

线性回归中,误差函数一般为D(v)=12|v|2,即离原点的距离的平方。

梯度下降(gradient descent)

梯度下降是用来寻找假说中系数θ的算法。

我们可以从任意一个随机向量θ出发。之后让

θi:=θiJθi(θ)J(θ)α

其中α是一个常量,称为学习率(learning rate),决定了学习的速率。

下面推导一下偏导数:

Jθi(θ)=θikt=1D(θx(t)y(t))=12θikt=1(θx(t)y(t))2=12kt=12(h(x(t))y(t))x(t)i=kt=1(h(x(t))y(t))x(t)i

在线性回归模型中,只有唯一的极小值点,因此不会陷入局部最小值的情况。

上面的方法成为批量梯度下降(batch gradient descent)。在训练集非常大的情况下,由于批量梯度下降每一轮迭代都需要遍历整个训练集,因此会非常慢。

还有一种方法叫做随机梯度下降(stochastic gradient descent)。具体做法就是遍历整个训练集,但是对于每个单独的训练集元素都执行一轮迭代(即可以认为每次迭代的时候k=1)。其最后还是会停止在全局最小值处。

随机梯度下降也不是完美的,较少的错误数据或噪音可能对结果造成很大的影响。我们可以在随机梯度下降的过程中加入优化,比如每次一次性取100条记录来训练(每次迭代的时候k=100),这样就能避免噪音带来的影响,同时训练的速度也非常快。这种方法叫做微批量梯度下降(Mini-batch gradient descent)。

除了梯度下降外,线性回归问题,我们可以不需要多次迭代,通过矩阵运算即可直接求出解。具体我们可以发现在全局最小值处,J的导数矩阵应该是个0矩阵。这时候可以发现我们可以将问题写成线性方程组,并最后通过高斯消元求解A

局部加权回归(locally weighted regression)

线性回归存在一个问题,就是如果图像是曲线或者存在lnxx2这种形式的关系,那么线性回归是无法预测出一个合理的模型的。

局部加权回归能帮助我们在求解某个h(x)的时候,使用一个带权的惩罚函数,某个训练集中样本的权值大小与这个训练集的输入与x的距离成反比。第i个样本的权值的具体公式为:

w(i)=exp((x(i)x)22τ)

其中τ是预先选择的常量,它的大小会影响实际作用的训练样本,同时也会影响我们的训练是否会过拟合。

而惩罚函数的公式为:

J(h)=mi=1w(i)D(h(x(i))y(i))

直观看,如果样本i的输入与x非常接近,那么其权重将接近1,而如果样本i的输入离x非常远,则其权重接近于0

逻辑回归(logistic regression)

如果h的值域为0,1,那么这样的问题称为分类问题。

逻辑回归的假说形式为h(x)=g(θx)=11+eθx。它是一个递增函数,且值域为[0,1]

我们可以理解h(x)表示p(y=1|x;θ),即给定系数θ,对于输入x,输出为1的概率。

考虑到y0,1,因此我们可以得出

p(y|x;θ)=h(x)y(1h(x))1y

根据最大似然估计,得出:

l(θ)=p(y|x;θ)=ki=1p(y(i)|x(i);θ)=ki=1h(x(i))y(i)(1h(x(i)))1y(i)

其对数形式为:

lnl(θ)=lnki=1h(x(i))y(i)(1h(x(i)))1y(i)=ki=1y(i)lnh(x(i))+(1y(i))ln(1h(x(i)))

我们希望最大化l(θ),等价于最大化lnl(θ)

梯度下降

J(h)=lnl(θ),我们需要最大化J(h)

θi:=θi+Jθi(θ)α

其中

Jθi(θ)=kt=1(h(x(t))y(t))x(t)i

可以发现逻辑回归和线性回归的递推公式是相同的。

牛顿法

使用一般的大步小步走算法会导致我们的轮数非常多。牛顿法可以减少这样的轮次。

牛顿法用于计算某个函数f的零点的x值,其具体方法就是随机一个初始的x(0)。之后不断找到f在上一轮点处的切线与x轴的交点,将它作为这一轮的点x(t)。具体公式为

x(t+1)=x(t)f(x(t))f(x(t))

上面讨论的是x是实数的情况,如果x是某个向量θ,则迭代公式为:

θ(t+1)=θ(t)+H1Δf(θ(t))Δθ(t)

其中Hi,j=fθiθj(θ(t))

牛顿法需要我们处理很大的矩阵(长宽均为特征数),需要很大的计算量。因此对于特征较少的模型比较好用。

指数族(Exponential family)

如果一个概率分布fX(x;η)满足下面公式:

fX(x;η)=b(x)exp[ηT(x)A(η)]

则称该概率分布属于指数族η

比如伯努利分布,正态分布等都属于指数族。

指数族有一些很好的性质:

  • E(x;η)=ηA(x)
  • Var(x;η)=2η2A(η)

如果η是向量,则E(x;η)也是向量,而Var(x;η)是黑塞(hessian)矩阵。

我们希望最大化MLE,即