监督学习应用梯度下降

看了新版的吴恩达机器学习视频(发布在网易云上的),然后再看老版的斯坦福CS229,感觉还是老版的内容更全更清楚;于是又打算看老版视频再学一遍,同时做个学习笔记。

机器学习其实就是研究如何给予计算机学习的能力,让他能够自己学会很多的社会行为而不需要我们为他编写程序。

CS229这一整个课程会分为三个部分,监督学习(supervised learning),非监督学习(unsupervised learning),强化学习(reinforcement learning)。首先我们会从监督学习来深入这些机器学习算法。

监督学习其实是一种告诉了算法所有样本的正确答案的机器学习算法,并且我们希望这个算法在多次从这些样本以及他们的正确答案中学习后,能够从新的我们不知道答案的输入中判断出他的答案应该是什么。这节课讲的是其中一种监督学习算法:线性回归(linear regression),以及在寻找最合适参数时应用的梯度下降法(gradient descent)和正规方程(normal equation)。

这节课使用的例子是“房价预测”,给定一组训练样本,样本的输入是房子的大小,输出是房子的价格,我们的目标是训练出一个算法,能够找出房子大小和房价之间的联系并通过房子大小来预测房价。

本节课中,x 指输入变量,y 指输出变量,m指训练集中的样本数量(即所有输入和输出的记录一共有多少条),\Theta(theta)是拟合算法的参数。(x,y)就是一组样本,(x^{(i)},y^{(i)})指第 i 组样本。

用房价预测的例子,我们假设房价跟房子大小是线性关系,那我们要训练的算法就是线性表达的:h(x)=\Theta _{0}+\Theta _{1}x . (h(x) 即算法假设,x 是输入变量,本节中指的是房子大小, theta 0和1 是要通过训练找出来的参数)。但是生活中其实往往是不止有一个输入的,比如说,除了房子的大小,我们还知道这个房子有多少个卧室;这时候我们的训练集就有两个特征了:房子大小和卧室数量。此时我们的假设函数就是h_{\Theta }(x)=\Theta _{0}+\Theta _{1}x_{1}+\Theta _{2}x_{2} (x1指房子大小,x2指卧室数量),通过这个假设函数,我们就可以根据给定的房子大小和卧室数量来预测这个房子的价格。我们定义 x_{0}=1 就可以把公式简化为 h_{\Theta }(x)=\sum_{i=0}^{n}\Theta _{i}x_{i}=\Theta ^{T}X (n指特征的数量)。

那么,我们要如何选择参数 theta 来使得我们的假设函数能够对房价做出精确的预测呢?当我们的假设函数预测出来的结果跟真实的结果很相近的时候,这个时候的参数 theta 就是合适的,所以我们通过最小化预测价格和真实价格之间的差距来迭代更新参数,直到两者之间的差距达到我们的理想值,本节课中我们用预测价格减去真实价格的平方来表示他们之间的差距,这时候我们的损失函数为:J(\Theta )= \frac{1}{2}\sum_{i=1}^{m}(h_{\Theta }(x^{(i)}-y^{(i)}))^{2},我们的目标是最小化这个损失函数即min_{\Theta }J(\Theta ) 。

本节课中我们使用梯度下降法来最小化损失函数,我们以 theta0 和 theta1 作为横纵坐标,以损失函数作为高度来画图,如下:

随机选择一个初始位置,在这个位置上环顾四周,选择一个坡度最陡的方向下降一小步(选择坡度最陡则可以最快到达最低点),这个坡度最陡的方向是通过对各个参数求偏导而得。那么每走一步的 theta 都将更新,直到找到局部最优值(损失函数最低)。在每一步的梯度下降过程中,我们定义 theta 的更新公式为:\Theta _{i}:=\Theta _{i}-\alpha\frac{\partial J(\Theta )}{\partial \Theta _{i}}  (alpha 是学习率,他决定了我们这一步要跨多大,如果步子太小要花很长时间才能走到最低点,如果步子太大有可能会跳过最优值;alpha 乘以 损失函数对 theta i 的偏导即为这一步在 theta i 上的偏移;“:=” 指的是将等号右边的值赋值给左边)。

接下来我们来一步一步求解这个公式,首先计算一下在只有一个样本的情况下,损失函数对 theta i 的偏导\frac{\partial J(\Theta )}{\partial \Theta _{i}},我们将前面定义的损失函数的公式带入进来:

可以知道,在只有一个样本的情况下,theta 的更新公式为:\Theta _{i}:=\Theta _{i}-\alpha(h_{\Theta }(x)-y)x_{i} 。

同理,在有m个训练样本的情况下,theta 将不断重复以下更新公式,直到达到收敛:\Theta _{i}:=\Theta _{i}-\alpha\sum_{j=1}^{m}(h_{\Theta }(x^{(j)})-y^{(j)})x_{i}^{(j)} , 这种方法叫做批梯度下降(batch gradient descent),这种方法在每一步更新过程中都要遍历所有样本并求和,在面对很大的训练样本时会很困难。

