Skip to content

非线性与激活函数

线性要求满足可加性与齐次性,但神经网络需要非线性才能摆脱简单的仿射变换。仿射层只能对数据进行拉伸和旋转,而不改变其拓扑结构;激活函数则能实现复杂的形变,使网络能够解开数据流形,有效地学习复杂模式。

线性组合

「线性」(linearity)这一概念贯穿数学、物理、工程学以及许多其他领域。简单来说,线性描述了两种基本的运算性质:可加性与齐次性。

如果一个关系、函数或系统同时满足以下两个条件,则称其为线性的。

考虑作用在输入 xxyy 上的变换或函数 ff

可加性

「部分之和等于整体」。也就是说,分别处理两个输入再相加结果,与先将输入相加再处理其和,是等价的。

f(x+y)=f(x)+f(y)f(x + y) = f(x) + f(y)

示例:乘法 f(x)=5xf(x) = 5x 满足可加性。

  • 左边:f(2+3)=5×(2+3)=25f(2+3) = 5 \times (2+3) = 25,右边:f(2)+f(3)=10+15=25f(2) + f(3) = 10 + 15 = 25,相等。

反例:平方函数 f(x)=x2f(x) = x^2 不满足可加性。

  • 左边:(2+3)2=25(2+3)^2 = 25,右边:22+32=4+9=132^2 + 3^2 = 4+9=13,不相等。

齐次性

「输入的缩放会使输出按相同比例缩放」。也就是说,将输入乘以一个常数(标量),得到的结果等于原输出乘以同一个常数。

f(cx)=cf(x)(c 为任意常数)f(c \cdot x) = c \cdot f(x) \quad (\text{c 为任意常数})

示例:f(x)=5xf(x) = 5x 满足齐次性。

  • 左边:f(4×3)=5×12=60f(4 \times 3) = 5 \times 12 = 60,右边:4×f(3)=4×15=604 \times f(3) = 4 \times 15 = 60,相等。

反例:加上常数项 f(x)=5x+2f(x) = 5x + 2 不满足齐次性。

  • 左边:f(4×3)=5×12+2=62f(4 \times 3) = 5 \times 12 + 2 = 62,右边:4×f(3)=4×(15+2)=684 \times f(3) = 4 \times (15+2) = 68,不相等。

在上述定义中,同时满足可加性与齐次性是线性成立的充分必要条件。

许多人错误地认为「线性」就是「图像是一条直线」。这种理解并不准确。

「真正的线性」:一条必须过原点的直线。例如 y=2xy = 2x。它同时满足可加性与齐次性。如果输入为 0,输出也必为 0。

严格来说,如果加入偏置项 bb,它就变成了仿射(affine)。它仍是一条直线,但未必经过原点。例如 y=2x+1y = 2x + 1。它不满足齐次性(因为 f(0)=10f(0)=1 \neq 0)。尽管它常被称为「线性函数」,但在严格定义下它并非线性,而是「线性 + 平移」,即仿射。

现在我们就能理解为什么称为「线性」组合了。这种组合只允许两类「线性」运算:

  1. 数乘(对应齐次性):将向量按因子 cc 拉伸或压缩。
  2. 加法(对应可加性):将处理后的向量相加。

像平方、取绝对值或对数这类非线性运算是不被允许的。因此,形如 c1v12+c2v2c_1 v_1^2 + c_2 v_2c1v1+c2v2+3c_1 v_1 + c_2 v_2 + 3 的表达式不能称为线性组合。

可以说「线性」是数学与科学中最简单、最核心的关系,因为它允许我们把复杂问题分解为简单部分的叠加。

仿射

仿射函数 f:RnRmf: \mathbb{R}^n \to \mathbb{R}^m 的定义如下:

f(x)=Ax+bf(x) = Ax + b

其中 AA 是矩阵,bb 是常向量。它就是线性函数加上偏置。

如果取仿射函数的加权线性组合(系数可以是标量):

g(x)=i=1kαifi(x)g(x) = \sum_{i=1}^k \alpha_i f_i(x)

其中每个 fi(x)=Aix+bif_i(x) = A_i x + b_i

展开后:

