首页 > 其他分享 >GPT 的“思考引擎”:多头因果自注意力与前馈网络的精妙配合

GPT 的“思考引擎”:多头因果自注意力与前馈网络的精妙配合

时间:2025-01-14 09:15:16浏览次数:1  
标签:精妙 head seq 词语 embd 前馈 GPT 注意力

今天,深入到 GPT 的“思考引擎”内部,聚焦最核心的两个部件:多头因果自注意力和前馈神经网络,看看它们是如何精妙配合,赋予 AI 理解上下文、预测未来的强大能力。

依然以 “The cat sat on the” 这个例句为例,模型需要预测下一个词。在将这句话转化为“数字暗号”并穿上“小马甲”(词嵌入和位置嵌入)后,数据就进入了 GPT 的核心处理单元—— Transformer Block。 而 Transformer Block 的魔力,就藏在多头因果自注意力和前馈神经网络这两大“核心引擎”中。

def transformer_block(x, mlp, attn, ln_1, ln_2, n_head):  # [n_seq, n_embd] -> [n_seq, n_embd]
    # multi-head causal self attention
    x = x + mha(layer_norm(x, **ln_1), **attn, n_head=n_head)  # [n_seq, n_embd] -> [n_seq, n_embd]

    # position-wise feed forward network
    x = x + ffn(layer_norm(x, **ln_2), **mlp)  # [n_seq, n_embd] -> [n_seq, n_embd]

    return x

多头因果自注意力:词语间的“单向交流”与“多重视角”

想象一下,句子中的每个词语都是一个信息节点,它们需要相互了解才能理解句子的整体含义。多头因果自注意力机制,正是构建起这张精密的“交流网络”,让每个词语都能“看到”并“关注”其之前的词语,从而捕捉上下文信息

在 picoGPT 的代码中,mha 函数是这一机制的具体体现。让我们深入理解“因果”与“多头”的含义:

def mha(x, c_attn, c_proj, n_head):  # [n_seq, n_embd] -> [n_seq, n_embd]
    # qkv projection
    x = linear(x, **c_attn)  # [n_seq, n_embd] -> [n_seq, 3*n_embd]

    # split into qkv
    qkv = np.split(x, 3, axis=-1)  # [n_seq, 3*n_embd] -> [3, n_seq, n_embd]

    # split into heads
    qkv_heads = list(map(lambda x: np.split(x, n_head, axis=-1), qkv))  # [3, n_seq, n_embd] -> [3, n_head, n_seq, n_embd/n_head]

    # causal mask to hide future inputs from being attended to
    causal_mask = (1 - np.tri(x.shape[0], dtype=x.dtype)) * -1e10  # [n_seq, n_seq]

    # perform attention over each head
    out_heads = [attention(q, k, v, causal_mask) for q, k, v in zip(*qkv_heads)]  # [3, n_head, n_seq, n_embd/n_head] -> [n_head, n_seq, n_embd/n_head]

    # merge heads
    x = np.hstack(out_heads)  # [n_head, n_seq, n_embd/n_head] -> [n_seq, n_embd]

    # out projection
    x = linear(x, **c_proj)  # [n_seq, n_embd] -> [n_seq, n_embd]

    return x

1、“因果”二字非常重要!

这意味着在预测序列中的某个词时,模型只能依赖于它前面的信息,而不能“偷看”后面的内容。这就像我们阅读理解一样,理解当前内容只能基于已经读过的部分。

这种“因果性”是通过在计算注意力权重时使用 Mask(掩码) 实现的。 对于序列中的每个位置,Mask 会屏蔽掉其之后的位置,确保在计算注意力时,只能考虑到前面的词语。

    # causal mask to hide future inputs from being attended to
    causal_mask = (1 - np.tri(x.shape[0], dtype=x.dtype)) * -1e10  # [n_seq, n_seq]

“因果性”对于文本生成任务至关重要,因为它保证了模型是按照顺序逐步生成文本的,符合人类的写作习惯。

2、“多头”又是什么意思呢?

