3.0 【补充】深度学习相关基础速览
本节定位说明:本节不是一门迷你深度学习课程,而是一份专门为本章"按需配备"的词汇表与直觉手册。所有内容都严格限定在第三章直接用到的概念范围之内。读者不必在这里追求完整的深度学习知识体系——带着本节的基本印象进入 3.1 节,遇到不熟悉的词汇再回来查阅,是完全合理的学习节奏。
进入第三章之前,我们需要先做一次"装备检查"。
前两章的工具是线性代数和统计信号处理——特征值分解、协方差矩阵、最优滤波器。这些工具背后的逻辑非常清晰:先建立物理模型,再用数学推导出算法,每一步都有明确的来由。而第三章将要介绍的方法,底层逻辑有所不同:不是从物理模型推导算法,而是用数据训练网络,让网络自己学习输入到输出的映射关系。
这种"让数据说话"的范式有一套自己的语言和工具,就是深度学习。如果你之前从未接触过,也没有关系——本节会用最少的篇幅把第三章必须用到的核心概念讲清楚,帮你建立足够的直觉,顺利读完后续内容。
3.0.1 神经网络在做什么:前向传播
要理解深度学习,先要理解一件事:神经网络本质上是一个带参数的函数。
给它一个输入 (比如一个向量或矩阵),它经过一系列数学操作之后,输出一个结果 (比如一个角度、一组概率值)。这个从输入到输出的计算过程,称为前向传播(forward propagation)。
最简单的情形是这样的。设输入向量为 ,网络有一个"层"(layer),包含一个权重矩阵 和一个偏置向量 ,则该层的输出为:
其中 是一个激活函数(activation function),它的作用是引入非线性——如果没有激活函数,不管堆叠多少层,整个网络等价于一个线性变换,表达能力非常有限。常见的激活函数有:
- ReLU:,负数归零,正数保留,计算简单,是目前最常用的隐藏层激活函数;
- Sigmoid:,将任意实数压缩到 区间,适合输出"概率";
- Tanh:,将输出限制在 区间,第三章的回归方法会用到它来归一化预测的角度值。
把多个这样的层串联起来,就构成了多层网络。每一层的输出作为下一层的输入,信息逐层变换,最终流向输出层产生预测结果。这就是前向传播的全部含义:信息从输入端向输出端单向流动,经历一系列线性变换与非线性激活。
3.0.2 训练是怎么回事:损失函数与梯度下降
网络有了结构,但参数 和 从哪里来?答案是从数据中学习——这个过程称为训练(training)。
训练的逻辑很简单,分三步:
第一步,定义损失函数(loss function)。 损失函数衡量网络的预测值 与真实标签 之间的差距。差距越大,损失越高;差距越小,损失越低。训练的目标,就是调整参数让损失尽可能小。在 DOA 估计中,常见的损失函数有两类:
- 均方误差(MSE),用于回归任务:
适合直接预测角度数值的场景,惩罚预测值与真实角度之间的差距。
- 交叉熵(Cross-Entropy),用于分类任务。单信源用 Softmax + 交叉熵:
其中 是第 个样本在第 个类别上的真实标签(0 或 1), 是网络预测的概率。多信源改用 Sigmoid + 二元交叉熵(BCE),细节在 3.4 节展开。
第二步,反向传播(backpropagation)计算梯度。 损失函数关于每个参数的偏导数,就是梯度——它告诉我们"调整哪个方向能让损失下降"。反向传播是高效计算这些梯度的算法,本节不展开推导,只需知道:这个过程由深度学习框架(PyTorch、TensorFlow)自动完成,写代码时只需调用 loss.backward() 即可。
第三步,用优化器更新参数。 最基础的方式是随机梯度下降(SGD):沿梯度的反方向,小步迈进。实践中更常用 Adam 优化器,它能自适应调节每个参数的学习步长,收敛更稳。
这三步循环往复——前向传播算损失、反向传播算梯度、优化器更新参数——每经历一轮全部训练数据,称为一个 epoch。通常需要数十到数百个 epoch,网络才能收敛到一个较好的状态。
用一张示意图来概括这个流程:
训练数据 (x, y)
│
▼
前向传播 ──→ 预测值 ŷ
│ │
│ 损失函数 L(ŷ, y)
│ │
└──── 反向传播 ←──┘
│
梯度 ∂L/∂W
│
优化器更新 W ← W - lr·∂L/∂W
│
下一轮迭代
训练完成之后,把训练集以外的新数据输入网络,只执行前向传播产生预测,称为推理(inference)。这时参数已经固定,网络不再学习。
3.0.3 四种网络结构速览
第三章及后续复现实验将用到四种典型的网络结构,这里分别给出一段话的直觉介绍,不做深入推导。
MLP:多层感知机
多层感知机(Multilayer Perceptron,MLP)是最基础的神经网络形式,由多个全连接层(fully connected layer)串联而成。所谓"全连接",是指上一层的每个神经元都与下一层的每个神经元相连,没有例外。
MLP 的输入是一个向量,输出也是一个向量。它的特点是结构简单、参数直接,适合处理"把特征向量映射到预测值"这类任务。在 DOA 估计中,一个典型的 MLP 做法是:把协方差矩阵的实部和虚部展开成一个长向量作为输入,通过若干全连接层,最终输出角度预测或分类概率。
MLP 的局限是:它把输入当成一个没有内部结构的平铺向量,无法显式利用输入数据的空间排列关系。
CNN:卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN)的核心是卷积层(convolutional layer)。卷积层用一个小尺寸的滤波器(kernel)在输入数据上滑动扫描,提取局部特征——可以理解为一种"局部模式检测器"。
CNN 天然适合处理有空间结构的数据,例如图像(像素之间有相邻关系)。在 DOA 估计中,协方差矩阵是一个 的二维矩阵,具有明确的结构——行列坐标对应不同阵元对之间的相关性,相邻阵元对的相关性在空间上是连续变化的。把协方差矩阵当作一张"图像"输入 CNN,卷积层就可以自动提取矩阵中的局部相关模式,比 MLP 更能利用数据的内在结构。
一个标准的 CNN 模块通常是:卷积层 → 批归一化(Batch Normalization) → 激活函数(ReLU) → 池化层(可选)。多个这样的模块叠加之后,再接全连接层输出最终预测结果。
深层 CNN 在训练时可能遇到梯度消失问题——网络层数越多,梯度在反向传播过程中越容易衰减至零,导致前面的层几乎无法更新。**残差网络(ResNet)**通过引入"跳跃连接"(skip connection)解决了这一问题:将某一层的输入 直接加到该模块输出 上,得到 ,让梯度可以绕过卷积层直接回传。这个设计使得网络可以堆叠到数十乃至数百层而不退化。第四章将要复现的 IQ-ResNet 就是基于 ResNet18 改造的 DOA 估计网络,以原始 IQ 数据为输入,利用残差结构提取阵列快拍中的方向特征。
RNN:循环神经网络
循环神经网络(Recurrent Neural Network,RNN)是专门为序列数据设计的网络结构。它的核心想法是:处理序列中第 步的输入时,不仅利用当前输入 ,还把上一步产生的隐状态(hidden state) 一并输入,产生新的隐状态 :
这里 可以理解为网络到第 步为止积累的"记忆",它会被带入下一步继续参与计算。整个序列处理完毕后,以最终隐状态(或所有步骤隐状态的汇总)作为后续全连接层的输入,产生预测结果。
RNN 在 DOA 估计中的自然对应是:把阵列各快拍按时间顺序逐步送入网络,让隐状态逐步积累快拍间的统计信息,最终用于方向预测。这种方式不需要事先计算协方差矩阵,直接从时序 IQ 数据中学习,对快拍数较少的场景有一定优势。
实践中,基础 RNN 存在"长程梯度消失"的问题——序列较长时,早期快拍的信息难以保留到最终输出。LSTM(Long Short-Term Memory,长短期记忆网络)通过引入门控机制(输入门、遗忘门、输出门)显式控制信息的保留与遗忘,是目前最常用的 RNN 变体。第 3.7 节的最小可运行示例将给出一个基于 LSTM 的 DOA 估计代码,与 CNN 版本并排对比。
Transformer:自注意力网络
Transformer 是近年来深度学习领域影响最大的结构,最初为自然语言处理设计,现已广泛应用于信号处理、计算机视觉等领域。它的核心机制是自注意力(self-attention):对于输入序列中的每个元素,网络会计算它与序列中所有其他元素的相关性权重,并以此加权聚合信息。
直觉上,自注意力做的事情是:"我在处理这个位置的特征时,序列中哪些其他位置的信息对我最有帮助?"它能捕捉序列内任意两个位置之间的长程依赖关系,而不受距离限制。相比之下,CNN 的卷积核只关注局部邻域,RNN 虽能建模序列依赖但受梯度消失所限,Transformer 则在原理上没有这两个约束。
在 DOA 估计中,阵列的多个阵元可以被视为一个空间序列,Transformer 的自注意力机制能够建模任意两个阵元之间的空间相关性。第 3.9 节的拓展内容中会对此有更多讨论。
3.0.4 关键词速查表
为了方便在阅读后续各节时随时查阅,这里把本章涉及的核心术语集中整理如下:
| 术语 | 简要含义 |
|---|---|
| 前向传播(forward propagation) | 输入数据经过网络各层,逐层计算直到输出预测结果的过程 |
| 损失函数(loss function) | 衡量预测值与真实标签差距的函数,训练的目标是最小化它 |
| MSE(均方误差) | 回归任务常用损失函数,惩罚预测值与真实值的平方差 |
| 交叉熵 / BCE | 分类任务常用损失函数,单信源用 CE,多信源用 BCE |
| epoch | 训练数据被完整遍历一轮称为一个 epoch |
| batch(批次) | 每次参数更新使用的训练样本子集,大小称为 batch size |
| 全连接层(fully connected / linear layer) | 每个输入神经元与每个输出神经元均相连,MLP 的基本单元 |
| 卷积层(convolutional layer) | 用小尺寸滤波器扫描输入提取局部特征,CNN 的基本单元 |
| 残差连接(skip connection) | ResNet 的核心设计,将输入绕过若干层直接加到输出上,缓解梯度消失 |
| ResNet | 带残差连接的深层 CNN,可堆叠更多层而不退化,第四章复现的核心结构 |
| 隐状态(hidden state) | RNN 中逐步积累的"记忆"向量,携带序列历史信息传入下一时间步 |
| LSTM | 带门控机制的 RNN 变体,能更有效地保留长程序列信息 |
| ReLU | 激活函数,,隐藏层最常用 |
| Sigmoid | 激活函数,输出值域 ,多标签分类输出层常用 |
| Tanh | 激活函数,输出值域 ,角度回归归一化常用 |
| Softmax | 将一组实数转换为概率分布(和为 1),单标签分类输出层常用 |
| 自注意力(self-attention) | Transformer 的核心机制,建模序列内任意两个位置之间的相关性 |
| MLP | 多层感知机,由全连接层叠加构成的基础网络结构 |
| CNN | 卷积神经网络,擅长提取有空间结构数据的局部特征 |
| RNN / LSTM | 循环神经网络及其门控变体,擅长处理时序或序列数据 |
| Transformer | 基于自注意力的网络,擅长捕捉长程依赖关系 |
| 训练集 / 验证集 / 测试集 | 训练用于调整参数,验证集用于调整超参数,测试集用于最终性能评估 |
| 推理(inference) | 模型训练完成后,对新数据只做前向传播产生预测的过程 |
| 过拟合(overfitting) | 网络在训练集上表现好,但在新数据上性能差,说明泛化能力不足 |
3.0.5 一点心理建设
看到这些新术语,部分同学可能会感到有点茫然,这完全正常。深度学习的背景知识如果系统学习,需要一整门课程;但我们的目标不是"精通深度学习",而是"能读懂和动手做 DOA 估计的深度学习实验"。
有一个好消息:第三章的代码实现大量依托 PyTorch 框架,它已经把前向传播、反向传播、优化器等细节封装得非常完善。你只需要知道"网络在做什么",而不必自己去实现"网络是怎么算的"。本节四种结构的认知准备,加上第三章后续各节对任务和数据的详细讲解,就足以支撑你顺利完成第三章的全部实验——3.7 节将给出基于 CNN 和 RNN(LSTM)的两个最小可运行示例,帮你把这里的抽象概念落地成可以跑通的代码。
带着这份装备,让我们正式进入第三章的正文——从"为什么需要深度学习来做 DOA 估计"开始。