Pytorch 中的激活函数


Pytorch 是一个开源机器学习框架,广泛用于创建机器学习模型,并提供各种函数来创建神经网络。激活函数是神经网络的关键组成部分。激活函数根据节点的输入或输入集确定神经网络中节点的输出。激活函数在神经网络节点的输出中引入了非线性,这对于解决复杂的机器学习问题是必要的。

什么是激活函数?

人工智能中的神经网络由输入层、隐藏层和输出层组成。输入层以不同的形式接收用户输入,隐藏层执行一些隐藏的计算,输出层给出结果,作为下一个连接节点的输入。因此,激活函数应用于用户输入以执行计算,并通过输出层给出输出。

Pytorch 提供的激活函数类型

Pytorch 提供了不同的激活函数,可以在不同的机器学习问题中使用。

  • ReLU 激活函数

  • Leaky ReLU 激活函数

  • Sigmoid 激活函数

  • Tanh 激活函数

  • Softmax 激活函数

ReLU 激活函数

修正线性单元激活函数 (ReLU) 是神经网络中广泛使用的激活函数。ReLU 函数定义为f(x) = max(0,x)。它是一个非线性函数,对于负输入始终输出零,并且不改变正输入的输出。因此,当输入为负时,不会发生学习。ReLU 函数可以从 torch.nn 包中导入。ReLU 函数的图形如下所示:

示例

在下面的示例中,我们创建了一个数组并将其传递给 Relu 激活函数。Relu 激活函数根据 Relu 激活函数转换数组的每个输入元素。

#pip install numpy
import numpy as np

def relu(x):
   return np.maximum(0, x)

x = np.array([-1, 2, -3, 4, 0])
y = relu(x)

print(y) 

输出

[0 2 0 4 0]

Leaky ReLU 激活函数

Leaky ReLU 激活函数类似于 ReLU 激活函数,但 Leaky ReLU 函数对于负输入不输出零,因此在负输入的情况下也会发生学习。Leaky ReLU 函数定义为LeakyReLU(x)=max(0,x)+negative_slope∗min(0,x)。Leaky ReLU 函数的图形如下所示。

Leaky ReLU 也是非线性的,并解决了当函数输出零或在负输入值的情况下神经元的学习/训练时发生的神经元死亡问题。

示例

在下面的示例中,我们使用 numpy 创建了一个数组,并将数组传递给 leaky_relu 函数,该函数根据 leaky_relu 函数转换数组的每个元素。

import numpy as np

def leaky_relu(x, alpha=0.1):
   return np.maximum(alpha * x, x)

x = np.array([-1, 2, -3, 4, 0])
y = leaky_relu(x)

print(y)

输出

[-0.1  2.  -0.3  4.   0. ]

Sigmoid 激活函数

Sigmoid 函数是神经网络中最常用的激活函数之一。它定义为 f(x) = 1/(1+exp(-x))。Sigmoid 函数将任何输入映射到 0 到 1 之间的值。它适用于二元分类问题,其中输出为 0 或 1。Sigmoid 函数也用作深度神经网络中输出层的激活函数。在二元分类问题中,Sigmoid 函数的输出通常被视为概率。Sigmoid 激活函数的图形表示如下所示。

Sigmoid 函数可能会出现梯度消失问题。

示例

在下面的示例中,我们使用 numpy 创建了一个数组,并将数组传递给 sigmoid 函数,该函数根据 sigmoid 函数转换数组的每个元素。

import numpy as np

def sigmoid(x):
   return 1 / (1 + np.exp(-x))

x = np.array([-1, 2, -3, 4, 0])
y = sigmoid(x)

print(y)

输出

[0.26894142 0.88079708 0.04742587 0.98201379 0.5       ]

Tanh 激活函数

双曲正切函数是一个非线性激活函数,它对任何输入值都输出 -1 到 1 之间的值。tanh 激活函数定义为f(x) = (exp(x)-exp(-x))/(exp(x)+exp(-x))。Tanh 函数的 S 形图形如下所示。

使用 Tanh 函数时可能出现梯度消失问题。

示例

在下面的示例中,我们使用 numpy 创建了一个数组,并将数组传递给 tanh 函数,该函数根据 tanh 函数转换数组的每个元素。

import numpy as np
def tanh(x):
   return np.tanh(x)
x = np.array([-1, 2, -3, 4, 0])
y = tanh(x)
print(y)

输出

[-0.76159416  0.96402758 -0.99505475  0.9993293   0.        ]

Softmax 激活函数

Softmax 函数用于多类分类问题。它定义为f(x) = exp(x_i)/sum(exp(x_j))(对于所有 i)。Softmax 函数将任何输入映射到类上的概率分布。它适用于多类分类问题,其中输出可以属于多个类中的一个。Softmax 函数也用作深度神经网络中输出层的激活函数。Softmax 函数通常与其他激活函数结合使用,并放置在最后一层。

示例

在下面的示例中,我们使用 numpy 创建了一个数组,并将数组传递给 softmax 函数,该函数根据 softmax 函数转换数组的每个元素。

import numpy as np
def softmax(x):
   exp_x = np.exp(x - np.max(x)) # to prevent overflow
   return exp_x / np.sum(exp_x)
x = np.array([1, 2, 3, 4, 5])
y = softmax(x)
print(y)

输出

[0.01165623 0.03168492 0.08612854 0.23412166 0.63640865]

结论

激活函数在神经网络中起着至关重要的作用,PyTorch 提供了各种可供选择的激活函数。激活函数的选择取决于问题的类型和神经网络的结构。通过使用合适的激活函数,我们可以提高神经网络的性能并获得更好的结果。

更新于:2023年4月17日

980 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.