个人的机器学习课程学习笔记,没有经过太多的处理,只是简要地说明原理和关键公式,详细讲解建议参考coursera上B站上吴恩达的机器学习课程或者知乎或CSDN上的一些文章。 本系列共01~05五篇,后面看情况可能会加个简单的项目实例。

基本模型

已知
数据输入为\(x_i\)
输出为\(y_i\)
样本对数为\(m\)

假设函数

假设函数关系为

\[ y^{\left(i\right)}=h\left(x^{\left(i\right)}\right)=\theta_0+\theta_1x^{\left(i\right)} \]

显然有两个待定参量\(\theta_0,\theta_1\)

代价函数

表示假设函数与实际已知值的误差
一般用方差

\[ J\left(\theta_0,\theta_1\right)=\frac{1}{2m}\sum_{i=1}^{m}\left[h\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right]^2 \]

显然,我们希望确定\(\theta_0,\theta_1\)使得\(J\)最小。

梯度下降法

一种简单有效的方法就是按照\(J\left(\theta_0,\theta_1\right)\)梯度迭代参量,
使得代价函数减小,进而取到极小值。

repeat until convergence{
  //simultaneously
  \(\theta_j=\theta_j−\alpha\frac{\partial}{\partial\theta_j}J\left(\theta_0,\theta_1\right)\)
}

如上所述,重复迭代直到收敛,注意必须同步更新参量。

01_p1
01_p1

上图所示为一种可能的过程(对于不同起点,可能收敛到不同的区域极值)

学习速率α

影响迭代速率,
如果太小则速度慢,
如果太大可能会使得结果发散。

01_p2
01_p2

微分项的解释

代价函数求导就是梯度。
合理性显然,前面有个负号,梯度正就迭代减小,梯度负就迭代增大。

按照上面的假设函数和代价函数,有

repeat until convergence{
  \(\theta_0=\theta_0−α⋅\frac{1}{m}\sum_{i=1}^{m}\left[h\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right]\)
  \(\theta_1=\theta_1−α⋅\frac{1}{m}\sum_{i=1}^{m}{\left[h\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right]\cdot x^{\left(i\right)}}\)
}

\(\theta_0\)其实就是乘了\(x_0^{\left(i\right)}=1\),按这个思路编matlab程序用矩阵乘法可以简化代码。

注1

上面的准确来说叫Batch梯度下降法, 即"back watch all",每次计算梯度的时候都遍历了所有点。

注2

由于本节所述的x,y关系比较简单,
其实可以用最小二乘法或正规方程组直接解得\(J\left(\theta\right)\)的最小值和\(\theta\)的解。
对于更大、更复杂的数据,梯度下降法(或别的机器学习算法)有其优越性(因为推不出来解析解)。