美文网首页
Pytorch机器学习——3 神经网络(四)

Pytorch机器学习——3 神经网络(四)

作者: 辘轳鹿鹿 | 来源:发表于2022-04-08 21:30 被阅读0次

    outline

    1. 神经元与神经网络
    2. 激活函数
    3. 前向算法
    4. 损失函数
    5. 反向传播算法
    6. 数据的准备
    7. PyTorch实例:单层神经网络实现

    3.2 激活函数

    3.2.4 ReLU

    • 线性整流函数(Rectified Linear Unit, ReLU), 又称修正线性单元,是一种人工神经网络中常用的激活函数(activation function),通常指代以斜坡函数及其变种为代表的 非线性函数。
      ReLU是一个分段函数,其公式如下所示
      f(x)=max(0,x)
      image.png
    • ReLU做的事情很简单:大于0的数原样输出,小于0的数输出0。在0处ReLU虽然不连续,但是也同样适合做激活函数。
    • ReLU的成功应用是对生物学研究结果。生物学研究表明,生物神经不是对所有的外界信息都做出反应,而是部分,即对一部分信息进行忽略,对应于输入信息小于0的情况。
    • 优点:
      • 相对于Sigmoid/Tanh而言,它更简单,只需要一个阈值就可以计算结果,不用复杂的运算
      • 有研究者发现ReLU在随机梯度下降的训练中收敛会更快,是目前应用广泛的激活函数
    • 缺点
      • ReLU单元很脆弱,以至于在训练过程中,一些神经元不再具有有效性,只会输出0,特别是使用较大的学习率的时候,如果发生这种情况,神经元的梯度将永远会是0,不利于训练。
    import torch
    m=torch.nn.ReLU()
    _input = torch.autograd.Variable(torch.rand(2))
    print(_input)
    print(m(_input))
    

    3.2.5 ReLU的扩展

    为了解决ReLU函数存在的问题,研究者提出了在ReLU基础上的优化方案。主要思路是当输入是小于0的值时不再一味地输出0,而是通过一个很小的斜率为\alpha的直线方程计算结果,根据\alpha取值方案的不同有以下几种方案。

    • Leaky ReLU

      image.png
      其公式如下所示,\alpha通常取0.01
      f(x)=max(\alpha x,x)
    • Parametric ReLU
      其公式如下所示,这里\alpha是自学习的参数
      f(x)=max(\alpha x,x)
      当不带参数地调用时,nn.PReLU()在所有输入通道中使用同一个参数\alpha。如果用nn.PReLU(nChannels)调用,\alpha将应用到每个输入。

    • Randomized ReLU
      Leaky ReLU地random版本,即参数\alpha是随机产生的。

    • Exponential Linear Unit(ELU)
      这是一个新的激活函数,效果比所有ReLU的变形都要好,训练用的时间少,而且测试指标高。
      f(x)= \begin{cases}x & \text { if } x>0 \\ \alpha(\exp (x)-1) & \text { if } x \leq 0\end{cases}
      \alpha一般取1。整个函数是平滑的。其缺点是因为使用了指数函数,计算比ReLU系列的计算速度慢,但是训练时收敛快。

    • Maxout
      maxout和Dropout结合后,取得了start-of-art的识别率。它有ReLU函数的优点(不会饱和、计算简单),去没有ReLU函数的缺点(容易死),它唯一的缺点就是每一个神经元都有k个权重,导致权重的总数大大增加。
      PyTorch中还没有Maxout的实现。

    3.2.6 Softmax

    Softmax函数又称归一化指数函数。它能将一个含任意实数的K维向量z,“压缩”到另一个K维实向量\sigma(z)中,返回的是每个互斥输出类别上的概率分布。
    f_i(x)=\frac{exp(x_i)}{\sum_{j}exp(x_j)}

    import torch
    m=torch.nn.Softmax(dim=1) #dim=1 每一行上的和为1;dim=0 每一列上的和为1
    _input = torch.autograd.Variable(torch.rand(2,3))
    print(_input)
    print(m(_input))
    
    image.png

    3.2.7 LogSoftmax

    f_i(x)=log\frac{exp(x_i)}{\sum_{j}exp(x_j)}
    有用就留个赞吧^_^

    相关文章

      网友评论

          本文标题:Pytorch机器学习——3 神经网络(四)

          本文链接:https://www.haomeiwen.com/subject/cnbjsrtx.html