版权声明: https://blog.csdn.net/Dr_destiny/article/details/82754132
写这个博客是因为最近我在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θ。