梯度下降法

5 篇文章 1 订阅
3 篇文章 0 订阅

梯度下降法(Gradient Descent)


原理

1.1、定义

梯度下降是迭代法的一种,是一种基于搜索的最优化方法。
梯度下降法不是一个机器学习的方法
它可以用于求解最小二乘问题(线性和非线性都可以)。

1.2、作用

可以最小化损失函数(梯度上升法可以最大化效用函数)
梯度下降

二、公式

2.1 批量梯度下降

批量梯度
构造线性方程的损失函数: J(θ)=1mmi=1(y(i)θx(i))2 J ( θ ) = 1 m ∑ i = 1 m ( y ( i ) − θ ⋅ x ( i ) ) 2 ,对损失函数求导,计算损失梯度更新公式为:

θ=θηJ(θ)η θ = θ − η ∇ J ( θ ) η 为学习率

想要计算梯度,需要先将 J(θ) ∇ J ( θ ) 求出:
J(θ)=1mJθ0Jθ1Jθ2Jθn=1mmi=12(y(i)X(i)θ)(1)mi=12(y(i)X(i)θ)(X(i)1)mi=12(y(i)X(i)θ)(X(i)2)mi=12(y(i)X(i)θ)(X(i)n)=2mmi=1(X(i)θy(i))(X(i)0)mi=1(X(i)θy(i))(X(i)1)mi=1(X(i)θy(i))(X(i)2)mi=1(X(i)θy(i))(X(i)n)=2mXT(Xθy) ∇ J ( θ ) = 1 m [ ∂ J ∂ θ 0 ∂ J ∂ θ 1 ∂ J ∂ θ 2 ⋮ ∂ J ∂ θ n ] = 1 m [ ∑ i = 1 m 2 ( y ( i ) − X ( i ) θ ) ⋅ ( − 1 ) ∑ i = 1 m 2 ( y ( i ) − X ( i ) θ ) ⋅ ( − X 1 ( i ) ) ∑ i = 1 m 2 ( y ( i ) − X ( i ) θ ) ⋅ ( − X 2 ( i ) ) ⋮ ∑ i = 1 m 2 ( y ( i ) − X ( i ) θ ) ⋅ ( − X n ( i ) ) ] = 2 m [ ∑ i = 1 m ( X ( i ) θ − y ( i ) ) ⋅ ( X 0 ( i ) ) ∑ i = 1 m ( X ( i ) θ − y ( i ) ) ⋅ ( X 1 ( i ) ) ∑ i = 1 m ( X ( i ) θ − y ( i ) ) ⋅ ( X 2 ( i ) ) ⋮ ∑ i = 1 m ( X ( i ) θ − y ( i ) ) ⋅ ( X n ( i ) ) ] = 2 m ⋅ X T ⋅ ( X θ − y )

通过对θ的不断地更新迭代,判断如果损失函数 J(θ) J ( θ ) 的变化率小于一个极小值 ϵ ϵ
那么该θ值即为最优参数。

2.2 随机梯度下降

随机梯度
使学习率η与迭代遍历次数i_iters进行关联:

η=1i_iters η = 1 i _ i t e r s

此时的学习率η会随着i_iters的增大而减小,变化率不稳定,为了控制变化率的范围,修正学习率公式:
η=ai_iters+b η = a i _ i t e r s + b

体现随机随机性,i_iters的取值采取随机取值的策略。这样就构造了一个简单的随机梯度下降法。

三、流程图

梯度下降

四、代码实现

'''构造损失函数'''
def J(theta,x,y):
    m=len(x)
    try:
        print()
        return (x.dot(theta)-y).dot(x.dot(theta)-y)/m
    except:
        return float('inf')
'''构造θ更新函数'''
def theta_update(theta,eta,x,y):
    m=len(x)
    eta=2*eta/m
    return theta-x.T.dot(x.dot(theta)-y)*eta
'''循环判定θ变化是否小于ε'''
def gradient_descent(x,y,initial_theta,eta,n_iters=1e4,epsilon=1e-6):
    i_iter=0
    theta=initial_theta
    while i_iter<n_iters:
        last_theta=theta
        theta=theta_update(theta,eta,x,y)
        if (abs(J(theta,x,y)-J(last_theta,x,y))<epsilon):
            break
        i_iter+=1
    return theta
if _name_=='_main_':
    '''说明:
            高维度梯度下降时,需对数据集做均值归一化处理。
            不同维度量纲不同,同一个学习率无法适配每一个维度。
            所以需对各维度量纲进行归一化。
    '''
    initial_theta=np.zeros(X_b.shape[1])#初始化θ
    eta=0.01#定义学习率
    theta=gradient_descent(X_b,y_train,initial_theta,eta,n_iters=1e4)#求解θ

五、注意事项

高维度并不只有一个极值点,想要达到最佳极值点需做一下操作:
多次运行,随机化初始点θ
随机梯度下降法更容易跳出局部最优解
随机梯度下降运行速度更快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值