【Coursera Machine Learning】适用多个特征量的梯度下降

引入

首先我们假设一个有多个特征量的情况:

我们的目标函数应该会变成下面的样子:

\[h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n \]

define \(x_0=1\)

那么:

\[x= \left[ \begin{array}{1} x_1\\x_2\\\vdots\\x_n \end{array} \right] \in \R^{n+1} , \theta= \left[ \begin{array}{1} \theta_1\\\theta_2\\\vdots\\\theta_n \end{array} \right] \in \R^{n+1} \\ h_\theta(x)=\theta_0x_0+\theta_1x_1+\dots+\theta_nx_n\\=\theta^Tx \]

p.s.:\(\theta^T\)表示\(\theta\)的转置向量

多特征量梯度下降

假设:$$h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n=\theta x$$

并约定\(x_0=1\)

参数:\(\theta_0,\theta_1,\dots,\theta_n\)。可以想象成一个n+1维的向量\(\theta\)

代价函数:\(J(\theta)=J(\theta_0,\theta_1,\dots,\theta_n)=\frac{1}{2m}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2\)

梯度下降公式:

重复:

\[\theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta) \]

且可以分别推导出\(\theta_0和\theta_1\)的梯度下降公式

而当特征量有多个,\(n\geq1\)时,梯度下降公式变为如下:

\[\theta_j:=\theta_j-\alpha\frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)})-j^{(i)})x^{(i)}_j \]

最终用于实现的梯度下降公式!

\[\theta=\theta-\alpha\frac{1}{m}X^T(X_\theta-y) \]

梯度下降的实用技巧

特征缩放

有时候画出等高线图如果过于狭长可能会导致运行到函数收敛的时间太长,这时比如选择将一些参数除以一定倍率可以将等高线图的形状变得均匀(变圆)

执行特征缩放时,一般会将特征的取值约束到\(\pm1\)之间。差距稍微大一点点比如在\(\pm3\)之间也是可以接受的。往小了说,在\(\pm\frac{1}{3}\)之间也可以,但是太小也不行。

归一化(Mean normalization)

可以在特征缩放的时候在分子里再减去一个\(x_i\)的平均数,比如$$x_1=\frac{size-1000}{2000}$$

\(x_1\larr\frac{x_1-\mu_1}{s_1}\)

\(\mu_1\):特征\(x_1\)的平均值

\(S_1\):特征值的范围,即最大值-最小值

Debugging

How to make sure gradient descent is working correctly

画出 \(minJ(\theta)\)-迭代次数 的图像,正确工作的梯度下降法中 $$minJ(\theta)$$会随着迭代次数的增加持续减小。一般也通过这种方式来判断梯度下降算法是否已经收敛。

此外也有一些算法可以自动反馈梯度下降算法是否收敛。比如设置当\(J(\theta)\)的下降小于\(10^{-3}\)时就认为已经收敛。但通常来说要选择一个合适的阈值\(\epsilon\)是相当困难的。

选择Learning rate \(\alpha\)

有时候如果你发现画出的图像曲线是向上的或者类似双曲线等,或者其它梯度下降算法没有正确收敛的情况,可以尝试将Learning rate设置为更小的值。

posted on 2022-08-03 16:04  安逐悲  阅读(42)  评论(0)    收藏  举报

导航