模型训练基本概念-赛博炼丹

2024-04-11 08:44

本文主要是介绍模型训练基本概念-赛博炼丹,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 拓展知识
    • 基础名词解释(语义库更新)
    • 机器学习任务流程
    • 模型训练基本流程
    • 模型训练详细流程
    • 正向传播与反向传播
      • 正向传播-求误差值
      • 反向传播-求参数值
    • 学习率
    • 激活函数
      • 激活函数-为什么希望激活函数输出均值为0?
      • 激活函数 — softmax & tanh
      • 激活函数 — ReLU(MVP:简单粗暴)
      • 激活函数 — Swish(ReLU进阶版,用的最多)
    • 损失函数
      • 损失函数 — MSE & MAE
      • 损失函数 — 交叉熵损失
    • 输出函数
    • 优化器
  • 初步总结

拓展知识

理想情况下,我们希望模型能够学习到数据的内在规律和结构,以便在未见过的数据上进行准确的预测或分类。

  • 模型训练最终获得的产出就是模型结构+一批权重参数和阈值集合
  • 模型训练和应用都需要计算-算力
  • 模型最终训练效果无法被解释推理过程和推理依据。

实际上大多数情况是黑盒训练,配置好激活函数,损失函数等参数,扔进去数据,模型自动根据配置调权重参数和阈值等。
通俗理解
自监督学习-暴力出奇迹:自监督硬找文本规律,基于庞大的数据量实现的”过拟合“行为,互联网全部数据都是训练集那么拟合训练集就变成正确的事情了。
硬找文本规律训练语言理解能力,文本挖坑硬填训练语言生成能力。

相当于背过全网知识,基于存量知识再拼接总结生成
AIGC技术的核心思想是利用人工智能算法生成具有一定创意和质量的内容。通过训练模型和大量数据的学习,AIGC可以根据输入的条件或指导,生成与之相关的内容。例如,通过输入关键词、描述或样本,AIGC可以生成与之相匹配的文章、图像、音频等。

发展障碍
硬件和能源决定大模型发展上限。
实际上核心问题:显卡-算力
理论上最终上限是能源上限,目前是算力限制(伪垄断导致,沙子有的是显卡随便造,算力应该是没有上限的)。
硬件架构:能源(电能)+内存(大模型架构)+显卡(算力)

在这里插入图片描述
通用模型的局限性
ChatGPT数据来源都是公网,因此只能解决通用公众问题,要想建立解决业务问题模型需要用公司内部数据训练专用模型
因此若公司想建立专用模型,需要各自搭建训练专属模型。

基础名词解释(语义库更新)

在这里插入图片描述

样本:一条数据例子;
特征:被观测对象的可测量特性,例如西瓜的颜色、瓜蒂、纹路、敲击声等;
特征向量:用一个 d 维向量表征一个样本的所有或部分特征;(ax,by,cz,…,zn);

1、 一个维度就是一个特征,维度越多,变量越多,未知参数越多,事物特征被分析的越彻底。
2、将具体的事物拆分为d维特征向量就是数据标注。

标签(label)/真实值:样本特征对应的真实类型或者真实取值,即正确答案;
数据集(dataset):多条样本组成的集合;
训练集(train):用于训练模型的数据集合;
评估集(eval):用于在训练过程中周期性评估模型效果的数据集合;
测试集(test):用于在训练完成后评估最终模型效果的数据集合;

训练集和评估集是训练模型时用的数据集,分别起学习和验证的作用。

模型:可以从数据中学习到的,可以实现特定功能/映射的函数;
误差/损失:样本真实值与预测值之间的误差.;
预测值:样本输入模型后输出的结果;
模型训练:使用训练数据集对模型参数进行迭代更新的过程;
模型收敛:任意输入样本对应的预测结果与真实标签之间的误差稳定;
模型评估:使用测试数据和评估指标对训练完成的模型的效果进行评估的过程;
模型推理/预测:使用训练好的模型对数据进行预测的过程;
模型部署:使用服务加载训练好的模型,对外提供推理服务;

机器学习任务流程

注意事项:

  • 数据集分类是随机分配
  • ChatGPT的出现极大的释放了数据标注的人工量。

在这里插入图片描述

模型训练基本流程

1、数据标注
简单来说:数据标注就是将具体事物拆分为多维度变量值(瓜茎卷曲程度:0.8,瓜皮颜色:0.6,瓜尺寸:0.9),代入模型(ax+by+cz=甜|酸)中能够求解出参数值(各个维度的权重值对于正确答案的影响)。

