LLM Core - Model Structure
模型文件
模型文件,也叫模型权重,里面大部分空间存放的是模型参数 - 即权重(Weights)和偏置(Biases)
还有其它信息,如优化器状态和元数据等
文件格式
使用 PyTorch,后缀为 .pth
使用 TensorFlow 或者 Hugging Face Transformers,后缀为 .bin
在模型预训练后,可以保存模型,在生产环境,不建议保存模型架构
与 Python 版本和模型定义的代码紧密相关,可能存在兼容性问题
模型权重 - 推荐
1torch.save(model.state_dict(), 'model_weights.pth')
模型权重 + 模型架构 - 可能存在兼容性问题
1torch.save(model, model_path)
权重 + 偏置
权重 - 最重要的参数之一
在前向传播过程中,输入会与权重相乘,这是神经网络学习特征和模式的基本方式
权重决定了输入如何影响输出
偏置 - 调整输出
允许模型输出在没有输入或者所有输入都为 0 的时候,调整到某个基线值
$y=kx+b$
$k$ 为权重,$b$ 为偏置 ...
LLM Core - Decoder Only
模型架构
已经演化出很多 Transformer 变体,用来适应不同的任务和性能需求
架构名称
特点
主要应用
与原始 Transformer 的关系
原始 Transformer
编码器-解码器结构
机器翻译、文本摘要
基础模型
Decoder-only
只包含解码器
文本生成
去除了编码器部分
Encoder-only
只包含编码器
文本分类、信息提取
去除了解码器部分
Transformer-XL
加入循环机制
长文本处理
扩展了处理长序列的能力
Sparse Transformer
引入稀疏注意力机制
长序列处理
优化了注意力计算效率
Universal Transformer
递归的编码器结构
各种序列处理
引入递归机制,多次使用相同的参数
Conformer
结合 CNN 和 Transformer 优势
音频处理、语音识别
引入卷积层处理局部特征
Vision Transformer
应用于视觉领域
图像分类、视觉任务
将图像块处理为序列的 Transformer 编码器
Switch Transformer
使用稀疏性路由机制
大规模模型训练
提高 ...
LLM Core - Transformer
背景
不论是 GRU 还是 LSTM 都面临梯度消失和梯度爆炸的问题
RNN 必须按照顺序处理序列中的每个元素,无法并发处理
RNN 还有长依赖问题,虽然可以处理长序列,但实战效果不佳
Attention Is All You Need - http://arxiv.org/pdf/1706.03762
简单介绍
Transformer 是一种基于自注意力机制的深度学习模型,诞生于 2017 年
目前大部分的语言模型(如 GPT 系列、BERT系列)都基于 Transformer 架构
Transformer 摒弃了之前序列处理任务中广泛使用的 RNN
转而使用自注意力层来直接计算序列内各元素之间的关系,从而有效捕获长距离依赖
Transformer 明显提高了处理速度
Transformer 由于其并行计算的特性,大幅度提升了模型在处理长序列数据时的效率
Transformer 由编码器和解码器组成
每个部分均由多层重复的模块构成,其中包括自注意力层和前馈神经网络
优势
Transformer 通过其独特的架构设计,在效率、效果和灵活性方面提供了显著优势使其成为处理复杂序列数据任务的强 ...
LLM Core - Seq2Seq
简单介绍
Word2Vec 的主要能力是将词汇放在多维空间中,相似的词汇会被放在邻近的位置
Seq2Seq 不仅能理解词汇,还能将词汇串联成完整的句子
Seq2Seq 即从一个序列到另一个序列的转换
不仅仅能理解单词之间的关系,还能把整个句子的意思打包,并解压成另一种形式的表达
Seq2Seq 的核心角色 - 编码器(Encoder) + 解码器(Decoder)
Role
Desc
Encoder
理解和压缩信息 - 把一封长信函整理成一个精简的摘要
Decoder
将摘要打开,并翻译成另一种语言或形式的完整信息
优缺点Seq2Seq
固定长度上下文 + 逐步输入(长序列) + 参数规模小
Seq2Seq 是一种比较高级的神经网络模型,适用于语言翻译,甚至是基本的问答系统
Seq2Seq 使用固定的上下文长度,因此长距离依赖的能力比较弱
Seq2Seq 的训练和推理通常需要逐步处理输入和输出序列,在处理长序列会受限
Seq2Seq 的参数量通常较少,在面对复杂场景时,模型性能可能会受限
Word2Vec
基本概念
Seq2Seq 是一种神经网络架构,模型的核心组成 - 编 ...
LLM Core - Word2Vec
Word2Vec概述
在 NLP 中,在文本预处理后,进行特征提取,涉及到将词语转化成数值的形式,方便计算机理解
Word2Vec 的目的 - 将词语转换成向量形式,使得计算机能够理解
通过学习大量文本数据,捕捉到词语之间的上下文关系,进而生成词的高维表示 - 即词向量
架构
Word2Vec 有 2 种主要的模型 - Skip-Gram + CBOW
Model
Desc
CBOW
根据周围的上下文词汇来预测目标词
Skip-Gram
根据目标词预测其周围的上下文词汇
优劣
Key
Value
优点
揭示词与词之间的相似性 - 通过计算向量之间的距离来找到语义相近的词
缺点
无法处理多义词,每个词被赋予一个向量,不考虑上下文中的多种含义
模型架构
连续词袋 - Continuous Bag of Words, CBOW跳字模型 - Skip-Gram
连续词袋
CBOW 模型是一种通过上下文预测目标词的神经网络架构
上下文由目标词周围的一个词或多个词组成,这个数目由窗口大小决定
窗口是指上下文词语的范围 - 如果窗口为 10,那么模型将使用目标词前后各 10 ...
LLM Core - NLP
基础
NLP 的研究目的是让计算机能够理解、解释和生成人类语言,一般包含 4 个步骤
Step
Desc
文本预处理
将原始文本转换成机器容易理解的格式分词(单词或短语)、去除停用词、词干提取、词性标注等
特征提取
从处理过的文本中提取特征,以便用于机器学习模型将文本转换成数值形式 - 向量化 - 词袋模型 or 词嵌入
模型训练
使用提取到的特征和相应的机器学习算法来训练模型分类器、回归模型、聚类算法等
评估与应用
评估模型的性能,并在实际应用中使用模型来解释、生成或翻译文本
应用场景 - 搜索引擎 / 语音转换 / 文本翻译 / 系统问答
ML vs NLP
Scope
Desc
ML
让计算机通过查看大量的例子来学习如何完成任务
NLP
教会计算机理解和使用人类语言
ML + NLP
用机器学习的技术来让计算机学习如何处理和理解语言
文本预处理
将原始文本转换成易于机器理解和处理的格式
文本清洗
去除噪音(对分析无关紧要的部分)及标准化文本
123456789101112131415161718import r ...
LLM Core - RNN
背景
RNN 主要用来处理序列数据,目前大部分 LLM 都是基于 Transformer
通过学习 RNN,有助于理解 Transformer
有助于理解神经网络如何处理序列中的依赖关系、记忆过去的信息,并在此基础上生成预测
有助于理解关键问题 - 梯度消失 / 梯度爆炸
RNN
Recurrent neural network - 循环神经网络
RNN 是一类用于处理序列数据的神经网络,RNN 能够处理序列长度变化的数据 - 文本 / 语音
RNN 的特点是在模型中引入了循环,使得网络能够保持某种状态,表现出更好的性能
左边
$x$ 为输入层,$o$ 为输出层,中间的 $s$ 为隐藏层,在 $s$ 层进行一个循环 $W$
右边(展开循环)
与时间 $t$ 相关的状态变化
神经网络在处理数据时,能看到前后时刻的状态,即上下文
RNN 因为隐藏层有时序状态,那么在推理的时候,可以借助上下文,从而理解语义更加准确
优劣优势
RNN 具有记忆能力,通过隐藏层的循环结构来捕捉序列的长期依赖关系
特别适用于文本生成、语音识别等领域
局限
存在梯度消失和梯度爆炸的问题, ...
LLM Core - Machine Learning Algorithm
线性回归概述
线性回归是一种预测分析技术,用于研究两个或者多个变量之间的关系
尝试用一条直线(二维)或者一个平面(三维)的去拟合数据点
这条直线或者平面,可以用来预测或者估计一个变量基于另一个变量的值
数学
假设有一个因变量 y 和一个自变量 x
线性回归会尝试找到一条直线 y=ax+b
a 为斜率,而 b 为截距
以便这条直线尽可能地接近所有数据点
$$y=ax+b$$
sklearn
房价预测 - 房价是因变量 y,而房屋面积是自变量 x
12345678910111213141516171819202122232425import matplotlib.pyplot as pltimport numpy as npfrom sklearn.linear_model import LinearRegression# 定义数据X = np.array([35, 45, 40, 60, 65]).reshape(-1, 1) # 面积y = np.array([30, 40, 35, 60, 65]) # 价格# 创建并拟合模型model = LinearRegressi ...
LLM Core - Machine Learning Concept
机器学习
机器学习是让计算机利用数据来学习如何完成任务
机器学习允许计算机通过分析和学习数据来自我改进以及作出决策
房价预测
利用 scikit-learn 进行预测
数据集
housing_data.csv
面积
卧室数量
地理位置
售价
100
2
1
300
150
3
2
450
120
2
2
350
80
1
1
220
线性回归12345678910111213141516171819202122232425from sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionimport pandas as pd# 加载数据集data = pd.read_csv("housing_data.csv") # 假设这是我们的房屋数据# 准备数据X = data[['面积', '卧室数量', '地理位置']] # 特征y = data['售 ...
LLM - API
背景
LLM 是没有 Web API 的,需要进行一次封装
将 LLM 的核心接口封装成 Web API 来为用户提供服务 - 必经之路
接口封装FastAPI接口封装
Uvicorn + FastAPI
Uvicorn 类似于 Tomcat,但比 Tomcat 轻量很多,作为 Web 服务器
允许异步处理 HTTP 请求,非常适合处理并发请求
基于 uvloop 和 httptools,具备非常高的性能
FastAPI 类似于 SpringBoot,同样比 SpringBoot 轻量很多,作为 API 框架
结合 Uvicorn 和 FastAPI
可以构建一个高性能的、易于扩展的异步 Web 应用程序
Uvicorn 作为服务器运行 FastAPI 应用,可以提供优异的并发处理能力
安装依赖12$ pip install fastapi$ pip install uvicorn
代码分层1234567891011121314import uvicornfrom fastapi import FastAPI# 创建API应用app = FastAPI()@app.get("/ ...