📜  神经网络中的激活函数 |套装2(1)

📅  最后修改于: 2023-12-03 14:56:32.244000             🧑  作者: Mango

神经网络中的激活函数 | 套装2

在神经网络中,激活函数在处理前向传播时扮演着非常重要的角色。在第一套装中,我们已经了解了几种基本的激活函数,包括 sigmoid、ReLU 和 tanh 等。在本套装中,我们将继续介绍一些常用的激活函数。

LeakyReLU

LeakyReLU(泄漏线性整流单元)是一个修正版的 ReLU,它的公式如下:

$$f(x) = max(\alpha x, x)$$

其中 $\alpha$ 是个小于1的数,通常为 0.01。相比于 ReLU,LeakyReLU 在 $x < 0$ 的时候,输出的值不为零,这样能够一定程度上防止神经元“死亡”,提高模型的稳定性。

在 PyTorch 中,可以这样实现:

import torch.nn as nn

class LeakyReLU(nn.Module):
    def __init__(self, alpha=0.01):
        super().__init__()
        self.alpha = alpha

    def forward(self, x):
        return nn.functional.leaky_relu(x, negative_slope=self.alpha)
ELU

ELU(指数线性单元)是另一个修正版的 ReLU,其公式如下:

$$f(x) = \begin{cases} x, & \text{if } x \geq 0 \ \alpha (e^x -1), & \text{if } x < 0 \end{cases} $$

其中 $\alpha$ 是一个常数,通常为 1。相比于 ReLU,ELU 在 $x < 0$ 的时候,输出的值不为零,但不是一个固定的值,而是一个指数函数,这样能够一定程度上防止神经元“死亡”,提高模型的稳定性。

在 PyTorch 中,可以这样实现:

import torch.nn as nn

class ELU(nn.Module):
    def __init__(self, alpha=1.0):
        super().__init__()
        self.alpha = alpha

    def forward(self, x):
        return nn.functional.elu(x, alpha=self.alpha)
Softmax

Softmax 函数常用于多分类问题中,其公式如下:

$$f(x_i) = \frac{e^{x_i}}{\sum_{j=1}^ke^{x_j}}$$

其中 $k$ 是类别数。

Softmax 函数的作用是将输入的 $k$ 个数映射到一个概率分布上,每个数对应一个类别的概率值,且满足所有概率值的和为 1。

在 PyTorch 中,可以这样实现:

import torch.nn as nn

class Softmax(nn.Module):
    def __init__(self, dim=-1):
        super().__init__()
        self.dim = dim

    def forward(self, x):
        return nn.functional.softmax(x, dim=self.dim)
总结

本套装中,我们介绍了 LeakyReLU、ELU 和 Softmax 三种激活函数,它们分别可以用于提高模型的稳定性、防止神经元“死亡”和多分类问题中输出概率分布。在实际使用中,需要根据具体的问题和数据集选择合适的激活函数,以提高模型的性能。