LoRA的关键思想是在模型的某些部分(通常是Transfomer注意力机制的权重矩阵)中引入低秩矩阵(低秩就是矩阵的行和列相对大模型的矩阵比较少)。在前向传播和反向传播过程中,这些低秩矩阵与大模型的权重矩阵相结合,从而实现对模型的微调。
相比完整的训练,LoRA训练具备两个明显的优势:高效(使用的计算资源和存储空间相对很少)和灵活(由于引入的参数数量相对较少,可在一定程度上避免过拟合问题,使得模型更容易适应新任务)
主要参数
1、目标模块
这个参数仅针对 llama 类型的模型结构,默认勾选的是 q_proj 和 v_proj,,可以简单的认为是对模型的理解能力进行优化,一般这两个就够了。当然我们可以勾选更多的项目,优化模型的生成效果。但是可能会导致两个问题,一是训练要使用更多的资源,更慢;二是可能导致过拟合问题,也就是只在训练的数据上表现的好,面对新问题就不灵了。
2、Epochs
这个参数代表我们要训练多少轮。训练的轮次越多,模型从训练数据中学到的越多,生成就越精确,不过也可能会导致过拟合的问题,所以需要根据实际测试的结果进行调整。
3、LoRA Rank
维度计数,模型权重的更新量。值越大越文件越大,内容控制力更强;较低的值则表示文件更小,控制程度较低。
它决定了LoRA所添加的参数的数量和表达能力。较低的秩意味着更少的可训练参数,这在计算资源有限的情况下很有用,但可能会限制模型对复杂任务的适应能力;较高的秩则会增加可训练参数的数量,使模型能够更好地拟合特定任务,但会增加计算成本和存储需求。
对于较为简单的任务或者数据量较小的应用场景,可以选择较低的值,比如4或8。这样可以保持模型的简洁性,减少所需的存储空间和计算资源,同时避免过拟合。
对于复杂的自然语言处理任务,特别是需要捕捉精细语义关系、句法结构或领域专业知识的任务,或者大规模训练数据时,可能需要选择较高的值,如128、256甚至1024以上,这样才有足够的容量来学习到复杂的模式。更高的LoRA Rank需要更多的显存支持。
4、LoRA Alpha
数值越高代表LoRA的影响力越大,默认是LoRA Rank值的两倍。它可以控制LoRA对原始模型权重更新的强度。较大的lora_alpha
会使LoRA更新的幅度更大,这意味着模型会更快地适应特定任务,但也可能导致过拟合;较小的lora_alpha
会使更新较为温和,有助于模型的稳定性和泛化能力,但可能需要更多的训练步骤才能达到较好的性能。
5、Learning Rate
学习率。机器学习在训练过程中会不断检查自己与训练数据的偏离程度,它有个名词叫损失(loss),一个合适的学习率会让损失逐渐收敛在一个最小值。如果学习率太大,步子就会迈的太大,不能获取较好的效果;但是如果学习率太小,又会训练的很慢,成本太高。
6、LR Scheduler
学习率调度算法,默认的是线性衰减,也就是随着学习轮次的增加学习率逐渐降低。
还有使用常量、余弦退火、逆平方根、多项式时间等算法,线性衰减和余弦退火比较简单有效,平常使用的比较多,逆平方根衰减和多项式时间衰减在处理大规模数据或需要长时间训练时能提供更为稳定的收敛表现。