摘要:
监督学习中的线性回归问题,介绍了梯度下降算法(随机梯度下降与批梯度下降),以及正规方程组的解决方法和数学推导。另外,线性回归的一个重要问题是目标函数的选择,这里用最小二乘解。
一些符号约定
仍然是以房价与房屋面积的例子引出线性回归问题的解答。首先定义一些符号:
m:训练数据的大小
x:输入变量,是向量
y:输出变量,是实数
(x,y):一个训练实例
(x(i),y(i))
: 第i 个训练实例,i 是上标而不是指数
梯度下降算法
以线性回归问题,房屋价格的预测为例。
假设我们有房屋面积,卧室数目等输入变量,把各个变量作为输入变量
x
的各个分量,由此定义假设函数
hθ(x) 是以 θ 为参数,以 x 为输入的函数,在一般问题下,可以认为
由此,我们有了预测结果,把它与我们建模对象的实例量 y(i) 对比,采取最小二乘法进行评价,给出我们要优化的目标函数的定义:
这个函数的意义是我们预测结果与实例值的差距。也许你会奇怪为何要使用这样的形式,其本质的合理性在于中心极限定律给出无关因素的分布——是高斯分布。这一点以后会讨论。
对于目标函数,由于其意义在于和实例量的差距,所以自然是越小越好(这里实例量也包括被预测样本)。作为纯粹的数学问题,在给定一定数量的样本时,这个最值问题是可给出解析解的。课程里Ng在最后才给出这个结果,但是我觉得,作为被评价为数理基础较好的国家的大学生,想到求导等于 0 再给出解析解是最自然的。
解析结果(正规方程法):
设参数列为向量
输入样例
x(i)
组成输入矩阵X
同理有向量Y(矩阵Y每一行是一维向量)
θ=(XTX)−1XTY
暂时了解这个结果由方程解得即可,为了思路的紧凑我会在另外的博文中给出一些必要的约定和计算过程。
批梯度下降算法
由目标函数的意义,我们只要求得使之取最小值的
θ
即可,然而正规方程法的计算需要对矩阵求逆,稍大的数据量就会使它的开销极大,这限制了解析解的应用。由此,我们需要一种复杂度更小,实时根据已有样本进行参数优化的方法。
还是参考前面的推论,使得目标函数导数为
0
是我们的目标,不妨由目标函数对每个
右边和式中逐项求偏导,整理得:
假设我们已经有了一组 θ ,如果这个式子为 0 ,则不需要更新相应的
这样,我们有了批梯度下降算法(batch gradient descent)的一般过程,即取一个 θ (可以是任意的),进行上述过程,直到算法收敛。关于收敛可以有诸多方法定义,大致分为迭代结果收敛和参数收敛两种。
随机梯度下降算法
显而易见,前面给出的算法中,每次更新参数都需要遍历整个样本集来求得参数更新的方向和大小。如果每次更新参数,都在读取一个样例之后立即进行,那么我们的算法效率将会提高很多。先给出伪代码表达:
Repeat Until Converge{
For i=1 to m{
θj=θj−α(hθ(x(i))−y(i))x(i)j (for every j)
}
}
该方法也被称为增量梯度下降(incremental gradient descent),有着高效的优点,但也会导致遍历次数增多,不能精确收敛到最优值等问题。Ng 并没有严格论证这种算法的合理性,让我来试着进行直观描述:
由假设出发,被预测的对象和已知的样例合为对象集,其分布被认为服从高斯分布。其似然性最大的拟合函数是我们要求得的目标
h0
,那么每一个样例都会使得参数
θ
的函数
h
接近
由系统的观点来看,批梯度下降类似于解析求解而随机梯度下降可以看成由反馈一步一步生成结果,因现实系统的确依靠反馈达到解析的稳定,也就说明了随机梯度下降算法的合理性。
由计算过程来看,随机梯度下降在起初效率是更好的,虽然接近终点时可能会因难以收敛而效率下降。