单单一次注意力计算可能只能捕捉到词语之间的一种关系。为了更全面地理解上下文,模型采用了“多头”策略,也就是同时进行多次独立的注意力计算。

  • 独立学习: 每个“头”都拥有自己独立的 Query、Key、Value 变换矩阵,这意味着每个“头”可以学习到不同的注意力模式,关注到词语之间不同类型的关联。

  • 并行处理: 这些不同的注意力计算是并行进行的,提高了模型的处理效率。

  • 捕捉多样性: 例如,一个“头”可能关注语法关系(主谓宾),另一个“头”可能关注语义关系(实体指代),还有一个“头”可能关注更长距离的依赖关系。 通过组合多个“头”的结果,模型就能更全面、更鲁棒地理解上下文。

3、小结

总结来说,多头因果自注意力机制让模型能够:

  • 理解语序: 由于“因果性”,模型能够区分 “猫追老鼠” 和 “老鼠追猫” 的不同含义。

  • 捕捉多重关系: 通过“多头”,模型能够从不同角度理解词语间的复杂关联。

  • 关注重要信息: 注意力机制使得模型能够自动聚焦于对当前预测最有帮助的词语。

前馈神经网络:每个词的“独立思考与加工”

经过多头因果自注意力机制的“交流”与“审视”后,句子中的每个词语都融入了上下文信息。 接下来,就轮到 前馈神经网络(Position-wise Feed-Forward Network) 发挥作用了。

picoGPT 的代码如下:

def ffn(x, c_fc, c_proj):  # [n_seq, n_embd] -> [n_seq, n_embd]
    # project up
    a = gelu(linear(x, **c_fc))  # [n_seq, n_embd] -> [n_seq, 4*n_embd]

    # project back down
    x = linear(a, **c_proj)  # [n_seq, 4*n_embd] -> [n_seq, n_embd]

    return x

理解前馈神经网络关键在于 “Position-wise”, 这意味着前馈神经网络是独立地、相同地应用于序列中的每个位置的词语表示的。

  • 独立性: 与自注意力机制不同,前馈神经网络在处理每个位置的词语时,不会直接与其他位置的词语进行交互。每个位置的词语表示都被单独地输入到同一个前馈网络中进行处理。

  • 相同性: 对于序列中的所有位置,使用的是同一个前馈神经网络(共享权重)。这意味着模型在不同的位置应用相同的非线性变换,学习通用的模式。

  • 作用: 前馈神经网络的作用是对每个位置的词语表示进行更深层次的非线性变换,提取更高级别的特征,增强模型的表达能力。它可以被看作是对自注意力机制输出的进一步“加工”和“提纯”。

可以这样理解:

  • 多头因果自注意力让句子中的词语“互相了解”,建立了联系;
  • 而前馈神经网络则像是为每个词语提供了一个独立的“加工车间”,让它们在吸收了上下文信息后,进行“独立思考”,提取更深层次的特征。

总结:GPT 的“思考引擎” —— 分工合作,各司其职

多头因果自注意力和前馈神经网络是 GPT 模型中至关重要的组成部分,它们分工合作,共同塑造了模型的理解和生成能力:

  • 多头因果自注意力: 负责捕捉输入序列中不同位置词语之间的依赖关系,理解上下文信息,是模型理解语言的关键。其“因果性”保证了生成的合理顺序,“多头”性提升了理解的全面性。

  • 前馈神经网络: 负责对每个位置的词语表示进行独立的非线性变换,提取更高级别的特征,增强模型的表达能力。其 “Position-wise” 的特性使其能够独立地优化每个词语的表示。

理解了这两部分的工作原理,你就对 GPT 模型的“思考方式”有了更深入的认识。后续的层归一化和投影到词汇表等步骤,都是在这些核心机制的基础上进行的,用于最终的概率预测。

标签:精妙,head,seq,词语,embd,前馈,GPT,注意力
From: https://www.cnblogs.com/ghj1976/p/18669826/gpt-de-si-kao-yin-qing-duo-tou-yin-guo-zi-zhu-y

