第二课 监督学习应用-梯度下降

课程概况:

线性回归、梯度下降、正规方程组

 

概述

汽车的自动驾驶:人类司机会为汽车提供一系列正确的行驶方向,之后尝试更多正确的行驶方向,以确保汽车始终行驶在路上,就是汽车的任务了。-----监督学习中的回归问题:汽车尝试预测表示行驶方向的连续变量的值。

 

举例:房价预测

房价由多个因素,比如房子面积,卧室的数量等因素决定

监督学习的任务:学习房价与各因素之间的关系

 

引入符号:

m 表示训练样本的数据,也就是数据的行数 #training examples

x 表示输入变量 #input variables 或 feature(特征)

y 表示输出变量 #output variables 或 target variable (目标变量)

(x y) 表示一个样本

\left ( x^{(i)},y^{(i)} \right ) 第i个样本 训练样本列表中的第i行

n 表示特征的数目

\theta 学习算法的参数,是学习算法的任务

 

监督学习的过程

首先找到一个训练集合(m个样本),提供给学习算法,得到一个输出函数h,称之为假设(hypothesis),这个假设可以对新数据x(不在训练集中的)得到一个新的估计y,即假设h的作用是将输入x映射到输出y。

解决房价预测问题

1.对假设进行线性表示

h(x)=h_{0}(x)=\theta _{0} + \theta _{1}x_{1}+ \theta _{2}x_{2}+...++ \theta _{i}x_{i}

可将式子改写为h(x)=\sum_{i=0}^{n}\theta _{i}x_{i}=\left [ \begin{matrix} \theta _{0}&\theta _{1} &...&\theta _{i}\end{matrix} \right ]\begin{bmatrix} x_{0}\\ x_{1} \\ ...\\x_{i} \end{bmatrix}=\theta ^{T}x

 

2.尝试让学习算法的预测值在训练数据上尽可能准确

我们的目标即求解参数\theta,选取的参数能使预测值和实际值的方差最小

目标函数:

其中h_{\theta }(x^{(i)})表示每个样本经过学习算法得到的预测值。y^{(i)}代表每个样本的真实值

目标:min_{_{\theta }}J(\theta ) ,求J(\theta )的最小值

3.求最小值的算法

3.1 搜索算法

基本思想:给定参数向量\theta一个初始值(例如\theta =\vec{0}),不断改变参数向量的值,使得J(\theta )不断减小,直到J(\theta )收敛为最小值

3.1.1 批梯度下降算法

其中梯度下降算法(Gradient Descent)是经典的一种搜索算法,其中心思想是寻找下降最大的梯度改变,从而最快收敛至最小值,就像一个人站在山上,环顾四周,寻找最快的下山方式。

J(\theta )的图像表示如图所示:

一开始初始化一个向量作为初始值,假设该三维图为一个三维地表。梯度下降的方法是,你环视一周,寻找下降最快的路径,即为梯度的方向,每次下降一小步,再环视四周,继续下降,以此类推。结果到达一个局部最小值,如下图:

特点:梯度下降的结果依赖于参数的初始值,初始值不同,可能会导致不同的结果。

\theta的更新方程为\theta _{i}:=\theta _{i}-\alpha \frac{\alpha }{\alpha \theta _{i}}J(\theta )

每一次将减去求偏导的结果,即沿最陡峭的“山坡”下降


更新方程的推导:(考虑只有一个训练样本)

代入更新方程中:\theta _{i}:=\theta _{i}-\alpha(h_{\theta }(x)-y)x_{i}


:学习速度,即决定你下山时每一步迈多大。设的过小,收敛时间长,设的过大,可能会超过最小值

考虑m个样本数量的情况--批梯度下降算法(batch gradient descent)

算法流程:

重复更新\theta的值直到算法收敛 \theta _{i}:=\theta _{i}-\alpha\sum_{j=1}^{m}(h_{\theta }(x^{(j)})-y^{(j)})x_{i}^{(j)}

 

检测是否收敛的方法:

1)       检测两次迭代的改变量,若不再变化,则判定收敛

2)       更常用的方法:检验,若不再变化,判定收敛

该算法的缺点是:每一次更新的时候都需要遍历整个训练样本,对m个训练样本进行求和,所以该算法只适用于小样本。

如果遇到样本数量大的时候,我们将使用下面这个算法

3.1.2随机梯度下降算法

也称为增量梯度下降算法

算法流程如下:

Repeat 直到算法收敛{

    for j=1 to m {

            \theta _{_{i}}:=\theta _{_{i}}-\alpha (h_{\theta }(x^{(j)})-y^{(j)})x_{i}^{(j)} (更新所有的\theta_{i})

   }

}

该算法的特点在于:每次更新只使用一个样本数据,适用于样本数量比较大的情况下。但是该算法不会精确的收敛到全局的最小值。

3.2 正规方程组

不再需要迭代的求\theta

定义对函数J(\theta )求导数的符号:

一些关于迹运算符和导数的定理:


如果A是方阵,那么


定义矩阵X,称为设计矩阵,包含了训练集中所有输入的矩阵,第i行为第i组输入数据,即:

那么X\theta =\begin{bmatrix} x^{(1)T }\theta\\ ... \\ x^{(m)T }\theta \end{bmatrix}=\begin{bmatrix} h_{\theta }(x^{(1)})\\ ... \\ h_{\theta }(x^{(m)}) \end{bmatrix}

将真实值\vec{y}定义为\vec{y}=\begin{bmatrix} y^{(1)}\\ ... \\ y^{(m)} \end{bmatrix}

那么x\theta -y=\begin{bmatrix} h_{\theta }(x^{(1)})-y^{(1)}\\ ... \\ h_{\theta }(x^{(m)})-y^{(m)} \end{bmatrix}

对目标函数求偏导:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值