新聞中心

熟悉LLM的重要機(jī)制

作者:高煥堂 時(shí)間:2024-06-11 來(lái)源:EEPW 收藏


本文引用地址:http://m.butianyuan.cn/article/202406/459739.htm

1 前言

在前一期里,介紹過(guò)大語(yǔ)言模型()幕后核心的注意力(Attention)機(jī)制。本期就來(lái)繼續(xù)擴(kuò)大,介紹大名鼎鼎的轉(zhuǎn)換器(Transformer)模型。其中,要特別闡述:為什么當(dāng)今主流都采用<僅譯碼器>(Decoder-Only Transformer)模型。

在 2017 年, 首先在「Attention is All You Need」這篇論文中提出了經(jīng)典的Transformer架構(gòu),它內(nèi)含編碼器(Encoder)和譯碼器(Decoder)兩部分。后來(lái),自從GPT-2之后,整個(gè)大趨勢(shì)逐漸轉(zhuǎn)向<僅譯碼器>(Decoder-Only Transformer)模型。隨著的流行,在其應(yīng)用于下游任務(wù)的微調(diào)(Fine-tuning) 過(guò)程中,經(jīng)常會(huì)看到<僅譯碼器>的身影,所以更深刻領(lǐng)會(huì)這個(gè)大趨勢(shì),也更熟悉這個(gè)重要機(jī)制,對(duì)于LLM 的各項(xiàng)應(yīng)用是很有幫助的。

2 從典型的Transformer架構(gòu)說(shuō)起

最初在 2017 年的論文「Attention is All You Need」中介紹,Transformer具有譯碼器(Decoder)和編碼器(Encoder)部分,如圖1。


image.png

圖1

這圖里的左半部分是編譯程序(Encoder)部分,而右半部分是解釋器(Decoder)部分。

剛才提到了,當(dāng)今主流的GPT模型,由于其在文字生成方面的出色性能,LLM大趨勢(shì)是轉(zhuǎn)向<僅譯碼器>(Decoder-Only Transformer)模型。這種模型的強(qiáng)大之處在于它們不僅能夠模仿類似人類的文本,而且還能夠創(chuàng)造性地做出回應(yīng)。他們可以寫故事、回答問(wèn)題,甚至進(jìn)行自然流暢的對(duì)話。這種功能使它們?cè)趶V泛的應(yīng)用中非常有用,從聊天機(jī)器人和數(shù)字助理到內(nèi)容創(chuàng)建、抽象總結(jié)和講故事。

如今,這僅譯碼器架構(gòu)已經(jīng)是GPT-3、ChatGPT、GPT-4、PaLM、LaMDa和Falcon等主要語(yǔ)言模型的核心了。它專注于生成新內(nèi)容,而不是解釋或分析所輸入的內(nèi)容( 如文本)。例如,除了能夠解析人類文本的涵意,還能夠創(chuàng)造性地寫故事、回答問(wèn)題、以及流暢對(duì)話等。這種功能對(duì)于這些大語(yǔ)言模型(LLM)在廣泛應(yīng)用的效益很大。為什么當(dāng)今的LLM,主要都采用僅譯碼器架構(gòu)呢?其原因,除了可提升訓(xùn)練效率之外,還有在生成任務(wù)上,引入編譯程序的雙向注意力機(jī)制并無(wú)太多幫助。于是,大趨勢(shì)就逐漸轉(zhuǎn)向< 僅譯碼器> 模型。

1718065507389198.png

圖2

https://cameronrwolfe.substack.com/p/decoder-only-transformers-the-workhorse

3 認(rèn)識(shí)Decoder-Only Transformer架構(gòu)

剛才已經(jīng)看到了,上圖-1里的右半部分是解釋器。所以僅譯碼器模型的核心架構(gòu)反而必較簡(jiǎn)單。它通常是是由多個(gè)具有相同結(jié)構(gòu)的區(qū)塊按順序堆棧而成的。在每個(gè)譯碼器區(qū)塊(Decoder Block)都包含兩個(gè)主要組件:

1)屏蔽多頭自注意力(Masked, multi-headed attention)層。這是在前一期里介紹過(guò)的注意力機(jī)制,它在理解輸入序列的涵意方面扮演非常關(guān)鍵的角色。其中的< 屏蔽>的用意是要確保其預(yù)測(cè)標(biāo)記(Token) 時(shí),僅專注于當(dāng)前位置之前產(chǎn)生的標(biāo)記,而不考慮之后的標(biāo)記,這樣可發(fā)揮自回歸(Autoregressive)模型的特性和功能。也就是,它很擅長(zhǎng)于從句子中前面的單字收集信息,來(lái)預(yù)測(cè)出下一個(gè)詞的機(jī)率估計(jì)值( 例如文字接龍)。這是生成式AI的魅力源頭。

2)逐位置的前饋網(wǎng)絡(luò)(Position-wise feed-forward network) 層。這用來(lái)引入非線性的變換,協(xié)助注意力機(jī)制( 純線性數(shù)據(jù)變換) 來(lái)捕捉更復(fù)雜的模式和關(guān)系。例如,使用非線性活化函數(shù)( 如ReLU 或GeLU 等) 來(lái)讓模型能夠逼近任何函數(shù),以便提供更強(qiáng)的表達(dá)能力。它常常放在自注意力層之后,并且添加了有關(guān)序列中每個(gè)標(biāo)記的位置的信息,這對(duì)于理解單字的順序至關(guān)重要。其用意是在每個(gè)序列的位置單獨(dú)應(yīng)用一個(gè)全連接前饋網(wǎng)絡(luò),所以稱為:逐位置(Position-wise)方式。

