成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

機器學習 | 從0開始大模型之模型LoRA訓練

人工智能 機器學習
LoRA 的背后的主要思想是模型微調期間權重的變化也具有較低的內在維度,具體來說,如果W??代表單層的權重,ΔW??代表模型自適應過程中權重的變化,作者提出ΔW??是一個低秩矩陣,即:rank(ΔW??) << min(n,k) 。

1、LoRA是如何實現(xiàn)的?

在深入了解 LoRA 之前,我們先回顧一下一些基本的線性代數(shù)概念。

1.1、秩

給定矩陣中線性獨立的列(或行)的數(shù)量,稱為矩陣的秩,記為 rank(A) 。

  • 矩陣的秩小于或等于列(或行)的數(shù)量,rank(A) ≤ min{m, n}
  • 滿秩矩陣是所有的行或者列都獨立,rank(A) = min{m, n}
  • 不滿秩矩陣是滿秩矩陣的反面是不滿秩,即 rank(A) < min(m, n),矩陣的列(或行)不是彼此線性獨立的

舉個兩個秩的例子:

不滿秩不滿秩

滿秩滿秩

1.2、秩相關屬性

從上面的秩的介紹中可以看出,矩陣的秩可以被理解為它所表示的特征空間的維度,在這種情況下,特定大小的低秩矩陣比相同維度的滿秩矩陣封裝更少的特征(或更低維的特征空間)。與之相關的屬性如下:

  • 矩陣的秩受其行數(shù)和列數(shù)中最小值的約束,rank(A) ≤ min{m, n};
  • 兩個矩陣的乘積的秩受其各自秩的最小值的約束,給定矩陣 A 和 B,其中 rank(A) = m 且 rank(A) = n,則 rank(AB) ≤ min{m, n};

1.3、LoRA

LoRA(Low rand adaption) 是微軟研究人員提出的一種高效的微調技術,用于使大型模型適應特定任務和數(shù)據(jù)集。LoRA 的背后的主要思想是模型微調期間權重的變化也具有較低的內在維度,具體來說,如果W??代表單層的權重,ΔW??代表模型自適應過程中權重的變化,作者提出ΔW??是一個低秩矩陣,即:rank(ΔW??) << min(n,k) 。

為什么?模型有了基座以后,如果強調學習少量的特征,那么就可以大大減少參數(shù)的更新量,而ΔW??就可以實現(xiàn),這樣就可以認為ΔW??是一個低秩矩陣。

實現(xiàn)原理ΔW??是一個更新矩陣,然后ΔW??根據(jù)秩的屬性,又可以拆分兩個低秩矩陣的乘積,即:B?? 和 A?? ,其中 r << min{n,k} 。這意味著網絡中權重 Wx = Wx + ΔWx = Wx + B??A??x,由于 r 很小,所以 B??A?? 的參數(shù)數(shù)量非常少,所以只需要更新很少的參數(shù)。

LoRALoRA

2、peft庫

LoRA 訓練非常方便,只需要借助 https://huggingface.co/blog/zh/peft 庫,這是 huggingface 提供的,使用方法如下:

# 引入庫
from peft import get_peft_model, LoraConfig, TaskType

# 創(chuàng)建對應的配置
peft_config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q", "v"],
    lora_dropout=0.01,
    bias="none"
    task_type="SEQ_2_SEQ_LM",
)

# 包裝模型
model = AutoModelForSeq2SeqLM.from_pretrained(
    "t5-small",
)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()

LoraConfig 詳細參數(shù)如下:

  • r:秩,即上面的r,默認為8;
  • target_modules:對特定的模塊進行微調,默認為None,支持nn.Linear、nn.Embedding和nn.Conv2d;
  • lora_alpha:ΔW 按 α / r 縮放,其中 α 是常數(shù),默認為8;
  • task_type:任務類型,支持包括 CAUSAL_LM、FEATURE_EXTRACTION、QUESTION_ANS、SEQ_2_SEQ_LM、SEQ_CLS 和 TOKEN_CLS 等;
  • lora_dropout:Dropout 概率,默認為0,通過在訓練過程中以 dropout 概率隨機選擇要忽略的神經元來減少過度擬合的技術;
  • bias:是否添加偏差,默認為 "none";

