从这节课开始进入真正的学习阶段。
就像前一节描述的监督式学习,我们对于学习目的是明确的,譬如房子大小与房价的关系,在学习这个关系的时候,对于这个关系依然需要首先建立模型。这个其实十分类似于我们专业的过程,在研究控制方法之前首先需要研究对象,对对象进行建模。这样这节课理解起来就十分简单了,毕竟人工智能就是我们专业的研究方向之一,这些基础学习都是曾经学过的。
大学里学习了各种建模方法,用状态方程传递函数来描述对象,研究是否收敛,解状态方程参数来验证控制方法,用最小二乘来系统建模解参数等等,吴恩达这里刚开始介绍的机器学习,也是建立模型,然后通过机器学习
来解模型参数,从而得出最优模型来实际应用。
模型建立
他是从最简单的线性模型开始的,即用二元一次方程来描述训练集。
通常对于一组二元一次方程描述的训练集来说可以描述为\left ( x\left ( i \right ), y\left ( i \right ) \right ), i = 1, ..., m
,即训练集中数据对数记为m
,x
为输入,y
为输出,则这个模型可以描述为
![][0]:(http://latex.codecogs.com/gif.latex?h\left ( x \right ) = \theta {0}+\theta{1}\cdot x)
cost function
在上节课中提到评价标准P
,即可以理解为这里的cost function
,用来评价学习的有效性,这个有效性需要定量分析,所以cost function
是个可定量计算的函数。怎样的学习是最有效的,最基本的衡量则是最接近理想结果的,所以课程中第一个提到的cost function
就是用误差来做的,描述如下:
J\left ( \theta {0} ,\theta {1}\right ) = \frac{1}{2m}\sum{i=1}^{m}\left ( \hat{y{i}}-y_{i} \right )^{2} = \frac{1}{2m}\sum_{i=1}^{m}\left ( h_{\Theta }\left ( x_{i} \right )-y_{i} \right )^{2}
需要注意的是,这个cost function
可以有很多种,不同的函数有不同的优势,这里只是提出的最简单的一个。
模型是一条直线,这个误差平方的cost function
从图像上来看就是计算的模型求解参数直线与训练集所给出的点的距离平方和,这个平方和越小,即解出的模型参数构建的模型离训练集给出的真实值越近,即模型越真实。
吴恩达这里用了一个地理中的等高线来描述这个误差平方和的cost function
与实际$$θ{0}, θ{1}$$的关系。确实是第一次见,很不错。
梯度下降法
有了模型,有了cost function
,就可以去求解模型参数了。这个求解模型参数的过程就是现在所谓机器学习
的算法。当然,由于现在的模型是最简单的二元一次线性方程,所以这个机器学习
的算法和以前学习的模型求解并无太大区别。
这里介绍的学习算法是梯度下降法
,就是从初始点开始,沿梯度下降最大的方向前进,直到最低点。
具体求解方法如下:
\theta_{j} :=\theta_{j} - \alpha \frac{\partial}{\partial \theta {j}}J\left ( \theta{0}, \theta_{1} \right )
其中α
就是梯度下降的步长
这里有几个需要非常注意的地方:
- 梯度下降法达到的最低点有可能是次优解而不是最优解,这个学过高数的应该都知道的,只是这里在
机器学习
中依然需要面对这个问题。吴恩达暂时还没说解决方法。 - 梯度下降的步长如果很小的话,每次前进太小,导致训练时长增加。但是步长如果太大的话,可能会导致发散,无法收敛。所以步长选取需要非常注意。
- 对于所有的参数,需要同时更新。即对于两个
\theta_0
,\theta_1
在每次训练集学习时需要同时更新。不同时更新可能也能达到理想值,但是那不是真正的梯度下降法
。
即是:
temp0 := \theta_{0} - \alpha \frac{\partial}{\partial \theta {0}}J\left ( \theta{0}, \theta_{1} \right )
temp1 := \theta_{1} - \alpha \frac{\partial}{\partial \theta {1}}J\left ( \theta{0}, \theta_{1} \right )
\theta_{0} := temp0
\theta_{1} := temp1
而不是:
temp0 := \theta_{0} - \alpha \frac{\partial}{\partial \theta {0}}J\left ( \theta{0}, \theta_{1} \right )
\theta_{0} := temp0
temp1 := \theta_{1} - \alpha \frac{\partial}{\partial \theta {1}}J\left ( \theta{0}, \theta_{1} \right )
\theta_{1} := temp1
具体的导数求解和高数学的一样,没什么问题。
第一周后续的课程都是在为后续将多变量模型铺垫的矩阵论,讲的比学校学习的简单的多了,没什么可说的。