从零开始机器学习002-梯度降低算法

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

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

1、概念:

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

2、前提条件:

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

3、训练步骤

这里写图片描述

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

4、其余

问:多个特征值怎么训练?
答:并非放在一块儿训练,而是每一个特征本身训练本身的。
以下图:
这里写图片描述机器学习


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

相关文章
相关标签/搜索