系统的本质——从LTI系统到神经网络

第02章 系统的本质------从LTI系统到神经网络


2.1 经典回顾:系统是什么?

在奥本海姆的框架中,系统是一个变换规则:给定输入信号,产生输出信号。

复制代码
x(t) → [ 系统 T{·} ] → y(t)

你学过的系统分类:

性质 定义 直觉
线性 T{ax1+bx2}=aT{x1}+bT{x2}T\{ax_1+bx_2\} = aT\{x_1\}+bT\{x_2\}T{ax1+bx2}=aT{x1}+bT{x2} 叠加原理成立
时不变 T{x(t−τ)}=y(t−τ)T\{x(t-\tau)\} = y(t-\tau)T{x(t−τ)}=y(t−τ) 系统行为不随时间改变
因果 y(t)y(t)y(t) 只取决于 x(τ),  τ≤tx(\tau),\; \tau\leq tx(τ),τ≤t 不依赖未来输入
稳定(BIBO) 有界输入 → 有界输出 不会爆炸
记忆less y(t)y(t)y(t) 只取决于 x(t)x(t)x(t) 无记忆

LTI系统 (线性时不变系统)是整个课程的核心------它完全由冲激响应 h(t) 决定:

y(t)=x(t)∗h(t)=∫x(τ)h(t−τ) dτ y(t) = x(t) * h(t) = \int x(\tau)h(t-\tau)\, d\tau y(t)=x(t)∗h(t)=∫x(τ)h(t−τ)dτ


2.2 直觉重塑:神经网络就是参数化的系统

把上面的框图换成AI的语言:

复制代码
输入数据 → [ 神经网络 f_θ{·} ] → 预测输出

每一个神经网络层都是一个系统。 整个网络是系统的级联(串联)。

关键问题是:神经网络是LTI系统吗?

答案:不是。 这是理解深度学习本质的关键。


2.3 线性 → 线性层 vs 非线性激活

经典线性系统

LTI系统的线性意味着:叠加原理成立。两个输入的响应之和等于它们各自响应之和。

AI中的线性层

全连接层 y = Wx + b 是仿射变换(线性变换 + 平移):

python 复制代码
import torch

linear = torch.nn.Linear(10, 5, bias=True)

# 验证线性(实际上是仿射性)
x1 = torch.randn(1, 10)
x2 = torch.randn(1, 10)

y1 = linear(x1)
y2 = linear(x2)

# 线性:T{ax₁+bx₂} = aT{x₁}+bT{x₂}
# 仿射:T{ax₁+bx₂} = aT{x₁}+bT{x₂} + b(1-a-b)... 不严格成立
# 去掉bias才是严格线性

# 严格线性验证(设bias=False)
linear_no_bias = torch.nn.Linear(10, 5, bias=False)
y_sum = linear_no_bias(x1 + x2)
y_parts = linear_no_bias(x1) + linear_no_bias(x2)
print(torch.allclose(y_sum, y_parts))  # True

为什么需要非线性?

如果神经网络只有线性层,那它就是一个大号的线性变换:

复制代码
y = W₃(W₂(W₁x)) = (W₃W₂W₁)x = Wx

再多的线性层叠加还是线性的------这和信号处理中"级联LTI系统还是LTI系统"是同一件事。

非线性激活函数打破了这个限制:

python 复制代码
# 没有激活函数:两层 = 一层
x = torch.randn(1, 10)
W1 = torch.randn(10, 20)
W2 = torch.randn(20, 10)
y_linear = x @ W1 @ W2  # 还是线性变换

# 有激活函数:两层 ≠ 一层
y_relu = torch.relu(x @ W1) @ W2  # 非线性变换,表达能力更强

关键洞察

  • 信号处理:LTI系统 = 线性 + 时不变
  • AI:线性层 = 线性(无时不变概念)
  • 非线性激活 = 打破线性性
  • 深度网络 = 线性层的级联 + 非线性 = 通用函数逼近器

2.4 时不变性 → 平移等变性(Equivariance)

经典定义

时不变系统:如果输入延迟 τ,输出也延迟 τ。

复制代码
x(t) → y(t)
x(t-τ) → y(t-τ)

AI中的对应:平移等变性

卷积层(Convolutional Layer)是平移等变的:

python 复制代码
import torch

# 创建一个简单的卷积层
conv = torch.nn.Conv2d(1, 1, kernel_size=3, padding=1, bias=False)

# 输入图像
x = torch.randn(1, 1, 8, 8)

# 平移后的图像(向右移2像素)
x_shifted = torch.roll(x, shifts=2, dims=3)

# 卷积的输出
y = conv(x)
y_shifted = conv(x_shifted)

