梯度下降法学习笔记

1 相关概念

梯度——表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快。对于一元函数 y=f(x),yx,f(x,y),(fx,fy)
步长——在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度
损失函数——在单个训练样本上的,也就是就算一个样本的误差
代价函数——在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均

2 梯度下降法

梯度下降法,也就是使函数按照其梯度方向的反方向(也就是下降最快的方向)改变自变量,从而是函数以最快的方向走向最低点,类似于下山,我们在不知道山的全貌的情况下,沿着坡度最陡的方向往下走比较可能最快的走到山底(但也可能是局部最低处,这跟初始点,每步走的长度等有关)。
这里写图片描述
梯度下降法有批梯度下降,随机梯度下降,以及小批量梯度下降

2.1 批梯度下降BGD

批梯度下降在求梯度时使用了所有的样本,是一种比较常用的梯度下降法。
批梯度下降过程如下

  1. 根据数据的特征X和标签Y之间的分布情况,假设一个拟合函数 y=f(x),y=f(x)=θ0+θ1x1+θ2x2+...++θnxnx0=1,y=f(x)=θ0x0+θ1x1+θ2x2+...++θnxn,Y=XθXmnθn1Ym1mn
  2. 求得代价函数为
    J(θ)=12m(XθY)T(XθY)
    若代价函数 J(θ) 小到满足精度要求,则结束梯度下降算法,否则继续第3步
  3. 求梯度
    J(θ)θ=XT(XθY)m
  4. 用梯度 J(θ)θ 来求新的 θ
    θ=θαJ(θ)θ
    其中, α 为步长,调到第2步

代码如下:

# -*- coding: utf-8 -*-
import numpy as np


def d_J(X, Y, theta):
    # X表示样本
    # Y表示样本对应的标签
    # theta表示参数
    return np.matmul(X.T, (np.matmul(X, theta) - Y)) / np.shape(X)[0]


def cost_J(X, Y, theta):
    # X表示样本
    # Y表示样本对应的标签
    # theta表示参数
    X_theta_red_Y = np.matmul(X, theta) - Y
    return np.matmul(X_theta_red_Y.T, X_theta_red_Y) / (2 * np.shape(X)[0])


step_size = 0.001  # 步长
max_iters = 10000  # 最大迭代次数
eps = 0.0001  # 精度


def train_gadient_descent(X, Y, theta):
    cost = 100
    cur_iters = 0
    while cost > eps and cur_iters < max_iters:
        theta = theta - step_size * d_J(X, Y, theta)
        cur_iters += 1
        cost = cost_J(X, Y, theta)
    return theta


if __name__ == '__main__':
    # 输入的特征和标签
    X = np.array([[1 ,1, 4], [1 ,2, 5], [1 ,5, 1], [1 ,4, 2]])  # feature
    Y = np.array([[19], [26], [19], [20]])  # lebal
    # 假设的函数为 y=theta0+theta1*x1+theta2*x2
    theta = np.array([[0.1],[0.1], [0.1]])  # 初始的theta参数
    print(train_gadient_descent(X, Y, theta))

2.2 随机梯度下降法SGD

随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本来求梯度。对应的更新公式是:

θi=θiα(hθ(xj0,xj1,...xjn)yj)xji

批梯度下降法与随机梯度下降法之间的比较如下:

  • 训练速度——随机梯度下降法每次迭代仅用一个样本,训练速度快
  • 准确度——随机梯度下降法每次迭代仅用一个样本,并没有参考所有的样本,因而准确度较低
  • 收敛速度——随机梯度下降法的收敛速度慢
  • 全局最优/局部最优——随机梯度下降法由于走的有点随意,比较可能走出局部最优点

2.3 小批量梯度下降法

该方法结合了上面两种的特点,每次采用小批量的样本进行迭代计算,是一种比较中庸的方法。

3 梯度下降法的调优方法

  • 步长的选择——步长太长,可能导致Z字形的震荡;太小,可能导致训练速度太慢。
  • 初始值的选择——初始值选的不好,可能会导致训练速度慢,走进局部最优。
  • 归一化——当样本特征取值范围差别较大时,可能导致训练速度慢。因此,需要进行归一化。如,将期望为 x¯,σx
    x=xx¯σ
    则得到的新的样本均值为0,方差为1。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值