写这个博客是因为最近我在Coursera上学习吴恩达的机器学习课程,为了巩固所学,记录在学习中遇到的一些问题。之后每一周都会在这里进行分享。
第一、二周的内容是围绕线性回归展开的,其中最重要的一个部分就是梯度下降法(Gradient Descent),这是一个用来求解假设hθ(x)中参数θ的算法。下面就是我在学习梯度下降法时遇到的一些值得注意的点。
1. Simultaneous Update
梯度下降法中,需要通过不断迭代更新参数θ(每一次迭代可能会用到所有训练样本,也有可能只用到一个训练样本,这就是批梯度下降和随机梯度下降的区别,这将会在第3点讲到),直到cost function Jθ(x)收敛。在更新过程中,θ中的所有参数[θ0 θ1 ... θn]需要遵循Simultaneous Update的规则,即同时更新,以单变量的梯度下降为例,令假设为hθ(x)=θ0x0+θ1x1,则梯度下降过程如下:
temp0:=θ0−α∂θ0∂Jθ(x)
temp1:=θ1−α∂θ1∂Jθ(x)
θ0:=temp0,θ1:=temp1
之所以采取中间变量,是因为在一次迭代过程中,所有式子里Jθ都是一样的,也就是说,θ0更新后,不能立刻将Jθ中的θ0替换然后用替换后的Jθ用去更新θ1,而应该将θ0存储到某个中间变量中(如上述的temp0),继续用Jθ更新,直到该次迭代结束,再将中间变量的值赋给θ=[θ0 θ1 ... θn],完成更新,再开始下一次的迭代。
2. 梯度下降法中的减号
为什么在梯度下降法的公式中要用减号而不是加号呢?
θi:=θi−α∂θ0∂Jθ(x)
这个问题可以用画图的问题去解决:

如图,横坐标为θ,纵坐标为Jθ,为了讲述方便,设θ为标量,即只有一个参数。Jθ是cost function,P1和P2分别代表某次迭代前的θi,P3和P4分别代表该次迭代后的θi+1。
可以看出,P1点的梯度是负的,假设梯度下降法的公式中用了加号,又因为α为正值,那么θi+1就会比θi小,反而是向着与最优点相反的方向前进,而我们是想尽快到达最优点,所以这与我们的目标相反。
而如果梯度下降法的公式中用了减号,那么θi+1就会比θi大,是朝着最优点的方向前进的,符合我们的要求。
P3和P4的例子同理。综上所述,减号是为了确保每一次迭代都向着最优值的方向前进。
3. 批(Batch)梯度下降和随机(Stochastic)梯度下降
所谓批梯度下降,即每次迭代更新θ时都用到所有的训练样本:
θi:=θi−αj=1∑m(θixi(j)−y(j))xi(j)
m是训练样本数量,i是θ和x的下标(线性回归的假设hθ=θ0x0+θ1x0+...+θnxn)
但是当训练样本数量太大时,这样的迭代速度就比较慢了,所以有了随机梯度下降法,一次迭代只用一个样本:
θi:=θi−α(θixi(j)−y(j))xi(j)
在样本数量足够大的情况下,一轮迭代只用一个样本,既可以达到足够的迭代次数,也大大减少了运算负担。虽然这样做会使梯度下降的过程更加“曲折”,但最后仍会趋向最优值。
4. Normalized Features
在多变量梯度下降中,会涉及到多个不同的特征,这些特征不一定都是相同的数量级,比如在预测房价的问题中,房屋面积、卧室数量这两个特征就不是一个数量级。为了使梯度下降更快,我们需要对特征进行归一化。
设特征为x1、x2…xn(x0=1,因此无需归一化),归一化公式如下:
xi:=σixi−μi
其中μi是训练样本中特征xi对应的那一列的平均值,σi则是相对应的标准差(极差也可以)。
这里尤其需要注意的是:在已经得到最优参数,进行预测时,输入也要做归一化!否则输出不正确!(因为参数都是根据归一化特征得到的)
5. θTx和Xθ之间的区别
θTx:只有一个参数和一种特征的情况下会使用,多数情况下只是为了讲解方便才会使用,通常情况下都是多参数。
θ=[θ0 θ1 ... θn]T
x=[x0 x1 ... xn]T
∴θTx=θ0x0+θ1x1+...+θnxn
Xθ:现实问题中,通常有许多特征,所以会将所有特征所有训练样本放在同一个矩阵X中:
X=⎣⎢⎢⎢⎢⎢⎡x0(1)x0(2)x0(3)...x0(m)x1(1)x1(2)x1(3)...x1(m)x2(1)x2(2)x2(3)...x2(m)...............xn(1)xn(2)xn(3)...xn(m)⎦⎥⎥⎥⎥⎥⎤
所以
Xθ=⎣⎢⎢⎢⎢⎢⎡θ0x0(1)+θ1x1(1)+θ2x2(1)+...+θnxn(1)θ0x0(2)+θ1x1(2)+θ2x2(2)+...+θnxn(2)θ0x0(3)+θ1x1(3)+θ2x2(3)+...+θnxn(3)...θ0x0(m)+θ1x1(m)+θ2x2(m)+...+θnxn(m)⎦⎥⎥⎥⎥⎥⎤
因为X是m∗(n+1)的矩阵,θ是(n+1)∗1的向量,θTX是无法运算的,所以是Xθ。