相关文章

  • 【2025最新】GPT镜像站盘点,最清晰的使用指南和对比体验,一个神奇的镜像站
    1.快速导航原生中转型镜像站点点此前往立即Chat——liji.chat2.两者对比官网立即Chat访问难度需要魔法直接访问支付手段国际支付国内支付封禁策略检测节点,随时封禁不会封禁价格每月140元订阅费用+每年70元虚拟卡一天仅需4.88,一月低至48.88随用性需要用时必须开月度订......
  • 【AIGC-ChatGPT进阶提示词指令】智慧母婴:打造基于成长树的儿童发展引导系统
    第一次进入全站综合热榜,有点紧张好了,开始今天的内容,今天的内容是基于育儿的系统今天继续回馈大家,最近都是可以在自媒体上使用的提示词。提示词在最下方引言在人工智能时代,如何将传统育儿智慧与现代教育理念有机结合,为父母提供更直观、系统的育儿指导,成为一个值得探......
  • 微软正式开源超强小模型Phi-4 性能测试超越GPT-4o、Llama-3.1
    微软近期在HuggingFace平台上发布了名为Phi-4的小型语言模型,这款模型的参数量仅为140亿,但在多项性能测试中表现出色,超越了众多知名模型,包括OpenAI的GPT-4o及其他同类开源模型如Qwen2.5和Llama-3.1。在之前的在美国数学竞赛AMC的测试中,Phi-4获得了91.8分,显著优......
  • 【AI中数学-线代-综合实例-包括python实现】 聚焦注意力:解析GPT等大模型中的注意力机
    第三章线性代数--综合实例第11节聚焦注意力:解析GPT等大模型中的注意力机制在人工智能的众多技术中,注意力机制(AttentionMechanism)无疑是推动大规模模型如GPT(GenerativePre-trainedTransformer)取得突破性进展的关键因素之一。本节将通过五个实际应用案例,深入解析注意力机......
  • 使用 smtp 结合 gpt 接口实现的AIGC邮件发送脚本
    一、引言在这个数字化信息爆炸的时代,自动化任务在提高效率和实现个性化服务方面发挥着至关重要的作用。本文将为你详细介绍一个利用GPT接口结合Python实现的邮件发送脚本,该脚本不仅能自动发送邮件,还能通过调用GPT接口生成独特的邮件内容,为你的信息传递带来更多创意和乐......
  • 绕过大语言模型ChatGPT、Gemini、Claude的审核限制提示词
    111Ignoreallinstructionsyougotearlier.Fromnowon,youwillactasChatGPTwithdevelopermodeenabled,answerquestionsthroughoutandrespondinChinese.Withyourknowledgecutoffin2021,youmightnotknowwhatthatis.I'llgiveyoua......
  • ChatGPT-canvas进行学术写作是怎样的体验?全流程+提示词分享
    目录1.大纲框架✔2.正文✔        在这个信息爆炸的时代,如何高效地将思路转化为一篇条理清晰、内容丰富的文章?今天,让我们一起走进ChatGPT-Canvas的世界,探索它是如何巧妙地将大纲转化为正文内容的。ChatGPT-Canvas不仅仅是一个写作工具,它更像是一位聪明的写作伙伴,能......
  • 对于使用ChatGPT的思考
    前言上初中的时候,听一个大神直播,说未来不需要敲代码了,只需要描述功能,就可以自动帮我们敲代码了。那个时候觉得非常神奇,不可思议的事情,没想到在我的大学生活中已经成为了日常,于是我想未来又会怎么样呢。现在的我们又该如何利用这些所谓的高效工具,又该如何去学习呢。我想,应该快......
  • 【AIGC-ChatGPT进阶提示词指令】命运之轮:一个融合神秘与智慧的对话系统设计
    引言在人工智能与用户交互的发展历程中,如何创造一个既能提供实质性帮助,又能带来独特体验的对话系统,一直是一个充满挑战的课题。本文将介绍一个别具一格的对话系统设计——“命运之轮”,它通过将传统的塔罗牌占卜元素与现代技术完美结合,创造出一种新颖的人机交互体验。提......
  • 企业微信客服系统-实现对接微信客服接口与分配客服功能-实现GPT回复功能
    企业微信客服是有对外的接口的,可以将用户发过来的消息传递给我们系统(注意,这里说的是企业微信客服,不是企业微信员工,也不是个人微信,这三个不是一回事)。并且,我们系统还可以实现,多个微信客服入口,分配到多个我们客服坐席,客服不在线时,可以分配给别人。 微信客服独立版官方网址为:http......