# 验证:卷积输出也平移了2像素
y_shifted_manual = torch.roll(y, shifts=2, dims=3)
print(torch.allclose(y_shifted, y_shifted_manual, atol=1e-6))  # True

全连接层不具备平移等变性:

python 复制代码
# 全连接层:平移输入后,输出不是简单的平移
fc = torch.nn.Linear(64, 32)
x_flat = x.view(1, -1)
x_shifted_flat = x_shifted.view(1, -1)

y_fc = fc(x_flat)
y_shifted_fc = fc(x_shifted_flat)
y_fc_shifted = torch.roll(y_fc, shifts=2, dims=1)  # 不等于 y_shifted_fc

更一般的等变性

时不变性是"平移等变性"的一个特例(时间轴上的平移)。现代AI追求更广泛的等变性:

等变性类型 变换 对应的网络结构
平移等变 平移 CNN
旋转等变 旋转 G-CNN, E(2)-CNN
排列等变 元素置换 图神经网络、PointNet
尺度等变 缩放 小波CNN

2.5 因果性 → 自回归模型

经典定义

因果系统:输出 y(t) 只依赖于当前和过去的输入 x(τ), τ ≤ t。

AI中的对应

自回归模型(Autoregressive Model)是因果的:

复制代码
p(x₁, x₂, ..., xₙ) = p(x₁) · p(x₂|x₁) · p(x₃|x₁,x₂) · ...

GPT就是自回归模型------预测第n个token时,只能看到前n-1个token。

python 复制代码
# GPT的因果性:通过掩码实现
def causal_mask(seq_len):
    """创建因果掩码:每个位置只能看到自己和之前的位置"""
    mask = torch.tril(torch.ones(seq_len, seq_len))
    return mask

# 4个token的因果掩码
mask = causal_mask(4)
print(mask)
# tensor([[1, 0, 0, 0],
#         [1, 1, 0, 0],
#         [1, 1, 1, 0],
#         [1, 1, 1, 1]])

# 注意力分数 × 掩码 = 因果注意力
attn_scores = torch.randn(4, 4)
causal_scores = attn_scores.masked_fill(mask == 0, float('-inf'))
causal_weights = torch.softmax(causal_scores, dim=-1)
# 第i个token只关注第0~i个token

关键洞察

复制代码
信号处理的因果性:y(t) 只看 x(τ), τ≤t
GPT的因果性:    预测token[n] 只看 token[0..n-1]
实现方式:        下三角掩码(信号处理中不需要,因为因果性是自然的)

2.6 稳定性(BIBO)→ 梯度稳定性

经典定义

BIBO稳定:有界输入产生有界输出。

∣x(t)∣≤Mx<∞  →  ∣y(t)∣≤My<∞ |x(t)| \leq M_x < \infty \;\to\; |y(t)| \leq M_y < \infty ∣x(t)∣≤Mx<∞→∣y(t)∣≤My<∞

对于LTI系统:BIBO稳定   ⟺  \iff⟺ ∫∣h(t)∣ dt<∞\int |h(t)|\, dt < \infty∫∣h(t)∣dt<∞(冲激响应绝对可积)。

AI中的对应:梯度稳定性

训练神经网络时,梯度通过反向传播流过每一层。如果梯度在传播过程中指数级增长或缩小,训练就会失败:

复制代码
信号处理:BIBO稳定 → 冲激响应绝对可积
AI:      训练稳定 → 梯度的"冲激响应"不爆炸/消失
python 复制代码
# 梯度爆炸的演示
import torch

# 模拟一个深层网络的梯度传播
# 每一层的梯度乘以权重矩阵
# 如果权重矩阵的谱范数 > 1,梯度会指数增长

def simulate_gradient_flow(n_layers, spectral_radius):
    """模拟梯度在n层网络中的传播"""
    grad = torch.tensor([1.0])
    grads = [grad.item()]

    for _ in range(n_layers):
        # 模拟一层的梯度:乘以一个标量(简化版)
        grad = grad * spectral_radius
        grads.append(grad.item())

    return grads

# 谱半径 < 1:梯度消失
grads_vanishing = simulate_gradient_flow(50, 0.9)
print(f"消失: 最终梯度 = {grads_vanishing[-1]:.2e}")  # ~1e-2

# 谱半径 > 1:梯度爆炸
grads_exploding = simulate_gradient_flow(50, 1.1)
print(f"爆炸: 最终梯度 = {grads_exploding[-1]:.2e}")  # ~117

# 谱半径 = 1:梯度稳定(理想情况)
grads_stable = simulate_gradient_flow(50, 1.0)
print(f"稳定: 最终梯度 = {grads_stable[-1]:.2e}")  # 1.0

