【AI繪畫】LoRA訓(xùn)練全參數(shù)講解

事先聲明,本人雖然是人工智能專業(yè)出身,但是對于有些概念內(nèi)容多有遺忘,因此部分內(nèi)容來源于互聯(lián)網(wǎng)與chatGPT的解釋,如有謬誤敬請指正。
啟動補(bǔ)丁包后,會進(jìn)入一段loading,等待時間一般較久,它在搜尋你的電腦里是否安裝了Lion優(yōu)化器,如果未安裝,則彈出提示框,關(guān)閉后再等待一段時間,彈出網(wǎng)絡(luò)連接錯誤或者直接進(jìn)行下一步。如果彈出安裝未完成,則在后續(xù)步驟中不要使用Lion優(yōu)化器。
你需要載入保存好的預(yù)設(shè)嗎?
該步驟允許你調(diào)用在電腦中已經(jīng)保存過的json文件,如果你第一次運(yùn)行,請選擇否。
選擇你的基礎(chǔ)模型
選擇你的底模型。
選擇你的圖像路徑
注意,這里選擇的圖像路徑必須是,X_tag 的父文件夾,例如images/7_tags 則選擇images。
選擇你的輸出路徑
你輸出的lora文件保存在哪里。
你想保存配置的json預(yù)設(shè)嗎?
保存為json文件,下次可以直接選擇,減少一些參數(shù)的選擇。
你想啟用低RAM模式嗎?
如果你是一臺正常的電腦,就不要開啟這個。低RAM模式只針對非常差的顯卡讓它可以進(jìn)行訓(xùn)練,但是訓(xùn)練出來的東西質(zhì)量也很差。
你想要哪個優(yōu)化器?
以下是chatgpt的解釋:
“AdamW是Adam優(yōu)化器的一種變體,它將權(quán)重衰減正則化技術(shù)融入到優(yōu)化過程中。權(quán)重衰減是一種常用的正則化技術(shù),它懲罰大的權(quán)重值,從而避免過擬合。
8bit-Adam是一種針對深度神經(jīng)網(wǎng)絡(luò)的低精度優(yōu)化器。它使用8位整數(shù)表示權(quán)重和梯度,從而減少了存儲和計算的開銷,加快了模型的訓(xùn)練和推理速度。
LION是一種新型的優(yōu)化算法,它基于生物學(xué)中的遺傳進(jìn)化和個體競爭的原理。LION優(yōu)化器通過對群體中的個體進(jìn)行競爭和演化,來逐步優(yōu)化模型的性能。相比傳統(tǒng)的優(yōu)化算法,LION具有更好的收斂性和魯棒性。”
講人話就是:
AdamW、8bit-Adam、LION這三個東西都是在機(jī)器學(xué)習(xí)領(lǐng)域中用來幫助優(yōu)化模型的算法。
AdamW是一種對Adam優(yōu)化器的改進(jìn),它可以防止模型過度擬合,從而提高模型的泛化能力(比如二次元往賽博coser上的遷移)。
8bit-Adam是一種用于深度學(xué)習(xí)的優(yōu)化算法,它可以在不影響模型精度的情況下,大幅減少存儲和計算資源的使用,從而讓模型訓(xùn)練和推理的速度更快。
LION則是一種基于生物學(xué)原理的優(yōu)化算法,通過競爭和演化的方式來優(yōu)化模型,可以讓模型更快地收斂并且更加穩(wěn)定。相比其他優(yōu)化算法,LION更加先進(jìn),但是也更加復(fù)雜。一般情況效果會更好。
你是在一個基于SD2的模型上訓(xùn)練嗎?
底模的下載地址一般會給出它的基底模型。比如

