李宏毅——self-attention Transformer

视频链接

Input:一组有意义的向量

一个社交网络也可以看作一组向量

一个分子也能当做向量

output有三种

1、每个向量一个label

比如

图1:一个句子的每个单词是什么类型(名词、动词)

图2:一串声音讯号里面每一段是哪一个音标

图3:每个结点有什么特性,是否会买商品

2、整个序列一个label

比如

图1:判断该评价是正面还是负面

图2:根据语音判断语者

图3:给一个分子预测这个分子的亲水性怎么样

3、不知道应该输出多少label,机器自己决定(seq2seq)

比如翻译就是

Sequence Labeling(output中的第一种)

单一的输入一个单词输出一个label会使两个saw输出同样的结果,所以为了使效果更好还要输入上一个单词和下一个单词

FC是全连接神经网络(Fully Connected Neural Network)

Self-attention

怎么从a1,a2,a3...得到b1,b2,b3...

发现序列的相关性

计算来确定相关性:两种方法dot-product(常用),addictive

第一步:计算

第二步:计算softmax/ReLU

第三步:根据关联性提取sequence信息

=...

推广到每一个

先计算q,k,v

再计算

再计算b

I:输入,O:输出,A:上面的b,又称注意力矩阵,,是通过学习得来的

多头注意力机制------Multi-head Self-attention

位置编码Positional Encoding

self-attention没有位置资讯

每一个位置有一个独特的位置向量e

几种常见的产生方式

(a)Sinusoidal (b)Position embedding (c)FLOATER (d)RNN

应用

nlp上:比如transformer,BERT

语音上:Truncated Self-attention

图像上,因为图像也能看作vector

Self-attention v.s. CNN

1、CNN是简化版的self-attention

self-attention是带有自学习rceptive field的CNN

2、CNN需要的数据更少

相关论文:

On the Relationship between Self-Attention and Convolutional Layers文章链接

Self-attention和RNN

区域 含义
RNN 每一时间步的隐藏状态 h_t 必须等 h_{t-1} 算完才能继续 → 无法并行(nonparallel)
Self-attention 所有位置一次性看到全局 → 可并行(parallel)
优势 Self-attention 胜出:既能像 RNN 一样"考虑历史"(memory),又能并行训练
论文 给出理论支撑:把 softmax 注意力换成 线性核函数 后,Transformer 的每一步输出可以写成 只依赖前一步隐藏状态的递归形式 ,即"Fast Autoregressive Transformer with Linear Attention "------它 形式上就是 RNN,却可并行预计算

self-attention for Graph:GNN?

序列到序列Seq2seq

例子

语音->语言

机器翻译(一种语言->另一种语言)

一种语音->另一种语言

Seq2seq for 文法剖析

Seq2seq for 多标签分类

Seq2seq for 目标识别

如何实现seq2seq

主要是Encoder和Decoder

Encoder:

self-attention和CNN、RNN都可以

有好多块

每一块:self-attention+FFN

1、self-attetion

2、残差连接(residual):input和output加起来

3、layer Normalization:对同一个feature里面不同的dimenstion计算均值mean和standard deviation

4、FFN

5、FFN的输入和FFN的输出残差连接

6、normalization

5和6即Add&Norm

Decoder:

输出当输入容易产生Error Propagation 误差传播,一步错、步步错

masked self-attention:未来的位置不能用

问题:不知道输出的长度?所以输出需要能产生end符号

AT VS NAT

AT是串行产生的

NAT是并行产生的

AT的输入有上一个输出,有的是BEGIN

NAT全是BEGIN

NAT的end是另一个预测得出的输出长度,是可控的

encoder的输出如何变成decoder的输入(又称cross attention)

encoder输出的a1,a2,a3...产生k1,v1,k2,v2,k3,v4,self-attention对应的q,k1q点积产生1,1*v1...产生最后的v

1、输入begin

2、输入机

encoder有很多层,decoder也有很多层,不用一定每一层decoder的输入都是最后一层decoder的输出

训练training

训练时会知道正确答案,用正确答案计算cross entropy(交叉熵)

而且Decoder输入的时候不是输入自己产生的输出,而是正确的答案

机器需要复制的能力

guided attention(引导注意力)

Guided Attention(引导注意力)是一类"训练辅助"技巧,核心思想是:

在训练阶段用外部知识或先验分布去"告诉"模型的注意力矩阵应该长成什么样,从而加快收敛、提升鲁棒性,或让模型学到人类可解释的对齐方式。

1. 为什么需要它

标准注意力完全由数据驱动,可能出现

  • 收敛慢、需要大量数据才能学到合理的对齐;

  • 对齐杂乱,解释性差;

  • 在超长序列或稀有样本上把注意力放到无关区域。

Guided Attention 通过额外损失或掩码把"先验"注入注意力,让模型少走弯路。

2. 典型先验与具体做法
场景 先验形状 实现方式 代表文献
TTS、G2P、语音识别 对角带状 对远离对角线的注意力权重加惩罚,loss∝ ∑ᵢⱼ wᵢⱼ·(i−j)² SpeechBrain 的 GuidedAttentionLoss
上下文偏置 ASR 短语-帧/Token 对齐 额外 GA-loss 迫使 cross-attn 把偏置短语与对应帧对齐,提升稀有词识别 2024 年 ASR 研究
语码切换 ASR 语言身份 先挑出"表达语言身份"的头,再约束这些头只关注对应语言区域 Attention-Guided Adaptation
心电图分类 医学波形位置 用 R 峰检测自动产生"应关注区间"的 soft-mask,再与空间注意力做加权 KL 惩罚 2025 年 ECG 论文
通用 NLP 人工标注或规则热度图 把外部热度图作为 teacher,用 MSE/KL 约束 student 的注意力分布 GAM 方法
3. 数学抽象

