机器学习(2)梯度下降

斯坦福《机器学习》吴恩达教授公开课梯度下降课堂讲义:http://cs229.stanford.edu/section/cs229-linalg.pdf

梯度下降(Gradient Descent)

本章介绍线性回归中最基础的方法--最小二乘法的一个特例

基本形式:

f(x) = w1x1 + w2x2+ ...+ wixi + b

xi是x在第i个特征上的取值;

f(x)为模型输出,令y为正确答案取值,则均方误差为:

上式中n为特征数,J(Θ)为训练平方误差,J(Θ)越小说明模型出的结果和真实结果收敛得越好。

吴恩达老师形容梯度下降为你人站在山上,360度环视一周,然后找到一条最快下山的路(最陡,对J(Θ)求导就可以知道最陡的方向)。Θ为你在这个空间上移动的距离,假设你的起点位置离山底最低点的距离为Θn,你向最低点移动,你每一步的距离为α乘上J(Θ)在Θ上的偏导,那么你每走一步,你离最低点距离为Θ := Θ-α*J(Θ)在Θ上的偏导(我找不到偏导的符号。。。)  等号前面加一个:符号,说明这是个赋值符号,就是编程中a = a + 1这里面等号的意思。

往最低点移动(蓝色区域)

当你离最低点越近,J(Θ)值越小(收敛),当J(Θ)收敛到一定程度,那么我们这个学习模型就完成了

上面从山上往下走的证明:

这里的α为学习速度,在下山的例子中,α的大小决定了,下山每一步步伐迈的大小,α过大,可能一步就直接跨过最低点;α过小,那么就要走很久才能走到最低点(收敛过久)。上面Θ:=...那个式子是不断重复的,就像走路下山,不断迈步子一个意思。

外,为什么这个地图中只有一个最低点?

这是由于J(Θ)是一个凸函数,

凸函数:对实数集上的函数,可通过求二阶导数来判别,若二阶导数在区间内非负,则称为凸函数,若二阶导数恒大于0,则称为严格凸函数。

对区间[a,b]上定义的函数f,若它对区间内中任意两点x1,x2,都有f((x1+x2)/2)小于等于(f(x1)+f(x2))/2,则称f为区间[a,b]上的凸函数;

我用一个图来说明:

粗俗易懂的解释为:直线上的点肯定比曲线上点的值要大,这就是凸函数只有一个最低点的意思,J(Θ)最终会在最低点附近收敛。


下面给出python梯度下降的栗子:

import numpy as np
import matplotlib.pyplot as plt
def gd(x_start, step, g):   # gd代表了Gradient Descent
    x = x_start
    for i in range(20):
        grad = g(x)
        x -= grad * step
        print '[ Epoch {0} ] grad = {1}, x = {2}'.format(i, grad, x)
        if abs(grad) < 1e-6:
            break;
    return x
def f(x):
    return x * x - 2 * x + 1
def g(x):
    return 2 * x - 2
x = np.linspace(-5,7,100)
y = f(x)
plt.plot(x, y)
gd(5,0.1,g)

相关代码:

https://gitee.com/CCHChenChangHong/JiQiXueXisample/tree/master/线性回归

国际惯例,附上微信公众号:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值