老师的课程
1.从零开始进行机器学习
2.机器学习数学基础(根据学生需求不断更新)
3.机器学习Python基础
4.最适合程序员的方式学习TensorFlow

上节课讲完线性回归的数学推导,我们这节课说下如何用机器学习的思想把最合适的权重参数求解出来呢?这里就涉及到了最优化算法,其中梯度下降就是最优化算法中的一种。我们看下梯度下降是怎么完成最优化求解的。

一、概念:

梯度下降算法是一个最优化算法,它是沿梯度下降的方向求解极小值。

二、前提条件:

  1. 目标函数
    使用梯度下降算法是要求有前提条件的。第一个就是目标函数,梯度下降是求最优解的算法没错,但是你一定要告诉梯度下降,你要求哪个函数的解。万物得有源头。目标函数就是源头。本节课的源头就是
    目标函数
  2. 训练集
    这个目标函数是根据上节课推导出来的最小二乘的公式。只不过1/2后面多了个m。m是总的数据量。意味着是求多个数据之后的平均值。
    第二个是训练集,有了目标函数,还得有数据支撑。只有有了大量的数据,机器才能够真正的掌握规律。(下方为数据集样本)
    数据集样本
    最终的目标是求得是这个目标函数最小(或局部最小)的参数θ。
    目标

三、训练步骤

这里写图片描述

  1. 随机生成一个初始点
    图片中红圈上的点,从上面的图可以看出:初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;
  2. 确定学习率(Learning rate)
    学习率可以理解为下山时每一步迈的大小。步子迈得太大有可能不收敛,步子迈的太小下山速度太慢。如下图
    这里写图片描述
    上图左边黑色为损失函数的曲线,假设从左边最高点开始,如果 learning rate 调整的刚刚好,比如红色的线,就能顺利找到最低点。如果 learning rate 调整的太小,比如蓝色的线,就会走的太慢,虽然这种情况给足够多的时间也可以找到最低点,实际情况可能会等不及出结果。如果 learning rate 调整的有点大,比如绿色的线,就会在上面震荡,走不下去,永远无法到达最低点。还有可能非常大,比如×××的线,直接就飞出去了,update参数的时候只会发现损失函数越更新越大。
    工作经验:先使用0.1试下,如果不收敛或者收敛慢,再试0.01、0.001。
    还有一点,学习率并不一定全程不变,可以刚开始的时候大一些,后期的时候不断调小。
  3. 输入数据集,确定一个向下的方向,并更新θ。
    数据集的输入一般有三种。批量梯度下降、随机梯度下降、小批量随机梯度下降。
    批量梯度下降:每调整一步,带入所有的数据,
    优点:所有数据都涉及到,训练的结果应该是最精确的。
    缺点:数据量非常大的时候,训练速度奇慢无比。
    随机梯度下降:每次随机获取数据集里面的一个值
    优点:速度快
    缺点:训练结果可能不够精确
    小批量随机梯度下降:前两者的中间产物
    速度相对较快,结果相对精确。
    在google,TensorFlow中,训练Mnist数据集的时候,采用的就是小批量随机梯度下降。在平时工作,小批量随机梯度下降也应用的最广泛。
  4. 训练终止
    当损失函数达到预设值的一个值,或者收敛不明显时,可以终止训练。得到的值就是梯度下降优化算法的最终值(极小值)。
    这里写图片描述

四、其他

问:多个特征值怎么训练?
答:并不是放在一起训练,而是每个特征自己训练自己的。
如下图:
这里写图片描述


文章部分图片及内容借鉴:
http://blog.csdn.net/zyq522376829/article/details/66632699#t3
http://blog.csdn.net/xiazdong/article/details/7950084