当前位置: 首页 > news >正文

【大模型】7 天 AI 大模型学习

7 天 AI 大模型学习 Day 2

今天是 7 天AI 大模型学习的第二天 😄,今天我将会学习 Transformer 、Encoder-based and Decoder-Based LLMs 等 。如果有感兴趣的,就和我一起开始吧 ~
课程链接 :2025年快速吃透AI大模型,7天学完,让你面试少走99%弯路!!

文章目录

  • 7 天 AI 大模型学习 Day 2
  • 前言
  • BPE —— Byte Pair Encoding Tokenizer
    • 核心
    • 构造过程
    • 例:一个简单的 corpus
  • Attention
    • 三种不同的 Attention
    • 基本的 Attention 实现方式
    • Encoder Self-Attention
    • Decoder Self-Attention
    • Encoder-Decoder Self-Attention
    • Masked Matrix 如何融合到不同实现中
    • 总结三种Attention
    • Layer Normalization
  • Decoding - output the next word
    • Greedy Decoding
    • Beam search
    • Label smoothing
      • 如何计算 loss
      • 什么是Label smoothing
  • Encoder and Decoder Based Models
    • Decoder Only
    • Pretrain & Fine-tune (SFT)
    • Encoder-Based LLM Model:BERT
  • Advance Topics
    • Absolute Position Embedding
    • Rotary Position Embedding 旋转编码
    • Flash Attention
  • 作业

前言

今天,我们会学习如下内容:

  1. Transformer
  • BPE
  • Attention
  • Layer Normalization
  • 输出单词 —— Greedy Decoding / Beam Search
  • Label smoothing
  • Code for Transformer
  1. Encoder-based and Decoder-Based LLMs
  • Encoder-based LLM
  • Decoder-Based LLM
  1. 其他
  • 旋转编码 Rotary Position Encoding
  • Flash Attention
  1. 作业

BPE —— Byte Pair Encoding Tokenizer

BPE(Byte Pair Encoding) 是一种基于频率的分词(tokenization)算法,最初用于数据压缩,但后来被广泛应用于自然语言处理(NLP)中,尤其是在词汇表构建和子词级别的分词任务中。BPE 的核心思想是通过迭代地合并频率最高的字节对(或字符对),以生成一个新的、更简洁的词汇表,从而优化文本的表示。它通常用于处理语言模型中的稀有词汇和未登录词(OOV,Out-Of-Vocabulary words)问题。
BPE 被广泛应用于现代 NLP 模型中,尤其是神经网络和预训练模型(如 BERT、GPT 等)的训练过程中。例如,GPT-2 和 GPT-3 就是采用了类似 BPE 的子词分词方法来处理输入文本。
BPE 通过减少稀有词汇的数量,并将词汇表限制在较小的规模内,从而提升了模型的训练效率和文本生成能力。

Vocabulary(词汇表)
Vocabulary 是指模型所能理解和使用的所有词汇或符号的集合。在自然语言处理(NLP)中,词汇表通常是指一组所有可能的token(分词单位)。token可以是单词、子词、或者字符,具体取决于采用的分词策略。
词汇表的构建通常是基于一份大型文本数据(corpus),通过统计频率,选择出现次数较多的词汇构建一个有限的词汇集合。词汇表的大小(例如10,000个词、50,000个词等)通常是根据特定任务和计算资源的需求来设定的。
词汇表包含的信息:通常,每个token在词汇表中都有一个唯一的编号,称为词ID,模型可以使用这些ID来表示文本中的各个token。

Tokenization(分词)
Tokenization 是指将原始文本(通常是句子或文档)切分成一系列有意义的tokens(单位),这些token可以是单词、子词或字符。具体的tokenization策略决定了最终文本如何被分解成token。
例如,对于句子 “I love natural language processing”,可能的token化结果有:
基于单词的tokenization:[‘I’, ‘love’, ‘natural’, ‘language’, ‘processing’]
基于子词的tokenization:[‘I’, ‘lov’, ‘e’, ‘natu’, ‘ral’, ‘lan’, ‘guage’, ‘pro’, ‘cessing’](使用像BPE这样的算法)
基于字符的tokenization:[‘I’, ’ ', ‘l’, ‘o’, ‘v’, ‘e’, ’ ', ‘n’, ‘a’, ‘t’, ‘u’, ‘r’, ‘a’, ‘l’, …]
tokenization 的目的是将原始文本转化为计算机可以处理的、更小的单元。词汇表在这个过程中起着关键作用。

核心

  • 根据数据做 tokenize
  • Subword Tokenization
  • 英语上可以包含 subword , -est OR -er

