偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何理解模型的蒸餾和量化

人工智能
在LLM領(lǐng)域內(nèi),經(jīng)常會(huì)聽到兩個(gè)名詞:蒸餾和量化。這代表了LLM兩種不同的技術(shù),它們之間有什么區(qū)別呢?

在LLM領(lǐng)域內(nèi),經(jīng)常會(huì)聽到兩個(gè)名詞:蒸餾和量化。這代表了LLM兩種不同的技術(shù),它們之間有什么區(qū)別呢?本次我們就來詳細(xì)聊一下。

一、模型蒸餾

1.1  什么是模型蒸餾

模型蒸餾是一種知識(shí)遷移技術(shù),通過將一個(gè)大規(guī)模、預(yù)訓(xùn)練的教師模型(Teacher Model)所蘊(yùn)含的知識(shí)傳遞給一個(gè)規(guī)模較小的學(xué)生模型(Student Model),使學(xué)生模型在性能上接近教師模型,同時(shí)顯著降低計(jì)算資源消耗。

以一種更為通俗的方式來解釋:

假設(shè)你有一個(gè)特別聰明的學(xué)霸朋友(大模型),他考試能考100分,但做題速度慢(計(jì)算量大),沒法幫你考場(chǎng)作弊。

于是你想:能不能讓學(xué)霸把他的“解題思路”教給你,讓你變成一個(gè)小號(hào)的學(xué)霸(小模型),做題又快又準(zhǔn)?

這就是模型蒸餾的思想。

1.2  蒸餾的核心原理

學(xué)霸的“秘密武器”不是答案本身,而是他的“思考過程”!

  • 普通訓(xùn)練:老師(訓(xùn)練數(shù)據(jù))直接告訴你答案(標(biāo)簽),比如“這張圖是貓”。
  • 蒸餾訓(xùn)練:學(xué)霸(大模型)不僅告訴你答案,還告訴你:“這張圖80%像貓,15%像豹子,5%像狗”(軟標(biāo)簽),因?yàn)樨埡捅佣加忻兹椎奶卣鳌?/span>

小模型通過學(xué)霸的“思考細(xì)節(jié)”,能學(xué)得更深,甚至發(fā)現(xiàn)學(xué)霸自己都沒總結(jié)出的規(guī)律。

1.3  蒸餾的工作原理

  • 教師模型訓(xùn)練:首先訓(xùn)練一個(gè)性能強(qiáng)大的教師模型,該模型通常具有復(fù)雜的結(jié)構(gòu)和大量的參數(shù)。
    教師模型就是常規(guī)訓(xùn)練的LLM,比如GPT4。
  • 生成軟標(biāo)簽:教師模型對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行預(yù)測(cè),生成軟標(biāo)簽(概率分布),這些軟標(biāo)簽包含了教師模型對(duì)各類別的置信度信息。
    本質(zhì)來說就是通過softmax將預(yù)測(cè)結(jié)果轉(zhuǎn)化為概率分布,表示模型預(yù)測(cè)每個(gè)類別的可能性。
  • 學(xué)生模型訓(xùn)練:學(xué)生模型使用教師模型生成的軟標(biāo)簽進(jìn)行訓(xùn)練,同時(shí)也可以結(jié)合真實(shí)標(biāo)簽進(jìn)行聯(lián)合訓(xùn)練。通過優(yōu)化損失函數(shù)(KL散度),使學(xué)生模型的輸出盡可能接近教師模型的輸出。
    注:Kullback-Leibler (KL) 散度,也稱為相對(duì)熵,是衡量一個(gè)概率分布與第二個(gè)參考概率分布之間差異程度的指標(biāo)。 簡(jiǎn)單來說,它衡量的是兩個(gè)概率分布有多么不同。
  • 微調(diào):在蒸餾完成后,進(jìn)一步微調(diào)學(xué)生模型以提高其性能表現(xiàn)

1.4  舉個(gè)例子

比如有這樣一個(gè)任務(wù):需要識(shí)別不同動(dòng)物的圖片。

  • 學(xué)霸(大模型):看到一張貓的圖片,輸出概率:貓(95%)、豹子(4%)、狗(1%)。
  • 普通小模型:只知道正確答案是“貓”,拼命記貓的特征,但遇到豹子可能認(rèn)錯(cuò)。
  • 蒸餾后的小模型:學(xué)霸告訴它:“重點(diǎn)看耳朵形狀和花紋,貓和豹子有點(diǎn)像,但豹子花紋更復(fù)雜”。于是小模型學(xué)會(huì)區(qū)分細(xì)微差別,準(zhǔn)確率更高!

1.5  為什么蒸餾有效?