g(x)=i=1kαi(Aix+bi)=(i=1kαiAi)x+i=1kαibig(x) = \sum_{i=1}^k \alpha_i (A_i x + b_i) = \left(\sum_{i=1}^k \alpha_i A_i \right) x + \sum_{i=1}^k \alpha_i b_i

这仍然是仿射函数。因此,加权组合不会破坏仿射性。

如果用非线性的多项式运算来组合仿射函数,例如平方或更高次幂:

h(x)=(f1(x))2+3f2(x)f3(x)+5h(x) = (f_1(x))^2 + 3 f_2(x) f_3(x) + 5

注意:f1(x)2f_1(x)^2 是逐元素平方,f2(x)f3(x)f_2(x) f_3(x) 是逐元素相乘或点积。

这些运算会引入二次项或更高阶项,不再保持 Ax+bAx+b 的形式。因此,非线性多项式组合通常不是仿射函数。

仿射复合

这个问题非常重要,是理解神经网络本质的关键。让我们仔细分析仿射函数的复合是否仍然是仿射的。

假设有两个仿射函数:

f(x)=Ax+b,g(x)=Cx+df(x) = A x + b, \quad g(x) = C x + d

其复合为:

h(x)=f(g(x))=f(Cx+d)h(x) = f(g(x)) = f(Cx + d)

展开来看其形式:

h(x)=A(Cx+d)+b=(AC)x+(Ad+b)h(x) = A(Cx + d) + b = (AC)x + (Ad + b)

结果仍然是仿射函数。

由此可见,仿射函数的复合仍然是仿射的。这一点可以推广:复合任意多个仿射函数:

fn(f2(f1(x)))f_n(\dots f_2(f_1(x))\dots)

总能写成:

Ax+bA_\text{总} x + b_\text{总}

这正是为什么:如果神经网络的每一层都是仿射的而不使用激活函数,那么无论堆叠多少层,网络的表达能力都等同于单层。我们可以把仿射层看作拉伸、旋转或平移的运算,或这些运算的组合。复合多个仿射变换等价于连续的拉伸 + 旋转 + 平移,最终仍归结为一次整体的拉伸 + 旋转 + 平移。因此,复合仿射变换并不会增加非线性的自由度,也无法表示曲线或复杂函数。

神经网络的每一层都是一个仿射映射:

f(x)=Wx+bf(x) = Wx + b
  • WW 可逆(即 det(W)0\det(W) \neq 0),则 ff 是双射且连续的。
  • 其逆映射为:
f1(y)=A1(yb)f^{-1}(y) = A^{-1}(y - b)

它同样是仿射且连续的,因此是一个同胚(homeomorphism)。但这里有一个核心条件:WW 必须可逆。

复合多个仿射变换等价于复合多个同胚。假设有多个连续的可逆仿射映射:

fnfn1f1f_n \circ f_{n-1} \circ \cdots \circ f_1

每个 fif_i 都是同胚,而同胚的复合仍然是同胚。因此,最终的映射也是同胚。

于是我们得出如下结论:设 MM 为原始流形:

  • 连续且双射的仿射映射,保持流形结构(同胚)。
  • 连续复合多个这样的仿射映射,得到的流形与 MM 同胚。

换句话说:「连续线性 + 偏置的变换不会改变流形的拓扑,只会对其进行拉伸、旋转、平移或剪切。」

这就是为什么仅使用线性层无法「弯曲」数据流形:在嵌套的线性层下,数据始终保持其「原始形状」(拓扑不变)。如果决策边界需要切开一个复杂流形,就必须引入非线性(激活函数)。

这也是深度学习的目标。如果原始流形的结构对于给定任务而言不可分,而学习目标又要求可分性,那么原始流形与目标流形必然不是同胚的。

在从原始流形到目标流形的变换中,要失去同胚性就必须摆脱线性、仿射的变换。因为仅靠仿射变换(更一般地说是同胚变换)通常不足以解开类别。深度网络往往需要通过非同胚的非线性操作来重构数据流形,使其最终线性可分。

我们需要考虑如何让仿射变换的复合变得非线性。这一洞见正是神经网络几何解释的核心:

线性层只能执行保持拓扑的仿射变换;非线性层则允许拓扑改变,从而使神经网络能够表示复杂函数。

仿射层的激活