构造过程

  • 语料库作为输入,从而学习词库
  1. 初始化:首先,将输入文本拆分成字符级别的token(符号)。例如,输入句子“low”会被拆分成 [‘l’, ‘o’, ‘w’]。

  2. 统计频率:计算文本中所有字符对的出现频率。例如,在句子“low”中,字符对可能是 (l, o) 和 (o, w)。

  3. 合并最频繁的字符对:找到出现频率最高的字符对,并将它们合并为一个新的单一符号。例如,如果字符对 (l, o) 是最常见的,就将其合并成一个新的 token (lo)。

  4. 重复以上过程:继续合并最频繁的字符对,直到达到预设的词汇表大小或满足其他停止条件。

  5. 最终词汇表:合并的结果将形成一个新的词汇表,这个词汇表是由频繁的子词或字符对组成的。

在这里插入图片描述
重复上述过程,词库中词越来越多

在这里插入图片描述

例:一个简单的 corpus

Corpus(复数形式:Corpora)是指一组有组织的、用于语言学研究或自然语言处理(NLP)任务的文本数据集合。它可以包括任何形式的语言数据,如书籍、文章、对话、网页内容等,通常以原始文本或经过标注的文本形式存在。Corpus 通常用于语言模型的训练、语法分析、词汇统计等任务。
在这里插入图片描述
在这里插入图片描述

  1. er 出现次数最多,将 er merge 为一个新的 token,加入 vocabulary 中

在这里插入图片描述
得到 vocabulary 后,根据 vocabulary 做 tokenization 。在处理文本时,使用构建好的词汇表将原始文本转化为token(通常是数字ID),并将每个token映射到词汇表中的一个元素。这是tokenization的核心过程。


Attention

三种不同的 Attention

在这里插入图片描述

基本的 Attention 实现方式

输入 x —— > 内积 WQ WK WV ——> 得到 Q K V 矩阵

在这里插入图片描述

  • attention score 矩阵
    在这里插入图片描述

在这里插入图片描述

def compute_attention_score(Q, K, V, mask, dim):return Q * K^T / dim ^ 1/2 * V

Encoder Self-Attention

在这里插入图片描述

  • 对每个词都需要计算其他词对它的影响

Decoder Self-Attention

在这里插入图片描述

  • 对每个词,只能看前一个词对它的影响

Encoder-Decoder Self-Attention

在这里插入图片描述

Masked Matrix 如何融合到不同实现中

在这里插入图片描述

  • M如何定义 ? 见上文
    在这里插入图片描述
  • Padding 的影响
    在这里插入图片描述
  • 有 Padding 情况下,mask 矩阵如下

padding 位置为 mask 矩阵值为负无穷

总结三种Attention

在这里插入图片描述
—— 微调部分基础

Layer Normalization

作用:

  • 归一化
  • 数值区间控制
  • 稳定学习 stable learn

对每一行做一个 normalize

  • 定义
    在这里插入图片描述
  • normalize 计算过程

在这里插入图片描述

  • 最终输出格式
    在这里插入图片描述

Decoding - output the next word

  • 将最后的概率最大的单词输出
    在这里插入图片描述

Greedy Decoding

将概率最大的单词输出
在这里插入图片描述
问题:

  • 概率最大的不一定是最好的
  • 前面的输出会影响后面的输出,如果前面输出错了,对后面影响大

Beam search

Beam Size(3) <= Top 3 —— K = 3

  • 不只是考虑最好的一个,而是考虑最好的三个
  • 时间复杂度 K^2 * T (length)
    在这里插入图片描述
    —— 通过控制 Decoder 可以进行模型控制 , 模型优化

Label smoothing

在这里插入图片描述

如何计算 loss

在这里插入图片描述

什么是Label smoothing

在这里插入图片描述

  • 希望得到的 y 的预测值就是和真实的 y 一样

  • 逆推 会出现数值的 unstable —— 训练的 unstable —— 如何解决
    在这里插入图片描述

  • Label smoothing - 让原有的向量不那么极端
    在这里插入图片描述

比较好的代码 : https://colab.research.google.com/github/harvardnlp/annotated-transformer/blob/master/AnnotatedTransformer.ipynb#scrollTo=9a429510


Encoder and Decoder Based Models

  • 主要还是 Decoder-Based
    在这里插入图片描述

Decoder Only

self-supervised learning
在这里插入图片描述

Pretrain & Fine-tune (SFT)

  • Fine-tune : 只计算 output 的 loss
    在这里插入图片描述