就說明了該模型的Base Model是SD 1.5,那么就選擇否。
你是在訓(xùn)練一個三次元模型嗎?
用于控制clip_skip參數(shù),這是一個訓(xùn)練層數(shù)的定義。一般情況下,真實模型的clip_skip都使用1,而動漫都使用2,當(dāng)你選擇是的時候這個值被更改為1。而否則改為2。
你想使用正則化圖像嗎?
這是一個很復(fù)雜的東西,之后我們會有教程來講這個。如果要使用它,也是將父文件夾載入。以下摘自lora guide并進(jìn)行了翻譯。
“regularization_images" 文件夾可以為空,存在正則化圖像是可選的。 理論上,正則化圖像有助于提高訓(xùn)練準(zhǔn)確性。 正則化圖像使您可以將正在訓(xùn)練的對象(概念)與圖像的畫風(fēng)“分離”。在訓(xùn)練期間,網(wǎng)絡(luò)將“并行”訓(xùn)練(實際上是順序訓(xùn)練,在智能場景中存在正則化圖像時,訓(xùn)練時間應(yīng)該加倍)如何使概念不應(yīng)該看起來像。這樣的 LoRA 網(wǎng)絡(luò)的模型之間的可轉(zhuǎn)移性會變得更好(同樣是理論上)。 如果您不確定是否應(yīng)該使用正則化圖像,請不要使用它們,除非您知道自己在做什么。
例如,如果您正在訓(xùn)練一個人的臉(男性),而每個描述文件中都有“Photo of [name]“的tag,那么最好打開 WebUI 并使用“Photo of man”的提示生成圖像。需要生成多少張?至少要與示例中男性臉部圖像的數(shù)量相同。生成更多圖像會更好。
準(zhǔn)備好帶有200張圖片的文件夾,其中包括1girl、1boy、photo of woman,photo of man這些tag生成的照片,這樣的效果會更好。
你想從一個你保存過的lora繼續(xù)進(jìn)行訓(xùn)練嗎?
這是一個斷點續(xù)傳功能,如果你對你已經(jīng)訓(xùn)練好的loRA不滿意,你可以在已經(jīng)保存好的loRA上繼續(xù)加數(shù)據(jù)訓(xùn)練。
你想翻轉(zhuǎn)你所有的圖像嗎?
翻轉(zhuǎn)圖像是一種簡單的數(shù)據(jù)增強(qiáng)技術(shù),可以幫助模型更好地學(xué)習(xí)不同角度的特征,在翻轉(zhuǎn)圖像時,可以沿著水平軸或垂直軸翻轉(zhuǎn)圖像(在這里是鏡像),然后復(fù)制一份,加到數(shù)據(jù)集里。如果你的人物左右對稱可以使用,如果不是左右對稱會毀了數(shù)據(jù)。
一次性處理的圖像數(shù)量(batch_size)
chatgpt:“ batch_size是機(jī)器學(xué)習(xí)中常用的一個參數(shù),它表示每個訓(xùn)練步驟中用來訓(xùn)練模型的樣本數(shù)量。在訓(xùn)練模型時,通常會將訓(xùn)練數(shù)據(jù)集分成多個batch,每個batch包含了batch_size個樣本。模型的訓(xùn)練過程會對每個batch中的樣本進(jìn)行一次前向傳播和反向傳播,并根據(jù)這些樣本的梯度更新模型參數(shù)。因此,batch_size的大小會影響模型的訓(xùn)練速度和準(zhǔn)確性。”
較大的batch_size可以加快訓(xùn)練速度,但可能導(dǎo)致內(nèi)存或顯存不足的問題;較小的batch_size可以增加模型的泛化能力,但可能增加訓(xùn)練過程中的抖動和噪聲。
已經(jīng)給出了一個參考參數(shù),12g顯存,在512分辨率下,可以最多處理6張圖像。
你想要多少epoch?
epoch是機(jī)器學(xué)習(xí)中的一個重要概念,它表示對整個數(shù)據(jù)集進(jìn)行一次完整的訓(xùn)練。舉個例子,如果一個訓(xùn)練數(shù)據(jù)集中有1000個樣本,batch_size設(shè)置為100,那么一個epoch就需要進(jìn)行10個batch的訓(xùn)練,對每個batch進(jìn)行前向傳播和反向傳播,并更新模型參數(shù)。通常情況下,epoch的數(shù)量越多,模型的訓(xùn)練效果越好,但過多的epoch可能會導(dǎo)致模型過擬合訓(xùn)練數(shù)據(jù),泛化能力下降。
你想用什么DIM值?
DIM是特征的數(shù)量,也就是輸入數(shù)據(jù)的維度。在機(jī)器學(xué)習(xí)中,每個樣本由多個特征組成,而這些特征就對應(yīng)了輸入數(shù)據(jù)的維度。這個值嚴(yán)重影響lora的質(zhì)量,太低模型不像,太高容易過擬合。經(jīng)過多方調(diào)試,128被認(rèn)為是一個最為推薦的數(shù)值。它也直接影響輸出的模型大小。
你想設(shè)置多少alpha?
chatgpt:“在機(jī)器學(xué)習(xí)中,alpha通常指正則化中的超參數(shù),用于控制模型復(fù)雜度和泛化能力之間的權(quán)衡。正則化是一種常用的防止過擬合的技術(shù),它通過對模型參數(shù)進(jìn)行懲罰,以減少模型的復(fù)雜度和提高泛化能力。
alpha的大小可以根據(jù)數(shù)據(jù)集和模型的復(fù)雜度來確定,通常情況下,alpha越大,模型的正則化程度就越高,復(fù)雜度越小,泛化能力越強(qiáng)。反之,alpha越小,模型的正則化程度就越低,復(fù)雜度越高,泛化能力越弱。”
經(jīng)過實驗調(diào)試,這個值為0.25-0.5 dim最佳。
請設(shè)置分辨率
大多數(shù)模型的分辨率都是正方形,因此只用提供一個數(shù)據(jù)。注意,你提供的數(shù)據(jù)需要為64的倍數(shù)。
請設(shè)置學(xué)習(xí)率
學(xué)習(xí)率是指控制模型在每次迭代中更新權(quán)重的步長。學(xué)習(xí)率的大小對模型的訓(xùn)練和性能都有重要影響。如果學(xué)習(xí)率設(shè)置得太小,模型收斂速度會很慢,訓(xùn)練時間會變長;如果學(xué)習(xí)率設(shè)置得太大,模型可能會在訓(xùn)練過程中出現(xiàn)震蕩,甚至無法收斂。默認(rèn)1e-4是調(diào)試過的數(shù)值。
當(dāng)然,我們也可以用學(xué)習(xí)率調(diào)度器動態(tài)調(diào)整,后面會提到。
text_encoder_lr和unet_lr
text_encoder_lr和unet_lr分別是用于文本編碼器和unet(指圖像編碼器和解碼器的組合)的學(xué)習(xí)率,它們會覆蓋基本的學(xué)習(xí)率設(shè)置。
unet_lr:3e-4? text_encoder_lr:1e-4是一個調(diào)試過的數(shù)值。設(shè)置不同的學(xué)習(xí)率,以更好地控制每個組件的權(quán)重更新速度,從而提高模型的性能和效率。
你要使用哪個學(xué)習(xí)率調(diào)度器?
學(xué)習(xí)率調(diào)度器是一種用于動態(tài)調(diào)整學(xué)習(xí)率的技術(shù),它可以在訓(xùn)練過程中根據(jù)模型的表現(xiàn)自動調(diào)整學(xué)習(xí)率,以提高模型的訓(xùn)練效果和泛化能力。
Cosine:余弦退火。使用余弦函數(shù)來調(diào)整學(xué)習(xí)率,使其在訓(xùn)練過程中逐漸降低。
其中,base_lr?表示初始學(xué)習(xí)率,T_max?表示一個周期的迭代次數(shù),eta_min?表示最小學(xué)習(xí)率。
cosine_with_restarts:余弦退火重啟。在consine的基礎(chǔ)上每過幾個周期將進(jìn)行一次重啟,該值在選擇后可以設(shè)定。
其中,T_i?表示第 i?個周期的迭代次數(shù),T_0?表示第一個周期的迭代次數(shù),T_mult?表示每個周期的迭代次數(shù)相對于前一個周期的倍數(shù)
Polynomial:使用多項式函數(shù)來調(diào)整學(xué)習(xí)率。
其中,power?表示多項式的冪次,max_iter?表示總的迭代次數(shù)
constant and constant_with_warmup:恒定和恒定預(yù)熱。恒定代表學(xué)習(xí)率不變,恒定熱身代表在開始會增大一點,然后退回原學(xué)習(xí)率不變。warmup的概念后面也會再講。
linear:線性。學(xué)習(xí)率線性下降。
一般選用cosine即可。(吐槽一下我是真不會用B站的這個公式塊,我好菜)
每隔幾個epoch保存你的輸出嗎?
最好的loRA不一定是在最后,可能會過擬合,所以可以設(shè)定一個值,每過3個epoch或者2個epoch保存一次,導(dǎo)入到stable_diffusion-webui中做對比。
你需要洗牌描述(shuffle_captions)嗎?
chatgpt:“是一個用于控制是否打亂文本(caption)數(shù)據(jù)的開關(guān)參數(shù)。如果將該參數(shù)設(shè)置為True,則在訓(xùn)練前,文本數(shù)據(jù)中的每個caption都會被隨機(jī)打亂順序。這種操作通常用于增強(qiáng)模型對于不同文本順序的魯棒性,從而提高模型的泛化能力。
具體來說,打亂文本數(shù)據(jù)的操作是對于每個caption隨機(jī)選擇一個其他的caption,然后將它們交換位置,這樣就完成了一次打亂操作。打亂操作可以多次進(jìn)行,從而更大程度地增加數(shù)據(jù)的隨機(jī)性”
常常用于SD模型。在訓(xùn)練真人模型的時候與二次元模型不同,它的構(gòu)成是caption + tag的形式。
用中文表達(dá)為 “一個人在喝牛奶(caption),人,牛奶,牧場...”
洗牌文本可以在多種相似的圖像中使用。如果差異較大,就不要使用了。
你需要在描述前加上特殊標(biāo)記嗎?
這個功能是讓AI更好的知道“這是一段描述而不是一個tag”,如果你的描述都比較短,推薦開啟。設(shè)置為1就可以了。
你需要設(shè)置學(xué)習(xí)率預(yù)熱比例(warm up ratio)嗎?
這是為了在訓(xùn)練開始時避免模型權(quán)重更新過于劇烈而采用的策略。學(xué)習(xí)率預(yù)熱比例越高,就會有更多的迭代次數(shù)用于學(xué)習(xí)率的逐漸增加,以幫助模型更好地收斂。通常,學(xué)習(xí)率預(yù)熱比例設(shè)置為訓(xùn)練迭代總數(shù)的一小部分,比如1/10或1/20。如果你的總步數(shù)為1000,在接下來的設(shè)置里請改為50-100。步數(shù)的計算方式為:
?
如果實在不會計算,可以先跑一次看看steps,然后再回來設(shè)置。
你是否要改變輸出checkpoint的名稱?
不修改的話,輸出默認(rèn)名為“epoch_次數(shù)”和"last"。盡量修改一下。
你需要在元數(shù)據(jù)中添加描述嗎?
只是加個注釋而已,不重要。
你需要僅訓(xùn)練unet和text_encoder嗎?
除非你有改代碼和預(yù)先訓(xùn)練的需求,否則選否就好了。
你想保存一個txt文件來輸出你所有使用的Tag嗎?
它將在輸出文件夾按照你的選擇,字母順序或者是頻率順序輸出你所有在訓(xùn)練時打上的tag的txt文件方便你生成圖的時候拿出來用。
例如:

