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

unsloth的微调示例学习-model的构建

这几天试了试unsloth的微调,操作非常简单,但是实际上代码我都不知道啥意思,所以一步一步学习,顺便总结记录一下,记录内容都基于我和chatgpt的讨论,都是它教的。

微调语言模型中的随机种子与偏置项:深入解析

在微调大型语言模型时,诸多配置选项决定了模型的性能、效率以及可重复性。本文通过讨论实际代码示例,深入解析了这些配置的含义,并回答了有关随机种子和偏置项的问题。

代码示例

以下是用于微调语言模型的代码片段:

model = FastLanguageModel.get_peft_model(
    model,
    r = 16, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128
    target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
                      "gate_proj", "up_proj", "down_proj",],
    lora_alpha = 16,
    lora_dropout = 0, # Supports any, but = 0 is optimized
    bias = "none",    # Supports any, but = "none" is optimized
    # [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes!
    use_gradient_checkpointing = "unsloth", # True or "unsloth" for very long context
    random_state = 3407,
    use_rslora = False,  # We support rank stabilized LoRA
    loftq_config = None, # And LoftQ
)

配置项解析

  • r = 16:

    • LoRA的秩(rank),通常选择偶数值如8、16、32等,以优化计算性能。但理论上,r也可以是单数,如1、3、5等。
  • target_modules:

    • 指定需要应用LoRA的模型模块,如Transformer中的投影层。对这些模块进行低秩更新。
  • lora_alpha = 16:

    • LoRA的缩放因子,控制训练时扰动的大小。
  • lora_dropout = 0:

    • Dropout率,设为0表示不使用Dropout,有利于优化内存和计算。
  • bias = "none":

    • 是否使用偏置项,设为"none"表示不引入偏置参数,进一步优化内存使用。
  • use_gradient_checkpointing = "unsloth":

    • 使用优化版的梯度检查点技术,减少内存占用,特别适合处理长上下文任务。
  • random_state = 3407:

    • 随机种子,确保实验的可重复性。
  • use_rslora = Falseloftq_config = None:

    • 分别是是否使用Rank Stabilized LoRA和LoftQ配置,两者都为模型优化提供额外选项。

偏置项的作用

偏置项在神经网络中有以下几个主要作用:

  1. 移位功能:帮助模型更灵活地调整输出,即使在输入为零时,也能产生非零输出。
  2. 增强表达能力:增加模型的自由度,使其能更好地拟合复杂数据。
  3. 帮助模型更好地拟合数据:特别是在数据有全局偏移或趋势时,偏置项能帮助模型捕捉这种趋势。
  4. 防止过拟合与欠拟合:合适的偏置项设置能帮助模型找到最佳解,从而避免欠拟合或过拟合。

随机种子的作用

随机种子用于保证实验的可重复性。设置相同的随机种子可以控制模型训练过程中涉及的随机性操作,包括:

  • 权重初始化
  • 数据打乱
  • Dropout
  • Batch Normalization

实验的可重复性

如果两次微调设置的随机种子相同,并且其他条件(如硬件、软件环境)完全一致,那么得到的微调模型应当是相同的。但如果硬件或软件环境有差异,浮点数运算的微小不同可能导致模型最终结果略有差异。因此,要确保完全的可重复性,除了相同的随机种子外,还需要确保环境的一致性。



http://www.kler.cn/news/284400.html

相关文章:

  • 70.爬楼梯
  • python-flask-上传文件时表单提交报错:Method Not Allowed
  • 【软件测试】术语定义
  • 【微信小程序】小程序的 MobX 绑定辅助库
  • CSS 实现 两栏布局、三栏布局,以及常见的水平居中的方法
  • C++实现堆排序
  • 电脑丢失dll文件一键修复之dll确实损坏影响电脑运行
  • Ubuntu下安装和配置MQTT服务器Mosquitto
  • hdfs dn锁拆分
  • 【记忆回溯】【深度搜索】【动态规划】【字符串】【力扣】单词拆分
  • Hive SQL 练习
  • 2024 年的 Web3 游戏:演变、趋势和市场动态
  • 【云游戏】点量云流赋能大型游戏新体验
  • MP条件构造器之常用功能详解(or、and、exists、notExists)
  • 【机器学习】9. softmax(Multinomial Logistic Regression)
  • SQL数据库教案(入门必备)
  • 【C++ 第十六章】哈希
  • C# 弹出USB移动存储设备【附源码】
  • 假如我是前端面试官
  • 解决移动端使用Vant van-overlay 遮罩层导致的弹窗不可滚动问题
  • Linux 非root用户部署elasticsearch 7.17.23和ik分词器
  • cnocr 安装
  • 华为云征文|Flexus云服务器搭建基础环境
  • 聚合函数的艺术:SQL中的SUM、AVG、MAX、MIN深度解析
  • JavaScript在网页设计
  • LuaJit分析(六)luajit -bl 命令分析
  • OpenCV几何图像变换(11)极坐标转换函数warpPolar()的使用
  • 微服务事务管理
  • 计网_整体概念逻辑简单过一遍
  • 谷粒商城实战笔记-265~268-商城业务-订单服务-订单确认页模型抽取和数据填充-Feign丢失数据问题