当前位置: 首页 > wzjs >正文

中国小说网站策划与建设成人再就业技能培训班

中国小说网站策划与建设,成人再就业技能培训班,国家免费培训机构,清城区做模板网站建设LoRA是大模型微调方法的一种,它的特点是只在模型的 部分权重(如 QKV 矩阵) 上 添加可训练参数 通过 低秩矩阵(AB) 来优化参数更新 优点: 极大降低显存消耗(deepseek 7B 只需 10GB) 适…

LoRA是大模型微调方法的一种,它的特点是只在模型的 部分权重(如 QKV 矩阵) 上 添加可训练参数
通过 低秩矩阵(A×B) 来优化参数更新
优点:
极大降低显存消耗(deepseek 7B 只需 10GB)
适用于多任务 LoRA 适配器切换
训练速度快

例如在 Transformer 里,自注意力(Self-Attention)计算:
Y=XW,
其中 X 是input, W是原始模型的权重矩阵(全连接层).
传统的Fine-tuning就是直接对 W 进行梯度更新,导致需要存储整个 W 的更新版本,显存占用极大。

LoRA 关键思想:
不直接更新 W,而是 用两个小矩阵 A A A B B B 近似建模 W 的变化:
W ′ = W + Δ W W' = W + \Delta W W=W+ΔW
Δ W = A B \Delta W = AB ΔW=AB

其中:
A ∈ R d × r A \in \mathbb{R}^{d \times r} ARd×r
B ∈ R r × d B \in \mathbb{R}^{r \times d} BRr×d
r ≪ d r \ll d rd(低秩),一般 r=4, 8, 16,远小于 d。

所以只需要训练A 和 B,大幅减少训练参数量,用 A B AB AB近似 Δ W \Delta W ΔW, 使得最终 W ′ W' W仍然能适应新任务。
训练时,只更新A和B, W保持冻结。
推理时,计算 W + A B W+AB W+AB得到微调后的完整模型, 但A,B远小于W,开销极小。

代码简单演示一下如何在transformer的q_proj里加入LoRA
在 Transformer 里,q_proj 是 nn.Linear 层

import torch
import torch.nn as nn
import mathclass LoRAQProj(nn.Module):def __init__(self, hidden_size, r=16, lora_alpha=16):super().__init__()self.hidden_size = hidden_sizeself.r = rself.lora_alpha = lora_alphaself.scaling = lora_alpha / r  # LoRA 影响力# 原始 Q 投影层(冻结)self.q_proj = nn.Linear(hidden_size, hidden_size, bias=False)# LoRA 适配器:A 和 Bself.lora_A = nn.Linear(hidden_size, r, bias=False)  # 低秩 Aself.lora_B = nn.Linear(r, hidden_size, bias=False)  # 低秩 B# 初始化 LoRA 参数nn.init.kaiming_uniform_(self.lora_A.weight, a=math.sqrt(5))nn.init.zeros_(self.lora_B.weight)  # B 矩阵初始化为 0def forward(self, x):"""计算 Self-Attention 里的 Query 矩阵:Q = X * (W_q + AB)"""base_output = self.q_proj(x)  # 原始投影lora_output = self.lora_B(self.lora_A(x)) * self.scaling  # LoRA 适配器return base_output + lora_output  # 总输出# 测试模型
hidden_size = 512
batch_size = 4
seq_len = 10x = torch.randn(batch_size, seq_len, hidden_size)  # 输入数据
model = LoRAQProj(hidden_size)
output = model(x)print("LoRA Q-Projection Output Shape:", output.shape)  # (4, 10, 512)

训练LoRA适配器

训练时,冻结self.q_proj, 只训练lora_A 和 lora_B

# 训练 LoRA
optimizer = torch.optim.AdamW([p for n, p in model.named_parameters() if "lora" in n], lr=1e-4
)for epoch in range(10):for batch in dataloader:  # 假设 dataloader 提供训练数据optimizer.zero_grad()output = model(batch["input_ids"])loss = loss_function(output, batch["labels"])  # 计算损失loss.backward()optimizer.step()

推理时合并LoRA

LoRA 训练完成后,我们需要合并 A, B 到 q_proj
计算 W q ′ = W q + A B W_{q}' = W_{q} + AB Wq=Wq+AB,
这样,可以移除A,B,只保留 W q ′ W_{q}' Wq, 加速推理

def merge_lora(model):"""合并 LoRA 适配器到原始权重:W_q' = W_q + AB"""with torch.no_grad():model.q_proj.weight += (model.lora_B.weight @ model.lora_A.weight) * model.scaling# 移除 LoRA 适配器del model.lora_Adel model.lora_Breturn model# 进行推理时合并 LoRA
merged_model = merge_lora(model)

不过实际中,不需要我们自己去写这些代码,可以用unsloth, LLaMA-Factory 等框架来实现。

http://www.dtcms.com/wzjs/65958.html

相关文章:

  • 河北新亚建设集团网站如何做个人网站
  • wordpress 上传 阿里云网络推广优化
  • 我想自己做的知道网站域名注册后怎么使用
  • 怎么设置自己做的网站怎么做网络推广
  • 做网站开发需要学什么软件网站搜索优化价格
  • 中国建筑资讯网河北百度推广seo
  • 淘宝网网页seo如何提升排名收录
  • 建设网络强国征文seo排名点击
  • 北京市住房城乡建设委员会官方网站北京网络营销推广外包
  • 在网站上做教学直播平台多少钱青岛网站建设方案服务
  • 威海建设委员会网站百度网站官网入口
  • 河南省建设厅官方网站页面关键词优化
  • 如果启动浏览器就能直接打开一个常用的网站主页_要怎么做?seo的作用是什么
  • 西安企业建站营销策划书
  • 石家庄网站建设备案seo性能优化
  • 娱乐类网站软文代写
  • 网页制作与网站建设设计价格目前在哪个平台做推广好
  • 云平台网站优化网站推广seo
  • 国外移动端网站模板宁波网络营销策划公司
  • 成都网站建设竞价托管公司联系方式
  • 如何给一个网站做定时的更新武汉网站制作
  • 网站页面太多是否做静态有友情链接的网站
  • 专业网站建设微信官网开发网页设计怎么做
  • 怎么做狼视听网站怎么弄推广广告
  • 张浦专业做网站百度推广怎么收费的
  • 网站建设平台推广网站关键词在哪里看
  • 手机网站自适应宽度百度广告投诉电话客服24小时
  • 软件开发技术培训中心网站优化包括哪些
  • 电商网站那些功能用到静态化功能app注册推广任务平台
  • 天津做再生资源交易的网站搜狗关键词排名此会zjkwlgs