设模型产生的注意力矩阵为 A∈ℝ^(T×S),先验mask或目标分布为 G,则常用辅助损失:

  • **L1** = ∑ᵢⱼ wᵢⱼ·Aᵢⱼ ,远离期望区域权重越大 wᵢⱼ 越大;

  • **L2** = KL(A‖G) 或 MSE(A,G),直接把 A 拉向先验分布;

总损失 = 原任务损失 + λ·L_guided,λ 随训练逐步减小(退火)。

4. 效果与优势
  • 训练速度↑:GAM 报道 NLP 任务训练时间缩短 5--9% 。

  • 识别精度↑:ASR 上下文偏置在 LibriSpeech 稀有词 WER 再降 19.2% 。

  • 解释性↑:ECG 模型可直观看到注意力是否聚焦在 P、T 波等医学关键段 。

  • 零额外参数:多数方法只改损失,不影响推断结构 。

5. 与相关概念区分
  • Attention Constraint / Mask:硬遮罩,推理期也生效;Guided Attention 多为软约束,只在训练期影响梯度。

  • Knowledge Distillation:用另一个模型当 teacher;Guided Attention 用的是人工规则或领域知识当 teacher。

  • Self-Supervised Pretext:设计前置任务学对齐;Guided Attention 直接把"理想对齐"作为监督信号。

一句话总结

Guided Attention = 先验地图 + 辅助损失,让注意力矩阵在训练时就"走对方向",从而学得更快、更准、更易解释。

红色曲线代表attention的分数,越高代表值越大,代表越关注

第一行是想象中attention的分数

第二行是不理想的attention,先看后面,再看前面...

Beam Search束搜索

红色路线是利用贪心算法,一直选当前最好的

绿色才是我们期望的

Beam Search(集束搜索)是一种**"受限的贪心解码"** 方法,用来在生成模型 (如机器翻译、语音识别、TTS、对话系统)里快速找一条(或几条)近似最优的输出序列 ,而不是一口气搜完所有可能(指数爆炸)。

1. 核心思想一句话

"每一步只保留最好的 k 个候选,其余剪掉"

k 叫 beam size(集束宽度),通常 3~10。

2. 工作流程(以机器翻译为例)

输入:我爱你

目标:I love you

步骤 当前 k 个候选(部分序列) 打分(log-prob)
1 I -0.8
You -1.2
We -1.5
2 I love -1.5
I like -1.7
You -1.2 → 被剪
3 I love you -2.1
I like you -2.4
3. 关键概念
  • score :一般用累积对数概率(加上长度惩罚,防止过短)。

  • beam size = 1退化成贪心搜索(greedy)。

  • beam size = ∞退化成穷举搜索(不可行)。

  • 剪枝:每步只扩 k×V 个节点 → 保留 top-k,其余扔掉(V 是词表大小)

4. 优点 vs 缺点

比较需要创造力的如语音合成时beam search就没有优势

优点 缺点
比贪心更准,比穷举快 内存随 k 线性增长
容易实现,可并行 可能漏掉全局最优(早剪错支)
可输出多条候选(k best)供重排序 重复、覆盖问题需额外处理(如 coverage 惩罚)
5. 一段极简伪代码
复制代码
beam = [(<s>, 0)]          # (序列, 累积log-prob)
for t in range(max_len):
    next_beam = []
    for seq, score in beam:
        for w in vocab:
            new_seq = seq + [w]
            new_score = score + logP(w | new_seq, encoder_ctx)
            next_beam.append((new_seq, new_score))
    next_beam.sort(key=lambda x: x[1], reverse=True)
    beam = next_beam[:k]   # 只留 top-k
return beam[0]             # 最优序列

评估

训练的时候是minimize cross entropy

但是评估是maximize BLEU score

测试的时候会产生一步错、步步错

解决方法:Scheduled Sampling

相关推荐
Coovally AI模型快速验证1 小时前
MAR-YOLOv9:革新农业检测,YOLOv9的“低调”逆袭
人工智能·神经网络·yolo·计算机视觉·cnn
云和数据.ChenGuang1 小时前
AI运维工程师技术教程之Linux环境下部署Deepseek
linux·运维·人工智能
cvyoutian1 小时前
解决 PyTorch 大型 wheel 下载慢、超时和反复重下的问题
人工智能·pytorch·python
oliveray1 小时前
解决开放世界目标检测问题——Grounding DINO
人工智能·目标检测·计算机视觉
子非鱼9211 小时前
3 传统序列模型——RNN
人工智能·rnn·深度学习
万俟淋曦1 小时前
【论文速递】2025年第33周(Aug-10-16)(Robotics/Embodied AI/LLM)
人工智能·深度学习·ai·机器人·论文·robotics·具身智能
卢卡上学1 小时前
【AI工具】Coze智能体工作流:5分钟制作10个10w+治愈视频,无需拍摄剪辑
人工智能·音视频·ai视频·ai智能体
共绩算力2 小时前
Maya多模态模型支持8国语言
人工智能·maya·共绩算力
乾元2 小时前
SDN 与 AI 协同:控制面策略自动化与策略一致性校验
运维·网络·人工智能·网络协议·华为·系统架构·ansible