zoukankan      html  css  js  c++  java
  • 损失函数和梯度下降解释

    本篇是摘抄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)

    方差/偏差

    • 偏差度量了学习算法的期望预测与真实结果的偏离程序,即刻画了学习算法本身的拟合能力
    • 方差度量了同样大小的训练集的变动所导致的学习性能的变化,即模型的泛化能力
  • 相关阅读:
    Jzoj4822 完美标号
    Jzoj4822 完美标号
    Jzoj4792 整除
    Jzoj4792 整除
    Educational Codeforces Round 79 A. New Year Garland
    Good Bye 2019 C. Make Good
    ?Good Bye 2019 B. Interesting Subarray
    Good Bye 2019 A. Card Game
    力扣算法题—088扰乱字符串【二叉树】
    力扣算法题—086分隔链表
  • 原文地址:https://www.cnblogs.com/peixu/p/13209105.html
Copyright © 2011-2022 走看看