激活函数是神经网络中的关键组件,它决定了神经元是否应该被激活。激活函数的主要目的是引入非线性,使得神经网络能够学习和执行更复杂的任务。如果没有激活函数,神经网络本质上就是一个线性回归模型,因为这些函数对神经网络的输入执行非线性计算,使其能够学习并执行更复杂的任务。因此,研究激活函数的导数和应用,以及分析每种激活函数的优缺点,对于选择适当的激活函数类型至关重要,这可能会给特定的神经网络模型带来非线性和准确性。
为什么需要激活函数在卷积神经网络中?
非线性激活函数:没有激活函数,神经网络只是一个线性回归模型。激活函数以非线性方式转换输入,使其能够学习和完成更复杂的任务。从数学上证明这一点,可以观察到即使在应用了隐藏层之后,结果仍然是一个线性函数,因此可以推断,无论在神经网络中添加多少隐藏层,所有层的行为都将相同,因为两个线性函数的组合将产生一个线性函数。
激活函数的变体
1. 线性函数:线性激活函数的方程是y=ax,这与直线方程非常相似。它的问题在于,如果对线性函数求导以引入非线性,结果将不再与输入“x”相关,函数将变得恒定,因此程序将不显示任何行为。例如,确定房屋价格是一个回归问题。由于公寓的价格可能是一个较大或较小的数字,可以使用线性激活在输出层。即使在这种情况下,神经网络的隐藏层也需要非线性函数。
2. Sigmoid函数:这是一个以'S'形绘制的函数。它的公式是A = 1/(1 + e^-x),其值的范围是0到1。Sigmoid函数是非线性的,X的值范围从-2到2,但Y值非常陡峭,这表明X的微小变化将导致Y值的巨大变化。
3. Tanh函数:Tanh函数,也称为双曲正切函数,是一个几乎总是比Sigmoid函数表现更好的激活函数。它实际上是一个经过调整的Sigmoid函数。两者是相关的,可以从彼此推导出来。它的方程是f(x) = tanh(x) = 2/(1 + e^-2x) - 1或者tanh(x) = 2 * sigmoid(2x) - 1。其值的范围是-1到+1。
4. RELU(Rectified Linear Unit):RELU是字母表中的第四个字母。它是最常用的激活方法,主要用于神经网络的隐藏层。它的公式是A(x) = max(0, x)。如果x是正数,它返回x;否则,它返回0。其值的范围是(inf, 0)。RELU函数是非线性的,这意味着简单地反向传播错误并激活多层神经元。
5. Softmax函数:Softmax函数是一种Sigmoid函数,适用于处理分类问题。它通常用于处理多类问题。Softmax函数将输出除以输出的总和,并挤压每个类别的输出在0和1之间。
选择合适的激活函数
import numpy as np
# 设计sigmoid函数
def sigmoid(x):
s = 1 / (1 + np.exp(-x))
ds = s * (1 - s)
return s, ds
x = np.arange(-6, 6, 0.01)
sigmoid(x) # 设定中心化的坐标轴
import matplotlib.pyplot as plt
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')
# 创建并显示sigmoid图
ax.plot(x, sigmoid(x)[0], color="#307EC7", linewidth=3, label="sigmoid")
ax.plot(x, sigmoid(x)[1], color="#9621E2", linewidth=3, label="derivative")
# 将图例放置在坐标轴的右上角
ax.legend(loc="upper right", frameon=False)
fig.show()
- 介绍了激活函数的基本概念。
- 也讨论了部署激活函数的各种需求。
- 还讨论了激活函数的Python实现。
- 还讨论了激活函数的各种变体。
- 最后,讨论了通过激活函数添加非线性的必要性。