Pytorch中的激活函数


前言:

 什么是激活函数?它在神经网络模型中是如何使用的?

 激活函数(Activation functions)对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特征引入到我们的网络中。其目的是将A-NN模型(A-NN:它是一个强健有力的,同时也是非常复杂的机器学习技术,它可以模仿人类的大脑,继而模仿大脑运作)中一个节点的输入信号转换成一个输出信号。该输出信号现在被用在堆叠中下一层的输入。

    

 而在A-NN中的具体操作是这样的,我们做输入(X)和它们对应的权重(W)的乘积之和,并将激活函数f(x)应用于其获取该层的输出,并将其作为输入送到下一层。

 问题是,为什么我们不能在不激活输入信号的情况下完成此操作呢?

  如果我们不应用激活函数的话,则输出信号将仅仅是一个简单的线性函数。线性函数一个一级多项式。现如今,线性方程是很容易解决的,但是它们的复杂性有限,并且从数据中学习复杂数据映射功能的能力更小。一个没有激活函数的神经网络将只不过是一个线性回归模型(Linear regression Model)罢了,它功能有限,并且大多情况下执行得并不好。我们希望我们的神经网络不仅仅可以学习和计算线性函数,而且还要比这复杂得多。同样是因为没有激活函数,我们的神经网络将无法学习和模拟其他复杂类型的数据,例如图像处理、视频、音频、语音等。这就是为什么我们要使用人工神经网络技术,诸如深度学习(Deep Learning),来理解一下复杂的事情,一些相互之间具有很多隐藏层的非线性问题,而这也可以帮助我们了解复杂的数据。

 那为什么我们需要非线性函数?

  非线性函数是那些一级以上的函数,而且当绘制非线性函数时它们具有曲率。现在我们需要一个可以学习和表示几乎任何东西的神经网络模型,以及可以将输入映射到输出的任意复杂函数。神经网络被认为是通用函数近似器(Universal Function Approximators)。这意味着他们可以计算和学习任何函数。几乎我们可以想到的任何过程都可以表示为神经网络中的函数计算

 而这一切都要归结于这一点,我们需要应用激活函数f(x),以便网络更强大,增加它的能力,使它可以学习复杂的实物,复杂的表达数据,以及表示输入输出之间非线性的复杂的任意函数映射。因此,使用非线性激活函数,我们便能够从输入输出之间生成非线性映射

 激活函数的另一个重要特征是:它应该是可以区分的。我们需要这样做,以便在网络中向后推进以计算相对于权重的误差(丢失)梯度时执行反向优化策略,然后相应地使用梯度下降或任何其他优化技术优化权重以减少误差。

 只要永远记住要做:输入时间权重,添加偏差和激活函数

1、class torch.nn.Tanh

 输出值的范围[-1,1]。对输入的每个元素

    

 shape:

  输入:(N,*),*表示任意维度组合

  输出:(N,*),与输入有相同的shape属性

import torch
import torch.nn as nn
m = nn.Tanh()
input = torch.randn(2,3)
print(input)
output = m(input)
print(output)
输出:
tensor([[-0.4821,  0.8067, -1.2425],
        [ 0.8380,  0.1969, -0.8734]])
tensor([[-0.4479,  0.6678, -0.8462],
        [ 0.6847,  0.1943, -0.7031]])

 

参考:

参考1:pytorch中文文档-torch.nn常用函数

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM