Lora微調(diào)實(shí)操教程(上):人話版概念詳解(附案例)

知識星球中,上個月有個關(guān)于讓 LLM 學(xué)習(xí)公司內(nèi)部業(yè)務(wù)和產(chǎn)品邏輯中,微調(diào)、RAG、提示詞三者效果對比的提問。我當(dāng)時給出了一個經(jīng)典的客服場景數(shù)據(jù)集構(gòu)建示例,鑒于后續(xù)又陸續(xù)有人評論和私信來問,從這篇開始,專門寫兩篇內(nèi)容來做個粗淺的分享。

之所以要分兩篇內(nèi)容,我想還是在做具體的微調(diào)案例演示前,把一些基本概念盡可能的講清楚,這樣感興趣的話在復(fù)現(xiàn)下期案例和二開時,能夠在自己的業(yè)務(wù)場景下對參數(shù)調(diào)優(yōu)更有的放矢些。

來源:https://edu.aliyun.com/course/3130200/?spm=a2cwt.28120018.3130200.1.56db1ee9FbCTnW
這篇試圖用人話講清楚:損失函數(shù)、代價函數(shù)、梯度下降、神經(jīng)網(wǎng)絡(luò)、LoRA 微調(diào)、學(xué)習(xí)率等基礎(chǔ)的概念和訓(xùn)練過程的邏輯鏈條。
以下,enjoy:
1、人類智能 vs 機(jī)器智能
在正式開始介紹前,先提個我在前兩個月聽到的一期"晚點(diǎn)聊 LateTalkd"的播客:《與馬毅聊智能史:“DNA 是最早的大模型”,智能的本質(zhì)是減熵》。對話對象是香港大學(xué)計(jì)算與數(shù)據(jù)科學(xué)學(xué)院院長馬毅教授,他在播客中介紹了些人類智能的演進(jìn)與大模型的學(xué)習(xí)過程的類比闡述,我轉(zhuǎn)述其中一些和微調(diào)相關(guān)的精彩觀點(diǎn),作為這篇的導(dǎo)覽部分。

對話中,他首先把早期生命通過 DNA 編碼和傳承對外部世界的認(rèn)知,比作 LLM 的‘預(yù)訓(xùn)練’階段。這個積累普適性知識的過程,類似于早期生物完全依賴遺傳物質(zhì)(DNA 這個‘大模型’)的本能地生存。那個時候人類智能的進(jìn)化主要體現(xiàn)在物種層面的變異與自然選擇,這和機(jī)器強(qiáng)化學(xué)習(xí)的機(jī)制,通過環(huán)境的‘獎勵’(生存與繁衍)來優(yōu)化‘模型’有異曲同工之妙。
在上面討論的背景下,一個關(guān)鍵的轉(zhuǎn)折點(diǎn)發(fā)生在約 5.5 億年前,神經(jīng)系統(tǒng)和視覺的出現(xiàn),賦予了生物個體一項(xiàng)新的或者說革命性的能力:在繼承自父母的‘預(yù)訓(xùn)練大模型’(DNA)之外,能夠進(jìn)一步的通過自身的感知(如視覺、觸覺)與所處的具體環(huán)境互動,形成新的、個性化的記憶。而這正是人類智能發(fā)展中的‘微調(diào)’雛形。對話中提到這種個體學(xué)習(xí)能力的出現(xiàn),也直接促成了寒武紀(jì)的生命大爆發(fā)。(注:因?yàn)閭€體能夠更靈活地適應(yīng)環(huán)境,大大提高了生存能力,進(jìn)而促進(jìn)了物種的多樣性。)

