【深度学习中的激活函数的整理与使用总结】

介绍

激活函数定义如下:激活函数计算加权总和,然后对其添加偏差以决定是否应该激活神经元。激活函数的目标是将非线性引入神经元的输出。没有激活函数的神经网络基本上是深度学习中的线性回归网络模型,因为这些函数对神经网络的输入执行非线性计算,使其能够学习和执行更复杂的任务。因此,研究激活函数的导数和应用,以及分析每个激活函数的优缺点,对于选择在特定神经网络模型中可能具有非线性和准确性的适当类型的激活函数是至关重要的。
在这里插入图片描述
我们知道神经网络中的神经元是按照它们的权重、偏差和激活函数而工作的,根据输出误差去改变神经网络中神经元的权重和偏差。反向传播就是这个过程的术语,由于梯度与误差同时提供更新权重和偏差,因此激活函数支持反向传播。

为什么我们需要它?

非线性激活函数:如果没有激活函数,神经网络只是一个线性回归模型。激活函数以非线性方式转换输入,使其能够学习并完成更复杂的任务。

激活函数的种类

1)线性激活函数

• 方程:线性函数的方程是y = ax,与直线方程非常相似。

• -inf 到 +inf 范围

• 应用:线性激活函数仅在输出层使用一次。

• 问题:如果我们对线性函数进行微分以引入非线性,则结果将不再与输入“x”相关并且函数将变为常数,因此我们的程序将不会显示任何行为。

在这里插入图片描述

2)sigmoid激活函数:

• 这是一个以“S”形形式绘制的函数。

• 公式:A = 1/(1 + ex)

•非线性。X 的值范围从 -2 到 2,但 Y 值非常陡峭。这表明x 的微小变化将导致 Y 值的巨大变化。

• 0 到 1 的范围值

在这里插入图片描述

3)Tanh 激活函数:

Tanh 函数,也被称为正切双曲函数,是一种几乎总是比 sigmoid 函数效果更好的激活函数。它只是一个经过调整的 sigmoid 函数。两者都是相关的,可以相互推导出来。

• 方程:f(x) = tanh(x) = 2/(1 + e-2x) – 1 OR tanh(x) = 2 * sigmoid(2x) – 1 OR tanh(x) = 2 * sigmoid(2x) – 1
• 值范围:-1 到 +1

• 用途:通常用于神经网络的隐藏层,因为它的值从 -1 变为 1,导致隐藏层的平均值为 0 或非常接近它,这有助于通过使平均值接近 0 来帮助数据中心化,这使得学习下一层更加直接。

在这里插入图片描述

4)RELU激活函数。

这是最常用的激活方法,主要使用于神经网络的隐藏层。

• 公式:A(x) = max (0,x)。如果 x 为正,则返回 x;否则,它返回 0。

• 值范围:(inf, 0)

• 本质上是非线性的,这意味着简单的反向传播误差并且还具有激活多层神经元的 ReLU 函数。

• 应用:因为它包含较少的数学运算,ReLu 的计算成本低于 tanh 和 sigmoid,一次只有少数神经元处于活动状态,这使得网络稀疏且计算效率高。

简单地说,RELU 函数的学习速度比 sigmoid 和 Tanh 函数快得多。

在这里插入图片描述

5)Softmax 激活函数

softmax 函数是一种 sigmoid 函数,在处理分类问题时会派上用场。

• 本质上的非线性

• 用途:通常在处理多分类时使用。softmax函数将除以输出的总和,并将每个类的输出压缩在 0 和 1 之间。

• 输出:softmax 函数最好用在分类器的输出层,我们尝试使用概率来定义每个输入的类别。

在这里插入图片描述

选择正确的激活函数

如果不确定要使用的激活函数,只需选择 RELU,这是一种广泛的激活函数,目前在大多数情况下都使用。如果我们的输出层用于二分类识别/检测,那么 sigmoid 函数是一个正确的选择。

Python代码实现

import numpy as np
import matplotlib.pyplot as plt

#实现sigmoid函数
def sigmoid(x):
    s=1/(1+np.exp(-x))
    ds=s*(1-s)
    return s,ds


if __name__ == '__main__':
    x=np.arange(-5,5,0.01)
    sigmoid(x)
    fig, ax = plt.subplots(figsize=(9, 5))
    ax.spines['left'].set_position('center')
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.yaxis.set_ticks_position('left')
    ax.plot(x,sigmoid(x)[0], color='#ff0000', linewidth=3, label='sigmoid')
    ax.plot(x,sigmoid(x)[1], color='#0000ff', linewidth=3, label='derivative')
    ax.legend(loc="center right", frameon=False)
    fig.show()
    plt.pause(-1)

在这里插入图片描述

结论

在本文中,我主要整理并总结了深度学习中不同类型的激活函数供大家参考和学习,若有不正确的地方,还请大家指正,谢谢!

猜你喜欢

转载自blog.csdn.net/vcsir/article/details/126133505
今日推荐