1、Batch_size
batch_size:一次训练所选取的样本数; batch_size的大小影响内存的使用情况,同时也影响模型的优化程度和速度。
batch_size设置合适时的优点:
- 并行化提高了内存的利用率,提高了训练速度
- 使得单个epoch的训练次数变少了,如果要达到相同的精度,需要增加epoch迭代次数
- 使得梯度下降的方向更加准确,batch_size=1,梯度变来变去,网络很难收敛;batch_size越大,其确定的下降方向越准;
- batch_size的选择决定了梯度下降的方向;如果数据量较小,可以选择全数据集的形式
2、激活函数
激活函数Sigmoid、Softmax、tanh、ReLU的区别
- 在输出层,一般会使用sigmoid函数,因为一般期望的输出结果概率在0~1之间,如二分类,sigmoid可作为输出层的激活函数,softmax多用于多分类。sigmoid函数计算量大反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练
- 在隐藏层,tanh函数优于sigmoid函数。因为其取值范围介于-1 ~ 1之间,有类似数据中心化的效果。
- 但实际应用中,tanh和sigmoid会在端值趋于饱和,造成训练速度减慢,故一般的深层网络的激活函数默认大多采用ReLU函数,收敛速度快。
3、优化器
1、SGD-随机梯度下降法
SGD简单且容易实现,解决了随机小批量样本的问题,由于只对一个训练样本进行梯度下降,可以提高网络参数的更新速度;但其训练时下降速度慢、准确率下降、容易陷入局部最优以及不容易实现并行处理等问题
2、Momentum(动量法)
SGD每次都会在当前位置沿梯度负方向更新,不会考虑先前的梯度方向及大小;Momentum则是通过引入一个新的变量v去积累之前的梯度,从来可以加速网络的学习过程,也就是说如果当前时刻的梯度方向与之前时刻累计的梯度方向一致,那么梯度会加强,梯度下降的幅度更大,反之,梯度下降的幅度会降低。
3、AdaGrad
SGD与Momentum存在的问题,AdaGrad(Adaptive Gradient)是在SGD基础上引入二阶动量,能够对不同的参数使用不同的学习率进行更新,对于梯度较大的参数,那么学习率就会变得较小;而对于梯度较小的参数,那么学习率就会变得较大,这样就会使在陡峭的区域下降速度快,平缓的区域下降速度慢
4、RMSProp
RMSProp是对AdaGrad的一个扩展,在非凸情况下效果更好,能够在目标函数不稳定的情况下很好的收敛,且能够快速收敛。RMSProp能够避免梯度快速降低的问题,学习率自适应能力较强,且能够在目标函数不稳定的情况下快速的收敛,比上述三种优化器表现都好
5、Adam
Adam是将Momentum与RMSProp结合起来的一种算法,不仅使用动量作为参数更新方向,而且可以自适应调整学习率。效果最好。
实现简单,计算高效,对内存需求少;
参数的更新不受梯度的伸缩变换影响;
更新的步长能够被限制在大致的范围内
4、Resnet 残差网络
常见的Resnet 50、Resnet 101
- 将靠前若干层的某一层数据输出直接跳过多层引入到后面数据层的输入部分。
- 意味着后面的特征层的内容会有一部分由其前面的某一层线性贡献。
- 深度残差网络的设计是为了克服由于网络深度加深而产生的学习效率变低与准确率无法有效提升的问题
5、全参数微调
- 数据准备
- 模型选择
- 模型初始化
- 定义损失函数
- 优化器的选择
- 模型训练
- 超参调优
- 模型评估
- 模型测试
6、模型的评价指标
- 分类中的:准确率、精确率、召回率、F1分数
- 回归中的:均方误差MSE、均方根误差RMSE等
7、目标检测算法
主流目标检测算法分为:one-stage,two-stage
- one-stage:是将候选框生成网络 + 分类网络同时训练,生成的结果同时保护位置和类别信息。
- two-stage:候选框生成网络,分类网络分开训练。
two-stage与one-stage相比,精度更高,但是计算量更大,所以运算较慢
- 常见one-stage算法:SSD,YOLOv1-v7;
- 常见two-stage算法:RCNN,Fast RCNN,Faster RCNN;
8、RCNN训练过程——特征搜索算法
RCNN——用CNN每级网络提取特征区域,然后对特征区域进行SVM分类与bbox的回归(因为是小样本所以用SVM不用softmax)
RCNN的训练过程——特征搜索算法
- 使用一种过分割手段,将图像分割成细小区域 (1k~2k 个);
- 计算所有邻近区域之间的相似性,包括颜色、纹理、尺度等;
- 将相似度比较高的区域合并到一起;
- 计算合并区域和临近区域的相似度;
- 重复3、4过程,直到整个图片变成一个区域;
9、目标检测基础知识:IoU、NMS、Bounding box regression
IoU:交并比——衡量模型生成的预选框与真实框之间的重叠程度,默认IOU>0.7为框住正例,反之负例
NMS:非极大值抑制——去除掉多余的bounding box,只保留和真实框重叠度最高的预选框;
Bounding box regression:边界框回归。使红色预选框经过一个微调回归网络,离绿色的真实预选框更接近;
10、大模型预训练与微调
预训练:是从头开始训练模型的行为:权重随机初始化,并且在没有任何先验知识的情况下开始训练,这种预训练通常是在大量数据上完成的。因此它需要非常大的数据集,并且训练可能需要长达数周的时间。
微调:是在模型预训练后进行的训练。要执行微调,首先需要获取预训练的语言模型,然后使用特定任务的数据集执行额外的训练。
为什么不直接训练最终任务,而是分两步走呢?有几个原因:
- 预训练模型已经在与微调数据集有一些相似之处的数据集上进行了训练。因此微调过程能够利用初始模型在预训练期间获得的知识(例如,对于NLP 问题,预训练模型将对您用于任务的语言有某种统计理解)。
- 由于预训练模型已经接受了大量数据的训练,因此微调需要更少的数据来获得不错的结果。
- 出于同样的原因,获得良好结果所需的时间和资源要少得多。
11、迁移学习
原文链接:https://huggingface.co/learn/nlp-course/chapter1/4?fw=pt
迁移学习是指将从一个任务中学到的知识或模型应用到另一个相关任务中的方法。在深度学习领域,迁移学习通常涉及使用预先训练好的模型来解决新的任务。这种方法可以节省训练时间,并且在数据稀缺的情况下也很有用。
下面是迁移学习的一般步骤:
- 选择预训练模型:选择一个在大规模数据集(如 ImageNet)上预训练过的模型,这样的模型已经学习到了各种特征,可以作为新任务的起点。
- 冻结预训练模型的部分或全部层:通常模型的初始层(较低层)学习到的都是通用特征(如边缘、纹理、颜色),而较高层学习到的是更加抽象和任务特定的特征。
- 修改模型结构:根据新需求,修改模型结构,替换、更改模型的输出层或添加新层,以适应新任务的特征空间和类别数量;
- 微调模型:对新任务的数据集进行训练。可以选择解冻一部分或全部层,根据任务的复杂性和数据量来微调模型。这有助于模型更好地适应新任务;
- 评估和调整:训练完成后,评估模型在新任务上的性能。根据性能调整模型结构、超参数或其他设置,直至达到满意的性能水平;
import torch
import torchvision.models as models
# 加载预训练模型(比如ResNet)
pretrained_model = models.resnet18(pretrained=True)
# 冻结模型的参数
for param in pretrained_model.parameters():
param.requires_grad = False
# 修改模型结构,替换/修改输出层
# 例如,针对新任务修改全连接层
num_ftrs = pretrained_model.fc.in_features
pretrained_model.fc = torch.nn.Linear(num_ftrs, num_classes) # num_classes是新任务的类别数
# 在新任务的数据集上训练模型
# optimizer = torch.optim.Adam(pretrained_model.parameters(), lr=learning_rate)
# criterion = torch.nn.CrossEntropyLoss()
# 训练和验证模型
# 可选:解冻部分层,进行更多微调
# 比如解冻全连接层
for param in pretrained_model.fc.parameters():
param.requires_grad = True
# 继续训练模型
# 评估模型
# 在测试集上评估模型性能
迁移学习可以在各种任务中起到很好的作用,特别是在数据有限的情况下。选择合适的预训练模型、灵活地调整模型结构和训练模型是成功应用迁移学习的关键。
12、RLHF技术
RLHF技术:人类反馈强化学习
- 在基础知识体系下训练一个初始model;
- 根据上下关系,使用人类定向指导训练奖励模型,命令驱动转变为意图驱动的过程;
- PPO强化学习策略微调第一阶段的model;
原文链接:https://blog.csdn.net/Python_Ai_Road/article/details/131757582
- PT (预训练)。Pretrain. 用海量清洗过的无标注普通文本数据训练模型的文字接龙能力。
- SFT(指令微调)。Supervised FineTune. 人工标注数十至数百万对话数据进行初步的人类偏好对齐。
- RM(奖励建模)。Reward Model。随机生成数十至数百万问题让模型多次采样回答,人工按照偏好符合程度排序打分。使用该份人工排序打分数据训练一个奖励模型,奖励模型可以对任何问题的回答按照人类偏好近似打分。
- RL(强化学习)。ReinForce Learning。随机生成数千万数亿的问题让模型回答,根据奖励模型的反馈信号朝着人类偏好对齐的方向上进一步优化模型。
13、LangChain
LangChain是个开源框架,可以将大语言模型与本地数据源相结合,该框架目前以Python或JavaScript包的形式提供;
- 大语言模型:可以是GPT-4或HuggingFace的模型;
- 本地数据源:可以是一本书、一个PDF文件、一个包含专有信息的数据库;
LangChain的工作流程:
- 读取本地数据并切成小块,并把这些小块经过编码embedding后,存储在一个矢量数据库中(下图1——6步);
- 用户提出初始问题,初始问题经过编码,再在矢量数据库中做相似性搜索获取相关信息块(下图7——10步);
- 相关信息块 + 初始问题组合形成prompt输入大模型中,大模型输出一个答案或采取一个行动(下图11——15步)