项目介绍:Layer-Selective Rank Reduction
Layer-Selective Rank Reduction(简称为 LASER)是一个用于改进语言模型(LLM)推理能力的新方法。在这个项目中,研究人员提出了一种在无需额外训练的情况下,通过改造模型本身的结构来提升模型在问答任务中的表现。
项目背景
LASER 是一种通过选择特定层的权重矩阵,用其低秩近似来替代原始矩阵的方法。具体地讲,该方法涉及三个超参数:需要修改的层号(如第16层)、参数类型(如第一个 MLP 层)以及保留的秩的比例(如0.01的秩)。使用奇异值分解(SVD)来进行低秩近似。
这一策略可以应用于多个层,并行进行多重 LASER 转换,显著提升模型性能且无需额外模型训练。项目源代码可以帮助用户复现针对三种不同语言模型和多个测试基准的实验结果。
如何运行示例代码
安装步骤
要安装运行实验所需的环境,可以使用 pip 安装需求文件。适合创建一个 Conda 环境来进行管理。以下是安装指令:
pip3 install -r requirements.txt
如果需使用 CounterFact 数据集,可以运行以下脚本进行下载,其余数据集可以在 HuggingFace 上获取。
python scripts/get_counterfact.py
运行示例代码
每个实验设置对应一个单独的文件。例如,可以运行以下指令在 Fever 数据集上应用单一 LASER 转换到 GPTJ 模型:
python3 intervention_gptj_fever.py --lname fc_in --rate 9.9 --lnum 26
这里 lnum 表示层号,lname 表示参数类型, rate 和 ρ 相关,公式为 ρ = 1 - 0.1 * rate。rate 的值范围为 [0, 10.0]。
代码组织
代码存放在 src
文件夹中,主要实验文件位于顶层,文件命名格式为 intervention_<llm-name>_<dataset-name>.py
。实验结果会保存每个数据点的准确率和对数损失。具体命令行参数和使用详情可以参考代码库。
进一步开发
对于希望在新 LLM 上应用 LASER 的开发者,需要在 laser
包中实现适配,如 Llama2 的适配示例。同时,需要在 LaserWrapper.py
中更新相关封装,以便新 LLM 能够正常工作。
项目更新与联系
- 讨论页面:开放供用户讨论新话题、提出想法和成果。
- 代码更新:2024年1月18日进行代码重构,以提升易用性和灵活性。
引用
如果您发现此项目及其代码库对您的研究有帮助,请引用以下论文:
@article{sharma2023truth,
title={The Truth is in There: Improving Reasoning in Language Models with Layer-Selective Rank Reduction},
author={Sharma, Pratyusha and Ash, Jordan T and Misra, Dipendra},
journal={arXiv preprint arXiv:2312.13558},
year={2023}
}
欲知更多项目详情,请访问项目官网:项目网站。