初学者怎么入门大语言模型(LLM)?

devtools/2024/10/24 4:25:28/

如果你真心想要入门大型语言模型(LLM),只看这一个文章应该是可以入门的。但是修行下去,还是要靠自己的了!

如果你把大语言模型/LLM 当成一门技术来看,那就要看一下这门技术需要什么。

基本要求:

  • 开发语言:Python , C/C++

  • 开发框架和工具库: Numpy /Pytorch /Tensorflow /Keras /Onnx

  • 数学知识:线性代数、高数、概率、凸优化

这些东西我们假定你都已经会了,或者熟练使用了。

如果不熟,我建议你自己再学习一下。尤其是数学的几个基本公式,是要学会的。我列一下吧。

数学核心内容

1.线性代数:关键概念包括向量、矩阵、特征值和特征向量。重要的公式涉及矩阵乘法、行列式以及特征值方程Av=λv,其中 A是矩阵,v是特征向量,λ是特征值。

2.高数:基本主题是微分和积分,重点是理解极限、导数和积分的概念。函数 f(x) 在点 x的导数由f’(x)=limh→0 f(x+h)-f(x)给出,基本微积分定理将微分与积分联系起来。

3.概率:关键点包括概率公理、条件概率、贝叶斯定理、随机变量和分布。例如,贝叶斯定理由P(A|B)=P(BIA)P(A)/P(B)给出,它帮助在发生B 的情况下更新 A 的概率。

4.凸优化:关注目标函数为凸函数的问题。关键概念包括凸集、凸函数、梯度下降和拉格朗日乘数。梯度下降更新规则可以表示为 xn+1 =xn -avf(xn),其中 a是学习率。

你可以看到这些相对经常用到的数学,其实没有多难,只要你再看一下记住就好了。

开发框架

Numpy 主要是掌握各种数据的使用方法

Pytorch与Tensor、Keras 就是完成各种网络及训练的方法

你至少要能保证下面的代码里的每一行代码都能完全理解

