2101.神经网络-算法-多层感知机

激活函数

我们引入神经网络,引入隐藏层,实际是为了解决线性模型不能解决的复杂问题,实现非线性变换。使得神经网络能够学习和逼近复杂的函数映射。而这里实现非线性变换,就是依靠激活函数来实现的,对特定的输入使用激活函数进行处理,形成隐藏层数据。
激活函数接收神经元的加权输入和偏置之和作为输入,然后输出一个经过某种非线性变换的值。这种非线性变换允许神经网络在多层结构中堆叠时,捕捉到数据中的复杂模式和层次结构。
alt text

激活函数在神经网络中至关重要,它们为神经网络引入非线性,使网络能够学习和逼近复杂的函数映射。激活函数都是非线性的,而我们在计算激活值时使用的都是线性运算,引入激活函数能让我们在后续的计算中逼近任何的非线性函数,从而使神经网络有更好的普适性。

Sigmoid函数

  • 公式: f(x) = 1 / (1 + e^-x)
  • 应用场景: 早期神经网络中常用,尤其适用于输出层,当需要输出值在0到1之间时。
  • 缺点: 易发生梯度消失,计算效率不高。

tanh函数

  • 公式: f(x) = tanh(x)
  • 应用场景: 类似于Sigmoid函数,但输出范围在-1到1之间,有助于网络收敛。
  • 缺点: 存在梯度消失问题。

ReLU函数 (Rectified Linear Unit)

  • 公式: f(x) = max(0, x)
  • 应用场景: 广泛用于深层神经网络的隐藏层,特别是在卷积神经网络中。
  • 优点: 计算简单,缓解梯度消失问题。
  • 缺点: 对于负输入,梯度为0,可能导致神经元“死亡”。

Leaky ReLU函数

  • 公式: f(x) = max(alpha * x, x),其中alpha是一个小的正数。
  • 应用场景: 解决ReLU函数在负数区域梯度为0的问题。
  • 优点: 避免神经元“死亡”。

ELU函数 (Exponential Linear Units)

  • 公式: f(x) = x 如果 x > 0f(x) = alpha * (e^x - 1) 如果 x <= 0
  • 应用场景: 类似于Leaky ReLU,但输出均值更接近于0。
  • 优点: 输出均值接近0,有助于梯度传播。

SELU函数 (Scaled Exponential Linear Units)

  • 公式: f(x) = lambda * x 如果 x > 0f(x) = lambda * (alpha * (e^x - 1)) 如果 x <= 0
  • 应用场景: 设计用于自动归一化网络。
  • 优点: 使网络自动达到归一化状态。

Softmax函数

  • 公式: f(x_i) = e^(x_i) / sum(e^(x_j)),对输出层,将向量转换为概率分布。
  • 应用场景: 主要用于多分类问题的输出层。

选择激活函数时,需要根据模型的具体需求、数据特性和任务类型来决定。例如,对于回归任务,输出层可能不需要激活函数(或使用线性激活函数)。而在隐藏层中,ReLU和它的变体因其计算效率和梯度传播的优势而广泛使用。。当然这不是恒定的规律,我们可以尝试使用 Sigmoid 函数作为隐层激活函数,但注意使用时尽量不要超过太多隐层。另外可以使用 Tanh 函数来代替 Sigmoid 函数观察模型的精确率曲线图。如果直接使用 ReLU 函数作为激活函数,注意梯度下降算法的学习率参数不能设置得过高,避免神经元的大量“消亡”。对于输出层,一般使用 softmax 函数获得同分布最高概率作为输出结果。 此外,可以加入 Batch Normalization (BN)层,让下一层的输入数据具有相同的分布。如果遇到神经网络训练时收敛速度慢,或梯度爆炸或者梯度消失等无法训练的状况都可以尝试加入 BN层,然后观察其训练结果。

-------------本文结束感谢您的阅读-------------