当前位置: 首页 > 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&…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

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

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

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用&#xff0c;前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率&#xff0c;还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库&#xff08;Naive UI、Element …...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...