3、訓練

使用 peft 庫對SFT全量訓練修改如下:

def init_model():
    def count_parameters(model):
        return sum(p.numel() for p in model.parameters() if p.requires_grad)
    
    def find_all_linear_names(model):
        cls = torch.nn.Linear
        lora_module_names = set()
        for name, module in model.named_modules():
            if isinstance(module, cls):
                names = name.split('.')
                lora_module_names.add(names[0] if len(names) == 1 else names[-1])

        return list(lora_module_names)

    model = Transformer(lm_config)
    ckp = f'./out/pretrain_{lm_config.dim}.pth.{batch_size}'
    state_dict = torch.load(ckp, map_locatinotallow=device_type)
    unwanted_prefix = '_orig_mod.'
    for k, v in list(state_dict.items()):
        if k.startswith(unwanted_prefix):
            state_dict[k[len(unwanted_prefix):]] = state_dict.pop(k)
    model.load_state_dict(state_dict, strict=False)

    target_modules = find_all_linear_names(model)
    peft_config = LoraConfig(
        r=8,
        target_modules=target_modules
    )
    model = get_peft_model(model, peft_config)
    model.print_trainable_parameters()

    print(f'LLM總參數(shù)量:{count_parameters(model) / 1e6:.3f} 百萬')
    model = model.to(device_type)
    return model

只需要修改模型初始化部分,其他不變,訓練過程和之前一樣,這里不再贅述。

參考

(1)https://cloud.tencent.com/developer/article/2372297

(2)http://www.bimant.com/blog/lora-deep-dive/

(3)https://blog.csdn.net/shebao3333/article/details/134523779

責任編輯:武曉燕 來源: 周末程序猿
相關推薦

2024-11-26 09:33:44

2024-11-04 00:24:56

2025-04-03 15:40:41

機器學習大模型DeepSeek

2024-12-09 00:00:10

2025-04-03 15:46:53

2025-01-10 08:38:10

2020-08-10 15:05:02

機器學習人工智能計算機

2017-03-24 15:58:46

互聯(lián)網

2022-03-28 09:00:00

SQL數(shù)據(jù)庫機器學習

2023-06-24 19:59:40

2022-09-06 08:00:00

機器學習金融數(shù)據(jù)科學

2017-07-11 10:19:24

淺層模型機器學習優(yōu)化算法

2018-11-07 09:00:00

機器學習模型Amazon Sage

2024-08-20 07:55:03

2017-10-09 12:55:29

機器學習KaggleStacking

2024-06-21 11:44:17

2018-05-16 09:26:41

基線模型機器學習AI

2020-10-13 07:00:00

機器學習人工智能

2018-03-09 09:00:00

前端JavaScript機器學習

2022-09-19 15:37:51

人工智能機器學習大數(shù)據(jù)
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产二区 | 波多野结衣中文视频 | 成人h动漫精品一区二区器材 | 一区二区三区小视频 | 欧美精品一区在线发布 | 中文在线a在线 | 四虎成人精品永久免费av九九 | 最新国产精品视频 | 久久久精品综合 | 最新中文在线视频 | 久久青视频 | 精品国产乱码久久久久久88av | 日韩电影a| 国产免费福利小视频 | 午夜精品一区二区三区在线观看 | 91视频大全 | 91在线第一页 | 在线免费观看a级片 | 射久久 | 天天看片天天干 | 做a网站| 天堂中文在线播放 | 中文字幕视频免费 | 91传媒在线播放 | 国产精品爱久久久久久久 | 亚洲国产精品99久久久久久久久 | 成人性视频在线播放 | 亚洲人在线观看视频 | 国产精品美女久久久久久免费 | 天堂网中文 | 色婷婷久久久久swag精品 | 亚洲国产欧美日韩 | 欧美一二三区 | 伊人久久大香线 | 99精品免费久久久久久日本 | 九色在线观看 | 国产目拍亚洲精品99久久精品 | 中文欧美日韩 | 日日夜夜精品视频 | 国产精品高潮呻吟久久 | 蜜臀网 |