Part1-单参数线性回归
模型描述
如图是房屋价格预测问题,根据不同尺寸的房子对应不同售价组成的数据来画图,然后对新的房屋面积预测对应的价格
符号定义:
m=训练样本的数量
x's=输入变量(输入特征)
y's=输出变量(目标变量)
使用(x,y)来表示一个训练样本
使用\((x^{(i)},y^{(i)})\)表示 第i个训练样本
如何表示"假设"h?
\(h_\theta(x)=\theta_0+\theta_1x\)
代价函数
在线性回归中,有一个训练集如图所示,我们要做的就是得出假设中的\(\theta_0\)和\(\theta_1\)两个参数的值,来让假设函数表示的直线尽可能与这些数据点很好的拟合
如图,我们需要选择\(\theta_0\)和\(\theta_1\),来使\(h_\theta(x)\)接近对应的训练样本\((x,y)\)中的\(y\)
在线性回归中,我们要解决的是一个最小化问题 \[ minmize_{(\theta_0,\theta_1)} \frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 \] 其中\(\frac{1}{2m}\)是为了在后续进行求导时抵消掉平方,便于计算,对于优化的结果并没有影响
改写这个函数,以定义一个代价函数: \[ J(\theta_0,\theta_1)=\frac{1}{2m} \sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 \] \(J(\theta_0,\theta_1)\)也被称为平方误差函数
损失函数和代价函数的区别?
损失函数(Loss function):针对单个样本
代价函数(Cost function):针对全部样本
总结:
上述问题中
假设:\(h_\theta(x)=\theta_0+\theta_1x\)
参数:\(\theta_0,\theta_1\)
代价函数:\(J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2\)
目标:\(minimize_{(\theta_0,\theta_1)} J(\theta_0,\theta_1)\)
梯度下降
梯度下降算法是可能用来使得代价函数J最小化的算法
问题综述:
给定函数:\(J(\theta_0,\theta_1)\),可能是一个线性回归的代价函数,也可能是一个需要最小化的其它函数
目标:\(min_{(\theta_0,\theta_1) J(\theta_0,\theta_1)}\)
梯度下降算法思路:
开始时,给定\(\theta_0\)、\(\theta_1\)的初始值,通常设为0
然后不断改变\(\theta_0\)、\(\theta_1\)来使\(J(\theta_0,\theta_1)\)变小,直到找到\(J\)的最小值或局部最小值
具体过程如图,可以想象成一个人站在山顶上,需要走到最低点,在梯度下降算法中,我们需要做的就是:查看周围一圈,观察如果要在某个方向上走一小步,来达到尽快下山的目的,需要向哪个方向迈步?然后向对应的方向迈步,在新的位置重复上述操作,直到达到最低点或局部最低点
算法定义:
重复以下过程直到收敛:
\(\theta_j := \theta_j - \alpha \frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) \space (for\ j =0 \ and \ j=1)\)
其中\(:=\)表示赋值,\(\alpha\)表示学习率(learning rate),用来控制梯度下降时,迈出多大的步子,\(\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)\)表示一个导数项,后面再讨论
对应这个表达式,需要同时更新\(\theta_0\)和\(\theta_1\)
\(temp_0 :=\theta_0-\alpha\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1)\)
\(temp_1:=\theta_1-\alpha\frac{\partial}{\partial \theta_1}J(\theta_0,\theta_1)\)
\(\theta_0:=temp_0\)
\(\theta_1:=temp_1\)
如果先赋值\(temp_0\)再赋值\(\theta_0\)再赋值\(temp_1\)再赋值\(\theta_1\)就会导致与梯度下降所希望的不同的结果
对于上述表达式中的导数项,以一维为例,对于\(\theta_0 := \theta_0-\alpha\frac{d}{d\theta_0}J(\theta_0)\)
如图,如果当前位置在抛物线右边时,对应位置导数大于0,\(\theta_0\)更新后变小,当前位置在左边时,对应位置导数小于0,\(\theta_0\)更新后变大,对应的\(J(\theta_0)\)总是趋向于最小值
同时对于表达式中的\(\alpha\)而言,如果\(\alpha\)太小,\(\theta\)更新就会很慢,每次更新一点点;而如果\(\alpha\)太大,\(\theta\)就会更新幅度太大,导致更新过程反复横条。
在梯度下降法中,当接近局部最低点时,梯度下降法会自动采取更小的幅度,这是由于在接近局部最低点时,根据定义,在局部最低点时导数等于零,所以当接近局部最低时,导数值会变得越来越小,所以梯度下降会自动采取较小的幅度,所以不需要再另外减小\(\alpha\)
线性回归中的梯度下降
\[ \begin{split} \frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)&=\frac{\partial}{\partial\theta_j}\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2 \\ &=\frac{\partial}{\partial\theta_j}\frac{1}{2m}\sum_{i=1}^m(\theta_0+\theta_1x^{(i)}-y^{(i)})^2 \end{split} \]
\(\theta_0\ j=0:\)
\(\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1) = \frac{1}{2m} \cdot 2 \cdot \sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\cdot 1 =\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\)
\(\theta_1\ j=1:\)
\(\frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1) =\frac{1}{2m} \cdot 2 \cdot \sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\cdot x^{(i)} =\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x^{(i)}\)
批次梯度下降:
之前所说的梯度下降,都是批次梯度下降(Batch Gradient Descent),也就是使用全部的训练样本进行训练,后面会有不用全览整个训练集,而是每次只关注了小子集。