import torch  
from torch import nn, optim  
from torchvision import datasets, transforms  
from torch.utils.data import DataLoader  
# Define a transformation to normalize the data  
transform = transforms.Compose([transforms.ToTensor (), transforms.Normalize((0.5,), (  
# Load the Fashion MNIST dataset  
train_dataset = datasets.FashionMNIST(root='./data', train=True, download=True, transfor  
test_dataset = datasets.FashionMNIST(root='./data', train=False, download=True, transfor  
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)  
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)  
# Define the neural network structure  
class FashionMNISTNN(nn.Module):  
def __init__(self):  
super(FashionMNISTNN, self).__init__()  
self.flatten = nn.Flatten()  
self.linear_relu_stack = nn.Sequential(  
nn.Linear(28*28, 512),  
nn.ReLU (),  
nn.Linear(512, 256),  
nn.ReLU(),  
nn.Linear(256, 10),  
)  
def forward(self, x):  
x = self.flatten(x)  
logits = self.linear_relu_stack(x)  
return logits  
model = FashionMNISTNN()  
# Define the loss function and optimizer  
loss_fn = nn.CrossEntropyLoss()  
optimizer = optim.Adam(model.parameters(), lr=0.001)  
# Function to train the model  
def train(dataloader, model, loss_fn , optimizer):  
size = len(dataloader.dataset)  
model.train()  
for batch, (X, y) in enumerate(dataloader):  
# Compute prediction and loss  
pred = model(X)  
loss = loss_fn(pred, y)  
# Backpropagation  
optimizer.zero_grad()  
loss.backward()  
optimizer.step()  
if batch % 100 == 0:  
loss, current = loss.item(), batch * len(X)  
print(f"loss: {loss:>7f} [{current:>5d}/{size:>5d}]")  
# Function for testing the model  
def test(dataloader, model, loss_fn):  
size = len(dataloader.dataset)  
num_batches = len(dataloader)  
model.eval()  
test_loss, correct = 0, 0  
with torch.no_grad():  
for X, y in dataloader:  
pred = model(X)  
test_loss += loss_fn(pred, y).item()  
correct += (pred.argmax(1) == y).type(torch.float).sum().item()  
test_loss /= num_batches  
correct /= size  
print(f"Test Error: \n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \  
# Train the model  
epochs = 5  
for t in range(epochs):  
print(f"Epoch {t+1}\n-------------------------------")  
train(train_loader, model, loss_fn, optimizer)  
test(test_loader, model, loss_fn)  
print("Done!")  

注意是每一行

Transformer基础

做为 LLM 的基础模型,你要想入门,那对 Transformer 这个模型要了如指掌才成!

而 Transformer 的基本图像就是下面这样的:


推荐自己手写一个 Transformer 模型,至少要写一个 Attention 的结构。还要看懂下面这个图。你就能体会到一个至简的模型是怎么遵循 Scaling Law的,AGI 可能就在这个简单的重复与变大中了!


但是Transformer 这么简单的东西怎么就这么厉害了呢? 整个大模型已经发展两三年了,如果你再不跟上,可能很快就淘汰了。

这些是个基础了。但是对于 LLM 来讲吧,如果你想自己继续研究,那可能要接触的就是下面这些东西了。

  • Prompta 工程

  • RAG 技术

  • Fine-Tune 技术

  • LLM Training From Scratch

  • LLM 部署及优化技术

这几项基本上是针对效果及成本的要求从低到高的顺序,也是技术上从简单到难的顺序列出来的

1.Prompt 工程:涉及设计和完善给LLM的Prompt,来得到最准确或最有用的Response。核心原则是通过精心设计的问题或陈述引导LLM生成所需的输出。它需要理解LM的能力和限制,并且通常涉及反复试验以找到最有效的提示。基本技术就是三件事:
指令角色、精确表达、要求输出格式。

2.RAG 技术(检索增强生成):RAG 是一种方法,结合了检索器模型来获取相关文档或数据和生成器模型来产生最终输出。这种技术通过外部信息丰富LLM的响应,提高其准确性和可靠性特别是对于知识密集型任务。关键是有效整合检索和生成过程,以利用现有知识和生成能力。
你需要了解的就是 LangChain

3.Fine-Tune 技术:微调涉及在特定数据集或特定任务上轻微调整预训练模型参数以提高性能。这种方法允许利用大型预训练模型并将它们适应于专门的要求,无需进行大量重新训练。本质是保持LM的一般能力,同时为特定用例进行优化。
没啥好说的了,自己准备数据针对特定任务训练

4.LLM 从零开始训练:从头开始训练大型语言模型(LLM)意味着在不依赖现有预训练权重的情况下构建模型。这个过程涉及收集大量数据集、设计模型架构,然后在高性能计算资源上长时间训练模型。核心挑战是需要大量的计算能力和数据,以及有效管理训练过程的专业知识。
如果你没有在一个顶级的公司或者研究团队,想想就好了。

5.LLM 部署及优化技术:部署和优化LLM涉及有效提供预测的策略,同时有效管理计算资源。这包括模型量化(减少数字的精度以节省内存)、模型修剪(移除不那么重要的权重)和蒸馏(训练-个较小的模型来模仿一个较大的模型)。目标是减少模型的大小和推理时间,而不会显著影响其性能,使其适合生产环境。


http://www.ppmy.cn/devtools/128356.html

相关文章

给哔哩哔哩bilibili电脑版做个手机遥控器

前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而,电脑版的bilibili不能通过手机控制视频翻页和调节音量,这意味着观看视频时需要一直坐在电脑旁边。那么,有没有办法制作一个手机遥控器来控制bilibili电脑版呢? 首先…

pdf文件怎样一张纸打印四页

在日常工作和学习中,我们经常会遇到需要将PDF文件中的多页内容合并打印到一张纸上的情况,比如将四页内容打印到一张A4纸上,以节省纸张和成本。同时,在打开pdf文件的方式,一般都是通过电脑浏览器打印,因此对…

九、pico+Unity交互开发——触碰抓取

一、VR交互的类型 Hover(悬停) 定义:发起交互的对象停留在可交互对象的交互区域。例如,当手触摸到物品表面(可交互区域)时,视为触发了Hover。 Grab(抓取) 概念&#xff…

中小型医院网站:Spring Boot开发策略

2 相关技术简介 2.1 Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,…

Linux_进程终止_进程等待_进程替换

进程终止 不知道大家想过没有&#xff0c;我们写的main()函数的返回值是返回给谁的呢&#xff1f;其实是返回给父进程或者系统的。 int main() {std::cout << "hello" << std::endl;return 10; }运行该代码&#xff0c;输入hello&#xff0c;没问题&am…

Jetpack架构组件_LiveData组件

1.LiveData初识 LiveData:ViewModel管理要展示的数据&#xff08;VM层类似于原MVP中的P层&#xff09;&#xff0c;处理业务逻辑&#xff0c;比如调用服务器的登陆接口业务。通过LiveData观察者模式&#xff0c;只要数据的值发生了改变&#xff0c;就会自动通知VIEW层&#xf…

Spring Boot + Vue 前后端分离项目总结:解决 CORS 和 404 问题

Spring Boot Vue 前后端分离项目总结&#xff1a;解决 CORS 和 404 问题 在进行前后端分离的项目开发中&#xff0c;我们遇到了几个关键问题&#xff1a;跨域问题 (CORS) 和 404 路由匹配错误。以下是这些问题的详细分析和最终的解决方案。 问题描述 跨域请求被阻止 (CORS) 当…

11.学生成绩管理系统(Java项目基于SpringBoot + Vue)

目录 1.系统的受众说明 2 总体设计 2.1 需求概述 2.2 软件结构 3 模块设计 3.1 模块基本信息 3.2 功能概述 3.3 算法 3.4 模块处理逻辑 4 数据库设计 4.1 E-R图 4.2 表设计 4.2.1 管理员信息表 4.2.2 课程基本信息表 4.2.3 课程扩展信息表 4.2.4 专业信…