当前位置: 首页 > 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/a/284400.html

相关文章:

  • 【FFmpeg】FFmpeg 函数简介 ③ ( 编解码相关函数 | FFmpeg 源码地址 | FFmpeg 解码器相关 结构体 和 函数 )
  • 穿越数据迷宫:C++哈希表的奇幻旅程
  • SQL集合运算
  • HarmonyOS的@State装饰器的底层实现
  • uniCloud云对象调用第三方接口,根据IP获取用户归属地的免费API接口,亲测可用
  • INQUIRE:一个包含五百万张自然世界图像,涵盖10,000个不同物种的专为专家级文本到图像检索任务设计的新型基准数据集。
  • 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 遮罩层导致的弹窗不可滚动问题