通過硬標(biāo)簽向軟標(biāo)簽的轉(zhuǎn)換,讓笨徒弟(小模型)偷師學(xué)霸(大模型)的“內(nèi)功心法”,而不是只抄答案。

  • 硬標(biāo)簽(正確答案):只告訴小模型“是貓”,就像只背答案,不懂原理。
  • 軟標(biāo)簽(概率分布):告訴小模型“貓、豹子、狗的相似點(diǎn)”,就像學(xué)霸教你舉一反三。
  • 防止學(xué)死記硬背:小模型不會(huì)過度依賴訓(xùn)練數(shù)據(jù)中的偶然特征(減少過擬合)。

1.6  模型蒸餾的具體實(shí)現(xiàn)

1.6.1  準(zhǔn)備教師模型和學(xué)生模型

教師模型:通常是一個(gè)預(yù)訓(xùn)練好的復(fù)雜模型(如ResNet-50、BERT等)。

學(xué)生模型:結(jié)構(gòu)更簡(jiǎn)單的小模型(如MobileNet、TinyBERT等),參數(shù)少但需要與教師模型兼容。

1.6.2  定義損失函數(shù)

蒸餾損失(Distillation Loss):學(xué)生模型模仿教師模型的輸出分布。

可以使用KL散度或交叉熵衡量?jī)烧叩妮敵霾町悺?/span>

學(xué)生損失(Student Loss):學(xué)生模型預(yù)測(cè)結(jié)果與真實(shí)標(biāo)簽的交叉熵。

總損失:加權(quán)結(jié)合兩種損失:

1.6.3  訓(xùn)練過程

  • 溫度參數(shù):軟化輸出分布,通常取2~5。訓(xùn)練完成推理時(shí)設(shè)置為1。
  • 數(shù)據(jù)選擇:使用教師模型生成軟標(biāo)簽的數(shù)據(jù)(可以是訓(xùn)練集或額外數(shù)據(jù))。
  • 優(yōu)化器:選擇Adam、SGD等,學(xué)習(xí)率通常低于普通訓(xùn)練(例如0.001)。
  • 訓(xùn)練細(xì)節(jié):
  • 先固定教師模型,僅訓(xùn)練學(xué)生模型。
  • 可以逐步調(diào)整溫度參數(shù)或損失權(quán)重。
import torch
import torch.nn as nn
import torch.optim as optim


# 定義教師模型和學(xué)生模型
teacher_model = ...  # 預(yù)訓(xùn)練好的復(fù)雜模型
student_model = ...  # 待訓(xùn)練的小模型


# 定義損失函數(shù)
criterion_hard = nn.CrossEntropyLoss()  # 學(xué)生損失(硬標(biāo)簽)
criterion_soft = nn.KLDivLoss(reductinotallow='batchmean')  # 蒸餾損失(軟標(biāo)簽)


# 溫度參數(shù)和權(quán)重
temperature = 5
alpha = 0.7


# 優(yōu)化器
optimizer = optim.Adam(student_model.parameters(), lr=1e-4)


# 訓(xùn)練循環(huán)
for inputs, labels in dataloader:
    # 教師模型推理(不計(jì)算梯度)
    with torch.no_grad():
        teacher_logits = teacher_model(inputs)


    # 學(xué)生模型推理
    student_logits = student_model(inputs)


    # 計(jì)算損失
    loss_student = criterion_hard(student_logits, labels)


    # 軟化教師和學(xué)生輸出
    soft_teacher = torch.softmax(teacher_logits / temperature, dim=-1)
    soft_student = torch.log_softmax(student_logits / temperature, dim=-1)


    loss_distill = criterion_soft(soft_student, soft_teacher) * (temperature**2)


    # 總損失
    total_loss = alpha * loss_distill + (1 - alpha) * loss_student


    # 反向傳播
    optimizer.zero_grad()
    total_loss.backward()
    optimizer.step()

二、模型量化

2.1  什么是模型量化

模型量化(Model Quantization)是一種通過降低模型參數(shù)的數(shù)值精度(如將32位浮點(diǎn)數(shù)轉(zhuǎn)換為8位整數(shù))來壓縮模型大小、提升推理速度并降低功耗的技術(shù)。

舉個(gè)具體例子:

假設(shè)模型記住了一群人的體重:

  • 原版:[55.3kg, 61.7kg, 48.9kg](精確到小數(shù)點(diǎn))
  • 量化版:[55kg, 62kg, 49kg](四舍五入取整)

誤差就像體重秤的±0.5kg,不影響判斷「是否超重」

2.2  為什么要模型量化?

1、體積暴減

  • 原模型像裝滿礦泉水瓶的箱子(500MB)
  • 量化后像壓扁的易拉罐(125MB)

