• 损失函数和梯度下降解释


    本篇是摘抄pytorch-handbook里面的,有兴趣可以看看。

    损失函数(Loss Function)

    损失函数(loss function)是用来估量模型的预测值(我们例子中的output)与真实值(例子中的y_train)的不一致程度,它是一个非负实值函数,损失函数越小,模型的鲁棒性就越好。 我们训练模型的过程,就是通过不断的迭代计算,使用梯度下降的优化算法,使得损失函数越来越小。损失函数越小就表示算法达到意义上的最优。

    nn.CrossEntropyLoss:

    多分类用的交叉熵损失函数,LogSoftMax和NLLLoss集成到一个类中,会调用nn.NLLLoss函数,我们可以理解为CrossEntropyLoss()=log_softmax() + NLLLoss()

    $ egin{aligned} loss(x, class) &= -	ext{log}frac{exp(x[class])}{sum_j exp(x[j]))} &= -x[class] + log(sum_j exp(x[j])) end{aligned}  $

    因为使用了NLLLoss,所以也可以传入weight参数,这时loss的计算公式变为:

    $ loss(x, class) = weights[class] * (-x[class] + log(sum_j exp(x[j]))) $

    所以一般多分类的情况会使用这个损失函数

    梯度下降

    在介绍损失函数的时候我们已经说了,梯度下降是一个使损失函数越来越小的优化算法,在无求解机器学习算法的模型参数,即约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一。所以梯度下降是我们目前所说的机器学习的核心,了解了它的含义,也就了解了机器学习算法的含义。

    梯度

    在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。 例如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。

    几何上讲,梯度就是函数变化增加最快的地方,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向梯度减少最快,也就是更加容易找到函数的最小值。

    我们需要最小化损失函数,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数,和模型参数值。

    torch.optim.SGD

    随机梯度下降算法,带有动量(momentum)的算法作为一个可选参数可以进行设置,样例如下:

    #lr参数为学习率,对于SGD来说一般选择0.1 0.01.0.001,如何设置会在后面实战的章节中详细说明
    ##如果设置了momentum,就是带有动量的SGD,可以不设置
    optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)

    torch.optim.RMSprop

    除了以上的带有动量Momentum梯度下降法外,RMSprop(root mean square prop)也是一种可以加快梯度下降的算法,利用RMSprop算法,可以减小某些维度梯度更新波动较大的情况,使其梯度下降的速度变得更快

    #我们的课程基本不会使用到RMSprop所以这里只给一个实例
    optimizer = torch.optim.RMSprop(model.parameters(), lr=0.01, alpha=0.99)

    torch.optim.Adam

    Adam 优化算法的基本思想就是将 Momentum 和 RMSprop 结合起来形成的一种适用于不同深度学习结构的优化算法

    # 这里的lr,betas,还有eps都是用默认值即可,所以Adam是一个使用起来最简单的优化方法
    optimizer = torch.optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-08)

    方差/偏差

    • 偏差度量了学习算法的期望预测与真实结果的偏离程序,即刻画了学习算法本身的拟合能力
    • 方差度量了同样大小的训练集的变动所导致的学习性能的变化,即模型的泛化能力
  • 相关阅读:
    Rancher2.x部署K8s
    windows 安装 rabbitmq
    Mysql优化
    Docker部署Nginx应用(2)
    Docker入门笔记(1)
    kafka的安装及基本使用
    Dubbo的Api+Provider+Customer示例(IDEA+Maven+Springboot+dubbo)
    zookeeper 数据节点的增删改查
    zookeeper伪分布集群配置
    密集重建
  • 原文地址:https://www.cnblogs.com/peixu/p/13209105.html
Copyright © 2020-2023  润新知