Encoder-Based LLM Model:BERT

逻辑:完形填空 , mask 掉一些单词,让 bert 去填空
在这里插入图片描述
模型本身不是为生成问题而生的,所以没有 GPT 时候生成。对一些分类任务效果好。


Advance Topics

Absolute Position Embedding

问题:随着 m 的增大,位置变化没有规律

Rotary Position Embedding 旋转编码

能刻画出一些相对的位置差异
在这里插入图片描述

  • 如何计算
    在这里插入图片描述
  • 扩展到高纬
    在这里插入图片描述

Flash Attention

优点:

  1. 计算快
  2. 节省显存
  3. 精准注意力
  • 减少在 HBM 和 SRAM 中切换到时间
    在这里插入图片描述
    在这里插入图片描述
  • 核心思想
    在这里插入图片描述
    每个模块单独处理,减少和显存的操作

作业

  1. 读懂代码,在少量数据上训练 + finetune github.com/karpathy/nanoGPT/tree/master
  2. 读懂文章及其开源代码 https://arxiv.org/abs/2309.10305

相关文章:

【大模型】7 天 AI 大模型学习

7 天 AI 大模型学习 Day 2 今天是 7 天AI 大模型学习的第二天 &#x1f604;&#xff0c;今天我将会学习 Transformer 、Encoder-based and Decoder-Based LLMs 等 。如果有感兴趣的&#xff0c;就和我一起开始吧 &#xff5e; 课程链接 &#xff1a;2025年快速吃透AI大模型&am…...

软件工程大复习之(四)——面向对象与UML

4.1 面向对象概述 面向对象&#xff08;OO&#xff09;是一种编程范式&#xff0c;它将数据和处理数据的方法封装在对象中。面向对象的主要概念包括&#xff1a; 对象&#xff1a;实例化的数据和方法的集合。类&#xff1a;对象的蓝图或模板。封装&#xff1a;隐藏对象的内部…...

【Linux】shell命令

目录 shell的基本命令 shell - 贝壳 外在保护工具 用户、shell、内核、硬件之间的关系 解析器的分类&#xff1a; shell命令格式 history -历史记录查询 修改环境变量的值&#xff1a; shell中的特殊字符 通配符 管道 | 输入输出重定向 命令置换符 shell的基本命…...

ValuesRAG:以检索增强情境学习强化文化对齐

随着大型语言模型&#xff08;LLMs&#xff09;的迅猛发展&#xff0c;其在各个领域展现出强大的能力。然而&#xff0c;训练数据中西方中心主义的倾向&#xff0c;使得 LLMs 在文化价值观一致性方面面临严峻挑战&#xff0c;这一问题在跨文化场景中尤为突出&#xff0c;可能导…...

【机器学习篇】交通革命:机器学习如何引领未来的道路创新

嘿&#xff0c;你知道吗&#xff1f;机器学习正在交通领域掀起一场革命啦&#xff01;它将如何引领未来道路创新呢 本文有精彩的 C 代码演示、实用的图片解释&#xff0c;还有超多干货&#xff0c;保证让你大开眼界&#xff0c;点赞收藏关注&#xff0c; 开启一场奇妙的探索之…...

DeepSeek-V3 通俗详解:从诞生到优势,以及与 GPT-4o 的对比

1. DeepSeek 的前世今生 1.1 什么是 DeepSeek&#xff1f; DeepSeek 是一家专注于人工智能技术研发的公司&#xff0c;致力于打造高性能、低成本的 AI 模型。它的目标是让 AI 技术更加普惠&#xff0c;让更多人能够用上强大的 AI 工具。 1.2 DeepSeek-V3 的诞生 DeepSeek-V…...

把vue项目或者vue组件发布成npm包或者打包成lib库文件本地使用

将vue项目发布成npm库文件&#xff0c;第三方通过npm依赖安装使用&#xff1b;使用最近公司接了一个项目&#xff0c;这个项目需要集成到第三方页面&#xff0c;在第三方页面点击项目名称&#xff0c;页面变成我们的项目页面&#xff1b;要求以npm库文件提供给他们&#xff1b;…...

【STC库函数】Compare比较器的使用

如果我们需要比较两个点的电压&#xff0c;当A点高于B点的时候我们做一个操作&#xff0c;当B点高于A点的时候做另一个操作。 我们除了加一个运放或者比较器&#xff0c;还可以直接使用STC内部的一个比较器。 正极输入端可以是P37、P50、P51&#xff0c;或者从ADC的十六个通道…...

单片机-独立按键矩阵按键实验