來源:本人生成
更意思的是,對話中提到從低等生物到高等生物,個體對‘預(yù)訓(xùn)練模型’(先天遺傳)的依賴逐漸減少,而后天學(xué)習(xí)(‘微調(diào)’)的重要性則日益凸顯。其中,舉了鳥和人類的例子對比說明。比如鳥類可能在幾個月內(nèi)就需要獨(dú)立自己覓食,但是哺乳動物,尤其是像人這樣的高等智慧生物,則需要長達(dá)十幾年甚至更久與父母相處、向環(huán)境學(xué)習(xí)(接受社會毒打),不斷‘微調(diào)’和充實(shí)自己的知識與技能。這似乎清晰地揭示了一個趨勢,就是越是高級的智能形態(tài),越傾向于在強(qiáng)大的‘預(yù)訓(xùn)練’基礎(chǔ)上,進(jìn)行更深入、更個性化的‘微調(diào)’,以應(yīng)對復(fù)雜多變的世界。這也是下文要開始展開討論的重點(diǎn),什么是微調(diào),它背后的基本原理,以及為什么它是提升模型在特定任務(wù)上表現(xiàn)的關(guān)鍵。
2、機(jī)器學(xué)習(xí)的本質(zhì)
在傳統(tǒng)編程時,我們需要明確地定義規(guī)則,并把這些規(guī)則體現(xiàn)成函數(shù)或者算法。比如,對于對于最基礎(chǔ)的函數(shù) f(x)=ax ,預(yù)先知道參數(shù) a 的值,可以通過編程根據(jù)特定輸入 x 輸出對應(yīng)的 y 。但是,在現(xiàn)實(shí)世界的復(fù)雜問題中,規(guī)則本身是不明確的,或者很難用精確的數(shù)學(xué)表達(dá)式來定義,這也算是機(jī)器學(xué)習(xí)的緣起。

來源:本人生成
機(jī)器學(xué)習(xí)的解決思路是,不依賴預(yù)先定義的顯式規(guī)則,而是通過分析大量數(shù)據(jù)(訓(xùn)練集),自動地從當(dāng)中學(xué)習(xí)和發(fā)現(xiàn)潛藏的模式與規(guī)律,并用這些規(guī)律來構(gòu)建模型(也就是找到合適的參數(shù),比如上個例子中的 a)。這個過程也就是傳說中的“訓(xùn)練模型”。而用訓(xùn)練好的模型就可以對沒見過的數(shù)據(jù)進(jìn)行預(yù)測。
對比來理解,傳統(tǒng)編程屬于“規(guī)則驅(qū)動”,人告訴計(jì)算機(jī)怎么做;而機(jī)器學(xué)習(xí)是“數(shù)據(jù)驅(qū)動”,計(jì)算機(jī)通過學(xué)習(xí)大量案例來總結(jié)“怎么做”。也好比學(xué)生除了背數(shù)學(xué)公式之外,通過大量的刷題來掌握到更靈活的解題思路,從而實(shí)現(xiàn)舉一反三。
3、預(yù)訓(xùn)練和微調(diào)
訓(xùn)練模型大致分為兩個階段,分別是預(yù)訓(xùn)練(Pre-training)和微調(diào)(Fine-tuning)。(我們一般看到的閉源或者開源模型都是屬于預(yù)訓(xùn)練的結(jié)果)
3.1預(yù)訓(xùn)練- 構(gòu)建通用知識體系:
預(yù)訓(xùn)練階段是在大規(guī)模通用的數(shù)據(jù)集(如維基百科、書籍這種)上訓(xùn)練模型,目的是讓 LLM 學(xué)習(xí)到廣泛的基礎(chǔ)知識和基本的推理能力。類比來說,除了上述提到的人類 DNA 這種描述,也好比上大學(xué)時前兩年的通識教育,主要目的是獲得一個廣泛的知識背景和基礎(chǔ)技能的基座 LLM,能夠理解和生成多樣化的內(nèi)容。

來源:網(wǎng)絡(luò)搜索
3.2微調(diào) - 適配特定任務(wù)需求:
在預(yù)訓(xùn)練 LLM 的基礎(chǔ)上,微調(diào)階段主要是使用與特定目標(biāo)任務(wù)相關(guān),且規(guī)模相對較小且通常帶有標(biāo)注的數(shù)據(jù)集對模型進(jìn)行進(jìn)一步訓(xùn)練。這種“預(yù)訓(xùn)練 + 微調(diào)”的模式,有個最大的好處在于,為了深度適配垂直場景的業(yè)務(wù)需求,不需要從零開始訓(xùn)練一個 LLM,從而可以顯著節(jié)省了計(jì)算資源和時間,并且能夠利用預(yù)訓(xùn)練階段的通用能力來提升特定任務(wù)的性能。
為了更加直觀的理解,以qwen2.5-1.5b-instruct (也是下篇文章中實(shí)際演示微調(diào)過程的底座 LLM)為例,粗略看下從零訓(xùn)練一個模型的時間和硬件需求。

來源:網(wǎng)絡(luò)搜索
顯存要求
1.5B 參數(shù)占用內(nèi)存(假設(shè)按全精度 FP32,單參數(shù)占用 4 字節(jié)):1.5*{10^9}*4/{2^{30}}≈ 5.59GB。而一般對模型進(jìn)行訓(xùn)練,大概需要模型參數(shù)內(nèi)存的 7~8 倍,也就是約45GB的顯存。這個顯存占用基本上超過了大多數(shù)顯卡的配置。
訓(xùn)練時間估算
訓(xùn)練數(shù)據(jù)總 tokens = 200B(約 30 萬本紅樓夢),批處理大?。? 卡并行) = 2k tokens,每秒 tokens = 150 tokens/卡 × 8 卡 = 1200 tokens/s

另外,實(shí)際情況需考慮數(shù)據(jù)預(yù)處理、檢查點(diǎn)保存、分布式通信開銷,實(shí)際時間可能延長 20-50% 。若數(shù)據(jù)量更大(如 1T tokens),時間可能達(dá)數(shù)月。訓(xùn)練成本這里就不舉例了,我一般是通過云服務(wù)按量計(jì)費(fèi)。
4、神經(jīng)網(wǎng)絡(luò)--多層處理機(jī)制
多層神經(jīng)網(wǎng)絡(luò)是當(dāng)前復(fù)雜機(jī)器學(xué)習(xí)任務(wù)的基礎(chǔ),以下根據(jù)重要概念逐個進(jìn)行類比說明。

來源:https://edu.aliyun.com/course/3130200/?spm=a2cwt.28120018.3130200.1.56db1ee9FbCTnW
4.1什么是神經(jīng)元和激活
想了很多例子,最后覺得用燈泡開關(guān)打比方應(yīng)該是最貼切的。想象神經(jīng)元就像一個智能燈泡開關(guān):
輸入信號 → 神經(jīng)元判斷 → 是否亮燈
比如:
輸入信號 = 2.5 → 神經(jīng)元:夠強(qiáng),亮燈! → 輸出 = 2.5
輸入信號 = -0.3 → 神經(jīng)元:太弱,不亮 → 輸出 = 0神經(jīng)元被激活 = 燈泡亮了,信號被傳遞下去
神經(jīng)元未激活 = 燈泡不亮,信號被阻斷
4.2什么是激活函數(shù)
激活函數(shù)簡單來說就是一個"開關(guān)規(guī)則",復(fù)雜點(diǎn)來說為神經(jīng)網(wǎng)絡(luò)引入非線性變換能力,使得網(wǎng)絡(luò)能夠?qū)W習(xí)和表達(dá)遠(yuǎn)超線性關(guān)系的復(fù)雜模式。這個類似人的大腦的判斷機(jī)制,每一層思考都有一個"篩選器"(激活函數(shù)),決定哪些信息重要,哪些可以忽略。簡單的例子是:
if 輸入 > 0:
輸出 = 輸入 (燈亮,信號通過)
else:
輸出 = 0 (燈不亮,信號阻斷)具體來說,
RELU(3) = 3 ? 信號強(qiáng),神經(jīng)元亮
RELU(0.1) = 0.1 ? 信號弱但正,神經(jīng)元亮
RELU(-2) = 0 ? 負(fù)信號,神經(jīng)元不亮
RELU(-0.5) = 0 ? 負(fù)信號,神經(jīng)元不亮4.3什么是非線性變換

