一文搞懂⼤模型的训练:完整的代码演示

10 阅读3分钟

大模型训练整体上分为三个阶段:预训练、SFT(监督微调)以及RLHF(基于⼈类反馈的强化学习)

image.png

预训练(Pre-training )

​ 预训练的过程类似于从婴⼉成⻓为中学⽣的阶段,在这个阶段我们会学习各种各样的知识,我们的语⾔习惯、知识体系等重要部分都会形成;对于⼤模型来说,在这个阶段它会学习各种不同种类的语料,学习到语⾔的统计规律和⼀般知识

监督微调(SFT,Supervised Fine Tuning )

​ SFT的过程类似于从中学⽣成⻓为⼤学⽣的阶段,在这个阶段我们会学习到专业知识,⽐如⾦融、法律等领域,我们的头脑会更专注于特定领域。对于⼤模型来说,在这个阶段它可以学习各种⼈类的对话语料,甚⾄是⾮常专业的垂直领域知识,在监督微调过程之后,它可以按照⼈类的意图去回答专业领域的问题

基于⼈类反馈的强化学习(RLHF,Reinforcement Learningfrom Human Feedback )

​ RLHF的过程类似于从⼤学⽣步⼊职场的阶段,在这个阶段我们会开始进⾏⼯作,但是我们的⼯作可能会受到领导和客户的表扬,也有可能会受到批评,我们会根据反馈调整⾃⼰的⼯作⽅法,争取在职场获得更多的正⾯反馈。对于⼤模型来说,在这个阶段它会针对同⼀问题进⾏多次回答,⼈类会对这些回答打分,⼤模型会在此阶段学习到如何输出分数最⾼的回答,使得回答更符合⼈类的偏好

⼤模型是如何⽣成内容的?

​ 简单来说就是靠"猜"!虽然⾮常不可思议,但事实就是这样,现阶段所有的 NLP 任务,都不意味着机器真正理解这个世界,它只是在玩⽂字游戏,进⾏⼀次⼜⼀次的概率解谜,本质上和我们玩报纸上的填字游戏是⼀个逻辑。只是我们靠知识和智慧,AI 靠概率计算。

img

基于LLM演进出最主流的两个⽅向:BERT和GPT

​ 其中 BERT 是之前最流⾏的⽅向,⼏乎统治了所有 NLP 领域,并在⾃然语⾔理解类任务中发挥出⾊(例如⽂本分类、情感倾向判断等)

​ ⽽GPT ⽅向则较为薄弱,事实上在 GPT3.0 发布前,GPT ⽅向⼀直是弱于 BERT的(GPT3.0 是 ChatGPT 背后模型 GPT3.5 的前身)

GPT和BERT的区别?

image.png

下⾯⽤程序演示「⽣成下⼀个字」。你可以⾃⼰修改 prompt 试试。还可以使⽤相同的 prompt 运⾏多次

安装 OpenAI Python 库

pip install openai -i https://pypi.tuna.tsinghua.edu.cn/simple/

然后执行下面的代码

# 查看openai api支持的基座模型
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()  # 从我们的env文件中加载出对应的环境变量
import os
os.environ["http_proxy"] = "http://127.0.0.1:1083"
os.environ["https_proxy"] = "http://127.0.0.1:1083"

client = OpenAI()
prompt = '今天天气真'

def get_completion(prompt, model="gpt-4o-mini"):  
  messages = [{"role": "user", "content": prompt}]   
  response = client.chat.completions.create( 
         model=model,        
         messages=messages,        
         max_tokens=20    
)  
  # print(response)   
   return response.choices[0].message.content
   print(get_completion(prompt))

输出内容

image.png