?
你想使用caption dropout嗎?
“caption dropout”是一種用于訓(xùn)練圖像文本的技術(shù)。在訓(xùn)練過程中,隨機(jī)刪除一定比例的文本描述,或者不使用描述,以防止模型過分依賴于描述信息,提高其泛化能力。如果你訓(xùn)練的真人模型,并有描述的話,可以使用。之后會提示你是否要在整個文件上使用,百分比是多少。
你想要在整個epoch上不進(jìn)行描述嗎?
設(shè)置的話,每隔幾個epoch會將整個epoch里的描述都刪了進(jìn)行訓(xùn)練,并重新生成描述進(jìn)行對比,以提高泛化能力。
Tag dropout/ignore
與描述類似,只是換了個對象。Tag忽略是按比例來算的,因為tag數(shù)量比較多。
你想使用noise offset嗎?
添加的噪聲偏移量。如果你的圖像普遍偏暗,亮,或者忽暗忽亮,模糊不穩(wěn)定。那訓(xùn)練出來的圖像也會不穩(wěn)定,可以加入一定的noise offset來進(jìn)行均衡。一般設(shè)為0.1。
你需要放大圖像嗎?
如果你的圖像都進(jìn)行過壓縮,或者比例低于512很多,可以開啟。
你想進(jìn)行另外一個訓(xùn)練嗎?
將另外一個訓(xùn)練加入隊列,在本訓(xùn)練結(jié)束后繼續(xù)訓(xùn)練。
?