1、按键介绍 按键管脚两端距离长的表示默认是导通状态&#xff0c;距离短的默认是断开状态&#xff0c; 如果按键按下&#xff0c;初始导通状态变为断开&#xff0c;初始断开状态变为导通 我们开发板是采用软件消抖&#xff0c;一般来说一个简单的按键消抖就是先读取按键的状…...

若要把普通表转成分区表,就需要先新建分区表,然后把普通表中的数据导入新建分区表。 具体怎么导入?

将普通表转换为分区表并导入数据是一个常见的数据库管理任务。以下是详细的步骤和示例&#xff0c;帮助你在 GaussDB 中完成这一过程&#xff1a; 1. 创建分区表 首先&#xff0c;你需要创建一个新的分区表&#xff0c;定义好分区键和分区策略。假设你有一个普通表 orders&am…...

XXX公司面试真题

一、一面问题 1.线程池的主要参数 核心线程数最大线程数空闲线程存活时间存活时间单位任务队列线程工厂拒绝策略允许核心线程超时 2. 线程的状态 新建状态就绪状态运行状态阻塞状态死亡状态 补充&#xff1a;线程阻塞的原因 线程调用sleep()方法进入睡眠状态 线程得到一个…...

第一节:电路连接【51单片机+A4988+步进电机教程】

摘要&#xff1a;本节介绍如何搭建一个51单片机A4988步进电机控制电路&#xff0c;所用材料均为常见的模块&#xff0c;简单高效的方式搭建起硬件环境 一、硬件清单 ①51单片机最小控制模块 ②开关电源 ③A4988模块转接座 ④二相四线步进电机 ⑤电线若干 二、接线 三、A49…...

机器学习算法深度解析:以支持向量机(SVM)为例的实践应用

机器学习算法深度解析&#xff1a;以支持向量机&#xff08;SVM&#xff09;为例的实践应用 在当今的数据驱动时代&#xff0c;机器学习作为人工智能的核心分支&#xff0c;正以前所未有的速度改变着我们的生活与工作方式。从图像识别到自然语言处理&#xff0c;从金融预测到医…...

解决Postman一直在转圈加载无法打开问题的方法

在使用Postman这款强大的API测试工具时&#xff0c;有时可能会遇到程序长时间加载而无法正常使用的情况。面对这样的问题&#xff0c;可以尝试以下几种解决办法&#xff1a; 方法一&#xff1a;直接运行Postman可执行文件 定位到Postman的安装目录 如果您不确定Postman的具体安…...

利用 LangChain 构建对话式 AI 应用

随着人工智能技术的快速发展&#xff0c;对话式 AI 已成为现代应用的核心部分。在构建智能客服、虚拟助手以及交互式学习平台时&#xff0c;一个强大且灵活的框架显得尤为重要。本文将深度解析 LangChain 这一框架的功能及实际使用&#xff0c;帮助开发者快速上手。 什么是 La…...

力扣--34.在排序数组中查找元素的第一个和最后一个位置

题目 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&…...

【Java回顾】Day2 正则表达式----异常处理

参考资料&#xff1a;菜鸟教程 https://www.runoob.com/java/java-exceptions.html 正则表达式 有一部分没看完 介绍 字符串的模式搜索、编辑或处理文本java.util.regex包&#xff0c;包含了pattern和mathcer类&#xff0c;用于处理正则表达式的匹配操作。 捕获组 把多个字符…...

【SpringBoot】当 @PathVariable 遇到 /,如何处理

1. 问题复现 在解析一个 URL 时&#xff0c;我们经常会使用 PathVariable 这个注解。例如我们会经常见到如下风格的代码&#xff1a; RestController Slf4j public class HelloWorldController {RequestMapping(path "/hi1/{name}", method RequestMethod.GET)publ…...

【FlutterDart】页面切换 PageView PageController(9 /100)

上效果&#xff1a; 有些不能理解官方例子里的动画为什么没有效果&#xff0c;有可能是我写法不对 后续如果有动画效果修复了&#xff0c;再更新这篇&#xff0c;没有动画效果&#xff0c;总觉得感受的丝滑效果差了很多 上代码&#xff1a; import package:flutter/material.…...

Backend - C# 的日志 NLog日志

目录 一、注入依赖和使用 logger 二、配置记录文件 1.安装插件 NLog 2.创建 nlog.config 配置文件 3. Programs配置日志信息 4. 设置 appsettings.json 的 LogLevel 5. 日志设定文件和日志级别的优先级 &#xff08;1&#xff09;常见的日志级别优先级 &#xff08;2&…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...