参考: 吴恩达老师深度学习课程 https://www.bilibili.com/video/BV1FT4y1E74V
神经网络
input-> 神经元 -> output
一个神经元是一种对输入值进行操作的算法,即从input到output的映射函数
如: ReLU 线性修正单元 公式:f(x) = max(0, x) 即限制x非负 非常简单但是非常常用
一个输入向量(这个输入包含多个维度的值)得到一个输出时中间会存在多次input-> 神经元 -> output这一过程且互相首尾相接形成网络,这就是神经网络
非结构化数据
文字、图像、音频等不能直接被计算机所理解的数据为非结构化的数据,对应的,数据库表、excel表格等具有准确的数据结构的数据为结构化数据。
而对于结构固定但包含非结构化数据的数据如email、JSON等为半结构化数据
对于非结构数据,要使其变为能够直接运算的数据要进行嵌入、提取特征、池化等操作。
神经网络的发展
神经网络今年的发展得益于互联网的普及使收集海量数据变得容易。
对于一个足够大的神经网络,其表现与数据的数量和质量成正比。
只有在大数据领域,才能明显地将神经网络的表现区分开
卷积神经网络(CNN)
一种神经网络,常用于处理图像
卷积层 激活函数层 池化层 全连接层
提取特征-> 引入非线性 -> 降维抽象 -> 分类决策
图神经网络(GNN)
图神经网络是一种专门处理图结构数据的深度学习架构。它直接在图上操作,通过消息传递机制聚合邻居信息,学习节点、边或全图的表示。
GNN 核心思想:消息传递
这是 GNN 最核心、最统一的范式。每一层 GNN 都执行三个步骤:
对每个节点 v:
1. 聚合:从邻居收集信息
2. 更新:结合自身信息更新表示
3. 传播:将更新后的信息传递给下一层
循环神经网络(RNN)
专门处理序列数据,如音频(以时间排序) 文本(单词序列)视频 (图像帧)
所处理对象具有前后依赖和长度可变两个特点
前向传播公式
对于一个时间步 t:
更新隐藏状态:h_t = activation(W_{hh} * h_{t-1} + W_{xh} * x_t + b_h)
W_{hh}: 隐藏状态到隐藏状态的权重矩阵。
W_{xh}: 输入到隐藏状态的权重矩阵。
h_{t-1}: 上一个时间步的隐藏状态(初始 h_0 通常为0)。
x_t: 当前时间步的输入。
activation: 通常使用 tanh 或 ReLU。tanh 能将输出压到 [-1, 1] 之间,有助于稳定梯度流。
计算输出:y_t = W_{hy} * h_t + b_y
W_{hy}: 隐藏状态到输出的权重矩阵。
注意:所有时间步共享同一套参数 (W_{hh}, W_{xh}, W_{hy}, b_h, b_y)。这是RNN参数共享的关键,使其能处理任意长度的序列。
RNN由于其计算方式,存在难以并行(需要前向传播)、长程依赖(容易梯度爆炸或消失)等问题,在很多领域被Transformer取代
Transformer
Transformer 是一种完全基于 注意力机制 的深度学习模型架构,摒弃了传统的循环(RNN)和卷积(CNN)结构。它的核心创新在于:
并行化计算:可以同时处理序列中的所有位置
全局依赖建模:任何两个位置之间的依赖关系都可以直接建立
可扩展性:容易扩展到超大规模模型
Transformer完整架构
输入 → 输入嵌入 → 位置编码 →
编码器堆叠(N×):
└─ 多头自注意力 → Add & Norm
└─ 前馈网络 → Add & Norm →
解码器堆叠(N×):
└─ 掩码多头自注意力 → Add & Norm
└─ 编码器-解码器注意力 → Add & Norm
└─ 前馈网络 → Add & Norm →
线性层 → Softmax → 输出
架构分步详解
- 输入 → 输入嵌入
输入:对于编码器,输入是源语言序列(如一句英文);对于解码器,输入是目标语言序列的历史部分(在训练时,是右移一位的目标序列,并使用了掩码)。
输入嵌入:通过一个嵌入查找表,将每个输入词(或子词,如 BPE 词元)转换成一个固定维度的稠密向量 d_model。这个向量可以捕捉词的语义信息。
- 位置编码
问题:Transformer 的注意力机制本身是“无序”的,它无法感知词在序列中的前后顺序。而词序对于理解语言至关重要。
解决方案:位置编码。生成一个与输入嵌入相同维度 d_model 的向量,其中包含了词在序列中绝对/相对位置的信息。
方式:最经典的方法是使用不同频率的正弦和余弦函数来计算位置向量,然后直接加到输入嵌入向量上。这样,模型在处理每个词时,就能同时获得其语义信息和位置信息。
- 编码器堆叠
整个编码器由 N 个(通常 N=6)完全相同的层堆叠而成。每一层包含两个核心子层:
3.1 多头自注意力
“自注意力”:让序列中的每一个词去关注序列中所有其他词(包括它自己),并根据相关性为这些词分配不同的权重。这允许模型根据上下文动态地为每个词生成新的、包含全局信息的表示。
“多头”:将注意力机制并行执行多次(例如8次,即8个头)。每个“头”在不同的表示子空间里学习关注不同的方面(例如一个头关注语法结构,另一个头关注指代关系)。最后将所有头的输出拼接起来,再通过一个线性层映射回 d_model 维度。
目的:计算输入序列内部的依赖关系。
3.2 前馈网络
一个简单的全连接神经网络,通常包含一个或两个线性变换和一个 ReLU/GELU 激活函数。它对序列中的每个位置独立地、相同地进行变换。
目的:对自注意力层的输出进行非线性变换和特征提炼。
Add & Norm
Add:即残差连接。将子层(如自注意力)的输入直接加到它的输出上(输出 = 子层(输入) + 输入)。这可以有效缓解深层网络中的梯度消失问题,帮助模型训练得更深。
Norm:即层归一化。对相加后的结果进行归一化(通常使用 LayerNorm),使其均值为0,方差为1,稳定训练过程。
模式:输出 = LayerNorm(子层(输入) + 输入)。这个模式在每个子层后都出现,是 Transformer 稳定训练的关键。
- 解码器堆叠
解码器也由 N 个相同的层堆叠而成。每一层包含三个核心子层,且结构比编码器更复杂,因为它需要“解码”出目标序列。
4.1 掩码多头自注意力
这是解码器特有的。与编码器的自注意力类似,但增加了掩码。在训练时,为了确保解码器在预测第 i 个位置时,只能看到第 i 个位置之前的信息(防止“偷看”未来的答案),会将未来位置的注意力权重设置为负无穷(经过 Softmax 后变为 0)。
目的:学习目标序列内部的依赖关系(即语言模型)。
4.2 编码器-解码器注意力
这是连接编码器和解码器的桥梁。
Query 来自解码器上一层的输出。
Key 和 Value 来自编码器最后一层的输出。
这个过程允许解码器的每个位置去关注输入序列的任何位置,从而将源语言信息“对齐”到目标语言的生成过程中。这是机器翻译中“对齐”概念的体现。
目的:建立输入序列与输出序列之间的依赖关系。
4.3 前馈网络
与编码器中的前馈网络功能完全相同。
Add & Norm
同样,在每个子层后都应用残差连接和层归一化。
- 线性层 → Softmax → 输出
线性层:将解码器最后一层输出的向量(维度 d_model)映射到一个非常庞大的向量,其维度等于目标语言的词汇表大小 V。
Softmax:将这个 V 维向量转换为一个概率分布,表示下一个词是词汇表中每个词的概率。
输出:选择概率最高的词(贪婪搜索)或通过束搜索等方法,作为当前时间步的预测输出。然后将这个预测词作为下一步解码器的输入,如此循环,直到生成序列结束符。
信息流总结
编码端:输入序列经过嵌入和位置编码后,通过多层自注意力提取源语言内部的复杂特征和上下文信息,最终输出一个富含源语言信息的“上下文矩阵”。
解码端:
首先,通过掩码自注意力回顾已生成的目标序列。
然后,通过交叉注意力查询来自编码器的最相关信息。
最后,基于这两部分信息,逐词预测输出序列。
Transformer 长程依赖建模能力强,但是计算复杂且需要大量数据
多模态
通过Hybrid神经网络将多种输入方式融合后处理(或是分别处理再融合)
此方悬停