特征:被观测对象的可测量特性,例如西瓜的颜色、瓜蒂、纹路、敲击声等;
特征向量:用一个 d 维向量表征一个样本的所有或部分特征;(ax,by,cz,…,zn);

总结
1、一个维度就是一个特征,维度越多,未知参数越多,事物特征被分析的越彻底。
2、将具体的事物拆分为d维特征向量就是数据标注。

2、总训练集分为多个Batch size。
3、求和(权重参数*特征变量值)=预测值。
4、训练完之后根据真实值和预测值的Loss函数评估,不断调试不断更新参数。
模型参数一开始是随机生成的或者用已有可参考参数值。

Loss函数:衡量真实值和预测值误差到底是多少损失值(量化)
在这里插入图片描述
在这里插入图片描述

模型训练详细流程

batch_size:一次性输入到模型的样本条数(上图是batch_size=1的情况)。
batch_size大小决定GPU的消耗情况。

Batch size 是一次向模型输入的数据数量,Batch size 越大,模型一次处理的数据量越大,能够更快的运行完一个Epoch,反之运行完一个Epoch更慢。
由于模型一次是根据一个 Batch size 的数据计算 Loss,然后更新模型参数,如果Batch size 过小,单个 Batch 可能与整个数据的分布有较大差异,会带来较大的噪声,导致模型难以收敛(特例的影响)
与此同时,Batch size 越大,模型单个 Step 加载的数据量越大,对于 GPU 显存的占用也越大,当 GPU 显存不够充足的情况下,较大的 Batch size 会导致 OOM(内存溢出),因此,需要针对实际的硬件情况,设置合理的 Batch size 取值。

总结:Batch size越大越好
在合理范围内,更大的 Batch size 能够:

  • 提高内存利用率,提高并行化效率;
  • 一个 Epoch 所需的迭代次数变少,减少训练时间;
  • 梯度计算更加稳定,训练曲线更平滑,下降方向更准,能够取得更好的效果;

对于传统模型,在较多场景中,较小的 Batch size 能够取得更好的模型性能;
对于大模型,往往更大的 Batch size 能够取得更好的性能。
Batch size中样本类型比例应该尽量切合Epoch的分布比例。

在这里插入图片描述

每一层layer其实是相同结构的模型,上一层分析样本后下一层更加递进分析上一层的分析结果(特征向量)。

在这里插入图片描述

