简单理解注意力机制与实现

在学习注意力机制的过程中,我发现像我这样的麻瓜就不配看论文去理解这个东西

后面找到了源码,试图从实现看出一些逻辑,发现也不是那么友好。毕竟,麻瓜精通算法也就不是麻瓜了。

万幸,我后来磕磕绊绊的从论文,搜索引擎和源码逐渐的理解他。

论文链接:Attention Is All You Need.pdf (arxiv.org)

1. 初步了解注意力机制

注意力机制(Attention Mechanism)是近年来在深度学习领域取得显著成果的重要技术之一。

其核心思想是在模型的处理过程中,对输入的不同部分分配不同的权重,从而使模型能够更加关注与当前任务相关的信息。这一机制的引入在自然语言处理、计算机视觉等领域都取得了显著的性能提升,为模型的发展提供了强大的支持。

2. 注意力机制发展的背景

传统的循环神经网络模型在处理序列数据时往往面临着信息丢失和模糊的问题。随着输入序列的增加,模型越来越难有效地捕捉到关键信息,导致性能下降。

为了解决这一问题,注意力机制应运而生。注意力机制可以通过对输入序列中的不同部分分配不同的注意力权重,从而有效地解决这个问题。

最早的注意力机制出现在自然语言处理的机器翻译任务中,通过对齐源语言和目标语言的词语,模型能够更灵活地学习语言间的对应关系,从而提高翻译质量。

3. 注意力机制的架构

注意力机制的基本架构包括查询(Query)、键(Key)和值(Value)的组合。也就是常说的Q、K、V。

在处理输入序列时,模型通过计算查询与键之间的关联度,然后利用这些关联度为每个值分配权重。这些权重决定了模型在计算输出时对输入的关注程度,使得模型能够更有针对性地选择信息。

image.png

最核心的就是这个公式,但是这个公式确实不太容易理解。下面结合图像来走一遍注意力机制的计算流程。

其实这个公式,就是三个变量,Q、K、V。所以接下来我们会从Q、K、V的角度逐步理解这个公式。

1. 求出Q、K、V

看论文的时候,我很难理解这一点。

Q、K、V到底都是个啥?他们怎么出来的?怎么定义的他们的含义是啥子?作用是啥?

一波激情五连问,把搜索引擎都给干冒烟了。

最后功夫不负有心人,终于在实现代码中看到了Q、K、V的实现,才逐渐理解了。

image.png

模型中我们会输入数据X,不论是原始数据,时序数据,还是CV的像素矩阵,还是NLP的语义向量,他们都会变成一个数据矩阵的形式。如上图,左半边。

Q、K、V就是通过X过一遍线性层liner计算出来的。

过程非常简单,但是这个含义不简单。

Q、K、V经过的liner层的权重是可学习的,随着训练不断优化调整的,所以Q、K、V也会逐渐趋向我们需要的样子。

2. Q、K、V的用途

为什么要给这个三个变量起这样的名字,查询(Query)、键(Key)和值(Value)。

论文中大致含义是这样的,通过将Q,k相乘,得到注意力得分。

相乘就是非常简单的相乘,然后按列求和,如下代码。

正常来说,是三维矩阵,也不会是torch.mm而是torch.bmm,而且一般矩阵维度相同。但是为了方便理解,就这样来做了。

python
复制代码
q=torch.Tensor([[[3,4],[1,2]],[[3,4],[1,2]],[[3,4],[1,2]]]) # 3*2*2
k=torch.Tensor([[[1,2],[3,4]],[[1,2],[3,4]],[[3,4],[1,2]]]) # 3*2*2
torch.bmm(a,b) # 3*2*2

image.png

这个函数所做的一个事情就是后面剩下的两维对应相乘,由于第一维是3所以要做三次矩阵相乘运算得到3个矩阵,然后再拼接起来,又是322。

这一步操作把我整的很迷惑,为什么相乘,目的是什么,结果为什么能作为权重?

在这里我的理解是,如果没有Q和K,X只是一个简单的iner线性层得到V,这样的权重设置的信息含量太低了,完全就是随机生成,不断拟合而已。

而Q和K都是能够通过学习不断调整的,而且Q和K他们内部都包含了X本身的信息,通过一个比较复杂的运算得到权重,其信息含量会更高。而且Q和K也是通过参考自己不断训练调整得到的,能够学习到的信息更多。权重设置会更合理。

我已经提前声明了,我是个麻瓜,毕竟我连矩阵运算都不太会了。所以这样的理解,简单粗暴,不需要深究公式含义就比较容易理解了。

image.png

注意:这里是二维矩阵使用mm方法,三维矩阵才会使用bmm方法。

3. W*V 最终加权和

为了梯度的稳定,注意力机制后续使用了score归一化。

而且也对对score使用softmax激活函数,使其拟合能力更强。

image.png

  1. W点乘Value值 ,得到加权的每个输入向量的评分
  2. 然后相加之后得到最终的输出结果

这里的理解就比较容易了,加权和嘛

4. 注意力机制的核心实现

python
复制代码
# Self-Attention 机制的实现
class Attention(nn.Module):
    # input x : batch_size * seq_len * input_dim
    # q : batch_size * input_dim * dim_k
    # k : batch_size * input_dim * dim_k
    # v : batch_size * input_dim * dim_v
    def __init__(self, input_dim, dim_k, dim_v):
        super(Discriminator, self).__init__()
        self.q = nn.Linear(input_dim, dim_k)
        self.k = nn.Linear(input_dim, dim_k)
        self.v = nn.Linear(input_dim, dim_v)
        self._norm_fact = 1 / sqrt(dim_k)
        
    def forward(self, x, h):

        Q = self.q(x)  # Q: batch_size * seq_len * dim_k
        K = self.k(x)  # K: batch_size * seq_len * dim_k
        V = self.v(x)  # V: batch_size * seq_len * dim_v

        attention = nn.Softmax(dim=-1)(torch.bmm(Q, K.permute(0, 2, 1))) * self._norm_fact  # Q * K.T() # batch_size * seq_len * seq_len

        output_temp = torch.bmm(attention, V)  # Q * K.T() * V # batch_size * seq_len * dim_v
        output=nn.Sigmoid()(output_temp)
        # print("output",output.shape)

        return output

在深度学习中,注意力机制的应用有多种形式,例如自注意力机制(Self-Attention)和多头注意力机制(Multi-Head Attention)。

以上的实现就是自注意力机制,多头注意力机制就是组合多个自注意力头来更全面地捕捉输入序列的信息。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取==🆓

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值