激活函数是神经网络中的重要组成部分,用于引入非线性因素,使得神经网络能够学习和模拟复杂的函数关系。以下是一些常见激活函数的定义和实现:
Sigmoid函数
数学表达式:`f(x) = 1 / (1 + e^(-x))`
特点:输出值域在[0, 1]之间,连续且可微,但容易导致梯度消失问题。
Tanh函数
数学表达式:`f(x) = (e^x - e^(-x)) / (e^x + e^(-x))`
特点:输出值域在[-1, 1]之间,零中心性较好,但同样存在梯度消失问题。
ReLU函数
数学表达式:`f(x) = max(0, x)`
特点:计算简单,能缓解梯度消失问题,但在负值区域梯度为0,可能导致“死亡ReLU”现象。
Leaky ReLU
数学表达式:`f(x) = max(alpha * x, x)`,其中`alpha`是泄漏系数(通常取0.01)
特点:是ReLU的改进版,允许负值区域有非零梯度,减少了“死亡ReLU”的概率。
ELU函数
数学表达式:`f(x) = x * sigmoid(x)`
特点:在负值区域有平滑的曲线,能缓解梯度消失问题,但计算相对复杂。
Swish函数
数学表达式:`f(x) = x * sigmoid(x)`,但使用自我激活方式
特点:无参数,计算简单,性能优于ReLU。
Softmax函数
数学表达式:`f(x_i) = e^(x_i) / sum(e^(x_j))`,用于多分类问题
特点:输出值域在[0, 1]之间,且所有输出值之和为1,适合作为分类问题的最后一层。
Softplus函数
数学表达式:`f(x) = log(1 + e^x)`
特点:平滑的激活函数,计算简单,能缓解梯度消失问题。
```python
import numpy as np
def relu(x):
return np.maximum(0, x)
示例输入
inputs = np.array([-10, 0, 10, 20])
outputs = relu(inputs)
print(outputs)
```
这个示例展示了如何实现ReLU激活函数,并应用于一组输入数据。你可以根据需要修改或扩展这个示例,实现其他激活函数。