來源:本人生成
線性變換(沒有激活函數(shù))
輸入 → 簡單計(jì)算 → 輸出
就像:x → 2x → 結(jié)果
問題:無論堆疊多少層,結(jié)果都是簡單的倍數(shù)關(guān)系
2x → 3(2x) → 4(6x) = 24x
始終是輸入的倍數(shù)非線性變換(有激活函數(shù))
輸入 → 計(jì)算 → 激活函數(shù)判斷 → 輸出
就像:x → 2x → 如果結(jié)果>0就保留,否則變成0用識別數(shù)字的例子進(jìn)一步說明下可能更加直觀。假設(shè)要識別手寫數(shù)字"8",只有線性變換時,只能學(xué)會:"如果這里有一條線,就加分" ,這種無法識別復(fù)雜圖案。而使用非線性變換時,
第1層:識別基本線條(橫線、豎線、曲線)
第2層:組合線條識別基本形狀(圓圈、直角)
第3層:組合形狀識別數(shù)字(兩個圓圈 = "8")
每層都有激活函數(shù)決定:"這個特征重要嗎?要不要傳遞給下一層?"4.4多層神經(jīng)網(wǎng)絡(luò)的工作原理
用工廠流水線比喻
為了接著對比說明,想象一個識別手寫數(shù)字的工廠流水線:
原材料(圖片)
↓
第1層車間:找線條
├─ 工人A:找橫線 → 激活函數(shù)判斷:"找到了!" → 輸出信號
├─ 工人B:找豎線 → 激活函數(shù)判斷:"沒找到" → 輸出0
└─ 工人C:找曲線 → 激活函數(shù)判斷:"找到了!" → 輸出信號
↓
第2層車間:找形狀
├─ 工人D:組合線條找圓圈 → 激活函數(shù)判斷:"找到了!"
├─ 工人E:組合線條找直角 → 激活函數(shù)判斷:"沒找到"
└─ ...
↓
第3層車間:識別數(shù)字
└─ 工人F:看到圓圈組合 → 激活函數(shù)判斷:"是數(shù)字8!"激活函數(shù)就是每個工人的判斷標(biāo)準(zhǔn):"這個特征夠明顯嗎?要不要告訴下一層?"
4.5數(shù)學(xué)表達(dá)的演進(jìn)
上面講了一些必要的概念和示例,最后看下標(biāo)準(zhǔn)的教科書上的說法或許能稍微理解下了。
數(shù)學(xué)表達(dá)
一層神經(jīng)網(wǎng)絡(luò)一般表示為Y=σ(W?X),大寫的輸入X和輸出Y分別表示它們是多維的,σ是激活函數(shù),W是假定的函數(shù)f的參數(shù)。而 k 層神經(jīng)網(wǎng)絡(luò)可以表示為Y=σ(W_k ? σ(W_2 ?σ(W_1?X)))。
激活函數(shù)是神經(jīng)網(wǎng)絡(luò)中引入非線性變換的關(guān)鍵組件,用于決定神經(jīng)元是否被激活并傳遞信息。比如最常用的激活函數(shù) RELU 可以寫成:

來源同圖1
當(dāng) input≤0時,神經(jīng)元不激活;當(dāng)input>0時,神經(jīng)元激活,開始向輸出傳遞信息。一層神經(jīng)網(wǎng)絡(luò)展開后可以寫成這樣:(假設(shè)X為 3×2 維矩陣,Y為 2×2維矩陣)

