跟着李沐老师学习深度学习(十六)

继续学习深度学习(十六)

继续理解transformer

对于transformer的理解感觉还是云里雾里的,今天又找了一些视频进行一个梳理。

一个浅解

在B站学习发现评论区真的很不错,在沐神讲transformer论文的评论下,有一个评论特别好,感觉将transformer的核心讲出来了,看完感觉又清晰了不少:

  • 假设输入是一个句子,每个单词是一个token,首先将每个token进行embedding,映射到一个高维向量空间。这个向量仅表示该词的静态含义。

  • 有三个可训练的权重矩阵W_Q、W_K和W_V:

    • 每个token的embedding向量通过与W_Q相乘得到Q ,可以理解为一系列这个token关心的查询问题,比如"你是一个形容词吗?","你是一个动词吗?","你是一种颜色吗?"

    • 每个token的embedding向量通过与W_K相乘得到K ,可以理解为对于这个token的信息描述,或者说对于Q当中的问题的回答,比如"我是一个动词","我是一个形容词","我是一个颜色"等信息。

  • Q*K^T 得到的就是一个大小为n*n的相关性矩阵。具象的理解,这个矩阵相当于每一个token通过K来回答其他token的Q的问题,每个位置上的乘积数值表示一个token基于问题的回答得到的对于另一个token的关注程度

    • 相关性矩阵需要除以 \sqrt{d_k}。原因是当d_k很大的时候,因为两个token的相关性是通过点积得到的,结果会趋向于极大或极小,这会导致softmax函数的结果偏向1和0,进入梯度非常小的区域,影响训练效率。(数值稳定性)
  • 然后,应用softmax函数,转换为总和为1的概率分布,表示每个token对其他token的注意力权重。softmax的结果反映了每个token在当前上下文中对于其他token的关注程度。

    • 带有掩码的注意力:为了不让下文影响上文,将 当前token对下文的token的 Q*K^T 值赋值为-∞,然后在进行softmax回归( -∞变为0 ,最后保证总和还是1)
  • 每个token的embedding向量通过与W_V相乘得到V,这个矩阵可以理解为,如果有一个token B和该token A相关,那么token B该偏移多少得到以这个token A作为上下文的语义。

  • 最后,将注意力权重矩阵与V矩阵相乘,得到每个token在上下文中的表示。这个结果相当于对V矩阵中的值进行加权平均,使每个token的最终表示既保留了它的原始含义,又结合了与其他token的上下文关系。这样,模型能够在当前token的基础上综合其他相关token的信息,得出一个更符合整体语境的表示。

  • 多头注意力机制:在transformer文中,使用了多头注意力进行并行多头计算,以下就是图解,将每个头得到的结果进行相加,就得到了新的嵌入向量,对于输入的内容,能提炼出更高级、更抽象的概念。

BERT网络

NLP里的迁移学习

  • 使用预训练好的模型来抽取词、句子的特征
    • 例如 word2vec(是一种典型的用于词向量表示学习的模型,它通过利用边上的词来预测中间词的方式(Skip-gram 模型)或反之(CBOW 模型)来学习词的分布式表示,将每个词映射到一个低维向量空间中,使得语义上相似的词在向量空间中距离较近)
    • 或者 语言模型(用于学习语言的概率分布,预测一个词序列出现的概率或者根据前文预测下一个词等)
  • 做迁移学习的时候:不更新预训练好的模型
    • 在当时的迁移学习实践中,通常会直接使用预训练好的模型(如 word2vec 或一些简单的语言模型)所得到的特征表示,而不更新这些预训练模型的参数。
  • 需要构建新的网络来抓取新任务需要的信息
    • Word2vec忽略了时序信息(即词在句子中的顺序对于理解句子语义的重要性)
    • 语言模型只看了一个方向,比如只能根据前文来预测后文,而没有同时利用后文信息来理解前文。

在BERT之前这是整个NLP的样子

BERT的动机

  • 基于微调的NLP模型
  • 预训练的模型抽取了足够多的信息(使得抽出来的特征足够好,能抓住足够的语义信息)
  • 新的任务只需要增加一个简单的输出层

