• 继续,第一章中的代价函数与梯度下降算法介绍


    与几个同专业的朋友吃完饭,坐在电脑前又敲了会字,传上来

    模型建立(术语介绍)

    为方便将来讨论机器学习的方便,我们这里定义:(x^{(i)})为输入变量,也成为输入的特征变量,以后将更多的应用术语Features(特征)来描述。(y^{(i)})表示第i个输出或试图预测的目标变量。((x^{(i)},y^{(i)}))为一对训练集,这里的i=1……m。

    为了更清晰与正式的描述有监督学习问题,我们目的是给定一个训练集,去学习一个函数h:X->Y。因此h(x)是对于y值得有效预测,一般地,该函数也成为假设函数。如下图所示:

    ![process of supervised learning](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fgbcv78ajxj2079078t8r.jpg)
    当试图预测的目标变量如房价预测的例子中一样为连续时,我们称这问题为回归问题。

    当输出y可以用几个小的离散值进行描述时(如给定居住地的面积,我们来预测该区域为公寓还是别墅),我们称该问题为分类问题。

    代价函数(Cost Function)

    对于假设函数的精确度测量可以是利用代价函数,代价函数对所有结果的假设值与输入x输出y之间平均化差异(事实上就是平均化的概念)

    ![cost fun](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fgbcv789ihj20ba01rt8k.jpg)
    该函数又称为平方误差函数或方均根误差,其中在取平均后乘以($frac{1}{2}$)的目的是便于接下来的梯度运算,在接下来的梯度运算中求偏导数可以消除($frac{1}{2}$)。

    直观感受--代价函数(1)

    我们利用x-y轴坐标进一步用图形描述它,这里我们尽力用一条直线通过这些已有的数据点((x^{(i)},y^{(i)}))。如下图所示:

    ![intution1](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fgbcv7lf0mj20bl065t97.jpg)
    我们的目标是找到一条最有可能的直线,这条直线和所有的数据集构成的点最近。理想情况下,此条线通过所有的点集,这时关于参数$ heta_{0}, heta_{1}$代价函数$J( heta_{0}, heta_{1})$最小为0。上图反应该理想情况:

    进一步的,当把( heta_{1}=0.5) ,我们可以看到哦每个点与线的距离增大,有下图:

    ![increase theta](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fgbcwbb9q6j20bp06wjrr.jpg)
    将不同的theta取值下所计算出的代价函数用plot绘出:
    ![plot](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fgbcwbgjy8j208l07vt90.jpg)
    从上图我们可以看出,以代价函数的最小值为目的时,$ heta_{1}=1$ 下我们得到全局最小值0。

    直观感受--代价函数2

    将参数从( heta_{1}) 提升到theta0和theta1,这时关于参数theta的代价函数描绘需要用到contour(等高线)。contour包含很多线,同一根线在x-y轴上取截然不同的两个点时,表示的值是相同的。

    ( heta_{0}=800, heta_{1}=0.5) 此时假设函数如下:

    ![contour plot1](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fgbdwddpe7j20if09utak.jpg)
    取$ heta_{0}=360, heta_{1}=0$ 此时假设函数如下:
    ![contour plot2](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fgbdwe84imj20hx09ytag.jpg)
    取$ heta_{0}=250, heta_{1}=0.12$ 此时假设函数如下:
    ![contour plot3](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fgbdwee00tj20hp0870ub.jpg)
    # 梯度下降法(Gradient Decent)

    现在我们有了假设函数及如何度量函数对数据的拟合程度。如何估计假设函数中的参数theta呢?这里引入梯度下降算法。

    想象一下,我们依据theta0和theta1取值画出假设函数的取值。

    ![contour picture](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fgben6qn4fj20fg07yn0j.jpg)
    图中的红色箭头表明了图像中的最小值,当代价函数到图像中的最底部时,我们知道此时的参数选取是成功的。而找寻最底部的方法是通过对我们的代价函数取微分,图中的黑色点处给出了下一步的“移动”方向,我们沿着这个方向向下寻找梯度最小值。而点与点间的步长取决于参数$alpha$ 的选取,这里被称为学习速率。

    梯度下降算法如下:grad algorithm

    重复此算法直至数据聚集(最底部),这里j=0,1代表特征指标数。

    注意:

    利用梯度下降法更新参数theta时,一定要保持同步更新(simultaneous update)

    ![同步更新](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fgben7edgbj20hq04274y.jpg)
    # 直观感受--梯度下降法(theta_0=0)

    首先摆出公式:( heta_{1} := heta_{1}-alphafrac{mathrm{d} }{mathrm{d} heta_{1}}J( heta_{1}))

    • 讨论关于theta1>0,theta1<0两种情况:about the value of Theta

    • 讨论关于学习速率(alpha) 的两种情况:about alpha

      图中分别表示了(alpha) 取值较小和取值较大两种情况下的代价函数取值。

    这里需要说明:选取合适的学习速率即(alpha)后,梯度递减算法会聚集到局部最小处,随着逐渐接近局部最小的过程中,下降步伐也会自动减小,因此不需要总是人为减小学习速率即(alpha)

    ![auto decrease](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fgbsmqrarij209p06rq2w.jpg)
    # 实例--线性回归下的梯度下降运算

    在具体的线性回归问题下,梯度下降公式可以得到进一步演化(重复执行直到数据聚集):

    ( heta_{0} := heta_{0}-alphafrac{mathrm{d}}{mathrm{d} heta_{0}}J( heta_{0})); --->
    ( heta_{1} := heta_{1}-alphafrac{mathrm{d}}{mathrm{d} heta_{1}}J( heta_{1})) --->

    ( heta_{0} := heta_{0}-alphafrac{1}{m}sum_{i=1}^{m}(h_ heta(x_i)-y_i));
    ( heta_{1} := heta_{1}-alphafrac{1}{m}sum_{i=1}^{m}((h_ heta(x_i)-y_i)x_i))

    m表示训练集的个数,( heta_0)为常数其保持与参数( heta_1)同时更新,((x_i,y_i))表示训练集的某一个数据。其中,如果我们从猜测假设函数开始,然后不断重复地这些梯度等式,我们的假设就会越来越好,因此,这里需要指明一点(因为,在之后的学习中这里需要注意),通过随机设置或设置假设函数参数为零,对于多次重复性的计算最后结果并没有明显影响。

    因此,对于初始的代价函数J,有一个简单的梯度下降算法。这种方式看起来像是在整个训练集中重复同一步骤,这亦被称为:批量梯度下降。

    注意一点:总体上来看,尽管梯度下降会在一个局部的最小值处汇聚,但是我们这里提到的线性回归优化问题仅有一个全局的最小处。因此在保证学习速率为合适值下,梯度下降值会汇聚在全局最小处。从下面椭圆等高图中可以看出,起始为(48,30),逐渐地曲线收敛在全局最小处。

    ![grad min](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fgbsmr355qj208i06st91.jpg)
    版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
  • 相关阅读:
    [leetcode]259. 3Sum Smaller 三数之和小于目标值
    题型总结之K Sum
    [Leetcode]167. Two Sum II
    题型总结之Sliding Window
    [Leetcode]703. Kth Largest Element in a Stream 数据流中的第 K 大元素
    [Leetcode]307. Range Sum Query
    pycharm同一目录下无法import明明已经存在的.py文件
    python高级特性:迭代器与生成器
    self的含义,为什么类调用方法时需要传参数?
    git三:远程仓库GitHub
  • 原文地址:https://www.cnblogs.com/SrtFrmGNU/p/6953728.html
Copyright © 2020-2023  润新知