在面对数据量巨大的训练样本时,我们可以选择另一个方法:随机梯度下降(stochastic gradient descent),他是对每一个训练样本都进行一次 theta 的更新,但更新公式当中的偏导是单个样本的而不是遍历所有样本:

repeat {

      for j=1 to m {   \Theta _{i}:=\Theta _{i}-\alpha(h_{\Theta }(x^{(j)})-y^{(j)})x_{i}^{(j)}   (对 i 个 theta 都更新)  }

}

 

到这里这节课的内容就结束了,线性回归,以及用于寻找最优参数的梯度下降法;但是这节课我最喜欢的部分其实是最后十分钟,NG老师讲如何用线性代数的知识来简化所有的公式计算,这一部分需要有一些线性代数的基础。

\Theta =\begin{bmatrix} \Theta _{0}\\ \Theta _{1}\\ ...\\ \Theta _{n}\\ \end{bmatrix}          X^{(i)} =\begin{bmatrix} x_{0}^{(i)}\\ x_{1}^{(i)}\\ ...\\ x_{n}^{(i)}\\ \end{bmatrix}           X =\begin{bmatrix} (X^{(1)})^{T}\\ (X^{(2)})^{T}\\ ...\\ (X^{(m)})^{T}\\ \end{bmatrix}          y =\begin{bmatrix} y^{(1)}\\ y^{(2)}\\ ...\\ y^{(m)}\\ \end{bmatrix}          (m指训练样本量,n指特征数量)

X\Theta =\begin{bmatrix} (X^{(1)})^{T}\Theta \\ (X^{(2)})^{T}\Theta \\ ...\\ (X^{(m)})^{T}\Theta \\ \end{bmatrix}=\begin{bmatrix} h_{\Theta }(X^{(1)}) \\ h_{\Theta }(X^{(2)}) \\ ...\\ h_{\Theta }(X^{(m)}) \\ \end{bmatrix}          X\Theta-y =\begin{bmatrix} h_{\Theta }(X^{(1)})-y^{(1)} \\ h_{\Theta }(X^{(2)}) -y^{(2)}\\ ...\\ h_{\Theta }(X^{(m)})-y^{(m)} \\ \end{bmatrix}            

\frac{1}{2}(X\Theta -y)^{T}(X\Theta -y)= \frac{1}{2}\sum_{i=1}^{m}(h_{\Theta }(x^{(i)}-y^{(i)}))^{2}=J(\Theta )

为了求得损失函数 J(\Theta ) 的最小值,就是使他对 theta 求导为零:\bigtriangledown _{\Theta }J(\Theta )=\bigtriangledown _{\Theta }\frac{1}{2}(X\Theta -y)^{T}(X\Theta -y)=\vec{0} ,因为上式求导所得值是一个实数,而在矩阵代数中实数的迹(trace)是他本身,所以上式可以写成\bigtriangledown _{\Theta }\frac{1}{2}(X\Theta -y)^{T}(X\Theta -y)=\frac{1}{2}\bigtriangledown _{\Theta }tr(X\Theta -y)^{T}(X\Theta -y)=\frac{1}{2}\bigtriangledown _{\Theta }tr(\Theta ^{T}X^{T}X\Theta -\Theta ^{T}X^{T}y-y^{T}X\Theta +y^{T}y) . 

在矩阵中有这样两个定理:trABC=trCAB=trBCAtrA=trA^{T},因此上式可以再变换成\frac{1}{2}(\bigtriangledown _{\Theta }tr\Theta\Theta ^{T}X^{T}X -\bigtriangledown _{\Theta }tr y^{T}X\Theta-\bigtriangledown _{\Theta }tr y^{T}X\Theta)=0y^{T}y项因为与 theta 无关所以求导为零)。

接下来需要用到的矩阵的迹的定理为:\bigtriangledown _{A}trAB=B^{T}\bigtriangledown _{A}trABA^{T}C=CAB+C^{T}AB^{T};我们先来求解上一步中第一项,让其乘以一个单位矩阵I:\bigtriangledown _{\Theta }tr\Theta\Theta ^{T}X^{T}X =\bigtriangledown _{\Theta }tr\underset{A }{\Theta } \underset{B}{I}\underset{A^{T}}{\Theta ^{T}}\underset{C}{X^{T}X} =\underset{C}{X^{T}X}\underset{A }{\Theta } \underset{B}{I}+\underset{C^{T}}{X^{T}X}\underset{A }{\Theta } \underset{B^{T}}{I},再来求解第二项:\bigtriangledown _{\Theta }tr \underset{B}{y^{T}X}\underset{A}{\Theta}=\underset{B^{T}}{X^{T}y},由此可得 \bigtriangledown _{\Theta }J(\Theta )=\frac{1}{2}(X^{T}X\Theta +X^{T}X\Theta -X^{T}y-X^{T}y)=X^{T}X\Theta -X^{T}y=0 .

由此推导得到正规方程(normal equation):X^{T}X\Theta =X^{T}y \Rightarrow \Theta =(X^{T}X)^{-1}X^{T}y .

于是我们就通过矩阵的方式求得了参数的最优值,是不是简化了很多计算?惊不惊喜?意不意外?有没有爱上矩阵?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值