3.2 激活函数(上)
深度学习中的激活函数是神经网络中非常关键的一部分,它们为模型引入了非线性,使得神经网络能够学习复杂的数据表示。下面将详细介绍sigmoid函数和阶跃函数(也称为阈值函数或单位阶跃函数),包括它们的实现、图形以及它们之间的比较。
阶跃函数(Step Function)
定义:阶跃函数是一种简单的二值函数,它根据输入是否超过某个阈值(通常是0)来输出1或0。
实现(Python代码):
import numpy as np
import matplotlib.pyplot as plt
def step_function(x):
return np.array(x > 0, dtype=np.int)
# 绘制阶跃函数的图形
x = np.linspace(-2, 2, 100)
y = step_function(x)
plt.plot(x, y)
plt.ylim([-0.1, 1.1]) # 稍微调整y轴范围以便更清晰地显示
plt.title("Step Function")
plt.xlabel("x")
plt.ylabel("y")
plt.grid(True)
plt.show()
图形:阶跃函数的图形是一个在x=0处突然跳跃的阶梯形状,x<0时y=0,x>=0时y=1。
Sigmoid函数
定义:Sigmoid函数是一种将任意实值压缩到(0, 1)区间内的平滑函数,常用于二分类问题的输出层。
实现(Python代码):
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 绘制Sigmoid函数的图形
x = np.linspace(-10, 10, 100)
y = sigmoid(x)
plt.plot(x, y)
plt.title("Sigmoid Function")
plt.xlabel("x")
plt.ylabel("y")
plt.grid(True)
plt.show()
图形:Sigmoid函数的图形是一个S形曲线,当x趋于负无穷时,y趋于0;当x趋于正无穷时,y趋于1;在x=0时,y=0.5。
Sigmoid与阶跃函数的比较
-
平滑性:Sigmoid函数是平滑的,而阶跃函数在阈值处是不连续的。这种平滑性使得Sigmoid函数在反向传播算法中梯度计算更加稳定,而阶跃函数则可能导致梯度消失或爆炸问题。
-
输出范围:Sigmoid函数的输出范围是(0, 1),这使得它可以被解释为概率或置信度,非常适合于二分类问题的输出层。而阶跃函数的输出只有0和1,直接用于分类决策,但在训练过程中通常不作为神经网络的激活函数使用。
-
梯度特性:Sigmoid函数在输入接近0时梯度较大,但随着输入远离0,梯度逐渐趋近于0,这可能导致梯度消失问题。而阶跃函数在阈值处的梯度是不定义的(或者说是不存在的),这进一步限制了它在神经网络中的使用。
-
应用场景:由于Sigmoid函数的平滑性和输出范围特点,它经常被用作神经网络中的激活函数,尤其是在二分类问题的输出层。而阶跃函数由于其不连续性和梯度问题,在深度学习中通常不直接作为激活函数使用,但在某些特定情况下(如决策边界的直观表示)仍然有其应用价值。