來源同圖1
換句話說,W 是權(quán)重矩陣(即模型的參數(shù)),多層神經(jīng)網(wǎng)絡(luò)是通過層層疊加,構(gòu)建出表達(dá)能力極強(qiáng)的深度模型。下文要介紹的模型學(xué)習(xí)過程,就是通過優(yōu)化算法(如梯度下降)不斷調(diào)整這些權(quán)重矩陣 W,使得網(wǎng)絡(luò)對給定輸入的輸出盡可能接近真實(shí)目標(biāo)。
# 場景:已經(jīng)有了一個預(yù)訓(xùn)練好的模型
已知:神經(jīng)網(wǎng)絡(luò)的架構(gòu)(相當(dāng)于f(x) = ax函數(shù)形式,實(shí)際比如Transformer)
已知:預(yù)訓(xùn)練好的參數(shù)值(比如 a = 2.3)
問題:這些參數(shù)對特定任務(wù)不是最優(yōu)的
目標(biāo):調(diào)整這些參數(shù),讓模型在特定任務(wù)上表現(xiàn)更好5、模擬考試與糾錯本
在機(jī)器學(xué)習(xí)中,損失函數(shù)和代價函數(shù)發(fā)揮了量化評估體系的作用。這兩個概念用小學(xué)生(小明)學(xué)習(xí)數(shù)學(xué)競賽的場景為例進(jìn)行介紹。
5.1損失函數(shù)(Loss Function)
損失函數(shù)可以類比為單道題的"錯誤程度",假設(shè)小明在做一道數(shù)學(xué)競賽題是計(jì)算三角形面積,已知底邊 18 米,高 6 米。正確答案是 54 平方米,而小明的答案是 60 平方米。有以下集中不同的損失計(jì)算方法:

