Machine Learning-Andrew Ng 课程第一、二周——梯度下降法(单变量、多变量)


写这个博客是因为最近我在Coursera上学习吴恩达的机器学习课程,为了巩固所学,记录在学习中遇到的一些问题。之后每一周都会在这里进行分享。

第一、二周的内容是围绕线性回归展开的,其中最重要的一个部分就是梯度下降法(Gradient Descent),这是一个用来求解假设 h θ ( x ) h_\theta(x) hθ(x)中参数 θ \theta θ的算法。下面就是我在学习梯度下降法时遇到的一些值得注意的点。

1. Simultaneous Update

梯度下降法中,需要通过不断迭代更新参数 θ \theta θ(每一次迭代可能会用到所有训练样本,也有可能只用到一个训练样本,这就是批梯度下降和随机梯度下降的区别,这将会在第3点讲到),直到cost function J θ ( x ) J_\theta(x) Jθ(x)收敛。在更新过程中, θ \theta θ中的所有参数 [ θ 0   θ 1   . . .   θ n ] [\theta_0 \space \theta_1 \space ... \space \theta_n] [θ0 θ1 ... θn]需要遵循Simultaneous Update的规则,即同时更新,以单变量的梯度下降为例,令假设为 h θ ( x ) = θ 0 x 0 + θ 1 x 1 h_\theta(x)=\theta_0x_0+\theta_1x_1 hθ(x)=θ0x0+θ1x1,则梯度下降过程如下:
t e m p 0 : = θ 0 − α ∂ J θ ( x ) ∂ θ 0 temp_0:=\theta_0-\alpha\frac{\partial J_\theta(\mathbf{x})}{\partial \theta_0} temp0:=θ0αθ0Jθ(x)
t e m p 1 : = θ 1 − α ∂ J θ ( x ) ∂ θ 1 temp_1:=\theta_1-\alpha\frac{\partial J_\theta(\mathbf{x})}{\partial \theta_1} temp1:=θ1αθ1Jθ(x)
θ 0 : = t e m p 0 , θ 1 : = t e m p 1 \theta_0:=temp_0,\theta_1:=temp_1 θ0:=temp0,θ1:=temp1
之所以采取中间变量,是因为在一次迭代过程中,所有式子里 J θ J_\theta Jθ都是一样的,也就是说, θ 0 \theta_0 θ0更新后,不能立刻将 J θ J_\theta Jθ中的 θ 0 \theta_0 θ0替换然后用替换后的 J θ J_\theta Jθ用去更新 θ 1 \theta_1 θ1,而应该将 θ 0 \theta_0 θ0存储到某个中间变量中(如上述的 t e m p 0 temp_0 temp0),继续用 J θ J_\theta Jθ更新,直到该次迭代结束,再将中间变量的值赋给 θ = [ θ 0   θ 1   . . .   θ n ] \theta=[\theta_0 \space \theta_1 \space ... \space \theta_n] θ=[θ0 θ1 ... θn],完成更新,再开始下一次的迭代。

2. 梯度下降法中的减号

为什么在梯度下降法的公式中要用减号而不是加号呢?
θ i : = θ i − α ∂ J θ ( x ) ∂ θ 0 \theta_i:=\theta_i-\alpha\frac{\partial J_\theta(\mathbf{x})}{\partial \theta_0} θi:=θiαθ0Jθ(x)
这个问题可以用画图的问题去解决:
在这里插入图片描述
如图,横坐标为 θ \theta θ,纵坐标为 J θ J_\theta Jθ,为了讲述方便,设 θ \theta θ为标量,即只有一个参数。 J θ J_\theta Jθ是cost function, P 1 P_1 P1 P 2 P_2 P2分别代表某次迭代前的 θ i \theta{i} θi P 3 P_3 P3 P 4 P_4 P4分别代表该次迭代后的 θ i + 1 \theta_{i+1} θi+1

可以看出, P 1 P_1 P1点的梯度是负的,假设梯度下降法的公式中用了加号,又因为 α \alpha α为正值,那么 θ i + 1 \theta_{i+1} θi+1就会比 θ i \theta{i} θi小,反而是向着与最优点相反的方向前进,而我们是想尽快到达最优点,所以这与我们的目标相反。

而如果梯度下降法的公式中用了减号,那么 θ i + 1 \theta_{i+1} θi+1就会比 θ i \theta{i} θi大,是朝着最优点的方向前进的,符合我们的要求。

P 3 P_3 P3 P 4 P_4 P4的例子同理。综上所述,减号是为了确保每一次迭代都向着最优值的方向前进。

3. 批(Batch)梯度下降和随机(Stochastic)梯度下降