这就是为什么需要:

  • BatchNorm / LayerNorm:控制每层输出的"能量"
  • 残差连接:提供"直通路径"让梯度直接流过
  • 合理的初始化(Xavier, He):让初始梯度的谱半径接近1

2.7 冲激响应 → 权重/核函数

经典定义

LTI系统完全由其冲激响应 h(t) 决定:

y(t)=(x∗h)(t)=∫x(τ)h(t−τ) dτ y(t) = (x * h)(t) = \int x(\tau)h(t-\tau)\, d\tau y(t)=(x∗h)(t)=∫x(τ)h(t−τ)dτ

AI中的对应

卷积核(Convolutional Kernel)就是离散的冲激响应:

python 复制代码
# 卷积核 = 冲激响应
conv = torch.nn.Conv2d(1, 1, kernel_size=3, padding=1, bias=False)

# 查看"冲激响应"(卷积核的权重)
h = conv.weight.data  # (1, 1, 3, 3)
print("冲激响应(卷积核):")
print(h.squeeze())

# 对输入做卷积 = 用冲激响应对输入做滤波
x = torch.randn(1, 1, 5, 5)
y = conv(x)  # y = x * h

全连接层的"冲激响应"是什么?

全连接层 y = Wx 可以看作是一个"全局卷积"------核的大小等于输入的大小:

python 复制代码
fc = torch.nn.Linear(10, 5, bias=False)
# 权重矩阵 W 的形状是 (5, 10)
# 对于输出的第i个神经元,"冲激响应"是 W[i, :]
# 它看的是整个输入------这是一个"全局卷积"

2.8 级联系统 → 深度网络

经典性质

LTI系统的级联还是LTI系统,且级联顺序可以交换(在一定条件下):

htotal(t)=h1(t)∗h2(t)=h2(t)∗h1(t) h_{\text{total}}(t) = h_1(t) * h_2(t) = h_2(t) * h_1(t) htotal(t)=h1(t)∗h2(t)=h2(t)∗h1(t)

AI中的对应

深度网络是层的级联,但因为有非线性激活,级联顺序不可交换

LTI级联:顺序可交换

y = (x * h₁) * h₂ = (x * h₂) * h₁

深度网络:顺序不可交换

x = torch.randn(1, 10)

W1 = torch.nn.Linear(10, 10, bias=False)

W2 = torch.nn.Linear(10, 10, bias=False)

relu = torch.nn.ReLU()

顺序1: W2(relu(W1(x)))

y1 = W2(relu(W1(x)))

顺序2: W1(relu(W2(x)))

y2 = W1(relu(W2(x)))

print(torch.allclose(y1, y2)) # False --- 不可交换!

复制代码
**关键洞察**:非线性激活函数使得深度网络的"层序"成为一个重要的设计选择。这和LTI系统完全不同------LTI系统的级联顺序无关紧要。

---

## 2.9 系统的互联 → 网络架构设计

### 经典互联方式

- 级联(串联):$y = T_2\{T_1\{x\}\}$ ------ 输出直接作为下一个系统的输入
- 并联:$y = T_1\{x\} + T_2\{x\}$ ------ 两个系统处理同一个输入,输出相加
- 反馈连接:$y = T_1\{x + T_2\{y\}\}$ ------ 输出反馈到输入

### AI中的对应

