自己在看面經(jīng)中遇到的一些面試題,結合自己和理解進行了一下整理。
transformer中求和與歸一化中“求和”是什么意思?
求和的意思就是殘差層求和,原本的等式為y = H(x)轉(zhuǎn)化為y = x + H(x),這樣做的目的是防止網(wǎng)絡層數(shù)的加深而造成的梯度消失,無法對前面網(wǎng)絡的權重進行有效調(diào)整,導致神經(jīng)網(wǎng)絡模型退化(這種退化不是由過擬合造成的,而是較深模型后面添加的不是恒等映射反而是一些非線性層)。已經(jīng)學習到較飽和的準確率(或者當發(fā)現(xiàn)下層的誤差變大時),那么接下來的學習目標就轉(zhuǎn)變?yōu)楹愕扔成涞膶W習,也就是使輸入x近似于輸出H(x),以保持在后面的層次中不會造成精度下降。
注意力機制中計算注意力分數(shù)時為什么會除以根號dk?
這和softmax的求導有關,softmax的計算公式=exp(x1)/exp(x1)+exp(x2),另p=exp(x1)/exp(x1)+exp(x2),那么softmax求導之后=p*(1-p),當p趨近于1時,softmax的導數(shù)就趨近于0。故除以根號dk的原因是:為了避免softmax計算的結果過大,造成偏導數(shù)為0。
多頭注意力比單頭注意力的好處?
注意力的計算是并行進行的,多頭可以提高計算效率。并且多頭可以捕獲不同子空間內(nèi)的特征。
transformer比起RNN的優(yōu)勢?
RNN在傳播的過程中會出現(xiàn)信息衰減,而transformer當前詞不管距離其他詞多遠,其只有這個詞與其他詞的相關性有關。并且transformer的encode可以并行計算,RNN不可以。
transformer為什么使用層歸一化?
(當前值減均值)/ 標準差。減小梯度消失和梯度爆炸的問題,并提高網(wǎng)絡的泛化性能。*
批量歸一化是不同訓練數(shù)據(jù)之間對單個神經(jīng)元的歸一化,層歸一化是單個訓練數(shù)據(jù)對某一層所有神經(jīng)元之間的歸一化。
transformer中解碼器的注意力與編碼器的區(qū)別
decode中的自注意力是帶掩碼的,不讓decode看到后文。還有一個encode-decode注意力層,這一層注意力層只有q來源于上一層decode單元的輸出,剩下的k、v都來源于encode最后一層的輸出。
前饋層
兩層relu激活函數(shù),一層全連接神經(jīng)網(wǎng)絡。
BERT的訓練任務
1.在輸入數(shù)據(jù)中選擇15%用于預測,這15%的數(shù)據(jù)中有80%被替換為mask,10%的單詞被替換為其他詞,10%的單詞保持不變。2.上下段落匹配,其中50%使用正確的上下句關系,50%隨機抽取一個句子拼在后面。
BERT的優(yōu)缺點
1.預訓練階段會出現(xiàn)特殊的[MASK]字符,而在下游任務中不會出現(xiàn),造成預訓練和微調(diào)之間的不匹配。
2.每個batch只有15%的token會被預測,所有收斂速度會比傳統(tǒng)語言模型慢。
3.缺乏生成能力。
chatgpt的訓練過程
1.SFT階段(有階段微調(diào)):使用問答對微調(diào)GPT3。這一階段的損失是交叉熵。
2.RM獎勵模型:使用1的SFT模型收集每個問題的4-9個回答,并對其進行人為排序。這一階段使用的損失是排序損失函數(shù),排序高的回答的獎勵值-排序低的回答的獎勵值,我們希望這個值越大越好。
3.PPO算法更新策略:
LLAMA作出的改進
1.歸一化又LN改為了RMS Norm。
2.SwiGLU替代ReLU。
3.旋轉(zhuǎn)位置編碼替代位置編碼。
ChatGLM作出的改進
1.重新排列了層歸一化和殘差連接的順序
2.用GeLU替。換ReLU激活函數(shù)
3.在結構和訓練目標上兼容這三種預訓練模型,需要GLM中同時存在單向注意力和雙向注意力,當attention_mask為全1時為雙向的attention,當attention_mask為三角矩陣時為單向的attention。
4.使用P-tuning進行的微調(diào)。
ChatGLM的訓練任務
1.文檔級別的預測/生成:從文檔中隨機采樣一個文本片段進行掩碼,片段的長度為文檔長度的50%-100%。
2.句子級別的預測/生成:從文檔中隨機掩碼若干文本片段,每個文本片段必須為完整的句子,被掩碼的詞數(shù)量為整個文檔長度的15%。
既保證了模型的自編碼能力又有自回歸能力。
Baichuan作出的改進
1.RoPE位置編碼
2.RMSNorm歸一化
3.SwiGLU激活函數(shù)
4.1.2萬億訓練數(shù)據(jù)/上下文窗口4096
參數(shù)微調(diào)的方法
1.Adapter Tuning:將其嵌入Transformer的結構里面,在訓練時,固定住原來預訓練模型的參數(shù)不變,只對新增的Adapter結構進行微調(diào)。
2.Prefix Tuning:構造隱式的輸入token,加入到輸入前綴(我的理解是將prompt變成可以調(diào)整參數(shù)的格式)
3.P-tuning:同樣加了可微的virtual token,但是僅限于輸入,沒有在每層加。且virtual token的位置也不一定是前綴,插入的位置是可選的,這里的出發(fā)點實際是把傳統(tǒng)人工設計模版中的真實token替換成可微的virtual token。
4.P-tuning V2:在輸入前面的每層加入可微調(diào)的參數(shù)。
5.LoRA:凍結了預訓練的模型權重,在需要訓練的矩陣開通一個旁路矩陣,分為一個降秩矩陣和一個升秩矩陣(比如一個100×100的矩陣可以替換為一個100×2和一個2×100兩個矩陣,參數(shù)量減少了10000-400),將最后的結果加到原始矩陣上。
6.QLoRA:引入了4位量化、雙量化和利用nVidia統(tǒng)一內(nèi)存進行分頁。所有這些步驟都大大減少了微調(diào)所需的內(nèi)存,同時性能幾乎與標準微調(diào)相當。
模型量化
比如8位量化需要最大值為127,那么選取模型中參數(shù)最大的值/127為縮放比例a,將所有的數(shù)都除以這個縮放比例a。
Actor-Critic架構
Actor演員使用SFT模型初始化,使用問答對來更新其策略;Critic評論家使用RM模型初始化,用來擬合舊價值估計;Reward Model用來產(chǎn)生當前狀態(tài)和策略下獲得的獎勵值;獎勵值減掉SFT舊策略與新策略之間的KL散度作為reward,優(yōu)勢函數(shù)等于reward減掉舊狀態(tài)價值估計。當優(yōu)勢函數(shù)大于0時,就要鼓勵當前的動作;當優(yōu)勢函數(shù)小于0時,就要抑制當前動作。
優(yōu)化器
SGD:隨機梯度下降,它使用數(shù)據(jù)集中的單個樣本或一批樣本的梯度來更新模型參數(shù)。計算過程為原始參數(shù)=原始參數(shù)-學習率×梯度。
Adam:自適應學習率的梯度下降,Adam算法將不同的梯度給予不同的權重,使得神經(jīng)網(wǎng)絡在學習率穩(wěn)定時,能快速、穩(wěn)定的收斂到最佳點。
當m0很小時,使用修正因子重新計算了mt。
為什么sigmoid函數(shù)和tanh函數(shù)會出現(xiàn)梯度消失
這和兩者的求導有關,sigmoid(x) = 1/(1+exp(-x)) = p,求導后表達式為p(1-p),當x趨于正無窮或負無窮時,p趨于1或0,求導后的結果趨于0,因此會出現(xiàn)梯度消失。
tanh(x) = (exp(x)-exp(-x))/(exp(x)+exp(-x)) = p,求導后表達式為1-p2,當x趨于正無窮或負無窮時,p趨于1或-1,求導后的結果趨于0,因此會出現(xiàn)梯度消失。
BERT為什么會做編碼任務、完型填空任務、段落匹配任務
BERT本身的結構就是transformer的Encode,其會使用位置編碼、詞級編碼以及段級編碼作為輸入,經(jīng)過Encoder的單元之后形成嵌入向量。
當BERT在做完型填空任務時,BERT會將需要預測的位置,通過將最后的輸出linear線性變換后,將Embedding_size轉(zhuǎn)化為vovab_size,再進行softmax激活函數(shù)之后得到最后單詞的概率,使用交叉熵函數(shù)進行損失計算。
當BERT在做段落匹配任務時,會將CLS處進行l(wèi)inear線性變換后將Embedding_size轉(zhuǎn)化為2,再通過sigmoid函數(shù)計算概率來判斷這兩個句子是否構成上下句的關系。
BERT模型為什么要將15%的詞語進行80%mask、10%替換、10%什么也不做,而不是全部mask
在訓練時,不是用這種方式,而是全部mask掉的話,模型就會把雖有的注意力集中到“mask”這個詞匯上了,模型就能知道不出現(xiàn)“mask”的地方我不用管,啥時候出現(xiàn)“mask”我在管,這對模型提取語義關系是不利的。使用(80% mask,10% 隨機替換,10% 保持原詞)的方式之后呢,模型不只是需要在“mask”位置做工作,還要時刻預防著隨機替換的情況呀,也就是檢查這個句子對不對,這就大大提高了模型提取語義效果的能力。
為什么relu激活函數(shù)要優(yōu)于sigmoid激活函數(shù)?
1.relu激活函數(shù)在正區(qū)間內(nèi)不會出現(xiàn)梯度消失。
2.relu的偏導數(shù)計算量比sigmoid小。
3.relu使得一部分神經(jīng)元的輸出為0,這樣就造成了網(wǎng)絡的稀疏性,并且減少了參數(shù)的互相依存關系,緩解了過擬合問題的發(fā)生。
缺點:函數(shù)導致負梯度在經(jīng)過該ReLU單元時被置為0,在下一層傳播時也為0,即流經(jīng)該神經(jīng)元的梯度永遠為0,不對任何數(shù)據(jù)產(chǎn)生響應。
為什么會出現(xiàn)梯度消失?
采用了不合適的激活函數(shù)。
隱藏層數(shù)太多。
解決:使用合適的激活函數(shù),使用歸一化,殘差網(wǎng)絡。
為什么會出現(xiàn)梯度爆炸?
參數(shù)初始化太大
隱藏層數(shù)太多。
解決:使用梯度裁剪策略,使用合適的激活函數(shù),使用歸一化,使用殘差網(wǎng)絡。
lora為什么可以映射到低秩維度?
lora論文中指出常見的預訓練模型具有非常低的內(nèi)在維度(如果你有一個在三維空間中分布的數(shù)據(jù)集,但所有的數(shù)據(jù)點都嚴格地位于同一平面上,那么這個數(shù)據(jù)集的內(nèi)在維度就是2,因為你只需要兩個坐標就能準確地描述每個數(shù)據(jù)點);換句話說,存在一個低維度的重新參數(shù)化,對于微調(diào)來說與完整參數(shù)空間一樣有效。用少量數(shù)據(jù)微調(diào)大語言模型可能不需要那么多維度的參數(shù),而因為盡管模型可能有數(shù)億個參數(shù),但這些參數(shù)中的大部分可能并不需要改變,或者它們的改變對模型的性能沒有太大影響。
LSTM為什么選擇sigmoid和tanh而不選擇relu?
因為sigmoid和tanh都是飽和函數(shù),當輸入達到一定值時,輸出幾乎不發(fā)生變化;而relu難以實現(xiàn)門控的效果。
sigmoid用于“開關”,控制信息能流出多少;tanh符合0中心分布,此外tanh函數(shù)在輸入為0附近相比 Sigmoid函數(shù)有更大的梯度,通常使模型收斂更快。
LSTM如何緩解RNN的梯度消失或梯度爆炸
因為每個LSTM都有門控機制,中間記憶細胞通過輸入門和遺忘門之后進行累加,而不像RNN那樣的累乘,從而緩解了RNN的梯度消失或梯度爆炸。
Deepspeed分布式計算
1.數(shù)據(jù)并行,在幾張GPU卡上平均把訓練的數(shù)據(jù)分開。
2.模型并行,分為層間并行和層內(nèi)并行(比如多頭注意力分開多個卡進行訓練)。
3.混合并行
大模型生成過程中的采樣方式
1.貪心法:每次只采樣詞表中概率最大的那個詞。
2.Top-k法:取詞表中概率最大的k個詞,然后隨機選擇一個。
3.Top-p法:取詞表中概率最大的詞之和小于p為止,然后隨機選擇一個。文章來源:http://www.zghlxwxcb.cn/news/detail-799452.html
如何理解大模型中的temperture參數(shù)?
這個參數(shù)與大模型中采樣方式Top-p法有關。最后單詞的計算概率為softmax,加入?yún)?shù)temper之后,計算公式變?yōu)榱藀=exp(xi/T)/exp(x1/T)+…+exp(xn/T),當T趨于無窮大時,所有單詞的概率都變?yōu)榱?/n,相當于拉進了每個詞的概率,所以在top-p的列表中的被選擇的概率也就越大。所以這就是為什么參數(shù)temperture越大,模型回答越多樣性的原因。文章來源地址http://www.zghlxwxcb.cn/news/detail-799452.html
到了這里,關于大語言模型面試問題【持續(xù)更新中】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!