ChatGPT 作为最出名的LLM大模型火热持续到了今天,它是一个非常复杂的模型,功能非常强大。一个模型的复杂程度可以用其参数来说明,ChatGPT 论文中的官方说明其参数有1750 亿个。那么什么是AI模型?训练过程是什么样子?如此多的参数是如何得到的?AI模型如何调优?本文从一个简单的模型说起,带大家了解模型的定义及其训练过程!
一
什么是模型?
机器学习可以简单的理解为机器具备学习的能力,其过程可以想象成:给一批数据(x1,x2,x3,…)和对应的结果(y1,y2,y3,…)让机器学习,学习过程中不断的调优,最终得到一种处理能力f(x),当有了这种能力之后,我们可以给它一个输入10,它便能根据学习到的的处理能力返回一个结果f(10)。
这个处理能力很像数学上的一个函数,如下:
y = f(x)= b + w * x
其中_b_+_w_\*是初始建模,选了线性模型。其中b,w是通过一批数据训练出来的。
带有未知参数(parameter)的函数称为模型(model),模型在机器学习里面,就是一个带有未知参数的函数,w,b是未知的参数,特征(feature)(x1,x2,x3,…),标签(Labels)(y1,y2,y3,…)是这个函数里面已知的训练数据,经过训练得出w,b的值,便完成了一次模型训练。在这个模型里,w称为权重(weight),b称为偏置(bias)。
如上的模型定义是借用最简单的线性方程举例,其有2个参数,非常简单,便于理解。后面章节我们将基于这个最简单模型做个实例化的演练,让大家完整的体验模型的选型建模、训练、调优和发布使用的全过程。
二
Al模型训练的常见概念
AI模型训练是一个复杂的过程,涉及多个概念、步骤和内容,如下是一个简单模型训练的基本生命周期活动图:
图1.简单模型训练生命周期
在开始定义和训练模型之前,先要了解以下一些模型训练涉及的概念、步骤。
0****1
概念
数据集(Dataset):用于训练和验证模型的数据集合,通常分为训练集、验证集和测试集。
特征(Features):数据集中的输入变量,用于训练模型。
标签(Labels):数据集中的输出变量,是模型预测的目标。
模型(Model):用于学习和预测的算法结构,如神经网络、决策树等。
损失函数(Loss Function):衡量模型预测值与真实值之间差异的函数。
优化器(Optimizer):用于更新模型参数以最小化损失函数的算法。
0****2
步骤
数据收集与预处理:收集数据,进行清洗、标注、归一化、标准化等预处理操作。
数据集划分:将数据集分为训练集、验证集和测试集。
模型选择:根据问题类型选择合适的模型结构。
模型初始化:设置模型的初始参数。
训练循环(Training Loop):在训练集上多次迭代训练模型。
损失函数计算:在每次迭代后计算损失函数的值。
参数更新:使用优化器根据损失函数的梯度更新模型参数。
模型验证:在验证集上评估模型性能,调整超参数和模型结构。
模型测试:在测试集上评估模型的泛化能力。
三
实战案例
本章节我们将基于一个最简单模型做个实例化的演练,让大家完整的体验模型的选型建模、训练和测试的全过程。
0****1
实战场景
设计一个中国普通健康男子身高预测模型,基于一个样本做为训练语料,设计一个模型,通过训练、调优等处理,得到一个"中国普通健康男子身高预测模型",可以用来预测身高。
本次实践,我们采用pytorch来构建完整的模型。
0****2
数据收集和处理
按如下流程获取数据:
0****1
数据源和数据收集
取某一时期中国普通健康男子的身高数据做为样本,其中普通健康为正常的亚州黄色人种正常的群体,排除那些生病、缺陷、特殊遗传等情况。
如下为网上搜索到的2023年男生平均提高数据,我们用这个数据来作为我们的演练数据来源:
图3.网上搜索到的2023年度中国男生身高数据
02
据处理和数据及划分
我们经过简单的整理得到包含特征和标签的训练数据集,其中年龄表示特征,对应的身高表示标签,其样本数据如下图示:
年龄(岁) | 身高(cm) |
1 | 79.3 |
2 | 88.5 |
3 | 96.8 |
4 | 104.1 |
5 | 111.3 |
6 | 117.7 |
7 | 124.0 |
8 | 130.0 |
特征(Features) X | 标签(Labels) Y |
图4.包含特征和标签的训练数据集
03
训练集
为了方便代码编写,我们把上面的训练集做代码的结构化设计,转换结果为一个输入参数,年龄一个为输出参数级升高,如下:
x_data = [1, 2, 3, 4, 5, 6, 7, 8]
y_data = [79.3, 88.5, 96.8, 104.1, 111.3, 117.7, 124.0, 130.0]
0****3
模型设计
模型设计过程是一个问题的分析过程,要选择适合问题的简单模型,过程如前面流程所述:
图5.简单模型设计流程
因为我们的身高预测模型是一个比较简单的线性模型,定义如下:
y = b+w*x
其中经x,y为年龄和身高,w,b是未知的参数,w称为权重(weight),b称为偏置(bias),是准备要通过训练数据集去找出来的, 这个过程就是模型训练过程。
0****4
模型训练
接下来我们要开始进行我们的模型训练过程,里面有讲到模型训练的大概过程如下:
图6.简单模型训练过程
0****1
模型初始化
w,b是未知的,可以结合问题的初始情况进行猜测,一岁时身高为79.3,倍思身高为88.5,我们可以得到如下:
x1 = 1 ,y1 = 79.3 —> 79.3 = b + w * 1
x1 = 2 ,y1 = 88.5 —> 88.5 = b + w * 2
解方程可以得到 w = 9.2,b = 70.1,模型可初始化为如下:
y = 70.1 + 9.2 * x
我们一般用 torch.nn的nn.MSELoss()来计算损失函数:
# 定义模型
model = nn.Linear(1, 1)
0****2
迭代循环训练
继续下去,当x=3时,由上面模型得到y=107.5,此时,相对于上面表格中的训练数据3岁的身高96.8出现偏差!怎么办?
0****3
计算损失函数
对于一元线性回归(单变量线性回归)来说,学习算法为 y = ax + b 换一种写法:
线性回归实际上要做的事情就是: 选择合适的参数(θ0, θ1),使得hθ(x)方程,很好的拟合训练集。实现如何把最有可能的直线与我们的数据相拟合。
我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。 即使得损失函数最小。
损失函数含义是所有的点与模型距离平均和的公式。距离为0表示所有点都在直线上,参数为最优参数,拟合最准确。距离不为0时,要尽量找到损失函数的最小值时所对应的参数:
我们一般用 torch.nn的nn.MSELoss()来计算损失函数:
\# 定义损失函数和优化器
criterion = nn.MSELoss() \# 均方误差损失
0****4
优化器
使得损失函数最小的方法需要优化器,一般用梯度下降法,主要的计算方式为:
1)随机初始化参数确定模型θ0 、θ1,得到一个损失函数值
2)使用特殊的更新方法更新参数θ0 、θ1,使得每一次所对应的损失函数的值越来越小。
3)直到更新参数损失函数的值变化波动不大,表示斜率到达最平稳处参数不变化进而损失函数不变化,找到损失函数最小值,此时对应的参数为最优解。
4)重复迭代循环执行,直到收敛到最优,如下:
我们一般用 torch.optim的optim.SGD()来随机梯度下降优化器:
# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.01) # 随机梯度下降优化器
0****5
型训练过程
综上所述,一个完整的模型训练过程如下:
for epoch in range(1200): # 设定训练 1200 轮次
# 前向传播
outputs = model(x_train)
# 定义损失函数
loss = criterion(outputs, y_train)
ls.append(loss.item())
# 反向传播和优化
# 定义优化器
optimizer.zero_grad() # 清除梯度
loss.backward() # 反向传播计算梯度
optimizer.step() # 应用梯度更新权重
\# 打印损失值(可选)
print(f’训练 {epoch + 1} 轮,损失值 = {loss.item():.4f} , b = {model.bias.item()}, w = {model.weight.item()}')
0****5
模型训练代码实例
接下来我们要开始如下为完整的模型训练代码,已在PyCharm 2024.1 + Python39 + Anaconda3环境上调试通过:
# 引用所需要的AI模型训练库
import torch #著名的pytorch AI模型训练库
import torch.nn as nn #pytorch模型定义主库
import torch.optim as optim #pytorch AI模型训练主库
import numpy as np #著名的numpy数学处理库
import matplotlib.pyplot as plt #python 图形打印库
# 定义模型
model = nn.Linear(1, 1)
# 定义损失函数
criterion = nn.MSELoss() # 均方误差损失
# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.01) #随机梯度下降优化器
# 网上搜索到的2023年男生平均提高数据(年龄,身高)
x_data = [1, 2, 3, 4, 5, 6, 7, 8] #年龄
y_data = [79.3, 88.5, 96.8, 104.1, 111.3, 117.7, 124.0, 130.0] #对应身高
# 转换为用于训练的张量数据集
x_train = torch.tensor(np.array(x_data).astype(np.float32).reshape(-1, 1))
y_train = torch.tensor(np.array(y_data).astype(np.float32).reshape(-1, 1))
# 训练模型,重复迭代循环执行,直到收敛到最优
ls = [] #用于存放打印损失函数的趋势的过程数据
for epoch in range(10000): # 设定训练 1200 轮次
# 前向传播
outputs = model(x\_train)
\# 定义损失函数
loss = criterion(outputs, y\_train)
ls.append(loss.item())
\# 反向传播和优化
\# 定义优化器,通过调用优化器来更新模型参数
optimizer.zero\_grad() \# 清除梯度
loss.backward() \# 反向传播计算梯度
optimizer.step() \# 应用梯度更新权重
\# 损失值趋势度量监控,通过调整训练轮次,找到一个最佳(最小)的损失函数
if (epoch + 1) % 10 \== 0: \# 每10次 打印1次
\# 打印:训练轮次,当前的损失值,b,w 当前值
print(f’训练 {epoch + 1} 轮,损失值 = {loss.item():.4f} , b = {model.bias.item()}, w = {model.weight.item()}')
打印损失函数的趋势的过程数据如下(摘抄部分关键):
…训练 …
训练 1960 轮,损失值 = 1.4179 , b = 74.16850280761719, w = 7.175205707550049
训练 1970 轮,损失值 = 1.4178 , b = 74.16958618164062, w = 7.175012111663818
训练 2100 轮,损失值 = 1.4177 , b = 74.18046569824219, w = 7.173076629638672
训练 2110 轮,损失值 = 1.4177 , b = 74.18107604980469, w = 7.17296838760376
训练 2120 轮,损失值 = 1.4177 , b = 74.18168640136719, w = 7.172861099243164
训练 2130 轮,损失值 = 1.4177 , b = 74.1822738647461, w = 7.172755241394043
训练 2140 轮,损失值 = 1.4177 , b = 74.18280792236328, w = 7.1726603507995605
训练 2150 轮,损失值 = 1.4177 , b = 74.18334197998047, w = 7.172565937042236
训练 2160 轮,损失值 = 1.4177 , b = 74.18387603759766, w = 7.172471523284912
训练 2170 轮,损失值 = 1.4177 , b = 74.18435668945312, w = 7.172384262084961
训练 2180 轮,损失值 = 1.4177 , b = 74.184814453125, w = 7.172303676605225
训练 2190 轮,损失值 = 1.4177 , b = 74.18527221679688, w = 7.17222261428833
…训练 …
# 打印损失函数的趋势,找到最小损失状态
plt.plot(ls)
plt.show()
打印损失函数的趋势如下(摘抄部分关键):
图7.损失函数的趋势,找到最小损失状态
# 画出身高与体重之间的关系图
plt.scatter(x_train, y_train, color=‘red’)
# 在二维空间中画出身高和体重的分布图
plt.xlabel(‘年龄(岁)’)
plt.ylabel(‘身高(cm)’)
plt.show()
根据损失值 \= 1.4177 , b = 74.18527221679688, w = 7.17222261428833,得到模型最佳状态如下:
y = 74.18527 + 7.17222 * x
打印身高与体重之间模型,及其趋势图如下:
图8.模型及其趋势图
0****6
模型验证和测试
# 模型验证和测试,因模型简单,验证和测试数据选几个测试数据来简单检查
with torch.no_grad(): # 不需要计算梯度
# 测试1:预测 5岁身高
x_test = torch.tensor([[5]], dtype=torch.float32) # 传入测试数据
y_pred = model(x_test) # 调用模型
print(f’年龄 5岁 :身高预测为 : {y_pred.item()}') # 打印结果
# 测试1:预测 8岁身高
x_test = torch.tensor([[8]], dtype=torch.float32) # 传入测试数据
y_pred = model(x_test) # 调用模型
print(f’年龄 8岁 :身高预测为 : {y_pred.item()}')
# 打印结果
# 测试1:预测 9岁身高
x_test = torch.tensor([[9]], dtype=torch.float32) # 传入测试数据
y_pred = model(x_test) # 调用模型
print(f’年龄 9岁 :身高预测为 : {y_pred.item()}')
# 打印结果
因模型较简单,用如下的验证集和测试集合一检测:
年龄(岁) | 身高(cm)-实际样本 | 身高(cm)-模型预测 |
5 | 111.3 | 110.1 |
8 | 130.0 | 131.6 |
9 | 135.4 | 138.7 |
图9.模型验证集和测试集检测结果
集验证如下结果:
年龄 5岁 :身高预测为 : 110.04751586914062(取位小数:110.1)
年龄 8岁 :身高预测为 : 131.5587158203125(取位小数:131.6)
年龄 9岁 :身高预测为 : 138.7291259765625专家微信号:aiforTest138.7)
验证结果和实际值存在一定误差(本实例的差距不大),说明模型训练良好,若想模型更加准确,可试着加大训练集。
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
大模型&AI产品经理如何学习
求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。
1.学习路线图
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方图片前往获取
3.技术文档和电子书
这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
4.LLM面试题和面经合集
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