來源同圖1
簡單差值
損失 = |正確答案 - 小明答案| = |54 - 60| = 6平方差值
損失 = (正確答案 - 小明答案)2 = (54 - 60)2 = 36
優(yōu)勢:
- 差距越大,懲罰越重(平方放大效應(yīng))
- 避免正負(fù)抵消問題
- 數(shù)學(xué)性質(zhì)良好,便于優(yōu)化損失函數(shù)的計(jì)算
以小明學(xué)習(xí)識別手寫數(shù)字為例,正確答案是 8,小明的判斷是 90%可能是"3",10%可能是"8"。
# 小明對10個數(shù)字(0-9)的預(yù)測概率:
數(shù)字0: 0%
數(shù)字1: 0%
數(shù)字2: 0%
數(shù)字3: 90% = 0.9 ← 小明認(rèn)為最可能是3
數(shù)字4: 0%
數(shù)字5: 0%
數(shù)字6: 0%
數(shù)字7: 0%
數(shù)字8: 10% = 0.1 ← 正確答案是8,但小明只給了10%的概率
數(shù)字9: 0%
# 小明對"8"的預(yù)測概率 = 0.1
# 應(yīng)用交叉熵公式
損失 = -log(0.1)
= -log(10^(-1))
= -(-1) × log(10)
= 1 × log(10)
≈ 1 × 2.3
= 2.3
解釋:小明把"8"識別成"3"的置信度很高,
但實(shí)際上完全錯了,所以損失很大注:
交叉熵?fù)p失 = -log(正確答案的預(yù)測概率),這個公式的核心思想是:
如果模型對正確答案很有信心(概率接近 1),損失接近 0
如果模型對正確答案沒信心(概率接近 0),損失很大
通過這種方式,鼓勵模型對正確答案給出高概率預(yù)測
5.2代價函數(shù)(Cost Function)
實(shí)際項(xiàng)目中,大家經(jīng)常會將代價函數(shù)、損失函數(shù)兩個概念混用,但從定義上來說,代價函數(shù)是整體學(xué)習(xí)效果的"綜合評分",換句話說,損失函數(shù)是評估單道題的表現(xiàn),而代價函數(shù)是評估整套試卷的表現(xiàn)。假設(shè)小明做了一套包含 100 道數(shù)學(xué)題的測試:
第1題損失:2.3(識別錯誤,損失大)
第2題損失:0.1(基本正確,損失?。?第3題損失:1.5(部分錯誤,損失中等)
...
第100題損失:0.3(基本正確,損失小)
代價函數(shù)(平均損失):
J = (2.3 + 0.1 + 1.5 + ... + 0.3) / 100 = 0.87代價函數(shù)的可視化
想象小明的學(xué)習(xí)狀態(tài)可以用一個"成績地形圖"來表示,則學(xué)習(xí)目標(biāo)就是找到地形圖的最低點(diǎn)(代價函數(shù)最小值)
代價函數(shù)值(錯誤率)
↑
| /山峰\ ← 學(xué)習(xí)效果很差的區(qū)域
| / \
| / \
| / \
最優(yōu)點(diǎn) → |/____________\→ 學(xué)習(xí)方法參數(shù)
/
/
↙具體優(yōu)化過程
嘗試 a = 2.0:J(2.0) = 1.2 ? 有改進(jìn)
嘗試 a = 1.8:J(1.8) = 0.9 ? 繼續(xù)改進(jìn)
嘗試 a = 1.5:J(1.5) = 0.6 ? 更好了
嘗試 a = 1.2:J(1.2) = 0.8 ? 開始變差
結(jié)論:a = 1.5 附近可能是最優(yōu)解不同損失函數(shù)的區(qū)別
實(shí)際應(yīng)用中,不同任務(wù)需要不同的損失函數(shù),以下做個簡單對比示例:
# 數(shù)學(xué)計(jì)算題(回歸問題)
損失函數(shù):均方誤差
原因:關(guān)注數(shù)值的精確度
# 圖像識別題(分類問題)
損失函數(shù):交叉熵?fù)p失
原因:關(guān)注分類的準(zhǔn)確性
# 文本生成題(序列生成)
損失函數(shù):序列損失
原因:關(guān)注生成內(nèi)容的連貫性6、訓(xùn)練過程的 5 個基礎(chǔ)概念
這部分同樣用小明學(xué)習(xí)的例子解釋,各位在看的時候記得對比上述例子更好理解概念間的差別。
6.1批處理大小 (Batch Size)
核心含義是基于 n 個樣本平均梯度進(jìn)行參數(shù)更新,類比來說:
每道題 = 一個訓(xùn)練樣本
分析錯誤模式 = 計(jì)算梯度
調(diào)整學(xué)習(xí)方法 = 更新參數(shù)
小明有1000道數(shù)學(xué)練習(xí)題,他可以選擇不同的學(xué)習(xí)方式:
方式1:Batch Size = 1
- 做1道題 → 分析錯誤 → 調(diào)整學(xué)習(xí)方法 → 做下1道題
- 優(yōu)點(diǎn):能快速響應(yīng)每道題的反饋
- 缺點(diǎn):可能因?yàn)閱蔚李}的特殊性而做出錯誤調(diào)整
方式2:Batch Size = 16
- 做16道題 → 綜合分析這16道題的錯誤模式 → 調(diào)整學(xué)習(xí)方法
- 優(yōu)點(diǎn):基于多道題的綜合分析,調(diào)整更穩(wěn)定可靠
- 缺點(diǎn):需要做完16道題才能調(diào)整一次
方式3:Batch Size = 1000
- 做完全部1000道題 → 分析所有錯誤 → 調(diào)整學(xué)習(xí)方法
- 優(yōu)點(diǎn):分析最全面,調(diào)整最穩(wěn)定
- 缺點(diǎn):調(diào)整頻率太低,學(xué)習(xí)效率不高6.2評估節(jié)奏(Eval Steps)
每間隔多少個訓(xùn)練步驟用驗(yàn)證集評估一次,,換句話說就是階段性測試的頻率:

來源同圖1
模擬考試需要額外時間
學(xué)習(xí)方法的改進(jìn)需要一定積累才能體現(xiàn)效果
太頻繁測試會影響學(xué)習(xí)效率
小明制定了學(xué)習(xí)計(jì)劃:
- 練習(xí)冊:1000道題(訓(xùn)練集)
- 模擬試卷:100道題(驗(yàn)證集)
- Batch Size = 16,所以需要 1000÷16 = 62.5 ≈ 63個學(xué)習(xí)步驟完成練習(xí)冊
如果 Eval Steps = 20:
步驟1-19:專心做練習(xí)冊,調(diào)整學(xué)習(xí)方法
步驟20:做一次模擬考試,檢查學(xué)習(xí)效果
步驟21-39:繼續(xù)做練習(xí)冊
步驟40:再做一次模擬考試
步驟41-59:繼續(xù)做練習(xí)冊
步驟60:第三次模擬考試6.3學(xué)習(xí)輪次(Epoch)
對訓(xùn)練集進(jìn)行完整迭代的次數(shù),類比小明刷題刷了幾遍:
一遍學(xué)習(xí)通常不夠,需要反復(fù)練習(xí)
每一輪都能在前一輪基礎(chǔ)上進(jìn)一步改進(jìn)
直到學(xué)習(xí)方法達(dá)到最優(yōu)狀態(tài)
小明的練習(xí)冊有1000道題:
第1個Epoch:
- 從第1題做到第1000題(完整做一遍練習(xí)冊)
- 按Batch Size=16的方式,需要63個學(xué)習(xí)步驟
- 期間按Eval Steps=20進(jìn)行了3次模擬考試
第2個Epoch:
- 再次從第1題做到第1000題(重復(fù)學(xué)習(xí)同一本練習(xí)冊)
- 但這次小明的學(xué)習(xí)方法已經(jīng)比第1輪更好了
- 能發(fā)現(xiàn)之前沒注意到的解題規(guī)律
第3個Epoch:
- 第三次完整學(xué)習(xí)這1000道題
- 進(jìn)一步鞏固和優(yōu)化解題方法三個概念的關(guān)系
1個Epoch = 完整學(xué)習(xí)一遍練習(xí)冊
= 1000道題 ÷ 16題/批次 = 63個學(xué)習(xí)步驟
在這63個步驟中:
- 每20步進(jìn)行一次模擬考試(Eval Steps = 20)
- 所以1個Epoch內(nèi)會有3次模擬考試
多個Epochs:
- 重復(fù)這個過程多輪
- 每輪都在前一輪基礎(chǔ)上繼續(xù)優(yōu)化6.4學(xué)習(xí)率(Learning Rate)
學(xué)習(xí)率控制每次參數(shù)更新的幅度。學(xué)習(xí)率過大可能導(dǎo)致訓(xùn)練不穩(wěn)定,過小則訓(xùn)練速度慢。

學(xué)習(xí)率高(0.1):老師說"幾何薄弱",小明立刻把 80%時間都投入幾何練習(xí),這樣做可能過度糾正,忽略其他重要知識點(diǎn)。
學(xué)習(xí)率低(0.01):老師說"幾何薄弱",小明只是稍微增加一點(diǎn)幾何練習(xí)時間,這樣又可能改進(jìn)速度太慢,訓(xùn)練效率低
6.5步長(Step Size)
步長實(shí)際上就是"學(xué)習(xí)率 × 梯度"的結(jié)果,表示參數(shù)在某個方向上移動的具體距離。梯度下一章節(jié)會介紹,這里就先了解個基礎(chǔ)概念即可。
步長大:每天專門練習(xí) 10 道幾何題(大幅調(diào)整學(xué)習(xí)重點(diǎn))
步長小:每天增加 2 道幾何題(小幅調(diào)整學(xué)習(xí)重點(diǎn))
7、“梯度下降”的巧思
從定義上說,在數(shù)學(xué)中梯度是指向了以曲面上的某個點(diǎn)為起點(diǎn),上升最快的方向,其反方向則是下降最快的方向。為了在最短時間內(nèi)找到曲面最低點(diǎn),調(diào)整參數(shù)的方向,應(yīng)該朝著梯度的反方向。