```python
# 级联 = Sequential
model_cascade = torch.nn.Sequential(
    torch.nn.Linear(10, 20),
    torch.nn.ReLU(),
    torch.nn.Linear(20, 5)
)

# 并联 = 多分支(如Inception模块)
class ParallelBranches(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.branch1 = torch.nn.Linear(10, 5)
        self.branch2 = torch.nn.Linear(10, 5)

    def forward(self, x):
        return self.branch1(x) + self.branch2(x)  # 并联求和

# 反馈连接 = RNN / 残差连接
class FeedbackSystem(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.T1 = torch.nn.Linear(10, 10)
        self.T2 = torch.nn.Linear(10, 10)

    def forward(self, x, y_prev):
        # y = T1(x + T2(y_prev))
        return self.T1(x + self.T2(y_prev))

2.10 传递函数 → 网络的输入-输出映射

经典定义

LTI系统的传递函数 H(s) 是冲激响应的拉普拉斯变换:

Y(s)=H(s)⋅X(s) Y(s) = H(s) \cdot X(s) Y(s)=H(s)⋅X(s)

它描述了系统在频域中的行为。

AI中的"传递函数"

虽然深度学习没有直接使用传递函数的概念,但函数映射的思想是一样的:

  • 信号处理:H(s)=Y(s)/X(s)H(s) = Y(s)/X(s)H(s)=Y(s)/X(s) → 系统的频域特性
  • AI:fθ(x)=yf_\theta(x) = yfθ(x)=y → 网络的输入-输出映射

Neural ODE 的"传递函数"是可以显式写出的:

Neural ODE: dx/dt = f_θ(x, t)

在频域:sX(s) - x(0) = F_θ(X(s), s)

传递函数不是简单的 H(s),而是一个隐式定义

但思想相同:描述输入-输出关系


2.11 综合对比表

信号处理概念 AI对应 关键差异
系统 T{⋅}T\{\cdot\}T{⋅} 网络 fθ(⋅)f_\theta(\cdot)fθ(⋅) AI系统是参数化的
线性 线性层 AI需要非线性打破线性
时不变 平移等变(CNN) AI有更广泛的等变性需求
因果性 自回归掩码 AI中需要显式实现
BIBO稳定 梯度稳定 AI中通过Norm/残差保证
冲激响应 h(t)h(t)h(t) 卷积核 / 权重矩阵 AI中是可学习的
级联系统 深度网络 AI中级联顺序重要
并联系统 多分支架构 同构
反馈系统 RNN / 残差连接 同构
传递函数 H(s)H(s)H(s) 网络映射 fθf_\thetafθ AI中通常不显式使用

2.12 思考题

Q1: "为什么深度学习不用LTI系统?"

回答:因为LTI系统的级联还是LTI,无论堆多少层,表达能力不会增加------它只能做线性变换。非线性激活函数打破了线性性,使得深度网络成为通用函数逼近器。但有趣的是,CNN的卷积层本身就是LTI(平移等变的线性变换),非线性只在激活函数中引入。这使得CNN既有LTI系统的高效性和可分析性,又有非线性网络的表达能力。

Q2: "残差连接和反馈系统有什么关系?"

回答:残差连接 y = x + F(x) 可以看作是一个特殊的反馈结构------如果把 F(x) 看作"前馈路径",x 看作"直通路径",那残差连接就是一个并联系统(前馈 + 直通)。从反馈系统的角度看,它提供了一个"零延迟反馈路径",让信号可以不经过任何变换就到达输出,这对梯度传播极其重要。

Q3: "CNN为什么比全连接层更适合图像?"

回答 :三个原因,全部可以用信号处理的语言解释:(1) 局部性 :卷积核只看局部邻域,图像的统计特性是局部的(相邻像素相关);(2) 平移等变性 :同一个物体出现在图像的不同位置,卷积的响应相同------这是时不变性的空间版本;(3) 参数共享:同一个卷积核用于所有位置,参数量从 O(n²) 降到 O(k²),其中 k 是核大小。


本章总结

  • LTI系统 :线性 + 时不变 + 因果 + 稳定
    • ↓ 打破线性性,增加参数化
  • 神经网络 :非线性 + 参数化 + 可训练
    • ↓ 保留部分LTI性质
  • CNN:卷积层(LTI) + 激活函数(非线性) = 平移等变 + 非线性
  • RNN:循环连接(反馈) + 激活函数(非线性) = 因果 + 非线性
  • Transformer:自注意力(全局) + FFN(局部) = 全局建模 + 非线性

下一章预告:卷积是信号处理的灵魂运算,也是CNN的核心。下一章我们深入卷积本身------从连续卷积到离散卷积,从互相关到深度可分离卷积,彻底搞清楚"卷积"这个概念在两个领域中的精确映射。

相关推荐
HackTwoHub1 小时前
轻量化AI渗透武器库|ARTEX自主攻防系统、资产梳理、漏洞挖掘、链路分析全流程智能化落地
人工智能·安全·web安全·网络安全·系统安全·网络攻击模型·安全架构
中电金信1 小时前
WAIC 2026媒体聚焦:中电金信的AI工程化思考与实践
人工智能
冬奇Lab2 小时前
码库知识库系列(03):代码 Embedding 策略——原始代码反而比注释增强更好
人工智能
冬奇Lab2 小时前
开源项目第172期:agentOS — 以库的形式给 AI Agent 一个操作系统,冷启动 92x 更快、内存 47x 更少
人工智能·开源·agent
大橙子打游戏2 小时前
make-goal:把长期 AI 任务从聊天记录里解放出来
人工智能
华盈生物2 小时前
AI+病理:从切片到数据,空间多模态解析肿瘤微环境
人工智能·单细胞测序·空间单细胞蛋白组·单细胞组织原位空间蛋白组学·组织原位空间蛋白组学·超多重蛋白成像·ai+病理
IT_陈寒2 小时前
Vite热更新失效?你可能漏了这个配置
前端·人工智能·后端
禹亮科技3 小时前
制造业100㎡跨国技术评审会议室音视频整体解决方案(亿联+思必驰+讯飞AI落地实践)
人工智能·音视频·视频会议系统集成
2601_955759883 小时前
Claude API Key 交接与离职回收操作指南
人工智能