# Awesome-LLM-Learning [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
## 引言
欢迎来到本 Repo!这里是一个专注于大语言模型学习的仓库,旨在为大语言模型学习入门者和大语言模型研发岗位的面试准备者提供全面的基础知识。
我们涵盖了多个主题,包括深度学习基础知识、自然语言处理基础知识、大语言模型基础知识以及大语言模型推理和应用等内容。你将在这里找到丰富的学习资料,帮助你构建对大语言模型的全面理解和应用能力。
除了基础知识,我们还会推荐一些大语言模型领域的前沿论文,帮助你跟上最新的研究进展,掌握最先进的技术。
无论你是新手还是有经验的从业者,本 Repo 都会为你提供有价值的学习资源。欢迎一起探索大语言模型的奥秘,让我们一同进步和成长!如果你有任何问题或建议,欢迎提出,我们将尽力完善这个仓库,为大家提供更好的学习体验。谢谢你的参与!
## 目录
- [1.深度学习基础知识](1.深度学习基础知识)
- [1.Transformer基础](1.深度学习基础知识/1.Transformer基础.md)
- [2.深度神经网络基础](1.深度学习基础知识/2.深度神经网络基础.md)
- [2.自然语言处理基础知识](2.自然语言处理基础知识)
- [1.分词器(Tokenizer)](2.自然语言处理基础知识/1.分词器(Tokenizer).md)
- [2.经典NLP模型](2.自然语言处理基础知识/2.经典NLP模型.md)
- [3.困惑度(perplexity)](2.自然语言处理基础知识/3.困惑度(perplexity).md)
- [3.大语言模型基础知识](3.大语言模型基础知识)
- [1.训练框架介绍(Megatron-lm、DeepSpeed)](3.大语言模型基础知识/1.训练框架介绍(Megatron-lm、DeepSpeed).md)
- [2.参数高效微调(PEFT)](3.大语言模型基础知识/2.参数高效微调(PEFT).md)
- [3.经典开源LLM介绍](3.大语言模型基础知识/3.经典开源LLM介绍.md)
- [4.RLHF介绍](3.大语言模型基础知识/4.RLHF介绍.md)
- [5.CoT、ToT介绍](3.大语言模型基础知识/5.CoT、ToT介绍.md)
- [6.SFT训练](3.大语言模型基础知识/6.SFT训练.md)
- [7.混合专家模型(MOE)](3.大语言模型基础知识/7.混合专家模型(MOE).md)
- [4.大语言模型推理](4.大语言模型推理)
- [1.Huggingface推理参数介绍](4.大语言模型推理/1.Huggingface推理参数介绍.md)
- [5.大语言模型应用](5.大语言模型应用)
- [1.LangChain介绍](5.大语言模型应用/1.LangChain介绍.md)
- [6.大语言模型前沿分享](6.大语言模型前沿分享)
- [1.LLM相关博客分享](6.大语言模型前沿分享/1.LLM相关博客分享.md)
- [2.LLM相关论文分享](6.大语言模型前沿分享/2.LLM相关论文分享.md)
## 深度学习基础知识
### Transformer基础
#### Transformer 的 Self Attention Layer 实现
- Transformer 模型的自注意力(Self Attention)机制涉及三种线性变换:查询(Q)、键(K)、值(V),以及通过计算注意力权重和加权求和来生成最终的输出。以下是自注意力机制的公式:
- 假设输入序列为 $X \in \mathbb{R}^{L \times d}$,其中 $L$ 是序列长度,$d$ 是特征维度。自注意力层中的线性变换矩阵为 $W_q \in \mathbb{R}^{d \times d_k}$、$W_k \in \mathbb{R}^{d \times d_k}$ 和 $W_v \in \mathbb{R}^{d \times d_v}$,其中 $d_k$ 和 $d_v$ 是分割查询、键和值时的维度。
- 查询(Q)、键(K)和值(V)的线性变换:
- $Q=X⋅W_{q}$
- $K=X⋅W_{k}$
- $V=X⋅W_{v}$
- 多头拆分:
- 在多头自注意力中,将查询(Q)、键(K)和值(V)分成 $h$ 个头,其中 $h$ 是注意力头的数量。对于每个头,使用不同的线性变换权重。
- 注意力得分计算:
- 使用查询(Q)和键(K)计算注意力得分,可以使用点积注意力(Scaled Dot-Product Attention):
- $Attention(Q,K)=softmax(\frac{QK^{T}}{\sqrt{d_{k}}})$
- 注意力加权求和:
- 使用注意力权重对值(V)进行加权求和,得到自注意力的输出:
- $Output=Attention(Q,K)V$
- 上述公式涵盖了Transformer模型中自注意力层的基本计算步骤。在实际应用中,通常还会考虑添加缩放(scaling)、掩码(masking)等操作来优化注意力机制的计算过程。多头自注意力则在每个头上分别进行这些计算,然后将多个头的输出拼接或串联起来,进一步提取序列中的信息
- 一个多头 Self Attention 代码实现如下:
```python
import torch
import torch.nn.functional as F
class SelfAttentionLayer(torch.nn.Module):
def __init__(self, d_model, num_heads):
super(SelfAttentionLayer, self).__init__()
self.d_model = d_model
self.num_heads = num_heads
self.d_k = d_model // num_heads
# 线性变换矩阵
self.W_q = torch.nn.Linear(d_model, d_model, bias=False)
self.W_k = torch.nn.Linear(d_model, d_model, bias=False)
self.W_v = torch.nn.Linear(d_model, d_model, bias=False)
def split_heads(self, x, batch_size):
x = x.view(batch_size, -1, self.num_heads, self.d_k)
return x.permute(0, 2, 1, 3)
def forward(self, x):
batch_size, seq_len, d_model = x.size()
q = self.W_q(x)
k = self.W_k(x)
v = self.W_v(x)
q = self.split_heads(q, batch_size)
k = self.split_heads(k, batch_size)
v = self.split_heads(v, batch_size)
# Scaled Dot-Product Attention
attn_scores = torch.matmul(q, k.transpose(-2, -1)) / (self.d_k ** 0.5)
attn_weights = F.softmax(attn_scores, dim=-1)
# Attention加权求和
output = torch.matmul(attn_weights, v)
output = output.permute(0, 2, 1, 3).contiguous().view(batch_size, seq_len, -1)
return output
# 测试自注意力层
d_model = 512
num_heads = 8
seq_len = 10
batch_size = 16
input_data = torch.randn(batch_size, seq_len, d_model)
self_attention = SelfAttentionLayer(d_model, num_heads)
output = self_attention(input_data)
print(output.size()) # 输出: torch.Size([16, 10, 512])
```
#### Transformer 中 Self Attention 计算为什么要除以特征维度数量的平方根
[参考1](https://zhuanlan.zhihu.com/p/366592542), [参考2](https://www.cnblogs.com/hisi-tech/p/16709612.html), [参考3](https://zhuanlan.zhihu.com/p/105722023)
- 上面 Transformer 代码中有使用 $\sqrt{d_{k}}$ 来对 softmax 之后的结果进行 scale,解释如下:
> We suspect that for large values of $d_{k}$, the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients. To counteract this effect, we scale the dot products by $\frac{1}{d_{k}}$. To illustrate why the dot products get large, assume that the components of q and k are independent random variables with mean 0 and variance 1. Then their dot product $q ⋅ k=\sum_{i=1}^{d_{k}}(q_{i}k_{i})$, has mean 0 and variance $d_{k}$.
>
1. 首先要除以一个数,防止输入 softmax 的值过大,导致偏导数趋近于 0;
2. 选择根号 d_k 是因为可以使得 q*k 的结果满足期望为 0,方差为 1 的分布,类似于归一化。
#### 为什么要引入位置编码 (Position Embedding)
[参考](https://zhuanlan.zhihu.com/p/106644634)
- 对于任何一门语言,单词在句子中的位置以及排列顺序是非常重要的,它们不仅是一个句子的语法结构的组成部分,更是表达语义的重要概念。一个单词在句子的位置或排列顺序不同,可能整个句子的意思就发生了偏差。
> I do not like the story of the movie, but I do like the cast.
> I do like the story of the movie, but I do not like the cast.
> 上面两句话所使用的的单词完全一样,但是所表
普通网友
- 粉丝: 1127
- 资源: 5294
最新资源
- 基于java+springboot+mysql+微信小程序的学生实习与就业管理系统 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+mysql+微信小程序的云匹面粉直供小程序 源码+数据库+论文(高分毕业设计).rar
- 基于java+springboot+mysql+微信小程序的在线选课系统 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+mysql+微信小程序的运动健康小程序 源码+数据库+论文(高分毕业设计).zip
- T113平台Linux开发环境搭建及SDK测试Demo详解
- (178039800)AP3010DN-V2-V200R010C00SPCf01刷机包
- 基于java+springboot+mysql+微信小程序的在线学习系统 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+mysql+微信小程序的展柜设计公司平面布置小程序 源码+数据库+论文(高分毕业设计).zip
- (178729196)pytorch人脸表情识别数据集(2w8训练集+7k测试集)
- (179478644)单相全桥逆变电路MATLAB仿真,原理图设计,单相全桥逆变器设计资料,ti的参考,可用做光伏并网逆变器,400V输入,220V输
- curl-8.11.1-1.ky10.x86-64.rpm、libcurl-8.11.1-1.ky10.x86-64.rpm
- (179717850)基于matlab的齿轮-轴-轴承系统的含间隙非线性动力学模型,根据牛顿第二定律,建立齿轮系统啮合的非线性动力学方程,同时也主要应
- (180339652)开源基于51单片机的多功能智能闹钟设计
- (18767822)学生信息管理文档
- 打火机部件超声波焊接组装生产线proe4.0可编辑全套技术资料100%好用.zip
- 基于java+ssm+mysql+微信小程序的高校课堂教学管理系统 源码+数据库+论文(高分毕业设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