1、模型结构设置
#设置神经网络结构,各层顺序相连
model = tf.keras.models.Sequential([
#下面把每个输入的图片数据展平,从28*28变为784*1的形式tf.keras.layers.Flatten(input_shape=(28, 28)),
#下面是一个全连接层,128个节点,激活函数采用Relu tf.keras.layers.Dense(128, activation=tf.nn.relu),
# 下面让20%的节点无效,不与下一层连接tf.keras.layers.Dropout(0.2),
# 下面是一个全连接层,10个节点,激活函数采用softmax tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])2、主要训练参数
#编译模型(为模型选择优化器、目标函数和性能评价指标) 
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
#训练模型-训练集
model = model.fit(x_train, y_train, epochs=1)
#评估模型正确率-评估集
model.evaluate(x_test, y_test)

Keras中的常用层举例

  • Flatten层
    用来将输入“压平”,即把多维的输入一维化,常用在数据输入或从卷积层到全连接层的过渡。
  • Dense层(全连接层)
    对上一层的神经元进行全部连接,实现特征的非线性组合。跟下一层的神经元也是全连接的。
  • Activation层
    激活层对一个层的输出施加激活函数。 在Keras中使⽤激活对象有两种方法: ⼀是单独定义⼀个激活层;二是在前置层里面通过激活选项来定义所需的激活函数。
  • Dropout层
    为输入数据施加Dropout。Dropout在训练过程中每次更新参数时随机断开一定百分比(rate)的输入神经元,用于防止过拟合

Compile参数

  • loss:损失函数,或称目标函数,是神经网络中的性能函数,优化的目标是使损失函数最小化。具体取值在tf.keras.losses中
  • optimizer:优化器,主要是各种梯度下降算法,优化的目标是使loss最小,具体取值在tf.keras.optimizers中
  • metrics:评价指标,确定使用哪些指标展现模型的性能,具体取值在tf.keras.metrics中

正向传播与反向传播

正向传播-求误差值

Loss函数:衡量真实值和预测值误差到底是多少损失值(量化)
求和(权重参数*特征变量值)=预测值。

Loss函数计算得出真实值和预测值的正数误差后(平方,绝对值),接下来要做的就是将误差L降低为最小,有请梯度函数。

在这里插入图片描述

反向传播-求参数值

梯度:梯度是一个向量(矢量),函数在一点处沿着该点的梯度方向变化最快,变化率最大
换而言之,自变量沿着梯度方向变化,能够使因变量(函数值)变化最大。

实际就是求导找到本次Batch size所形成的损失函数的最小值对应的Wn参数值。

在这里插入图片描述
偏导数单独求解每个参数w的变化。
阿尔法是学习率,决定参数w更新幅度。
更新参数w的目的是使L值获得最大程度降低。在这里插入图片描述

学习率

学习率(Learning Rate,LR)决定了模型参数的更新幅度,学习率越高,模型参数更新越激进,即相同 Loss 对模型参数产生的调整幅度越大,反之越小。

在这里插入图片描述
注意
如果学习率太小,会导致网络 loss 下降非常慢;
如果学习率太大,那么参数更新的幅度就非常大,产生振荡,导致网络收敛到局部最优点,或者 loss 不降反增。
在这里插入图片描述

激活函数

线性函数一次函数的别称,则非线性函数函数图像不是一条直线的函数。非线性函数包括指数函数、幂函数、对数函数、多项式函数等等基本初等函数以及他们组成的复合函数。
激活函数是多层神经网络的基础,保证多层网络不退化成线性网络。
在这里插入图片描述

下图为激活(起点)函数为简单变量和常数的情况, 最终y表达式还是一个线性函数。

在这里插入图片描述
线性模型的表达能力不够,激活函数使得神经网络可以逼近其他的任何非线性函数, 这样可以使得神经网络应用到更多非线性模型中。
在这里插入图片描述
在这里插入图片描述
激活函数 — sigmoid

  • sigmoid函数具有软饱和特性,在正负饱和区的梯度 都接近于0,只在0附近有比较好的激活特性;
  • sigmoid导数值最大0.25,也就是反向传播过程中,
    每层至少有75%的损失,这使得当sigmoid被用在隐藏层的时候,会导致梯度消失(一般5层之内就会产生) ;
  • 函数输出不以0为中心,也就是输出均值不为0,会导致参数更新效率降低;
  • sigmoid函数涉及指数运算,导致计算速度较慢。

在这里插入图片描述

在这里插入图片描述

激活函数-为什么希望激活函数输出均值为0?

在这里插入图片描述
均值为零说明每个激活函数节点输出值有正有负,更具备多样性,调优更加灵活有效。
在上面的参数 wi 更新公式中, 对于所有 wi 都是一样的,xi 是 i - 1 层的激活函数的输出,如果像 sigmoid 一样,输出值只有正值,那么对于第 i 层的所有 wi ,其更新方向完全一致,模型为了收敛,会走 Z 字形来逼近最优解(一会全变大,一会全变小)。
在这里插入图片描述

激活函数 — softmax & tanh

softmax
在这里插入图片描述

在这里插入图片描述

tanh
在这里插入图片描述

在这里插入图片描述

激活函数 — ReLU(MVP:简单粗暴)

在这里插入图片描述
在这里插入图片描述

  • ReLU 是一个分段线性函数,因此是非线性函数;
  • ReLU 的发明是深度学习领域最重要的突破之一;
  • ReLU 不存在梯度消失问题
  • ReLU计算成本低,收敛速度比 sigmoid 快6倍;
  • 函数输出不以0为中心,也就是输出均值不为0,会导致参数更新效率降低;

最大问题:存在 dead ReLU 问题(输入 ReLU 有负值时,ReLU 输出为0,梯度在反向传播期间无法流动,导致权重不会更新);

激活函数 — Swish(ReLU进阶版,用的最多)

在这里插入图片描述

损失函数

损失函数(loss function)就是用来度量模型的预测值f(x)与真实值Y的差异程度(损失值) 的运算函数,它是一个非负实值函数
在这里插入图片描述
损失函数仅用于模型训练阶段,得到损失值后,通过反向传播来更新参数,从而降低预 测值与真实值之间的损失值,从而提升模型性能。
整个模型训练的过程就是在通过不断更新参数,使得损失函数不断逼近全局最优点(全局最小值)
不同类型的任务会定义不同的损失函数,例如回归任务重的MAE、MSE,分类任务中的 交叉熵损失等。

损失函数 — MSE & MAE

在这里插入图片描述
均方误差(mean squared error,MSE),也叫平方损失或 L2 损失,常用在最小二乘法中,它的思想是使得各个训练点到最优拟合线的距离最小(平方和最小)。
在这里插入图片描述

平均绝对误差(Mean Absolute Error,MAE)是所有单个观测值与算术平均值的绝对值的平均,也被称为 L1 loss,常用于回归问题中。

损失函数 — 交叉熵损失

log 函数是很多损失函数中的重要组成部分,对于 log 函数,默认的底数 a 是 e,也就是损失函数中使用的 log 函数默认a>1。
在这里插入图片描述
【二分类】
在这里插入图片描述
N为batch_size的样本数,求本批batch_size的误差平均值。
其中,yi 为样本 i 的真实标签,正类为 1,负类为 0;pi 表示样本 i 预测为正类的概率。
【多分类】
在这里插入图片描述
N为batch_size的样本数,求本批batch_size的误差平均值。
其中,M 为类别数量;yic 符号函数,样本 i 真实类别等于 c 则为 1,否则为 0;预测样本 i 属于类别的预测概率.。

实例解释
二分类
假设有一个二分类任务,正类为1,负类为0,存在一个正样本A,当模型输出其为正类 的概率为0.8时,交叉熵损失为:
𝑜 = − (1 ∗ 𝑜(0.8) + 0 ∗ 𝑜(0.2)) = − 𝑜(0.8) = 0.0969
当模型输出其为正类的概率为0.5时,交叉熵损失为:
𝑜 = − (1 ∗ 𝑜(0.5) + 0 ∗ 𝑜(0.5)) = − 𝑜(0.5) = 0.3010
由此可见,当模型预测的误差越大时,交叉熵损失函数计算得到的损失越大
因为:0<x<1时,log求导值大于1,放大原本误差。
0.8-0.6<|log(0.8)-log(0.6)|
多分类
在这里插入图片描述
在这里插入图片描述
有如下的交叉熵损失计算:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对所有样本loss求平均:
在这里插入图片描述

输出函数

对于不同的分类任务,交叉熵损失函数使用不同的激活函数(sigmoid/softmax)获得概率输出:
【二分类】
使用sigmoid和softmax均可,注意在二分类中,Sigmoid函数,我们可以当作成它是对 一个类别的“建模.”,另一个相对的类别就直接通过1减去得到。而softmax函数,是对两个类别建模,同样的,得到两个类别的概率之和是1。
【单标签多分类】
交叉熵损失函数使用softmax获取概率输出(互斥输出)。
【多标签多分类】
交叉熵损失函数使用sigmoid获取概率输出。

优化器

优化器就是在深度学习反向传播过程中,指引损失函数(目标函数)的各个参数往正确 的方向更新合适的大小,使得更新后的各个参数让损失函数(目标函数)值不断逼近全局最小
在这里插入图片描述

初步总结

正反向传播整体流程
在这里插入图片描述

1、模型结构设置
#设置神经网络结构,各层顺序相连
model = tf.keras.models.Sequential([
#下面把每个输入的图片数据展平,从28*28变为784*1的形式tf.keras.layers.Flatten(input_shape=(28, 28)),
#下面是一个全连接层,128个节点,激活函数采用Relu tf.keras.layers.Dense(128, activation=tf.nn.relu),
# 下面让20%的节点无效,不与下一层连接tf.keras.layers.Dropout(0.2),
# 下面是一个全连接层,10个节点,激活函数采用softmax tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])2、主要训练参数
#编译模型(为模型选择优化器、目标函数和性能评价指标) 
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
#训练模型-训练集
model = model.fit(x_train, y_train, epochs=1)
#评估模型正确率-评估集
model.evaluate(x_test, y_test)

Keras中的常用层举例

  • Flatten层
    用来将输入“压平”,即把多维的输入一维化,常用在数据输入或从卷积层到全连接层的过渡。
  • Dense层(全连接层)
    对上一层的神经元进行全部连接,实现特征的非线性组合。跟下一层的神经元也是全连接的。
  • Activation层
    激活层对一个层的输出施加激活函数。 在Keras中使⽤激活对象有两种方法: ⼀是单独定义⼀个激活层;二是在前置层里面通过激活选项来定义所需的激活函数。
  • Dropout层
    为输入数据施加Dropout。Dropout在训练过程中每次更新参数时随机断开一定百分比(rate)的输入神经元,用于防止过拟合

Compile参数

  • loss:损失函数,或称目标函数,是神经网络中的性能函数,优化的目标是使损失函数最小化。具体取值在tf.keras.losses中
  • optimizer:优化器,主要是各种梯度下降算法,优化的目标是使loss最小,具体取值在tf.keras.optimizers中
  • metrics:评价指标,确定使用哪些指标展现模型的性能,具体取值在tf.keras.metrics中

这篇关于模型训练基本概念-赛博炼丹的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/893599

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者