找回密码
 立即注册
查看: 262|回复: 0

深度学习-优化算法

[复制链接]
发表于 2022-7-10 12:59 | 显示全部楼层 |阅读模式
前言

深度学习的目标是最小化损失函数,本质上是一个优化问题;因此优化算法便是深度学习算法的学习机制。
用于深度学习的各种优化算法都是从梯度下降算法发展而来的。
梯度下降算法思想是利用链式求导法则计算损失函数值相对于神经网络中的每一个权重参数的梯度,通过沿负梯度方向更新权重参数达到降低损失函数值的效果。
梯度下降算法的伪代码如下:
def train(x,y,w,b,alpha,max_iters):

    """
    x:训练集
    y:训练集所对应的目标值
    w:权重向量
    b:偏置
    alpha:学习率
    max_iters:最大迭代次数
    """

    dw = 0
    db = 0
    m = x.shape[0]
   
    #梯度下降迭代
    for i in range(max_iters):
        dw = 0
        db = 0
        #遍历训练集
        for j in range(m):
            #计算每个数据集的权重向量梯度w_grad和偏置梯度b_grad
            #将w_grad和b_grad分别累加到dw和db累加器中
        w = w - alpha * (dw / m) #更新权重向量
        b = b - alpha * (db / m) #更新偏置
    return w,b<hr/>深度学习面对的实际问题是有大量局部最优解鞍点;梯度下降算法很容易被困在局部最优解,或是停留在鞍点不能动弹;因此基于梯度下降算法的许多改进版发展起来。
局部最优解:如果目标函数f(x)在x上的值比在x邻域的值更小,且在x上的值并非目标函数在整个定义域内的最小值,则f(x)为局部最优解。
鞍点:鞍点是函数上导数为0,但不是轴上局部极值的点。
通常我们可以利用海森矩阵来判断某一点是否为局部极值点、鞍点。
当海森矩阵在梯度为0的位置上:

  • 特征值全为负:局部最大值
  • 特征值全为正:局部最小值
  • 特征值有正有负:鞍点
torch.optim.SGD

伪代码:
输入:全局的学习率  
输出:收敛的参数  
(1):初始化参数  
(2):当不满足停止条件时执行:
(3):       从数据集 中均匀随机选取  个样本
(4):       计算梯度:  
(5):       计算更新:
参数参数含义
params待优化参数的iterable
lr学习率
momentum动量因子
weight_decay权重衰减系数
dampening动量抑制因子
nesterov是否使用Nesterov动量
优点:
能避免冗余数据的影响,收敛速度加快,能够在线学习
缺点:
权值更新方差大,收敛波动大
难以解决局部最优解问题
torch.optim.ASGD

参数参数含义
params待优化参数的iterable
lr学习率
lambd衰减项
alphaeta更新的指数
t0指定平均化起始点
weight_decay权重衰减系数
torch.optim.Adam

伪代码:
输入:全局的学习率  (一般设置为0.001),极小值  (一般设置为  ),一阶系数 (一般设置为0.9),二阶系数
输出:收敛的参数  
(1):初始化参数  
(2):当不满足停止条件时执行:
(3):       从数据集 中均匀随机选取  个样本
(4):       计算梯度:  
(5):       计算一阶梯度偏差:
(6):       计算二阶梯度偏差:
(7):       计算一阶修正梯度:
(8):       计算二阶修正梯度:
(9):       计算更新:
参数参数含义
params待优化参数的iterable
lr学习率
betas用于计算梯度以及梯度平方的运行平均值的系数
eps为了增加数值计算的稳定性而加到分母里的项
weight_decay权重衰减
优点:
对内存需求小,收敛速度快,为不同的参数计算不同的自适应学习率
torch.optim.Adamax

参数参数含义
params待优化参数的iterable
lr学习率
betas用于计算梯度及梯度平方的运行平均值的系数
eps为了增加数值计算的稳定性而加到分母里的项
weight_decay权重衰减
优点:
在Adam优化算法的基础上为学习率设定了简单的范围
torch.optim.Adagrad

伪代码:
输入:全局的学习率  ,极小值  (一般设置为  ),累积梯度变量  
输出:收敛的参数  
(1):初始化参数  
(2):当不满足停止条件时执行:
(3):       从数据集 中均匀随机选取  个样本
(4):       计算梯度:  
(5):       计算累积梯度:
(6):       计算更新:  
参数参数含义
params待优化参数的iterable
lr学习率
lr_decay学习率衰减
weight_decay权重衰减系数
优点:
不需要对每个学习率手动调节
缺点:
容易因为梯度消失而提取结束训练
torch.optim.Adadelta

参数参数含义
params待优化参数的iterable
rho用于计算平方梯度的运行平均值的系数
eps为增加数值计算稳定性而加到分母中的项
lr在delta被应用到参数更新之前对它缩放的系数
weight_decay权重衰减系数
优点:
训练速度快
缺点:
容易困于局部最优解
torch.optim.Rprop

参数参数含义
params待优化参数的iterable
lr学习率
etas乘法的增加和减小因子
step_sizes允许的一对最大和最小步长
缺点:
只适用于full-batch,应用场景小
torch.optim.RMSprop

伪代码:
输入:全局的学习率  ,极小值  (一般设置为  ),累积梯度变量  
输出:收敛的参数  
(1):初始化参数  
(2):当不满足停止条件时执行:
(3):       从数据集 中均匀随机选取  个样本
(4):       计算梯度:  
(5):       计算累积梯度:
(6):       计算更新:  
参数参数含义
params待优化参数的iterable
lr学习率
momentum动量因子
alpha平滑系数
eps为增加数值计算稳定性而加到分母中的项
centered为True时,计算中心化RMSProp,并用其方差预测值对梯度归一化
weight_decay权重衰减系数
优点:
解决了Adagrad激进的学习率缩减问题
torch.optim.LBFGS

参数参数含义
lr学习率
max_iter每一步优化的最大迭代次数
max_eval每一步优化的最大函数评价次数
tolerance_grad一阶最优的终止容忍度
tolerance_change在函数值/参数变化量上的终止容忍度
history_size更新历史的大小
优点:
收敛速度快,节省内存
更多精彩


深度学习课程推荐
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 07:11 , Processed in 0.089945 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表