Build a Large Language Model (From Scratch) 从头开始构建大型语言模型(第三章)学习笔记

本文主要是介绍Build a Large Language Model (From Scratch) 从头开始构建大型语言模型(第三章)学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

构建大型语言模型(从头开始)

  • 3 编码注意力机制(Coding Attention Mechanisms)
    • 3.1 长序列建模问题(The problem with modeling long sequences)

3 编码注意力机制(Coding Attention Mechanisms)

本章涵盖

  • 探索神经网络中使用注意力机制的原因
  • 引入基本的自注意力框架并逐步发展为增强的自注意力机制
  • 实现因果注意力模块,允许LLMs一次生成一个token
  • 用 dropout 掩盖随机选择的注意力权重以减少过度拟合
  • 将多个因果注意力模块堆叠成多头注意力模块

在上一章中,您学习了如何准备用于训练LLM的输入文本。这涉及到将文本分割成单独的单词和子词tokens,这些tokens可以被编码成向量表示,即所谓的嵌入,用于LLM。

在本章中,我们将研究 LLM 架构本身的一个组成部分,即注意力机制,如图 3.1 所示。

图 3.1 编码 LLM、在一般文本数据集上预训练 LLM 以及在labeled dataset上对其进行微调的三个主要阶段的mental model 。本章重点介绍注意力机制,它是 LLM 架构的一个组成部分。

注意力机制是一个综合性的主题,这就是我们用整整一章来讨论它的原因。我们将主要孤立地看待这些注意力机制,并在机械层面上关注它们。在下一章中,我们将围绕自注意力机制对 LLM 的其余部分进行编码,以查看它的实际效果并创建一个模型来生成文本。

在本章中,我们将实现注意力机制的四种不同变体,如图 3.2 所示。

图 3.2 该图描绘了我们将在本章中编码的不同注意机制,从自注意的简化版本开始,然后添加可训练权重。因果注意力机制为自我注意力添加了一个掩码,允许LLM一次生成一个单词。最后,多头注意力将注意力机制组织成多个头,使模型能够并行捕获输入数据的各个方面。

图3.2中所示的这些不同的注意力变体是相互依赖的,我们的目标是在本章结束时得到一个简洁而有效的多头注意力实现,然后我们可以将其插入到下一章我们将要编写的 LLM 架构中。

3.1 长序列建模问题(The problem with modeling long sequences)

在我们深入探讨本章后面的 LLM 核心的自注意力机制之前,先了解一下 LLM 之前没有注意力机制的架构有什么问题?假设我们想要开发一种语言翻译模型,将文本从一种语言翻译成另一种语言。如图 3.3 所示,由于源语言和目标语言的语法结构,我们不能简单地逐字翻译文本。

图 3.3 将文本从一种语言翻译成另一种语言(例如德语翻译成英语)时,不可能仅仅逐字翻译。相反,翻译过程需要上下文理解和语法对齐。

为了解决我们无法逐字翻译文本的问题,通常使用具有两个子模块的深度神经网络,即所谓的编码器和解码器。编码器的工作是首先读入并处理整个文本,然后解码器生成翻译后的文本。

当我们在第 1 章(第 1.4 节,将 LLM 用于不同任务)中介绍 Transformer 架构时,我们已经简要讨论了编码器-解码器网络。在 Transformer 出现之前,循环神经网络(RNN) 是最流行的语言翻译编码器-解码器架构。

RNN 是一种神经网络,其中先前步骤的输出被作为当前步骤的输入,这使得它们非常适合文本等序列数据。如果您不熟悉 RNN,请不要担心,您不需要了解 RNN 的详细工作原理即可跟随本讨论;我们这里的重点更多是编码器-解码器设置的一般概念。

在编码器-解码器 RNN 中,输入文本被送入编码器,编码器按顺序对其进行处理。编码器在每一步都会更新其隐藏状态( 隐藏层的内部值),试图在最终隐藏状态中捕获输入句子的完整含义,如图 3.4 所示。然后,解码器采用最终的隐藏状态开始生成翻译的句子,一次一个单词。它还在每一步更新其隐藏状态,该隐藏状态应该携带下一个单词预测所需的上下文。




这篇关于Build a Large Language Model (From Scratch) 从头开始构建大型语言模型(第三章)学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949465

相关文章

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结