2、速度起飛

  • 原來用大象運(yùn)貨(FP32計(jì)算)
  • 現(xiàn)在換快遞小車(INT8計(jì)算)

    NVIDIA顯卡上推理速度提升2-4倍

3、省電耐耗

  • 原本手機(jī)跑模型像開空調(diào)(耗電快)
  • 量化后像開電風(fēng)扇(省電60%)

2.3  如何進(jìn)行模型量化?

1、劃定范圍

  • 找出最輕48.9kg和最重61.7kg
  • 就像量身高要站在標(biāo)尺前

2、標(biāo)刻度

  • 把48.9-61.7kg映射到0-100的整數(shù)
  • 公式:量化值 = round( (原值 - 最小值) / 步長(zhǎng) )
  • 步長(zhǎng) = (61.7-48.9)/100 = 0.128

3、壓縮存儲(chǔ)

  • 55.3kg → (55.3-48.9)/0.128 ≈ 50 → 存為整數(shù)50
  • 使用時(shí)還原:50×0.128+48.9 ≈ 55.3kg
  • 誤差控制:就像買菜抹零,5.2元算5元,差2毛不影響做菜

2.4  常用量化方式

1、事后減肥法(訓(xùn)練后量化)

  • 適用場(chǎng)景:模型已經(jīng)訓(xùn)練好,直接壓縮
  • 操作:像用榨汁機(jī)把水果變成果汁(保持營(yíng)養(yǎng)但損失纖維)
import torch


# 準(zhǔn)備模型(插入量化模塊)
model.eval()  # 確保模型處于評(píng)估模式
model.qconfig = torch.quantization.default_qconfig  # 設(shè)置默認(rèn)量化配置
quantized_model = torch.quantization.prepare(model)  # 插入觀察器


# 收集校準(zhǔn)數(shù)據(jù)
for data, _ in calibration_data:
    quantized_model(data.to('cpu'))  # 在 CPU 上運(yùn)行,避免對(duì)模型結(jié)構(gòu)的影響


quantized_model = torch.quantization.convert(quantized_model)  # 轉(zhuǎn)換為量化模型
  • 優(yōu)點(diǎn):快!5分鐘搞定
  • 缺點(diǎn):可能損失關(guān)鍵精度

2、健康瘦身法(量化感知訓(xùn)練)

  • 適用場(chǎng)景:訓(xùn)練時(shí)就控制模型「體重」
  • 操作:像健身教練全程監(jiān)督,邊訓(xùn)練邊控制飲食
# PyTorch示例(訓(xùn)練時(shí)插偽量化節(jié)點(diǎn))
model.qconfig = torch.ao.quantization.get_default_qat_qconfig('fbgemm')
model = torch.ao.quantization.prepare_qat(model)
# 正常訓(xùn)練...
model = torch.ao.quantization.convert(model)
  • 優(yōu)點(diǎn):精度更高(像保留肌肉的減肥)
  • 缺點(diǎn):要重新訓(xùn)練(耗時(shí)久)

3、混合套餐法(混合精度量化)

  • 核心思想:重要部分用高精度,次要部分用低精度

例如:

    人臉識(shí)別:眼睛區(qū)域用FP16,背景用INT8

    語音識(shí)別:關(guān)鍵詞用16bit,靜音段用4bit

雖然說量化后模型不如原模型精度效果好,但是推理性能的提升相較性能損失在可控范圍內(nèi),性價(jià)比上量化是更優(yōu)的。

責(zé)任編輯:龐桂玉 來源: Python伊甸園
相關(guān)推薦

2024-04-26 06:46:27

量化剪枝模型

2023-11-14 16:29:14

深度學(xué)習(xí)

2024-07-19 08:00:00

深度學(xué)習(xí)知識(shí)蒸餾

2025-04-22 08:08:37

2025-02-17 07:00:00

蘋果模型

2025-01-22 09:32:30

2017-01-04 16:12:23

Kano模型赫茨伯格用戶需求

2023-12-26 11:58:55

2025-03-05 00:22:00

2020-11-02 08:51:57

中間件和洋蔥模型

2019-02-19 14:30:57

總線通訊協(xié)議多層模型

2023-08-28 00:27:11

模型監(jiān)督

2020-04-10 15:05:09

深度學(xué)習(xí)人工智能蒸餾

2024-08-19 02:35:00

模型量化深度學(xué)習(xí)

2014-05-26 10:56:46

持續(xù)交付

2024-08-23 09:20:00

AI語言模型

2023-04-10 10:32:00

模型排序

2021-01-28 19:58:48

技術(shù)團(tuán)隊(duì)效能

2024-10-31 15:00:00

AI模型

2022-06-02 10:29:23

神經(jīng)網(wǎng)絡(luò)AI計(jì)算機(jī)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)