來源同圖1
在前面的曲線中,你可以肉眼觀察到最低點(diǎn)。但在實(shí)際應(yīng)用中,模型通常參數(shù)很多,CostFunction 通常是高維空間中的復(fù)雜曲面,無法通過直接觀察來找到最優(yōu)解。因此,需要一種自動化的方法,來尋找最優(yōu)參數(shù)配置。梯度下降算法就是一種最常見的方法之一。核心原理是,現(xiàn)在曲面上隨機(jī)選擇一個起點(diǎn),然后通過不斷的小幅度調(diào)整參數(shù),最終找到最低點(diǎn),也就是最優(yōu)參數(shù)配置。
來源同圖1
結(jié)合五個概念,梯度下降的完整過程是:
# 第1步:準(zhǔn)備數(shù)據(jù)(Batch Size)
從訓(xùn)練集中取出16個樣本(batch_size=16)
比如:16道不同類型的數(shù)學(xué)題
# 第2步:計(jì)算損失和梯度
小明做這16道題 → 計(jì)算總體錯誤率(損失函數(shù))
分析哪些知識點(diǎn)最薄弱 → 計(jì)算梯度(改進(jìn)方向)
# 第3步:參數(shù)更新(學(xué)習(xí)率 × 梯度 = 步長)
梯度:幾何題錯誤率最高,需要重點(diǎn)改進(jìn)
學(xué)習(xí)率:0.05(適中的調(diào)整幅度)
步長:0.05 × 幾何薄弱程度 = 具體的學(xué)習(xí)時間調(diào)整量
參數(shù)更新:
幾何練習(xí)時間 = 原來的時間 - 0.05 × 幾何薄弱程度
(減號表示朝著減少錯誤的方向調(diào)整)
# 第4步:重復(fù)訓(xùn)練(Epoch)
處理完所有訓(xùn)練樣本 = 1個epoch
小明練完所有題型 = 完成一輪完整訓(xùn)練
# 第5步:定期評估(Eval Steps)
每處理5個batch后,用驗(yàn)證集測試效果
每練習(xí)5天后,做一次模擬考試檢驗(yàn)進(jìn)步8、寫在最后
關(guān)于 LoRA 與低秩分解背后的技術(shù)原理就不展開說了,尤其是關(guān)于“秩”和權(quán)重矩陣也確實(shí)不太好舉例。下一篇會詳細(xì)演示下如何在 GPU 環(huán)境下通過一組數(shù)學(xué)題解數(shù)據(jù)集去 Lora 微調(diào) qwen2.5-1.5b-instruct 模型。

來源同圖1
在微調(diào)前,會先測試一下原始預(yù)訓(xùn)練模型在數(shù)學(xué)題上的表現(xiàn)。然后通過設(shè)置不同的微調(diào)參數(shù)(如學(xué)習(xí)率、LoRA 的秩、訓(xùn)練輪次、批處理大小等),并觀察訓(xùn)練過程中的訓(xùn)練損失和驗(yàn)證損失的變化。其中會包括從訓(xùn)練失敗、到欠擬合、再到過擬合的典型調(diào)參過程,并學(xué)習(xí)如何根據(jù)這些狀態(tài)調(diào)整策略,最終找到一組相對理想的參數(shù),成功提升模型性能。
微調(diào)成功后,會再次用測試集評估模型的解題能力,以及如何將微調(diào)后的 LoRA 權(quán)重與基礎(chǔ)模型合并,得到一個可以直接部署的、增強(qiáng)了數(shù)學(xué)能力的模型。
