其中,這個(gè)模型背后的真正驅(qū)動(dòng)力,即是上述的多頭自注意力機(jī)制。這種機(jī)制允許模型在預(yù)測(cè)每個(gè)標(biāo)記時(shí)專注于輸入序列的不同部分,從而促進(jìn)上下文相關(guān)文字的生成。

4 以Gemma的<僅譯碼器>模型為例

剛才已經(jīng)介紹了,在每個(gè)譯碼器區(qū)塊里,都包含兩個(gè)主要組件:自注意力機(jī)制(Attention) 和前饋網(wǎng)絡(luò)(FFN)。其結(jié)構(gòu)如圖2 所示。

其中的歸一化層(Layer Normalization),用來(lái)對(duì)網(wǎng)絡(luò)中的每個(gè)神經(jīng)元的輸出進(jìn)行歸一化,使得網(wǎng)絡(luò)中每一層的輸出都具有相似的分布。該技術(shù)應(yīng)用於每個(gè)子層(自註意力和前饋)之後,可以標(biāo)準(zhǔn)化激活並穩(wěn)定訓(xùn)練過(guò)程。

此外,還常添加殘差連接(Residual Connections) 層,它提供了一條捷徑,允許梯度在反向傳播過(guò)程中自由流過(guò)網(wǎng)路,可緩解梯度消失和爆炸的問(wèn)題,并有助于學(xué)習(xí)更強(qiáng)大的特征,以及提高訓(xùn)練過(guò)程的整體易用性和穩(wěn)定性。

# Gemma 的譯碼器區(qū)塊的結(jié)構(gòu)

class RMSNorm(torch.nn.Module):

def __init__(….. ):

#...............................

#...............................

class GemmaMLP(nn.Module):

def __init__( ….. ):

#...............................

#...............................

class GemmaAttention(nn.Module):

def __init__( ….. ):

#...............................

#...............................

class GemmaDecoderLayer(nn.Module):

def __init__( …..):

#...............................

self.self_attn = GemmaAttention(…..)

self.mlp = GemmaMLP(…..)

self.input_layernorm = RMSNorm(…..)

s e l f . p o s t _ a t t e n t ion_ l ayernorm =

RMSNorm(…..)

#...............................

#...............................

基于上述的譯碼器區(qū)塊(Decoder Block),就可以依據(jù)需求的不同,而有多個(gè)彼此堆棧的譯碼器區(qū)塊,如圖3所示。

1718066001466281.png

圖3

https://cameronrwolfe.substack.com/p/decoder-only-transformers-the-workhorse

這樣子,就將多個(gè)區(qū)塊堆棧起來(lái),成為一個(gè)僅譯碼器模型了。各層區(qū)塊都各負(fù)責(zé)從輸入數(shù)據(jù)中提取越來(lái)越抽象的特征。例如,前幾層可能捕捉到局部的相關(guān)性,而更深的層可以捕捉更復(fù)雜的遠(yuǎn)程依賴性。這種分層方法讓模型建立輸入數(shù)據(jù)的豐富表示。

其中,各區(qū)塊里的注意機(jī)制,讓模型在產(chǎn)生輸出時(shí)專注于輸入序列的各個(gè)不同部分。然后,將多層的自注意力協(xié)同合作,使模型能夠逐步細(xì)化這些注意力權(quán)重,來(lái)提升對(duì)輸入有更細(xì)致和上下文感知更廣闊的理解。于是,每個(gè)區(qū)塊在輸入數(shù)據(jù)的分層處理中都發(fā)揮其重要的作用,并協(xié)同合作,來(lái)提升模型掌握復(fù)雜依賴關(guān)系的能力,來(lái)捕捉各種復(fù)雜的模式(Pattern)。

例如,在Gemma 的源碼中,將譯碼器區(qū)塊( 名為:GemmaDecoderLayer) 疊加起來(lái),成為僅譯碼器模型( 名為:GemmaModel),如下:

# Gemma 的僅譯碼器模型結(jié)構(gòu)

#...............................

#...............................

class GemmaDecoderLayer(nn.Module):

def __init__( …..):

#...............................

self.self_attn = GemmaAttention(…..)

self.mlp = GemmaMLP(…..)

self.input_layernorm = RMSNorm(…..)

s e l f . p o s t _ a t t e n t ion_ l ayernorm =

RMSNorm(…..)

#...............................

#...............................

class GemmaModel(nn.Module):

def __init__(self, config):

#...............................

self.layers = nn.ModuleList()

for _ in range(config.num_hidden_layers):

self.layers.append( GemmaDecoderLayer(…..) )

#...............................

#...............................

從這Gemma的源碼結(jié)構(gòu)而觀之,盡管這些年來(lái),LLM取得了快速的進(jìn)步,但是其中的核心組成部分仍然保持不變,就是:僅譯碼器架構(gòu)。

5 結(jié)束語(yǔ)

在僅譯碼器模型中,擁有多層互相迭加的譯碼器區(qū)塊,將輸入序列進(jìn)行分層,透過(guò)多層處理來(lái)提升從輸入序列中學(xué)習(xí)和泛化的能力。這種深度讓模型能處理復(fù)雜的依賴關(guān)系,然后生成高質(zhì)量的作品,即是LLM 魅力的源頭。

(本文來(lái)源于《EEPW》



關(guān)鍵詞: 202406 LLM

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