我们学习一样本领之前得知道它是用来做什么,先假设一个问题待解决,自己花点时间仔细想一想如何解决这个问题,也许你的思路更加先进优秀!
先思考,再看答案!
1、先假设一个要解决的问题
有一组数据集,包含房子大小、房价,要求根据这组数据集,输入房子大小,输出房价。
分析
将数据集可视化如上图,房价基本上和房子大小成正比,希望画一条直线来拟合正比关系。
2、使用一条直线拟合样本数据集
房子大小为横坐标,房价为纵坐标,房价与大小的关系为:上述函数称为:假设函数(hypothesis)
那么此问题就变成了寻找参数θ0和θ1的最优解。
如何寻找这两个参数呢,如何确认找到的参数是最优解呢?
3、如何衡量拟合程度
我们希望寻找一个方法来衡量假设函数是否符合样本,将假设函数在样本上画出:
y=房价,x=房子大小
那么在某一确定的房子大小x,样本房价y和假设函数的距离为:
我们希望距离越大则受到的惩罚越大,加入平方:
所有样本数据,给定房子大小x,y与假设函数的距离为:
实际上数学上称为均方误差MSE(Mean Square Error),是回归损失函数中最常用的误差,它是预测值f(x)与目标值y之间差值平方和的均值,其公式如下所示:
我们直接将MSE作为衡量拟合程度的函数
在机器学习中被成为: 损失函数(cost function 或 loss function)
有了损失函数来衡量假设函数的拟合程度,那么问题来了,如何找到参数θ0和θ1的最优解呢?
有一种方法:把实数范围内的θ0和θ1都试一遍,然后比较哪一组θ0和θ1的损失函数最小。额。。。那么,还有什么好方法吗?
为啥损失函数中求和后要除以2m,不是m吗?其实求最小值加入任何常数运算都不影响结果,2m方便后面梯度下降计算
4、如何找到θ0和θ1
实际上,如果我们遍历取值范围内所有的θ0和θ1,将θ0和θ1作为x、y,将损失函数J(θ0, θ1)作为竖直轴z,作图得:
那么聪明的你一定可以想到,损失函数关于θ0和θ1求偏导,就可以从任意一点找到通往最小极值点的方向。再定义一个步长α,这样就可以从任意一点一步一步走到最小极值点。
其中θ0和θ1需要同时求偏导,然后乘以步长α再同时更新θ0和θ1,这是因为如果先更新了θ0那么θ1的偏导会计算错误,反之亦然。
现在已经找到了求关于损失函数中参数θ0和θ1的最优解方法,这就是:
梯度下降算法(Gradient descent algorithm)
5、总结
为了根据房子大小预测房价,我们根据已有数据集样本信息,给出假设函数:
为了确定假设函数中的参数:
我们引用均方误差MSE作为损失函数:
为了求解最小损失函数:
我们采用梯度下降算法:
至此所有问题解决,我们可以写程序来实现所有功能。
6、思考
Q:假设函数为什么是直线,而不是曲线?
A:假设函数有很多种,上面举例是线性回归问题。假设函数的选取取决于要解决的问题,另外一个重要参考标准是梯度下降求偏导的计算量要小。
Q:还有其他的损失函数吗?
A:损失函数的选取取决于假设函数,如果假设函数是环装这时损失函数求点对点的距离显然就不合适。实际考虑到性能生产中的lost function一般都很简单,能简化则简化,能近似则近似。
Q:如果假设函数比较复杂,导致损失函数非碗状而是有多个极值点,那么梯度下降失效了吗?
A:没有失效,多找一些点多求几次极值点,比较后找到最小极值点。选择的点越多则找到最小极值点的概率越大,不过这将显著提升计算量。我们希望损失函数是凸函数(只有一个极值点),以便减少计算量。线性回归的损失函数是凸函数,只有一个极值点。
Q:4)如果梯度下降的步长过大,下降过程中错过极值点如何处理?
A:这个步长成为学习率,学习率较大则计算量小,但是有在极值点左右摇摆无法收敛的问题。方案一:动态学习率,约收敛学习率越小;方案二:使用不同尺度的学习率由大到小多次计算,直至收敛。
Q:5)上面描述了两个参数的解题方法,此方法是否对多个参数通用?
A:通用。