所谓批梯度下降,即每次迭代更新 θ \theta θ时都用到所有的训练样本:
θ i : = θ i − α ∑ j = 1 m ( θ i x i ( j ) − y ( j ) ) x i ( j ) \theta_i:=\theta_i-\alpha\sum_{j=1}^{m}{(\theta_ix_i^{(j)}-y^{(j)})x_i^{(j)}} θi:=θiαj=1m(θixi(j)y(j))xi(j)
m m m是训练样本数量, i i i θ \theta θ x x x的下标(线性回归的假设 h θ = θ 0 x 0 + θ 1 x 0 + . . . + θ n x n h_\theta=\theta_0x_0+\theta_1x_0+...+\theta_nx_n hθ=θ0x0+θ1x0+...+θnxn
但是当训练样本数量太大时,这样的迭代速度就比较慢了,所以有了随机梯度下降法,一次迭代只用一个样本:
θ i : = θ i − α ( θ i x i ( j ) − y ( j ) ) x i ( j ) \theta_i:=\theta_i-\alpha(\theta_ix_i^{(j)}-y^{(j)})x_i^{(j)} θi:=θiα(θixi(j)y(j))xi(j)
在样本数量足够大的情况下,一轮迭代只用一个样本,既可以达到足够的迭代次数,也大大减少了运算负担。虽然这样做会使梯度下降的过程更加“曲折”,但最后仍会趋向最优值。

4. Normalized Features

在多变量梯度下降中,会涉及到多个不同的特征,这些特征不一定都是相同的数量级,比如在预测房价的问题中,房屋面积、卧室数量这两个特征就不是一个数量级。为了使梯度下降更快,我们需要对特征进行归一化。
设特征为 x 1 x_1 x1 x 2 x_2 x2 x n x_n xn x 0 = 1 x_0=1 x0=1,因此无需归一化),归一化公式如下:
x i : = x i − μ i σ i x_i:=\frac{x_i-\mu_i}{\sigma_i} xi:=σixiμi
其中 μ i \mu_i μi是训练样本中特征 x i x_i xi对应的那一列的平均值, σ i \sigma_i σi则是相对应的标准差(极差也可以)。

这里尤其需要注意的是:在已经得到最优参数,进行预测时,输入也要做归一化!否则输出不正确!(因为参数都是根据归一化特征得到的)

5. θ T x \theta^T\mathbf{x} θTx X θ X\theta Xθ之间的区别

θ T x \theta^T\mathbf{x} θTx:只有一个参数和一种特征的情况下会使用,多数情况下只是为了讲解方便才会使用,通常情况下都是多参数。
θ = [ θ 0   θ 1   . . .   θ n ] T \theta=[\theta_0 \space \theta_1 \space ... \space \theta_n]^T θ=[θ0 θ1 ... θn]T
x = [ x 0   x 1   . . .   x n ] T \mathbf{x}=[x_0 \space x_1 \space ... \space x_n]^T x=[x0 x1 ... xn]T
∴ θ T x = θ 0 x 0 + θ 1 x 1 + . . . + θ n x n \therefore \theta^T\mathbf{x}=\theta_0x_0+\theta_1x_1+...+\theta_nx_n θTx=θ0x0+θ1x1+...+θnxn

X θ X\theta Xθ:现实问题中,通常有许多特征,所以会将所有特征所有训练样本放在同一个矩阵 X X X中:
X = [ x 0 ( 1 ) x 1 ( 1 ) x 2 ( 1 ) . . . x n ( 1 ) x 0 ( 2 ) x 1 ( 2 ) x 2 ( 2 ) . . . x n ( 2 ) x 0 ( 3 ) x 1 ( 3 ) x 2 ( 3 ) . . . x n ( 3 ) . . . . . . . . . . . . . . . x 0 ( m ) x 1 ( m ) x 2 ( m ) . . . x n ( m ) ] X= \left[ \begin{matrix} x_0^{(1)} & x_1^{(1)} & x_2^{(1)} & ... & x_n^{(1)}\\ x_0^{(2)} & x_1^{(2)} & x_2^{(2)} & ... & x_n^{(2)}\\ x_0^{(3)} & x_1^{(3)} & x_2^{(3)} & ... & x_n^{(3)} \\ ... & ... & ... & ... & ...\\ x_0^{(m)} & x_1^{(m)} & x_2^{(m)} & ... & x_n^{(m)} \\ \end{matrix} \right] 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 θ = [ θ 0 x 0 ( 1 ) + θ 1 x 1 ( 1 ) + θ 2 x 2 ( 1 ) + . . . + θ n x n ( 1 ) θ 0 x 0 ( 2 ) + θ 1 x 1 ( 2 ) + θ 2 x 2 ( 2 ) + . . . + θ n x n ( 2 ) θ 0 x 0 ( 3 ) + θ 1 x 1 ( 3 ) + θ 2 x 2 ( 3 ) + . . . + θ n x n ( 3 ) . . . θ 0 x 0 ( m ) + θ 1 x 1 ( m ) + θ 2 x 2 ( m ) + . . . + θ n x n ( m ) ] X\theta= \left[ \begin{matrix} \theta_0x_0^{(1)}+\theta_1x_1^{(1)}+\theta_2x_2^{(1)}+... +\theta_nx_n^{(1)}\\ \theta_0x_0^{(2)}+\theta_1x_1^{(2)}+\theta_2x_2^{(2)}+... +\theta_nx_n^{(2)}\\ \theta_0x_0^{(3)}+\theta_1x_1^{(3)}+\theta_2x_2^{(3)}+... +\theta_nx_n^{(3)}\\ ...\\ \theta_0x_0^{(m)}+\theta_1x_1^{(m)}+\theta_2x_2^{(m)}+... +\theta_nx_n^{(m)}\\ \end{matrix} \right] 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 X X m ∗ ( n + 1 ) m*(n+1) m(n+1)的矩阵, θ \theta θ ( n + 1 ) ∗ 1 (n+1)*1 (n+1)1的向量, θ T X \theta^TX θTX是无法运算的,所以是 X θ X\theta Xθ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值