督表示學(xué)習(xí):從原理到實(shí)戰(zhàn)全解析)
我的日常工作經(jīng)常要和“Agent會(huì)學(xué)到什么樣的狀態(tài)表征”這個(gè)問題打交道。一個(gè)感知模塊、一個(gè)策略網(wǎng)絡(luò)背后真正決定天花板的東西往往不是網(wǎng)絡(luò)層數(shù)也不是訓(xùn)練步數(shù)而是它在內(nèi)部到底“理解”了什么。AI Agent的自我監(jiān)督表示學(xué)習(xí)說白了就是讓智能體在不依賴人工標(biāo)注的前提下從原始交互數(shù)據(jù)里自己提煉出有用的、緊湊的、可遷移的特征結(jié)構(gòu)。這個(gè)方向最近幾乎成了所有決策智能項(xiàng)目的必經(jīng)之路但我發(fā)現(xiàn)很多同行對它的理解還停留在“換個(gè)損失函數(shù)”的層面或者被一堆對比學(xué)習(xí)術(shù)語勸退。這篇文章我會(huì)從實(shí)際項(xiàng)目經(jīng)驗(yàn)出發(fā)把自監(jiān)督表示學(xué)習(xí)的動(dòng)機(jī)、方法論、完整實(shí)操流程以及我踩過的坑全部攤開講適合正在做強(qiáng)化學(xué)習(xí)、機(jī)器人控制、多模態(tài)感知或者任何跟Agent沾邊項(xiàng)目的朋友參考。1. 為什么AI Agent必須要做自監(jiān)督表示學(xué)習(xí)1.1 先搞清楚這組概念在說什么“AI Agent的自我監(jiān)督表示學(xué)習(xí)”這個(gè)標(biāo)題拆開看有三個(gè)詞AI Agent、自我監(jiān)督、表示學(xué)習(xí)。AI Agent指的是能感知環(huán)境、做出決策并執(zhí)行動(dòng)作的智能體范圍可以覆蓋游戲AI、機(jī)器人、自動(dòng)駕駛系統(tǒng)、對話助手甚至模擬環(huán)境里的NPC。自我監(jiān)督Self-Supervision指的是不依賴人工標(biāo)簽而是從數(shù)據(jù)自身結(jié)構(gòu)里構(gòu)造監(jiān)督信號比如預(yù)測下一幀、恢復(fù)被遮蓋的片段、拉近不同視角下同一樣本的表征。表示學(xué)習(xí)Representation Learning則是把原始輸入——像素、點(diǎn)云、文本、傳感器讀數(shù)——映射到一個(gè)低維向量空間讓這個(gè)向量空間里的距離、角度和方向能對應(yīng)上語義上的相似性和變化趨勢。這個(gè)三角關(guān)系的核心是Agent最需要的東西不是“分類準(zhǔn)確率”而是“對狀態(tài)空間的可靠壓縮”。比如一個(gè)機(jī)器人手臂原始狀態(tài)可能是關(guān)節(jié)角度、力矩、圖像和觸覺信號的拼接維度很高、冗余很重。如果直接把這種高維原始狀態(tài)扔給策略網(wǎng)絡(luò)學(xué)習(xí)效率會(huì)急劇下降而且一旦換一個(gè)外形參數(shù)略有變化的機(jī)械臂策略就廢掉了。自監(jiān)督表示學(xué)習(xí)要做的就是用一種無人干預(yù)的方式把高維原始狀態(tài)壓縮成一個(gè)幾十維、幾百維的向量同時(shí)保證這個(gè)向量還能承載足夠多與決策相關(guān)的信息。我見過太多人把自監(jiān)督表示學(xué)習(xí)當(dāng)作“錦上添花”的組件實(shí)際上在數(shù)據(jù)稀缺的真實(shí)場景里它往往是救命稻草。一個(gè)任務(wù)可以沒有標(biāo)注數(shù)據(jù)但只要有足夠的原始觀測數(shù)據(jù)自監(jiān)督方法就有辦法從中榨出結(jié)構(gòu)。如果這個(gè)道理沒想通后面所有細(xì)節(jié)都是空中樓閣。1.2 監(jiān)督學(xué)習(xí)范式在Agent場景里的天然短板很多人習(xí)慣用監(jiān)督學(xué)習(xí)的方式訓(xùn)練感知模塊采集大量數(shù)據(jù)人工標(biāo)注然后訓(xùn)一個(gè)CNN或者Transformer去做分類或者回歸。在靜態(tài)數(shù)據(jù)集上這套玩法很成熟但放在Agent場景里至少有四個(gè)問題。第一是標(biāo)注成本問題。給一只機(jī)械臂的十萬幀觀測圖像做精細(xì)標(biāo)注涉及物體分割、位姿估計(jì)甚至軌跡合理性判斷成本極高。而且標(biāo)注質(zhì)量直接影響后續(xù)策略學(xué)習(xí)標(biāo)錯(cuò)了等于把錯(cuò)誤一路傳導(dǎo)下去。第二是分布漂移問題。Agent是在和一個(gè)動(dòng)態(tài)環(huán)境交互的今天看到的場景分布和明天看到的可能差異很大。監(jiān)督學(xué)習(xí)假設(shè)訓(xùn)練集和測試集獨(dú)立同分布這個(gè)假設(shè)在Agent場景下基本不成立。政策變化會(huì)導(dǎo)致觀測分布劇烈變化一個(gè)只在固定數(shù)據(jù)集上訓(xùn)好的視覺表征換一個(gè)探索策略之后可能立刻失效。第三是吵鬧標(biāo)簽問題。Agent數(shù)據(jù)里有很多信號本身就是模糊的——遮擋嚴(yán)重時(shí)物體到底在哪高速運(yùn)動(dòng)時(shí)的模糊幀里到底有什么這些連人都不一定標(biāo)得準(zhǔn)。監(jiān)督學(xué)習(xí)面對這種不確定性只能強(qiáng)行擬合出一個(gè)確定答案反而把噪聲當(dāng)成了信號去學(xué)習(xí)。第四是任務(wù)遷移問題。監(jiān)督學(xué)習(xí)學(xué)到的特征往往會(huì)過度適配標(biāo)注任務(wù)。比如只標(biāo)“紅色物體”這一任務(wù)模型可能把所有顏色特征都丟掉但Agent下一個(gè)任務(wù)恰好需要區(qū)分顏色這時(shí)候就必須從頭訓(xùn)練。自監(jiān)督學(xué)習(xí)的價(jià)值恰恰體現(xiàn)在這些場景里。它不需要標(biāo)注只依賴數(shù)據(jù)內(nèi)在結(jié)構(gòu)它天然在學(xué)一般性的物理規(guī)律和視覺規(guī)律它產(chǎn)出的表征可以拿去做各種下游任務(wù)遷移成本遠(yuǎn)低于監(jiān)督特征。所以在Agent這個(gè)場景下自監(jiān)督不再是一種可選的“高級技巧”而是保證系統(tǒng)真正具備泛化能力的基礎(chǔ)設(shè)施。1.3 “好的表征”在Agent語境下的判斷標(biāo)準(zhǔn)討論自監(jiān)督表示學(xué)習(xí)必須先定義什么叫“好”。我個(gè)人的判斷標(biāo)準(zhǔn)有三條和學(xué)術(shù)界常用的線性探測準(zhǔn)確率不完全是一回事。第一條是預(yù)測充分性。表征里要包含能夠預(yù)測未來狀態(tài)或任務(wù)結(jié)果的信息。如果壓縮之后把關(guān)鍵物理量丟掉了比如速度、力、物體持久性那這個(gè)表征再平滑也沒用。第二條是壓縮有效性。在信息不丟失的前提下維度要盡量低、無關(guān)噪聲要盡量少。原始圖像里有光照、相機(jī)噪聲這些與決策無關(guān)的干擾好的表征應(yīng)該把它們?yōu)V掉。第三條是結(jié)構(gòu)遷移性。好的表征空間應(yīng)該呈現(xiàn)一種“可組合”的結(jié)構(gòu)同類狀態(tài)聚在一起、沿著某個(gè)特征維度平滑變化這樣下游策略只需要很簡單的網(wǎng)絡(luò)就能利用起來。舉個(gè)例子某次我在一個(gè)仿真環(huán)境里做經(jīng)過路點(diǎn)的導(dǎo)航任務(wù)初始方案直接用原始觀測高分辨率圖像拼接位置信息訓(xùn)策略結(jié)果樣本效率極低而且訓(xùn)練過程中經(jīng)常出現(xiàn)策略突然崩潰的情況。后面換成了自監(jiān)督預(yù)訓(xùn)練出來的表征維度從幾千降到了128發(fā)現(xiàn)環(huán)境里相近位置的狀態(tài)在表征空間里也聚成了團(tuán)策略訓(xùn)練的收斂速度大概提升了三倍以上崩潰也少了很多。這就是預(yù)測充分性、壓縮有效性和結(jié)構(gòu)遷移性同時(shí)起作用的結(jié)果。2. 自監(jiān)督表示學(xué)習(xí)的核心方法論拆解2.1 對比學(xué)習(xí)拉近正樣本、推遠(yuǎn)負(fù)樣本對比學(xué)習(xí)是當(dāng)前自監(jiān)督表示學(xué)習(xí)里面應(yīng)用最廣的一類方法從SimCLR到MoCo再到BYOL底層邏輯都是同一個(gè)同一個(gè)樣本經(jīng)過不同增強(qiáng)之后它們的表征應(yīng)該盡可能接近不同樣本的表征應(yīng)該盡可能遠(yuǎn)離。這個(gè)思想簡單直接但實(shí)現(xiàn)細(xì)節(jié)里全是坑。最基本的損失函數(shù)是InfoNCE。給定一個(gè)錨點(diǎn)樣本、一組正樣本和一組負(fù)樣本InfoNCE的表達(dá)式是L -log( exp(sim(z_a, z_p) / τ) / Σ exp(sim(z_a, z_i) / τ) )其中sim通常是余弦相似度τ是溫度系數(shù)。這個(gè)式子可以理解成一個(gè)多分類問題在所有候選樣本中正確地把正樣本挑出來。分母里包含所有負(fù)樣本所以負(fù)樣本的質(zhì)量和數(shù)量會(huì)直接影響表征的質(zhì)量。對比學(xué)習(xí)在Agent場景里有個(gè)天然優(yōu)勢時(shí)間本身就是一種監(jiān)督信號。同一軌跡中鄰近時(shí)刻的觀測天然適合當(dāng)作正樣本對因?yàn)樗鼈冊谖锢砩细叨认嚓P(guān)遠(yuǎn)處或者不同軌跡的觀測就是天然的負(fù)樣本。這種思路叫做時(shí)間對比學(xué)習(xí)我之前在項(xiàng)目中大量使用它來構(gòu)建感知表征不需要任何人工標(biāo)注就能學(xué)到“狀態(tài)變化”的結(jié)構(gòu)。但是對比學(xué)習(xí)的收斂非常依賴三樣?xùn)|西增強(qiáng)策略、批次大小、溫度系數(shù)。增強(qiáng)太大或者太小都不行比如對機(jī)器人圖像做過度隨機(jī)裁剪可能把機(jī)械臂的關(guān)鍵工作區(qū)域裁掉得到的表征完全偏離真實(shí)狀態(tài)。批次大小決定了負(fù)樣本的豐富程度負(fù)樣本太少模型容易塌縮到一個(gè)平凡解——所有樣本的表征都一樣這種塌縮現(xiàn)象在對比學(xué)習(xí)里非常常見表現(xiàn)形式就是損失不降、表征分布退化成幾個(gè)孤立的簇。2.2 時(shí)序預(yù)測Agent數(shù)據(jù)的隱含時(shí)間結(jié)構(gòu)Agent數(shù)據(jù)有一個(gè)純圖像分類數(shù)據(jù)集沒有的特點(diǎn)時(shí)間連續(xù)性。狀態(tài)沿著時(shí)間軸演化是有規(guī)律的——幀與幀之間不會(huì)突變因果關(guān)系貫穿始終。自監(jiān)督方法完全可以利用這個(gè)結(jié)構(gòu)做預(yù)測式學(xué)習(xí)。一類做法是預(yù)測編碼。給定一段歷史的觀測序列讓表征去預(yù)測未來時(shí)刻的表征而不是直接預(yù)測未來的像素。這里的邏輯和語言模型里的next token prediction很像只不過預(yù)測空間從離散詞表換成了連續(xù)向量空間。因?yàn)槟繕?biāo)是表征空間而不是像素空間模型不用花大量容量去重建細(xì)節(jié)紋理可以把精力集中在結(jié)構(gòu)性的、與決策相關(guān)的信息上。具體實(shí)現(xiàn)上我會(huì)用一個(gè)臨時(shí)對齊的窗口訓(xùn)練時(shí)隨機(jī)抽取一段軌跡把前T幀編碼成上下文向量然后用一個(gè)過渡模塊預(yù)測未來H幀的表示再和實(shí)際未來幀的表示計(jì)算余弦相似度或均方誤差。這里有個(gè)被很多人忽略的細(xì)節(jié)預(yù)測目標(biāo)必須是“未來表征的stop-gradient版本”不能反過來影響編碼器的梯度更新否則模型會(huì)走捷徑把表征空間退化成只保留歷史信息、丟掉未來可預(yù)測性的狀態(tài)。這個(gè)思路在做Agent決策時(shí)有直接幫助。策略網(wǎng)絡(luò)本質(zhì)上就是在做“基于當(dāng)前狀態(tài)預(yù)測未來收益”的事情如果狀態(tài)表征里自帶對未來演化的預(yù)測能力策略學(xué)習(xí)的難度會(huì)降低一個(gè)量級。我在導(dǎo)航任務(wù)里加了這個(gè)輔助目標(biāo)之后策略對動(dòng)態(tài)障礙的規(guī)避能力明顯變好這應(yīng)該是因?yàn)楸碚骼镆呀?jīng)編碼了一些“物體運(yùn)動(dòng)趨勢”的信息。2.3 多模態(tài)對齊讓Agent的表征跨模態(tài)互通真實(shí)Agent的輸入往往是多模態(tài)的視覺、本體感知、任務(wù)指令、語音甚至觸覺。模型如果只在單一模態(tài)內(nèi)部做自監(jiān)督得到的表征空間各說各話下游模塊要額外學(xué)習(xí)一層跨模態(tài)對齊費(fèi)力而且容易出錯(cuò)。更好的方式是在預(yù)訓(xùn)練階段就直接用跨模態(tài)對齊作為監(jiān)督信號??缒B(tài)對齊最經(jīng)典的思想是同一時(shí)刻不同模態(tài)對同一個(gè)物理事件進(jìn)行了觀測它們的表征應(yīng)該互相匹配。比如同一幀圖像、同一時(shí)刻的關(guān)節(jié)角度、同一時(shí)刻的指令嵌入應(yīng)該落在表征空間的鄰近區(qū)域。實(shí)現(xiàn)方式就是把兩個(gè)模態(tài)的編碼器輸出投影到同一個(gè)空間里然后做對比損失正樣本對是同一時(shí)刻的兩個(gè)模態(tài)負(fù)樣本對是隨機(jī)拼湊的其他組合。我在一個(gè)物體抓取模擬項(xiàng)目中用到了這個(gè)思路視覺觀測和觸覺信號的模態(tài)差異很大但它們在物理上描述同一個(gè)接觸事件。預(yù)訓(xùn)練階段讓視覺編碼器和觸覺編碼器對齊結(jié)果兩個(gè)分支的性能都有顯著提升尤其是觸覺信號很少的時(shí)候視覺分支已經(jīng)能承擔(dān)部分觸覺語義的推斷功能。這說明跨模態(tài)自監(jiān)督不只是“對齊”還在缺乏某個(gè)模態(tài)數(shù)據(jù)時(shí)產(chǎn)生了信息補(bǔ)足的效果。多模態(tài)對齊里還要注意模態(tài)間的信息不對等問題。視覺信息豐富但噪聲大觸覺信息稀疏但準(zhǔn)確。如果直接簡單粗暴地做對齊豐富模態(tài)會(huì)主導(dǎo)表征結(jié)構(gòu)稀疏模態(tài)學(xué)不到東西。我的做法是給不同模態(tài)的對齊損失分配不同的權(quán)重同時(shí)每一模態(tài)還保留一份自己的單模態(tài)重構(gòu)損失作為穩(wěn)定錨。2.4 生成式方法掩碼重建與預(yù)測式預(yù)訓(xùn)練對比學(xué)習(xí)不是自監(jiān)督的全部生成式方法同樣在Agent表示學(xué)習(xí)里扮演重要角色。生成式方法的思路是從部分觀測出發(fā)重建完整觀測或者從一系列掩碼中恢復(fù)缺失內(nèi)容。這個(gè)思想比對比學(xué)習(xí)更古老但在Transformer興起之后迎來了第二春其中最典型的代表是掩碼自編碼器。從技術(shù)原理上講對比學(xué)習(xí)傾向于壓縮——聚焦共享信息并丟棄個(gè)體細(xì)節(jié)生成式重建傾向于還原——傾向于保留完整信息。Agent任務(wù)通常需要兩類信息同時(shí)具備決策需要關(guān)鍵結(jié)構(gòu)快速歸納部分任務(wù)又需要精細(xì)重建比如拿取物體時(shí)的邊緣參數(shù)計(jì)算。因此我建議不要把對比和生成當(dāng)作二選一的矛盾選項(xiàng)而是組合起來用。具體操作上我在觀察空間為圖像序列設(shè)計(jì)掩碼隨機(jī)遮蓋空間區(qū)域的50%到70%剩下的任務(wù)就是把被遮掉的部分重建出來。這個(gè)重建目標(biāo)不以像素精確重建為唯一目標(biāo)而是混合使用像素誤差和表征對齊損失既保留底層細(xì)節(jié)又強(qiáng)化高層語義。我還嘗試過在時(shí)間維度上做掩碼把某一段軌跡遮住讓模型根據(jù)前后文恢復(fù)這個(gè)方式對學(xué)習(xí)“事件開展順序”特別有效比空間掩碼更適合處理視頻類Agent數(shù)據(jù)。不過生成式方法消耗的算力明顯更大一次完整預(yù)訓(xùn)練跑下來比對比方法多出至少百分之六十的時(shí)間。而且如果重建目標(biāo)過于追求像素級精度模型可能會(huì)把注意力都花在重建紋理上對全局語義就相對弱化。這里我的經(jīng)驗(yàn)是早期訓(xùn)練以像素?fù)p失為主中期增加表征一致性損失后期再加入少量對比損失做精調(diào)這種階梯式損失調(diào)整比全部損失從一開始就疊加要穩(wěn)定得多。3. 實(shí)操從零搭建Agent自監(jiān)督表示學(xué)習(xí)流水線3.1 數(shù)據(jù)采集策略與增強(qiáng)方案設(shè)計(jì)自監(jiān)督學(xué)習(xí)的第一步不是寫模型而是想清楚數(shù)據(jù)從哪里來。Agent項(xiàng)目里最常見的數(shù)據(jù)來源有三種專家示范數(shù)據(jù)、隨機(jī)探索數(shù)據(jù)、在線策略收集數(shù)據(jù)。三種數(shù)據(jù)各有側(cè)重專家示范數(shù)據(jù)質(zhì)量高但覆蓋度差隨機(jī)探索數(shù)據(jù)覆蓋面廣但有大量無效狀態(tài)在線策略收集的數(shù)據(jù)分布會(huì)隨策略演化而漂移。最優(yōu)做法是混合使用并讓各類數(shù)據(jù)占比保持動(dòng)態(tài)平衡。數(shù)據(jù)增強(qiáng)策略決定了哪些不變性會(huì)被編碼進(jìn)表征。圖像方面我建議按優(yōu)先級依次考慮隨機(jī)裁剪至少覆蓋主要物體裁剪比例控制在80%以上、顏色擾動(dòng)亮度、對比度、飽和度在一個(gè)有限范圍內(nèi)變化、模糊、噪聲添加。這些增強(qiáng)對應(yīng)的是真實(shí)環(huán)境中光照、視角、畫質(zhì)的變化學(xué)到的表征對這些因素魯棒。同時(shí)要注意某些增強(qiáng)對特定任務(wù)反而是有害的比如顏色擾動(dòng)對需要區(qū)分紅綠燈的駕駛?cè)蝿?wù)就是災(zāi)難所以在設(shè)計(jì)增強(qiáng)時(shí)不要盲目套模板最好能結(jié)合下游任務(wù)的先驗(yàn)知識做篩選。時(shí)間序列數(shù)據(jù)方面也有自己的增強(qiáng)方式對軌跡做時(shí)間方向的隨機(jī)平移、在相鄰幀之間做插值或刪減來模擬不同響應(yīng)延遲、對傳感器讀數(shù)做隨機(jī)縮放偏移。這類增強(qiáng)會(huì)讓表征對時(shí)序上的微小畸變更魯棒同時(shí)保留長期因果結(jié)構(gòu)。自監(jiān)督數(shù)據(jù)清洗同樣容易被忽略。很多原始數(shù)據(jù)存在連續(xù)重復(fù)幀、黑屏瞬間和環(huán)境完全靜止的長尾片段這類片段沒有信息量還會(huì)引入大量噪聲正樣本對。我的經(jīng)驗(yàn)是在預(yù)處理階段把重復(fù)幀去除、把連續(xù)長時(shí)間靜止的片段剪除同時(shí)盡量減少片段長度波動(dòng)統(tǒng)一每個(gè)軌跡片段的長度這樣在訓(xùn)練時(shí)能獲得更穩(wěn)定的批次結(jié)構(gòu)。3.2 編碼器架構(gòu)與投影頭設(shè)計(jì)選擇編碼器時(shí)要同時(shí)考慮性能和部署限制。對二維圖像輸入編碼器可以考慮標(biāo)準(zhǔn)的卷積網(wǎng)絡(luò)或者Vision Transformer對狀態(tài)序列輸入更推薦使用帶因果掩碼的Transformer對于多模態(tài)聯(lián)合輸入先分別用各模態(tài)專用的編碼器提取特征再進(jìn)入一個(gè)統(tǒng)一的融合Transformer這是目前最自然的架構(gòu)選擇。具體選擇沒有固定答案和Agent下游模塊的性能預(yù)算、推理延遲都有關(guān)系。表征學(xué)習(xí)的“讀出口”是投影頭。注意預(yù)訓(xùn)練階段的投影頭和下游實(shí)際使用的嵌入在邏輯上是分離的。常見做法是在編碼器后面接一個(gè)兩層的MLP投影頭把編碼器輸出的高維表示壓到一個(gè)更緊湊的空間比如128或256維在這個(gè)投影空間里計(jì)算對比損失。預(yù)訓(xùn)練結(jié)束后真正用來喂給策略網(wǎng)絡(luò)的是編碼器的輸出或者投影頭的輸出這由實(shí)際任務(wù)效果決定。我個(gè)人的經(jīng)驗(yàn)是保留投影頭的輸出比較穩(wěn)定它的維度更低而且恰好是和“語義距離”對齊的。投影頭的結(jié)構(gòu)并不需要很復(fù)雜兩層MLP加ReLU激活一般就夠用了。設(shè)計(jì)投影頭時(shí)的關(guān)鍵是中途層的維度和最終維度不能差得太多。如果中間層從1024驟降到128信息損失太嚴(yán)重從512降到256這種常規(guī)方案效果是最穩(wěn)的。架構(gòu)層面還必須考慮批歸一化的行為差異。在自監(jiān)督預(yù)訓(xùn)練中BatchNorm的統(tǒng)計(jì)量會(huì)在不同批次之間漂移在對比學(xué)習(xí)尤其是小批次場景下可能導(dǎo)致表征空間不穩(wěn)定。相對更安全的做法是使用LayerNorm或者直接不用歸一化層把歸一化的責(zé)任留給后續(xù)任務(wù)。這一點(diǎn)在Agent端側(cè)部署時(shí)尤其重要因?yàn)槎藗?cè)推理經(jīng)常是單樣本預(yù)測BatchNorm此時(shí)會(huì)引入嚴(yán)重的統(tǒng)計(jì)偏差。3.3 損失函數(shù)組合與平衡策略單一的自監(jiān)督損失往往不足以讓Agent學(xué)到一個(gè)全能的表征我實(shí)際項(xiàng)目中會(huì)用多組損失組合。常用的組合方式是主體損失無論是對比還是重建加上可選的時(shí)序一致性損失加上可選的跨模態(tài)對齊損失。每個(gè)損失各管一個(gè)維度共同約束表征空間的結(jié)構(gòu)。設(shè)計(jì)多組損失時(shí)最關(guān)鍵的問題是如何搭配加權(quán)系數(shù)這個(gè)基本沒有理論上的最優(yōu)解只能靠實(shí)驗(yàn)經(jīng)驗(yàn)。我建議按照以下順序調(diào)試先只開主體損失讓模型得到一個(gè)可用的基礎(chǔ)表征再以較小的權(quán)重加入時(shí)序一致性損失權(quán)重為主體的10%到30%再加載跨模態(tài)對齊權(quán)重從10%開始緩慢增至20%。某次試驗(yàn)我一開始就設(shè)置了大規(guī)模權(quán)重疊加齊頭并進(jìn)結(jié)果主體損失正常下降但時(shí)序一致性損失不降反升表征空間出現(xiàn)震蕩最后用了兩周時(shí)間定位到是權(quán)重過高、梯度方向沖突導(dǎo)致的。降權(quán)之后配合梯度裁剪加線性預(yù)熱各種損失才一起穩(wěn)定下降。梯度裁剪是一個(gè)在自監(jiān)督訓(xùn)練中很容易被忽略的點(diǎn)但它的作用非常明顯。多組損失同時(shí)回傳時(shí)梯度范數(shù)可能瞬間爆炸裁剪閾值設(shè)置在1.0到5.0之間僅僅是讓訓(xùn)練過程穩(wěn)定并不能解決損失沖突。真正解決沖突還是要靠損失權(quán)重和表征維度之間的適配——表征維度越高各損失之間越容易各自為政因此盡量不要一開始就設(shè)置非常大的投影維度。3.4 三階段訓(xùn)練流程預(yù)訓(xùn)練、微調(diào)、在線適配Agent的自監(jiān)督表示學(xué)習(xí)和下游任務(wù)不是一次性完成的工作而是一個(gè)三階段過程。第一階段是離線預(yù)訓(xùn)練。用大規(guī)模無標(biāo)簽數(shù)據(jù)訓(xùn)練編碼器和投影頭目標(biāo)是得到通用的基礎(chǔ)表征。這個(gè)階段計(jì)算量最大但如果數(shù)據(jù)充足能得到一個(gè)相當(dāng)完備的初始化。建議在這個(gè)階段保持較長的訓(xùn)練周期定期保存checkpoint并把中間checkpoint用于評估因?yàn)槟阌肋h(yuǎn)不知道哪個(gè)checkpoint對下游任務(wù)最有效。第二階段是任務(wù)微調(diào)。下游強(qiáng)化學(xué)習(xí)或者模仿學(xué)習(xí)開始時(shí)有兩種選擇凍結(jié)編碼器只訓(xùn)練策略網(wǎng)絡(luò)或者連同編碼器一起微調(diào)。我強(qiáng)烈建議先在凍結(jié)模式下測試這樣可以驗(yàn)證基礎(chǔ)表征的質(zhì)量如果凍結(jié)模式下下游任務(wù)就能達(dá)到可接受的性能說明表征質(zhì)量過硬如果達(dá)不到再逐步解凍編碼器的最后幾層。完全解凍反而容易因?yàn)樘荻然貍髌茐谋碚鹘Y(jié)構(gòu)導(dǎo)致性能能回升一段時(shí)間之后又急劇崩壞。第三階段是在線適配。Agent真正部署后環(huán)境分布可能會(huì)和預(yù)訓(xùn)練數(shù)據(jù)有偏差。這個(gè)階段可以采取輕量化的在線更新策略比如隨時(shí)用新采樣數(shù)據(jù)更新表征頭編碼器保持低頻更新。這樣既保證了快速適應(yīng)又避免了策略和表征同時(shí)劇烈變化導(dǎo)致的訓(xùn)練不穩(wěn)定。三階段訓(xùn)練中我最大的經(jīng)驗(yàn)是不要把所有階段都做成一個(gè)在線流程。一開始我以為更頻繁的更新總是更好的實(shí)際運(yùn)行起來發(fā)現(xiàn)更新太頻繁會(huì)讓整個(gè)訓(xùn)練過程像在沙地上蓋樓表征稍有不穩(wěn)策略立刻跟著振蕩。后來采取“預(yù)訓(xùn)練不動(dòng)、任務(wù)微調(diào)小步、在線適配周期化”的節(jié)奏系統(tǒng)的穩(wěn)定性才好起來。4. 訓(xùn)練參數(shù)調(diào)優(yōu)與避坑實(shí)錄4.1 溫度系數(shù)、批次大小與負(fù)樣本數(shù)量溫度系數(shù)τ是影響自監(jiān)督訓(xùn)練最關(guān)鍵的超參。τ越小損失越聚焦于最硬的負(fù)樣本表征的點(diǎn)會(huì)被推得更分散τ越大所有負(fù)樣本的影響趨于均勻表征會(huì)相對平滑。實(shí)踐中的推薦范圍是0.05到0.3之間。我見過很多人直接把τ設(shè)置成0.07然后跑所有實(shí)驗(yàn)遠(yuǎn)不是所有場景都適用。判斷τ是否合適的辦法是看表征空間的可視化結(jié)果如果同類樣本聚不到一起則嘗試調(diào)低τ如果不同類完全混合且類內(nèi)擠得很緊則調(diào)高τ。批次大小對對比學(xué)習(xí)的影響體現(xiàn)在兩方面批次越大負(fù)樣本越豐富模型越容易學(xué)到平滑的決策邊界但超級大的批次對端側(cè)訓(xùn)練來說不可承受。更值得推薦的做法是用較大的批次做負(fù)樣本池但使用內(nèi)存隊(duì)列來緩存歷史表征MoCo的做法這樣就能在不盲目擴(kuò)大物理批次的情況下變相擴(kuò)大負(fù)樣本池。對于Agent項(xiàng)目我常用的方案是物理批次256內(nèi)存隊(duì)列長度8192。這個(gè)配置在效果和顯存占用之間平衡得很好。隊(duì)列還有一個(gè)被忽略的坑是隊(duì)列中的舊表征和當(dāng)前編碼器參數(shù)不一致。因?yàn)榫幋a器是持續(xù)更新的隊(duì)列頭部和尾部特征實(shí)際上來自不同訓(xùn)練階段的編碼器版本如果不做什么處理梯度信號就不穩(wěn)定。解決方法是引入動(dòng)量編碼器讓用來生成隊(duì)列表征的編碼器只是緩慢跟隨主編碼器更新動(dòng)量系數(shù)設(shè)置在0.99到0.999之間。這算是MoCo這類方法能成功的核心細(xì)節(jié)我建議所有做大規(guī)模對比訓(xùn)練的同行都這樣做。4.2 表征空間可視化診斷與“塌縮”防護(hù)這個(gè)部分我要重點(diǎn)講講訓(xùn)練過程中的監(jiān)控與調(diào)試。自監(jiān)督訓(xùn)練最大、最隱蔽的問題是表征塌縮模型找到了一個(gè)捷徑把所有輸入都映射到同一個(gè)表征點(diǎn)或者一個(gè)極小的空間區(qū)域。塌縮之后對比損失可以無限下降但這個(gè)表征對下游任務(wù)是零價(jià)值的。如何盡早發(fā)現(xiàn)塌縮我常用的第一個(gè)診斷工具是表征分布可視化。抽出一個(gè)驗(yàn)證集對表征做PCA降到二維或者三維看所有樣本是否都擠在一個(gè)小區(qū)域。如果可視化結(jié)果是一個(gè)沒有內(nèi)部結(jié)構(gòu)的單點(diǎn)云基本可以斷定已經(jīng)塌縮了。第二個(gè)診斷工具是計(jì)算表征協(xié)方差矩陣的奇異值正常狀態(tài)的奇異值應(yīng)該有一個(gè)明顯的長尾塌縮狀態(tài)的奇異值會(huì)急劇降到接近零。這個(gè)指標(biāo)比可視化更適合自動(dòng)化監(jiān)控。防護(hù)塌縮主要有三招。第一是使用stop-gradient配合預(yù)測頭在目標(biāo)側(cè)不更新梯度。第二是加大負(fù)樣本的難度比如主動(dòng)加入難負(fù)樣本挖掘讓模型無法通過簡單特征區(qū)分樣本。第三是給表征加一個(gè)方差約束給批內(nèi)表征的每一維設(shè)定一個(gè)目標(biāo)方差強(qiáng)制表征空間不要過度收縮。我自己還踩過一個(gè)跟增強(qiáng)相關(guān)的坑。有一個(gè)階段模型訓(xùn)練很穩(wěn)定、可視化形態(tài)也不錯(cuò)但遷移到下游任務(wù)時(shí)性能持續(xù)低迷。后來排查發(fā)現(xiàn)是增強(qiáng)策略太強(qiáng)了把顏色和幾何信息徹底打亂表征學(xué)到了非常抽象的語義卻丟失了和物理位置相關(guān)的精細(xì)信息。增強(qiáng)不是越強(qiáng)越好要針對Agent任務(wù)保留決策必需的信息通道。4.3 計(jì)算資源規(guī)劃與訓(xùn)練加速實(shí)踐Agent自監(jiān)督預(yù)訓(xùn)練是個(gè)吃計(jì)算資源的工程提前做好資源規(guī)劃能避免很多尷尬。以我的項(xiàng)目為例數(shù)據(jù)量在幾十萬幀圖像左右輸入分辨率為128乘以128編碼器采用一個(gè)中等規(guī)模的視覺Transformer顯存占用在30GB左右單卡每次迭代約1.2秒。預(yù)訓(xùn)練到收斂大概需要跑十萬步區(qū)間在一天半到三天之間。如果你的項(xiàng)目想完全復(fù)現(xiàn)我的成規(guī)模訓(xùn)練用四卡分布式訓(xùn)練是明顯體驗(yàn)更好也更穩(wěn)的方案。分布式訓(xùn)練中第一個(gè)問題是多卡同步BatchNorm。默認(rèn)情況下每張卡獨(dú)自計(jì)算批統(tǒng)計(jì)量這在小批次條件下會(huì)帶來很嚴(yán)重的分布不一致。解決方案是用同步BatchNorm在訓(xùn)練框架中把普通的BatchNorm2d替換為SyncBatchNorm讓統(tǒng)計(jì)量跨卡同步。這個(gè)改動(dòng)在一階段預(yù)訓(xùn)練中幾乎是必選項(xiàng)。第二個(gè)加速手段是混合精度訓(xùn)練把計(jì)算和存儲(chǔ)放到FP16或者BF16上進(jìn)行。對于自監(jiān)督訓(xùn)練我遇到過梯度下溢的情況解決辦法是把損失縮放系數(shù)設(shè)得大一些或者直接用BF16在某些支持硬件上會(huì)更加省心。實(shí)測下來混合精度能讓訓(xùn)練速度提升60%到80%代價(jià)是偶爾需要關(guān)注數(shù)值穩(wěn)定性。第三個(gè)建議是數(shù)據(jù)加載不要成為瓶頸。Agent數(shù)據(jù)經(jīng)常是視頻流存儲(chǔ)使用JPEG或者PNG逐幀讀取很慢。建議在預(yù)處理時(shí)把視頻抽出來做成一個(gè)按幀索引的內(nèi)存映射文件例如Mosaic或WebDataset格式這樣數(shù)據(jù)吞吐量至少能翻一倍而且不會(huì)讓GPU在等待數(shù)據(jù)時(shí)摸魚。5. 常見問題與排查技巧速查5.1 典型故障和處理辦法我把過去項(xiàng)目中遇到的典型問題整理成了一張速查表覆蓋自監(jiān)督訓(xùn)練最常見的故障現(xiàn)象和處理手段故障現(xiàn)象可能原因排查路徑與解決方案損失持續(xù)不降學(xué)習(xí)率太低 / 增強(qiáng)太強(qiáng)導(dǎo)致特征被破壞先調(diào)大學(xué)習(xí)率試一兩個(gè)epoch再逐步減弱增強(qiáng)強(qiáng)度表征塌縮可視化全擠在一起負(fù)樣本不足 / 未使用stop-gradient方案加大隊(duì)列長度檢查是否誤刪掉stop-gradient下游任務(wù)性能提升不明顯預(yù)訓(xùn)練和微調(diào)之間的數(shù)據(jù)分布不一致檢查預(yù)訓(xùn)練數(shù)據(jù)是否覆蓋與下游任務(wù)一致的狀態(tài)分布擴(kuò)大數(shù)據(jù)覆蓋微調(diào)時(shí)表征結(jié)構(gòu)被破壞編碼器全部解凍且學(xué)習(xí)率過高凍結(jié)表征層只解凍最后兩層并降低學(xué)習(xí)率訓(xùn)練不穩(wěn)定損失震蕩劇烈多組損失梯度方向沖突降低輔助損失權(quán)重增加預(yù)熱階段和梯度裁剪分布式訓(xùn)練結(jié)果和單卡對不上未使用同步BatchNorm / 數(shù)據(jù)shuffle不一致檢查歸一化層統(tǒng)一隨機(jī)種子驗(yàn)證數(shù)據(jù)分發(fā)方式端側(cè)部署性能下降明顯BatchNorm統(tǒng)計(jì)量在單樣本推理時(shí)失效切換到LayerNorm或者導(dǎo)出時(shí)把BN層的統(tǒng)計(jì)量固化這里放一個(gè)比較容易被忽視的細(xì)節(jié)微調(diào)階段評估表征質(zhì)量最好用“凍結(jié)線性評測”模式就是在預(yù)訓(xùn)練好的表征上接一個(gè)線性層只訓(xùn)練這個(gè)線性層來做一些簡單的預(yù)測任務(wù)。如果這個(gè)線性評測的效果都達(dá)不到預(yù)期說明表征本身質(zhì)量是有問題的換再復(fù)雜的網(wǎng)絡(luò)也沒用。這樣可以把“表征問題”和“策略訓(xùn)練問題”解耦開來避免排查時(shí)互相甩鍋。5.2 一條真實(shí)排查實(shí)錄連續(xù)三次重啟訓(xùn)練都不收斂有一段時(shí)間我連續(xù)三次重啟預(yù)訓(xùn)練任務(wù)全部出現(xiàn)同一現(xiàn)象前500步損失快速下降之后突然反彈到初始水平再之后陷入長期緩慢下降。最初我以為是學(xué)習(xí)率的問題調(diào)整了三次依然無效。后來仔細(xì)檢查訓(xùn)練日志發(fā)現(xiàn)每一次重啟的隨機(jī)種子相同、數(shù)據(jù)順序是固定的于是懷疑是數(shù)據(jù)順序?qū)е碌碾y易樣本分布不均勻。分批檢查后發(fā)現(xiàn)用于打亂的一條隨機(jī)邏輯在線程數(shù)大于1時(shí)產(chǎn)生了一個(gè)漏洞導(dǎo)致后半段數(shù)據(jù)集幾乎全是困難樣本困難樣本集中出現(xiàn)自然會(huì)讓損失沖高反彈。把數(shù)據(jù)打亂邏輯修復(fù)之后訓(xùn)練曲線立刻正常。這個(gè)案例提醒我遇到訓(xùn)練不收斂時(shí)先懷疑數(shù)據(jù)和工程邏輯再懷疑算法和超參。很多人一看見損失曲線異常就去調(diào)學(xué)習(xí)率和溫度系數(shù)實(shí)際上真正的問題可能在一行不起眼的shuffle代碼里。5.3 如何設(shè)計(jì)一次有效的表征消融實(shí)驗(yàn)在向團(tuán)隊(duì)或自己證明“自監(jiān)督表示學(xué)習(xí)確實(shí)有效”時(shí)不能只看最終任務(wù)指標(biāo)那樣很難定位變量。我用得比較成功的方式是做一套系統(tǒng)的消融實(shí)驗(yàn)重點(diǎn)比較三組設(shè)置第一組用隨機(jī)初始化的表征直接訓(xùn)策略第二組用自監(jiān)督預(yù)訓(xùn)練但凍結(jié)的表征訓(xùn)策略第三組用自監(jiān)督預(yù)訓(xùn)練加微調(diào)的表征訓(xùn)策略。每組設(shè)置下跑同一個(gè)下游任務(wù)記錄三樣?xùn)|西樣本效率達(dá)到目標(biāo)性能所需的環(huán)境交互步數(shù)、最終性能、訓(xùn)練穩(wěn)定性多次重復(fù)試驗(yàn)的性能方差。這三樣綜合起來才能給出一個(gè)可靠的結(jié)論。只比較最終性能的話圖省事有時(shí)候甚至?xí)贸鲐?fù)結(jié)論因?yàn)橄掠尾呗缘牟环€(wěn)定性會(huì)淹沒表征帶來的優(yōu)勢。我一般把方案組選了三種都可以的場景細(xì)化每次實(shí)驗(yàn)至少跑三次不同的隨機(jī)種子性能方差就是最強(qiáng)的說服力。在我自己的經(jīng)驗(yàn)里最明顯的收益往往不是最終性能提升而是樣本效率的大幅改善。自監(jiān)督預(yù)訓(xùn)練模型通常能在更少的環(huán)境交互步數(shù)內(nèi)達(dá)到同等性能這在真實(shí)物理系統(tǒng)上意味著節(jié)省大量的真機(jī)試錯(cuò)成本它體現(xiàn)的價(jià)值比一兩個(gè)點(diǎn)的最終精度更加可貴。6. 基于個(gè)人經(jīng)驗(yàn)的最后幾條實(shí)戰(zhàn)建議自監(jiān)督表示學(xué)習(xí)不是一個(gè)能夠短平快解決的小工具而是一個(gè)對整個(gè)Agent系統(tǒng)產(chǎn)生長期影響的基礎(chǔ)環(huán)節(jié)。我建議所有剛接觸它的同行不要一上來就追最新模型、堆最大算力而是先把數(shù)據(jù)質(zhì)量做扎實(shí)充分理解增強(qiáng)策略對表征語義的影響再穩(wěn)步展開實(shí)驗(yàn)。挑模型時(shí)我會(huì)特別提醒不要盲目迷信生成式重建方法。像素重建目標(biāo)更加消耗計(jì)算資源在分辨率高、場景復(fù)雜的Agent任務(wù)里往往需要非常仔細(xì)地設(shè)計(jì)損失權(quán)重才能收斂到一個(gè)有意義的狀態(tài)。對比式和預(yù)測式方法在很多中等規(guī)模項(xiàng)目里的性價(jià)比會(huì)更高也能更容易地和已有的強(qiáng)化學(xué)習(xí)框架集成。還有一個(gè)建議是如果條件允許把自監(jiān)督預(yù)訓(xùn)練和你最終的Agent應(yīng)用任務(wù)放在同一個(gè)仿真環(huán)境里進(jìn)行而不要使用完全無關(guān)的通用數(shù)據(jù)集。同一環(huán)境產(chǎn)出的數(shù)據(jù)天然匹配Agent遇到的輸入分布差別太大的數(shù)據(jù)集哪怕規(guī)模再大預(yù)處理出來的表征也很難適應(yīng)具體任務(wù)。這個(gè)道理和我一開始說到的監(jiān)督學(xué)習(xí)短板同出一源分布的一致性重要性遠(yuǎn)高于無腦的數(shù)據(jù)量。最后想分享一個(gè)小技巧保存checkpoint的時(shí)候不只是保存最終那一個(gè)而是隔幾個(gè)階段就把中間checkpoint也存下來。自監(jiān)督訓(xùn)練有時(shí)會(huì)在某些checkpoint上表現(xiàn)出奇特的下游優(yōu)勢可能比最后收斂的那個(gè)還要好用。這些中間狀態(tài)在語義結(jié)構(gòu)上往往還沒有被過度壓縮或過度平滑正好適配某些下游任務(wù)的需求。后來這成了我的標(biāo)配習(xí)慣也讓我的項(xiàng)目總能在關(guān)鍵時(shí)刻找到一條靈活的退路。自監(jiān)督表示學(xué)習(xí)的演進(jìn)還在繼續(xù)目前看到的潮流是更大規(guī)模、更多模態(tài)、更長上下文但核心的邏輯不會(huì)變讓Agent從數(shù)據(jù)自身的結(jié)構(gòu)里成長出對世界的穩(wěn)定理解而不是什么都靠人一塊塊喂給它。