BERT架构

  • 只有编码器的Transformer架构
  • 两个版本:
    • Base:#blocks=12, hidden size=768, heads=12,parameters=110M
    • Large:#blocks=24, hidden size=1024, heads=16,#parameters=340M
  • 在大规模数据上训练 > 3B词

与transformer解码器不同之处

  • 对输入的修改

    • 每个样本都是一个句子对
    • 加入额外的片段嵌入
    • 位置编码可学习
  • 预训练任务1:带掩码的语言模型

    • Transfomer的编码器是双向(完形填空),标准语言模型要求单向(预测未来)
    • 带掩码的语言模型每次随机(15%概率)将一些词元换成< mask>,比如句子 "我爱苹果",可能会把 "苹果" 替换为< mask>,变成 "我爱< mask>";模型需要根据被掩码词元周围的上下文信息,来预测这个被掩码的词原本是什么,以此让模型学习到更丰富的上下文语义信息,提升对文本整体语义的理解能力。
    • 因为微调任务中不出现< mask>(减少预训练和微调阶段的差异),在实际操作中,被选中替换的词元并非直接换成< mask>,而是按照一定概率分别处理,比如:
      • 80%概率下,将选中的词元变成
      • 10%概率下换成一个随机词元
      • 10%概率下保持原有的词元
  • 预训练任务2:下一句子预测

    • 预测一个句子对中两个句子是不是相邻
    • 训练样本中:
      • 50%概率选择相邻句子对:< cls>this movieis great< sep>like it < sep>
      • 50%概率选择随机句子对:this movie is great< sep>hello world <sèp>
    • 将< cls>对应的输出放到一个全连接层来预测

总结

  • BERT针对微调设计
  • 基于Transformer的编码器做了如下修改
    • 模型更大,训练数据更多
    • 输入句子对,片段嵌入,可学习的位置编码
    • 训练时使用两个任务 :
      • 带掩码的语言模型
      • 下一个句子预测

扩散模型

这里是跟着B站一个up主学的,感觉很不错。

https://www.bilibili.com/video/BV1xih7ecEMb/?spm_id_from=333.337.search-card.all.click\&vd_source=1b96401f7b3794cd336ed9054c440553

什么是扩散模型?

(如下图所示,一张图片可以通过T步 加噪 (高斯分布)变成一个充满噪声的图片,那么我们如何进行一个反向操作,进行去噪,这就是DDPM做的)

扩散模型可以形象的比喻为:"在我开始工作之前,雕塑已经在大理石块内完成。它已经在那里了我只需要雕刻掉多余的材料。"

正向扩散过程:

其中,正向扩散公式可推导为:

这里说明:我们可以从x_0跳跃式的跳到任意一步。

反向过程

最大似然估计

我们需要拟合每一步的分布:

什么是 q( x_(t-1) | x_t, x_0 )?

因此,我们可以得出:


移除x_0

将前向公式拿过来,将x_0进行代替,可得到:

由上面的公式可以消掉x_0,但是其中ε_t无法确定。

为什么我们不能直接预测x_0? ------ 首先预测一个大概的x_0,但肯定不会那么准确,因此我们每次只预测一点。

训练和采样

与原文对比:

  • 整个训练过程如下所示:

  • 采样过程:

大概先这样,还需要继续学习!

相关推荐
猎人everest3 分钟前
DeepSeek基础之机器学习
人工智能·机器学习·ai
Kai HVZ13 分钟前
《计算机视觉》——图像拼接
人工智能·计算机视觉
楼台的春风25 分钟前
图像金字塔
图像处理·人工智能·opencv·算法·计算机视觉·matlab·嵌入式
yngsqq1 小时前
NTS库学习,找bug中......
java·学习·bug
数学人学c语言1 小时前
记录torch运行的bug
python·深度学习·bug
UQI-LIUWJ1 小时前
论文笔记:Scaling Sentence Embeddings with Large Language Models
论文阅读·人工智能·语言模型
五味香2 小时前
C语言学习,希尔排序
android·c语言·开发语言·数据结构·学习·算法·排序算法
阿正的梦工坊2 小时前
PyTorch torch.logsumexp 详解:数学原理、应用场景与性能优化(中英双语)
人工智能·pytorch·python
iracole3 小时前
深度学习训练camp:第R4周: Pytorch实现:LSTM-火灾温度预测
人工智能·pytorch·python·深度学习·lstm