神经网络的每一层都是一个仿射映射:

li(x)=Wix+bil_i(x) = W_i x + b_i

其中 ii 表示第 ii 层。nn 层仿射映射的嵌套复合为:

lnln1ln2l0l_n \circ l_{n-1} \circ l_{n-2} \circ \dots \circ l_0

如果不引入激活函数,上述结果仍然是仿射函数。

证明很简单:

l2(l1(x))=W2(W1x+b1)+b2=(W2W1)x+(W2b1+b2)l_2(l_1(x)) = W_2(W_1x+b_1)+b_2 = (W_2W_1)x+(W_2b_1+b_2)

它仍然保持 Ax+bAx+b 的形式。

由归纳法可得:

lnl0=Wx+bl_n \circ \cdots \circ l_0 = Wx + b

因此,网络的深度完全失去了意义。

为了引入非线性,我们可以在每一层上添加激活函数:

f(x)=(σnln)(σn1ln1)(σ0l0)(x)f(x) = (\sigma_n \circ l_n) \circ (\sigma_{n-1} \circ l_{n-1}) \circ \cdots \circ (\sigma_0 \circ l_0)(x)

其中

li(x)=Wix+bil_i(x)=W_i x+b_i

展开后即为:

f(x)=σn(Wnσn1(Wn1σ0(W0x+b0)+bn1)+bn)f(x) = \sigma_n \Bigl( W_n \sigma_{n-1} \bigl( W_{n-1} \cdots \sigma_0(W_0x+b_0) \cdots +b_{n-1} \bigr) + b_n \Bigr)

这就是神经网络的标准形式。

在加入激活函数后:

(σl2)(σl1)(\sigma \circ l_2) \circ (\sigma \circ l_1)

无法化简为

Wx+bWx+b

因为一般来说:

σ(Ax+b)Aσ(x)+b\sigma(Ax+b) \neq A'\sigma(x)+b'

激活函数破坏了仿射映射在复合下的封闭性。换言之,它打破了可加性与齐次性这两个关键特性。这本质上就是神经网络非线性表达能力的来源。

从前面讨论的流形视角来看,这可以进一步写成:

Ml0M1σ0M1l1M2σ1M2M \xrightarrow{l_0} M_1 \xrightarrow{\sigma_0} M_1' \xrightarrow{l_1} M_2 \xrightarrow{\sigma_1} M_2' \rightarrow \cdots

其中:仿射层负责拉伸、旋转、平移、剪切;激活层负责对流形进行折叠、裁剪、压缩与重构。

如果所有 WiW_i 都可逆,那么仿射层本身只是同胚变换,不会改变流形的拓扑。真正让流形逐步变得可分的,往往正是激活函数引入的非线性形变。

因此,从几何角度看,神经网络可以理解为作用在数据流形上的仿射变换与非线性流形操作的交替组合。这一视角与许多现代流形学习和几何深度学习的解释相一致。

激活函数

激活函数并不存在「唯一最佳」的选择。不过,从神经网络的可训练性与表达能力来看,一个好的激活函数通常应满足几个核心特征:

非线性

如前所述,需要非线性来打破堆叠仿射层的线性封闭性,使多层网络能够逼近任意函数。

数学要求:不能满足线性组合的封闭性:

σ(ax+by)aσ(x)+bσ(y)\sigma(a x + b y) \neq a \sigma(x) + b \sigma(y)

例如:ReLU、Tanh、Sigmoid、GELU。

线性函数并不适用,因为多个线性层的复合仍然是线性的,这会退化回仿射复合,从而限制表达能力。

可微性

由于神经网络的核心依赖反向传播来确定权重,激活函数必须在其定义域的大部分区域可微,以便在反向传播过程中计算梯度。对于不可微的点(例如 ReLU 在 0 处),通常使用次梯度(subgradient)。此外,导数的性质会影响梯度流动:梯度过小会导致梯度消失(如 Sigmoid),梯度过大则会导致梯度爆炸。

连续性

确保网络输出随输入连续变化,否则训练会变得不稳定。存在少数可控的不连续点通常是可以接受的(例如 ReLU 只有一个不连续点,实际影响很小)。

在上述性质中,满足条件只是「入场券」,而不是「成功的保证」。