Transformer微调实战:通过低秩分解(LoRA)对T5模型进行微调(LoRA Fine Tune)

2024-08-22 16:52

本文主要是介绍Transformer微调实战:通过低秩分解(LoRA)对T5模型进行微调(LoRA Fine Tune),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

scient

scient一个用python实现科学计算相关算法的包,包括自然语言、图像、神经网络、优化算法、机器学习、图计算等模块。

scient源码和编译安装包可以在Python package index获取。

The source code and binary installers for the latest released version are available at the [Python package index].

https://pypi.org/project/scient

可以用pip安装scient

You can install scient like this:

pip install scient

也可以用setup.py安装。

Or in the scient directory, execute:

python setup.py install

scient.neuralnet

神经网络相关算法模块,包括attention、transformer、bert、lstm、resnet、crf、dataset、fit等。

scient.neuralnet.lora

实现了多个网络层的LoRA微调,包括Linear。

scient.neuralnet.lora.Linear(in_features: int, out_features: int, r:int, bias: bool = True)

Parameters

  • in_features : int
    Linear层的输入节点数.
  • out_features : int
    Linear层的输出节点数.
  • r : int
    中间层维度为r.
  • bias : bool, optional
    Linear层的bias参数.

Algorithms

LoRA的基本原理是冻结预训练的模型参数,然后在Transfomer的每一层中加入一个可训练的旁路矩阵(低秩可分离矩阵),接着将旁路输出与初始路径输出相加输入到网络当中,并只训练这些新增的旁路矩阵参数。其中,低秩可分离矩阵由两个矩阵组成,第一个矩阵负责降维,第二个矩阵负责升维,中间层维度为r,从而来模拟本征秩(intrinsic rank),这两个低秩矩阵能够大幅度减小参数量。

在这里插入图片描述

Examples

下面采用代码实例说明LoRA微调T5的过程,首先需要构建T5模型,T5模型的构建参见:Transformer经典模型实战:零基础训练一个面向中文的T5模型(Text to Text Transfer Transformer)
本示例所用的代码与上述链接中的T5模型构建、数据准备、训练、验证基本一致,不同之处是在模型构建时加入了如下LoRA部分:

pretrain_path='d:\\model.state_dict'#构建T5模型,并加载预训练的权重,后面对此预训练模型进行微调。
model=transformer.T5Transformer(vocab_size=vocab_size,dropout=0.1,ffn_size=3072)
model.load_state_dict(torch.load(pretrain_path),strict=False)#本示例的LoRA作用于attention中的query权重
for layer in model.encoder+model.decoder:# breaklayer.multi_head_attn.query=lora.Linear(layer.multi_head_attn.query.in_features, layer.multi_head_attn.query.out_features,r=64,bias=layer.multi_head_attn.query.bias)#LoRA矩阵的命名为 lora_A 和 lora_B,这里将LoRA矩阵之外的权重进行冻结
for k,v in model.named_parameters():# breakif 'lora' not in k:v.requires_grad=Falseelse:print(k,v.requires_grad)

进行如上设置,采用T5模型相同的训练方式,即可对T5进行微调,具体训练方式参见:Transformer经典模型实战:零基础训练一个面向中文的T5模型(Text to Text Transfer Transformer)

在训练前后,可以查看LoRA权重不断更新,非LoRA权重不更新,查看方式如下:

model.encoder[0].multi_head_attn.query.lora_A
model.encoder[0].multi_head_attn.query.lora_B
model.encoder[0].multi_head_attn.query.weight
model.encoder[0].multi_head_attn.query.bias

附代码中用到的tokenizer模型spiece.model、训练数据rewrite_train3.xlsx和预训练模型model.state_dict的下载地址:
链接:https://pan.baidu.com/s/12vEZBYldXvPrJTiFUEKGUw?pwd=DTFM
提取码:DTFM

这篇关于Transformer微调实战:通过低秩分解(LoRA)对T5模型进行微调(LoRA Fine Tune)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

MQTT SpringBoot整合实战教程

《MQTTSpringBoot整合实战教程》:本文主要介绍MQTTSpringBoot整合实战教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录MQTT-SpringBoot创建简单 SpringBoot 项目导入必须依赖增加MQTT相关配置编写

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi