国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
一、Llama3的架構(gòu)
[1] 上下文視窗(context-window)
[2] 詞彙量(Vocabulary-size)和注意力層(Attention Layers)
[4] 隱藏維度(Hidden Dimensions)
[5] 將上述參數(shù)組合成Transformer
[6] Transformer block的多層
[7] 把所有這些放在一起
1.?max_seq_len (最大序列長度)
2.?Vocabulary-size (詞彙量)
3.?Attention Layers (注意力層)
4.?transformer block?
5.?Feature-dimension (特徵維度)
6.?Attention-Heads (注意力頭)
7.?Hidden Dimensions (隱藏維度)
關(guān)係和數(shù)值:
二、查看模型
讀取模型檔案
將Text轉(zhuǎn)化為Token
將令牌轉(zhuǎn)換為它們的嵌入表示
三、構(gòu)建Transformer的第一層
1. 輸入句子
2. 嵌入每個詞
3. 分成8個頭
4. 計算注意力
5. 拼接結(jié)果矩陣
額外說明
四、展開查詢向量
實現(xiàn)第一層的第一個頭
我們現(xiàn)在將查詢權(quán)重與令牌嵌入相乘,以獲得令牌的查詢
首頁 科技週邊 人工智慧 手撕Llama3第1層: 從零開始實現(xiàn)llama3

手撕Llama3第1層: 從零開始實現(xiàn)llama3

Jun 01, 2024 pm 05:45 PM
架構(gòu) 向量 llama3

一、Llama3的架構(gòu)

在本系列文章中,我們從頭開始實作llama3。

Llama3的整體架構(gòu):

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

#Llama3的模型參數(shù):

讓我們來看看這些參數(shù)在LlaMa 3模型中的實際數(shù)值。

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

[1] 上下文視窗(context-window)

#在實例化LlaMa類別時,變數(shù)max_seq_len定義了context -window。類別中還有其他參數(shù),但這個參數(shù)與transformer模型的關(guān)係最為直接。這裡的max_seq_len是8K。

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

[2] 詞彙量(Vocabulary-size)和注意力層(Attention Layers)

Transformer類別是一種定義了詞彙量和層數(shù)的模型。這裡的詞彙量是指模型能夠辨識和處理的單字(和標(biāo)記)集合。 Attention layers指的是模型中使用的transformer block(attention和feed-forward layers的組合)。

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

根據(jù)這些數(shù)字,LlaMa 3的詞彙量為128K,這是相當(dāng)大的。此外,它有32個transformer block。

[3] 特徵維度(Feature-dimension)和注意力頭(Attention-Heads)

特徵維度和attention-heads被引入到Self-Attention模組中。 Feature dimension指的是嵌入空間中tokens的向量大?。ㄌ蒯缇S度是指輸入資料或嵌入向量的維度大?。?,而attention-heads包括驅(qū)動transformers中self-attention機(jī)制的QK-module。

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

[4] 隱藏維度(Hidden Dimensions)

隱藏維度是指在前饋神經(jīng)網(wǎng)路(Feed Forward)中,隱藏層的維度大小。前饋神經(jīng)網(wǎng)路通常包含一個或多個隱藏層,這些隱藏層的維度決定了網(wǎng)路的容量和複雜度。在Transformer模型中,前饋神經(jīng)網(wǎng)路的隱藏層維度通常是特徵維度的某個倍數(shù),以增加模型的表示能力。 LLama3中,隱藏維度是特徵維度的1.3倍。需要注意的是,隱藏層和隱藏維度是兩個概念。

更多的隱藏層數(shù)量允許網(wǎng)路在將它們投射回較小的輸出維度之前,內(nèi)部創(chuàng)建和操縱更豐富的表示。

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

[5] 將上述參數(shù)組合成Transformer

第一個矩陣是輸入特徵矩陣,透過Attention layer處理產(chǎn)生Attention Weighted features。在這張影像中,輸入特徵矩陣只有5 x 3的大小,但在真實的Llama 3模型中,它成長到了8K x 4096,這是巨大的。

接下來是Feed-Forward Network中的隱藏層,成長到5325,然後在最後一層回落到4096。

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

[6] Transformer block的多層

LlaMa 3結(jié)合了上述32個transformer block,輸出從一個block傳遞到下一個block,直到達(dá)到最後一個。

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

[7] 把所有這些放在一起

一旦我們啟動了上述所有部分,就是時候把它們整合在一起,看看它們是如何產(chǎn)生LlaMa效果的。

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

步驟1:首先我們有我們的輸入矩陣,大小為8K(context-window)x 128K(vocabulary-size)。這個矩陣經(jīng)過嵌入處理,將這個高維矩陣轉(zhuǎn)換為低維。

步驟2:在這種情況下,這個低維度結(jié)果變成4096,這是我們之前看到的LlaMa模型中特徵的指定維度。

在神經(jīng)網(wǎng)路中,升維和降維都是常見的操作,它們各自有不同的目的和效果。

升維通常是為了增加模型的容量,使其能夠捕捉更複雜的特徵和模式。當(dāng)輸入資料被映射到一個更高維度的空間時,不同的特徵組合可以被模型更容易地區(qū)分。這在處理非線性問題時尤其有用,因為它可以幫助模型學(xué)習(xí)到更複雜的決策邊界??。

降維則是為了減少模型的複雜性和過度擬合的風(fēng)險。透過減少特徵空間的維度,模型可以被迫學(xué)習(xí)更精煉和泛化的特徵表示。此外,降維可以作為一種正規(guī)化手段,有助於提升模型的泛化能力。在某些情況下,降維還可以減少計算成本和提高模型的運作效率?。

在實際應(yīng)用中,升維後再降維的策略可以被視為一種特徵提取和變換的過程。在這個過程中,模型首先透過增加維度來探索資料的內(nèi)在結(jié)構(gòu),然後透過降維來提取最有用的特徵和模式。這種方法可以幫助模型在維持足夠複雜性的同時,避免過度擬合訓(xùn)練資料??。

步驟3:這個特徵透過Transformer block進(jìn)行處理,首先由Attention layer處理,然後是FFN layer。 Attention layer橫向跨特徵處理,而FFN layer則縱向跨維度處理。

步驟4:步驟3為Transformer block的32層重複。最終,結(jié)果矩陣的維度與用於特徵維度的維度相同。

步驟5:最後,這個矩陣被轉(zhuǎn)換回原始的詞彙矩陣大小,即128K,以便模型可以選擇並映射詞彙中可用的單字。

這就是LlaMa 3在那些基準(zhǔn)測試中取得高分並創(chuàng)造LlaMa 3效應(yīng)的方式。

我們將容易搞混的幾個術(shù)語用簡短的語言總結(jié)一下:

1.?max_seq_len (最大序列長度)

這是模型在單次處理時能夠接受的最大token數(shù)。

在LlaMa 3-8B模型中,這個參數(shù)設(shè)定為8,000個tokens,即Context Window Size = 8K。這意味著模型在單次處理時可以考慮的最大token數(shù)量為8,000。這對於理解長文本或保持長期對話上下文非常關(guān)鍵。

2.?Vocabulary-size (詞彙量)

這是模型能辨識的所有不同token的數(shù)量。這包括所有可能的單字、標(biāo)點符號和特殊字元。模型的詞彙量是128,000,表示為Vocabulary-size = 128K。這意味著模型能夠識別和處理128,000種不同的tokens,這些tokens包括各種單字、標(biāo)點符號和特殊字元。

3.?Attention Layers (注意力層)

Transformer模型中的一個主要元件。它主要負(fù)責(zé)透過學(xué)習(xí)輸入資料中哪些部分最重要(即「注意」哪些token)來處理輸入資料。一個模型可能有多個這樣的層,每層都試圖從不同的角度理解輸入資料。

LlaMa 3-8B模型包含32個處理層,即Number of Layers = 32。這些層包括多個Attention Layers及其他類型的網(wǎng)路層,每層都從不同角度處理和理解輸入資料。

4.?transformer block?

包含多個不同層的模組,通常至少包含一個Attention Layer和一個Feed-Forward Network(前饋網(wǎng)路)。一個模型可以有多個transformer block,這些block順序連接,每個block的輸出都是下一個block的輸入。也可以稱呼transformer block為decoder layer。?

在Transformer模型的脈絡(luò)中,通常我們說模型有“32層”,這可以等同於說模型有“32個Transformer blocks”。每個Transformer block通常包含一個自註意力層和一個前饋神經(jīng)網(wǎng)路層,這兩個子層共同構(gòu)成了一個完整的處理單元或「層」。

因此,當(dāng)我們說模型有32個Transformer blocks時,實際上是在描述這個模型由32個這樣的處理單元組成,每個單元都有能力進(jìn)行資料的自註意力處理和前饋網(wǎng)路處理。這種表述方式強調(diào)了模型的層級結(jié)構(gòu)和其在每個層級上的處理能力。

總結(jié)來說,"32層"和"32個Transformer blocks"在描述Transformer模型結(jié)構(gòu)時基本上是同義的,都指模型包含32次獨立的資料處理週期,每個週期都包括自註意力和前饋網(wǎng)路操作。

5.?Feature-dimension (特徵維度)

這是輸入token在模型中表示為向量時,每個向量的維度。

每個token在模型中轉(zhuǎn)換成一個含4096個特徵的向量,即Feature-dimension = 4096。這個高維度使得模型能夠捕捉更豐富的語意資訊和上下文關(guān)係。

6.?Attention-Heads (注意力頭)

在每個Attention Layer中,可以有多個Attention-Heads,每個head獨立地從不同的視角分析輸入資料。

每個Attention Layer包含32個獨立的Attention Heads,即Number of Attention Heads = 32。這些heads分別從不同的面向分析輸入數(shù)據(jù),共同提供更全面的數(shù)據(jù)解析能力。

7.?Hidden Dimensions (隱藏維度)

這通常指的是Feed-Forward Network中的層的寬度,即每層的神經(jīng)元數(shù)量。通常,Hidden Dimensions會大於Feature-dimension,這允許模型在內(nèi)部創(chuàng)建更豐富的資料表示。

在Feed-Forward Networks中,隱藏層的維度為5325,即Hidden Dimensions = 5325。這比特徵維度大,允許模型在內(nèi)部層之間進(jìn)行更深層的特徵轉(zhuǎn)換和學(xué)習(xí)。

關(guān)係和數(shù)值:

Attention Layers 和 Attention-Heads 的關(guān)係:每個Attention Layer可以包含多個Attention-Heads。

數(shù)值關(guān)係:一個模型可能有多個transformer blocks,每個block包含一個Attention Layer和一個或多個其他層。每個Attention Layer可能有多個Attention-Heads。這樣,整個模型就在不同層和heads中進(jìn)行複雜的資料處理。

下載Llama3模型的官方連結(jié)腳本:https://llama.meta.com/llama-downloads/?

二、查看模型

下面這段程式碼展示了如何使用tiktoken庫來載入和使用一個基於Byte Pair Encoding (BPE) 的分詞器。這個分詞器是為了處理文字?jǐn)?shù)據(jù),特別是在自然語言處理和機(jī)器學(xué)習(xí)模型中使用。

我們輸入hello world,看分詞器如何進(jìn)行分詞。

from pathlib import Pathimport tiktokenfrom tiktoken.load import load_tiktoken_bpeimport torchimport jsonimport matplotlib.pyplot as plttokenizer_path = "Meta-Llama-3-8B/tokenizer.model"special_tokens = ["<|begin_of_text|>","<|end_of_text|>","<|reserved_special_token_0|>","<|reserved_special_token_1|>","<|reserved_special_token_2|>","<|reserved_special_token_3|>","<|start_header_id|>","<|end_header_id|>","<|reserved_special_token_4|>","<|eot_id|>",# end of turn] + [f"<|reserved_special_token_{i}|>" for i in range(5, 256 - 5)]mergeable_ranks = load_tiktoken_bpe(tokenizer_path)tokenizer = tiktoken.Encoding(name=Path(tokenizer_path).name,pat_str=r"(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\r\n\p{L}\p{N}]?\p{L}+|\p{N}{1,3}| ?[^\s\p{L}\p{N}]+[\r\n]*|\s*[\r\n]+|\s+(?!\S)|\s+",mergeable_ranks=mergeable_ranks,special_tokens={token: len(mergeable_ranks) + i for i, token in enumerate(special_tokens)},)tokenizer.decode(tokenizer.encode("hello world!"))

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

讀取模型檔案


手撕Llama3第1層: 從零開始實現(xiàn)llama3

查看載入的模型檔案中包含的前20個參數(shù)或權(quán)重的名稱。

model = torch.load("Meta-Llama-3-8B/consolidated.00.pth")print(json.dumps(list(model.keys())[:20], indent=4))

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

  1. "tok_embeddings.weight":這表示模型有一個字嵌入層,用於將輸入的單字(或更一般的,token)轉(zhuǎn)換為固定維度的向量。這是大多數(shù)自然語言處理模型的第一步。
  2. "layers.0.attention..." 和 "layers.1.attention...":這些參數(shù)表示多個層中,每層都包含一個注意力機(jī)制模組。在這個模組中,wq、wk、wv、wo分別代表查詢(Query)、鍵(Key)、值(Value)和輸出(Output)的權(quán)重矩陣。這是Transformer模型的核心組成部分,用於捕捉輸入序列中不同部分之間的關(guān)係。
  3. "layers.0.feed_forward..." 和"layers.1.feed_forward...":這些參數(shù)表示每個層還包含一個前饋網(wǎng)路(Feed Forward Network),它通常由兩個線性變換組成,中間有一個非線性激活函數(shù)。 w1、w2、w3可能代表這個前饋網(wǎng)路中的不同線性層的權(quán)重。
  4. "layers.0.attention_norm.weight" 和"layers.1.attention_norm.weight":這些參數(shù)表示每個層中的注意力模組後面有一個歸一化層(可能是Layer Normalization) ,用於穩(wěn)定訓(xùn)練過程。
  5. "layers.0.ffn_norm.weight" 和 "layers.1.ffn_norm.weight":這些參數(shù)表示前饋網(wǎng)路後面也有一個歸一化層。上面程式碼輸出內(nèi)容,與下圖相同,也就是Llama3中的一個transformer block。

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

總的來說,這個輸出結(jié)果揭示了一個基於Transformer架構(gòu)的深度學(xué)習(xí)模型的關(guān)鍵組成部分。這種模型廣泛用於自然語言處理任務(wù),如文字分類、機(jī)器翻譯、問答系統(tǒng)等。每一層的結(jié)構(gòu)幾乎相同,包括注意力機(jī)制、前饋網(wǎng)路和歸一化層,有助於模型捕捉複雜的輸入序列特徵。

查看Llama3模型的參數(shù)配置:

with open("Meta-Llama-3-8B/params.json", "r") as f:config = json.load(f)config

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

  1. 'dim': 4096?- 表示模型中的隱藏層維度或特征維度。這是模型處理數(shù)據(jù)時每個向量的大小。
  2. 'n_layers': 32?- 表示模型中層的數(shù)量。在基于Transformer的模型中,這通常指的是編碼器和解碼器中的層的數(shù)量。
  3. 'n_heads': 32?- 表示在自注意力(Self-Attention)機(jī)制中,頭(head)的數(shù)量。多頭注意力機(jī)制是Transformer模型的關(guān)鍵特性之一,它允許模型在不同的表示子空間中并行捕獲信息。
  4. 'n_kv_heads': 8?- 這個參數(shù)不是標(biāo)準(zhǔn)Transformer模型的常見配置,可能指的是在某些特定的注意力機(jī)制中,用于鍵(Key)和值(Value)的頭的數(shù)量。
  5. 'vocab_size': 128256?- 表示模型使用的詞匯表大小。這是模型能夠識別的不同單詞或標(biāo)記的總數(shù)。
  6. 'multiple_of': 1024?- 這可能是指模型的某些維度需要是1024的倍數(shù),以確保模型結(jié)構(gòu)的對齊或優(yōu)化。
  7. 'ffn_dim_multiplier': 1.3?- 表示前饋網(wǎng)絡(luò)(Feed-Forward Network, FFN)的維度乘數(shù)。在Transformer模型中,F(xiàn)FN是每個注意力層后的一個網(wǎng)絡(luò),這個乘數(shù)可能用于調(diào)整FFN的大小。
  8. 'norm_eps': 1e-05?- 表示在歸一化層(如Layer Normalization)中使用的epsilon值,用于防止除以零的錯誤。這是數(shù)值穩(wěn)定性的一個小技巧。
  9. 'rope_theta': 500000.0?- 這個參數(shù)不是標(biāo)準(zhǔn)Transformer模型的常見配置,可能是指某種特定于模型的技術(shù)或優(yōu)化的參數(shù)。它可能與位置編碼或某種正則化技術(shù)有關(guān)。

我們使用這個配置來推斷模型的細(xì)節(jié),比如:

  1. 模型有32個Transformer層
  2. 每個多頭注意力塊有32個頭
  3. 詞匯表的大小等等?
dim = config["dim"]n_layers = config["n_layers"]n_heads = config["n_heads"]n_kv_heads = config["n_kv_heads"]vocab_size = config["vocab_size"]multiple_of = config["multiple_of"]ffn_dim_multiplier = config["ffn_dim_multiplier"]norm_eps = config["norm_eps"]rope_theta = torch.tensor(config["rope_theta"])

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

將Text轉(zhuǎn)化為Token

代碼如下:

prompt = "the answer to the ultimate question of life, the universe, and everything is "tokens = [128000] + tokenizer.encode(prompt)print(tokens)tokens = torch.tensor(tokens)prompt_split_as_tokens = [tokenizer.decode([token.item()]) for token in tokens]print(prompt_split_as_tokens)

[128000, 1820, 4320, 311, 279, 17139, 3488, 315, 2324, 11, 279, 15861, 11, 323, 4395, 374, 220]['<|begin_of_text|>', 'the', ' answer', ' to', ' the', ' ultimate', ' question', ' of', ' life', ',', ' the', ' universe', ',', ' and', ' everything', ' is', ' ']

將令牌轉(zhuǎn)換為它們的嵌入表示

截止到目前,我們的[17x1]令牌現(xiàn)在變成了[17x4096],即長度為4096的17個嵌入(每個令牌一個)。

下圖是為了驗證我們輸入的這句話,是17個token。

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

代碼如下:

embedding_layer = torch.nn.Embedding(vocab_size, dim)embedding_layer.weight.data.copy_(model["tok_embeddings.weight"])token_embeddings_unnormalized = embedding_layer(tokens).to(torch.bfloat16)token_embeddings_unnormalized.shape

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

三、構(gòu)建Transformer的第一層

我們接著使用 RMS 歸一化對嵌入進(jìn)行歸一化,也就是圖中這個位置:

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

使用公式如下:

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

代碼如下:

# def rms_norm(tensor, norm_weights):# rms = (tensor.pow(2).mean(-1, keepdim=True) + norm_eps)**0.5# return tensor * (norm_weights / rms)def rms_norm(tensor, norm_weights):return (tensor * torch.rsqrt(tensor.pow(2).mean(-1, keepdim=True) + norm_eps)) * norm_weights

這段代碼定義了一個名為?rms_norm?的函數(shù),它實現(xiàn)了對輸入張量(tensor)的RMS(Root Mean Square,均方根)歸一化處理。這個函數(shù)接受兩個參數(shù):tensor?和?norm_weights。tensor?是需要進(jìn)行歸一化處理的輸入張量,而?norm_weights?是歸一化時使用的權(quán)重。

函數(shù)的工作原理如下:

  1. 首先,計算輸入張量每個元素的平方(tensor.pow(2))。
  2. 然后,對平方后的張量沿著最后一個維度(-1)計算均值(mean),并保持維度不變(keepdim=True),這樣得到每個元素的均方值。
  3. 接著,將均方值加上一個很小的正數(shù)?norm_eps(為了避免除以零的情況),然后計算其平方根的倒數(shù)(torch.rsqrt),得到RMS的倒數(shù)。
  4. 最后,將輸入張量與RMS的倒數(shù)相乘,再乘以歸一化權(quán)重?norm_weights,得到歸一化后的張量。

在進(jìn)行歸一化處理后,我們的數(shù)據(jù)形狀仍然保持為 [17x4096],這與嵌入層的形狀相同,只不過數(shù)據(jù)已經(jīng)過歸一化。

token_embeddings = rms_norm(token_embeddings_unnormalized, model["layers.0.attention_norm.weight"])token_embeddings.shape

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

接下來,我們介紹注意力機(jī)制的實現(xiàn),也就是下圖中的紅框標(biāo)注的位置:

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

我們一步一步地解釋這張圖,詳細(xì)說明每個步驟。

1. 輸入句子

  • 描述:這是我們的輸入句子。
  • 解釋:輸入句子被表示為一個矩陣 ( X ),其中每一行代表一個詞的嵌入向量。

2. 嵌入每個詞

  • 描述:我們對每個詞進(jìn)行嵌入。
  • 解釋:輸入句子中的每個詞被轉(zhuǎn)換為一個高維向量,這些向量組成了矩陣 ( X )。

3. 分成8個頭

  • 描述:將矩陣 ( X ) 分成8個頭。我們用權(quán)重矩陣 ( W^Q )、( W^K ) 和 ( W^V ) 分別乘以 ( X )。
  • 解釋:多頭注意力機(jī)制將輸入矩陣 ( X ) 分成多個頭(這里是8個),每個頭有自己的查詢(Query)、鍵(Key)和值(Value)矩陣。具體來說,輸入矩陣 ( X ) 分別與查詢權(quán)重矩陣 ( W^Q )、鍵權(quán)重矩陣 ( W^K ) 和值權(quán)重矩陣 ( W^V ) 相乘,得到查詢矩陣 ( Q )、鍵矩陣 ( K ) 和值矩陣 ( V )。

4. 計算注意力

  • 描述:使用得到的查詢、鍵和值矩陣計算注意力。
  • 解釋:對于每個頭,使用查詢矩陣 ( Q )、鍵矩陣 ( K ) 和值矩陣 ( V ) 計算注意力分?jǐn)?shù)。具體步驟包括:

計算 ( Q ) 和 ( K ) 的點積。

對點積結(jié)果進(jìn)行縮放。

應(yīng)用softmax函數(shù)得到注意力權(quán)重。

用注意力權(quán)重乘以值矩陣 ( V ) 得到輸出矩陣 ( Z )。

5. 拼接結(jié)果矩陣

  • 描述:將得到的 ( Z ) 矩陣拼接起來,然后用權(quán)重矩陣 ( W^O ) 乘以拼接后的矩陣,得到層的輸出。
  • 解釋:將所有頭的輸出矩陣 ( Z ) 拼接成一個矩陣,然后用輸出權(quán)重矩陣 ( W^O ) 乘以這個拼接后的矩陣,得到最終的輸出矩陣 ( Z )。

額外說明

  • 查詢、鍵、值和輸出向量的形狀:在加載查詢、鍵、值和輸出向量時,注意到它們的形狀分別是 [4096x4096]、[1024x4096]、[1024x4096]、[1024x4096] 和 [4096x4096]。
  • 并行化注意力頭的乘法:將它們捆綁在一起有助于并行化注意力頭的乘法。

這張圖展示了Transformer模型中多頭注意力機(jī)制的實現(xiàn)過程,從輸入句子的嵌入開始,經(jīng)過多頭分割、注意力計算,最后拼接結(jié)果并生成輸出。每個步驟都詳細(xì)說明了如何從輸入矩陣 ( X ) 生成最終的輸出矩陣 ( Z )。

當(dāng)我們從模型中加載查詢(query)、鍵(key)、值(value)和輸出(output)向量時,我們注意到它們的形狀分別是 [4096x4096]、[1024x4096]、[1024x4096]、[4096x4096]

乍一看這很奇怪,因為理想情況下我們希望每個頭的每個q、k、v和o都是單獨的

print(model["layers.0.attention.wq.weight"].shape,model["layers.0.attention.wk.weight"].shape,model["layers.0.attention.wv.weight"].shape,model["layers.0.attention.wo.weight"].shape)

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

查詢(Query)權(quán)重矩陣?(wq.weight) 的形狀是?[4096, 4096]。鍵(Key)權(quán)重矩陣?(wk.weight) 的形狀是?[1024, 4096]。值(Value)權(quán)重矩陣?(wv.weight) 的形狀是?[1024, 4096]。輸出(Output)權(quán)重矩陣?(wo.weight) 的形狀是?[4096, 4096]。輸出結(jié)果顯示:查詢(Q)和輸出(O)權(quán)重矩陣的形狀是相同的,都是[4096, 4096]。這意味著對於查詢和輸出,輸入特徵和輸出特徵的維度都是4096。鍵(K)和值(V)權(quán)重矩陣的形狀也是相同的,都是[1024, 4096]。這顯示鍵和值的輸入特徵維度為4096,但輸出特徵維度被壓縮到了1024。這些權(quán)重矩陣的形狀反映了模型設(shè)計者如何設(shè)定注意力機(jī)制中不同部分的維度。特別是,鍵和值的維度被減小可能是為了減少計算複雜度和記憶體消耗,而保持查詢和輸出的較高維度可能是為了保留更多的資訊。這個設(shè)計選擇依賴於特定的模型架構(gòu)和應(yīng)用場景
讓我們用「我欣賞李鴻章」這個句子作為例子,來簡化解釋這個圖中的注意力機(jī)制的實現(xiàn)過程。輸入句子:首先,我們有句子「我欣賞李鴻章」。在處理這個句子之前,我們需要將句子中的每個字轉(zhuǎn)換成數(shù)學(xué)上可以處理的形式,也就是字向量。這個過程叫做詞嵌入(embedding)。
詞嵌入:每個詞,例如“我”、“欣賞”、“李鴻章”,都會被轉(zhuǎn)換成一個固定大小的向量。這些向量包含了詞的語義資訊。
分割成多個頭:為了讓模型能夠從不同的角度理解句子,我們將每個字的向量分割成多個部分,這裡有8個頭。每個頭都會關(guān)注句子的不同面向。
計算注意力:對於每個頭,我們都會計算一個叫做注意力的東西。這個過程涉及到三個步驟:以「我欣賞李鴻章」為例,如果我們想要專注於「欣賞」這個詞,那麼「欣賞」就是查詢,而其他詞例如「我」和「李鴻章」就是鍵,它們的向量就是值。
查詢(Q):這是我們想要尋找資訊的部分。鍵(K):這是包含資訊的部分。值(V):這是實際的資訊內(nèi)容。拼接與輸出:計算完每個頭的注意力之後,我們將這些結(jié)果拼接起來,並透過一個權(quán)重矩陣Wo來產(chǎn)生最終的輸出。這個輸出將被用於下一層的處理或作為最終結(jié)果的一部分。

在圖中的註釋中提到的形狀問題,是關(guān)於如何在電腦中有效地儲存和處理這些向量的問題。在實際的程式碼實作中,為了提高效率,開發(fā)者可能會將多個頭的查詢、鍵、值向量打包在一起處理,而不是單獨處理每個頭。這樣可以利用現(xiàn)代計算機(jī)的平行處理能力,加快計算速度。

  • 查詢(Query)權(quán)重矩陣 (wq.weight) 的形狀是 [4096, 4096]。
  • 鍵(Key)權(quán)重矩陣 (wk.weight) 的形狀是 [1024, 4096]。
  • 值(Value)權(quán)重矩陣 (wv.weight) 的形狀是 [1024, 4096]。
  • 輸出(Output)權(quán)重矩陣 (wo.weight) 的形狀是 [4096, 4096]。

輸出結(jié)果顯示:

  • 查詢(Q)和輸出(O)權(quán)重矩陣的形狀是相同的,都是[4096, 4096]。這意味著對於查詢和輸出,輸入特徵和輸出特徵的維度都是4096。
  • 鍵(K)和值(V)權(quán)重矩陣的形狀也是相同的,都是[1024, 4096]。這顯示鍵和值的輸入特徵維度為4096,但輸出特徵維度被壓縮到了1024。

這些權(quán)重矩陣的形狀反映了模型設(shè)計者如何設(shè)定注意力機(jī)制中不同部分的維度。特別是,鍵和值的維度被減小可能是為了減少計算複雜度和記憶體消耗,而保持查詢和輸出的較高維度可能是為了保留更多的資訊。這個設(shè)計選擇依賴於特定的模型架構(gòu)和應(yīng)用場景

讓我們用「我欣賞李鴻章」這個句子作為例子,來簡化解釋這個圖中的注意力機(jī)制的實現(xiàn)過程。

  • 輸入句子:首先,我們有句子「我欣賞李鴻章」。在處理這個句子之前,我們需要將句子中的每個字轉(zhuǎn)換成數(shù)學(xué)上可以處理的形式,也就是字向量。這個過程叫做詞嵌入(embedding)。
  • 詞嵌入:每個詞,例如“我”、“欣賞”、“李鴻章”,都會被轉(zhuǎn)換成一個固定大小的向量。這些向量包含了詞的語義資訊。
  • 分割成多個頭:為了讓模型能夠從不同的角度理解句子,我們將每個字的向量分割成多個部分,這裡是8個頭。每個頭都會關(guān)注句子的不同面向。
  • 計算注意力:對於每個頭,我們都會計算一個叫做注意力的東西。這個過程涉及到三個步驟:以「我欣賞李鴻章」為例,如果我們想要專注於「欣賞」這個詞,那麼「欣賞」就是查詢,而其他詞例如「我」和「李鴻章」就是鍵,它們的向量就是值。

? ? ? 查詢(Q):這是我們想要尋找資訊的部分。

? ? ? 鍵(K):這是包含資訊的部分。

? ? ? 值(V):這是實際的資訊內(nèi)容。

  • 拼接與輸出:計算每個頭的注意力之後,我們將這些結(jié)果拼接起來,並透過一個權(quán)重矩陣Wo來產(chǎn)生最終的輸出。這個輸出將被用於下一層的處理或作為最終結(jié)果的一部分。

在圖中的註釋中提到的形狀問題,是關(guān)於如何在電腦中有效地儲存和處理這些向量的問題。在實際的程式碼實作中,為了提高效率,開發(fā)者可能會將多個頭的查詢、鍵、值向量打包在一起處理,而不是單獨處理每個頭。這樣可以利用現(xiàn)代計算機(jī)的平行處理能力,加快計算速度。

我們繼續(xù)用句子「我欣賞李鴻章」來解釋W(xué)Q、WK、WV和WO這些權(quán)重矩陣的作用。

在Transformer模型中,每個單字都會透過單字嵌入轉(zhuǎn)換成向量。這些向量接下來會透過一系列的線性變換來計算注意力分?jǐn)?shù)。這些線性變換就是透過權(quán)重矩陣WQ、WK、WV和WO來實現(xiàn)的。

  1. WQ(權(quán)重矩陣Q):這個矩陣用來將每個字的向量轉(zhuǎn)換成「查詢(Query)」向量。在我們的例子中,如果我們想要專注於「欣賞」這個詞,我們會將「欣賞」的向量乘以WQ來得到查詢向量。
  2. WK(權(quán)重矩陣K):這個矩陣用來將每個字的向量轉(zhuǎn)換成「鍵(Key)」向量。同樣地,我們會將每個詞,包括“我”和“李鴻章”,的向量乘以WK來得到鍵向量。
  3. WV(權(quán)重矩陣V):這個矩陣用來將每個字的向量轉(zhuǎn)換成「值(Value)」向量。每個字的向量乘以WV後,我們得到的是值向量。這三個矩陣(WQ、WK、WV)是用來為每個頭產(chǎn)生不同的查詢、鍵和值向量的。這樣做可以讓每個頭專注在句子的不同方面。
  4. WQ(權(quán)重矩陣Q)、WK(權(quán)重矩陣K)、WV(權(quán)重矩陣V)和WO(權(quán)重矩陣O)這些矩陣是Transformer模型中的參數(shù),它們是在模型訓(xùn)練過程中通過反向傳播演算法和梯度下降等最佳化方法學(xué)習(xí)得到的。

在整個過程中,WQ、WK、WV和WO是透過訓(xùn)練學(xué)習(xí)得到的,它們決定了模型如何將輸入的詞向量轉(zhuǎn)換成不同的表示,以及如何組合這些表示來得到最終的輸出。這些矩陣是Transformer模型中註意力機(jī)制的核心部分,它們使得模型能夠捕捉句子中不同單字之間的關(guān)係。

WQ(權(quán)重矩陣Q)、WK(權(quán)重矩陣K)、WV(權(quán)重矩陣V)和WO(權(quán)重矩陣O)這些矩陣是Transformer模型中的參數(shù),它們是在模型訓(xùn)練過程中透過反向傳播演算法和梯度下降等最佳化方法學(xué)習(xí)得到的。

讓我們來看看這個學(xué)習(xí)過程是如何進(jìn)行的:

  1. 初始化:在訓(xùn)練開始之前,這些矩陣通常會被隨機(jī)初始化。這意味著它們的初始值是隨機(jī)選取的,這樣可以打破對稱性并開始學(xué)習(xí)過程。
  2. 前向傳播:在模型的訓(xùn)練過程中,輸入數(shù)據(jù)(如句子“我欣賞李鴻章”)會通過模型的各個層進(jìn)行前向傳播。在注意力機(jī)制中,輸入的詞向量會與WQ、WK、WV矩陣相乘,以生成查詢、鍵和值向量。
  3. 計算損失:模型的輸出會與期望的輸出(通常是訓(xùn)練數(shù)據(jù)中的標(biāo)簽)進(jìn)行比較,計算出一個損失值。這個損失值衡量了模型的預(yù)測與實際情況的差距。
  4. 反向傳播:損失值會通過反向傳播算法傳回模型,計算每個參數(shù)(包括WQ、WK、WV和WO)對損失的影響,即它們的梯度。
  5. 參數(shù)更新:根據(jù)計算出的梯度,使用梯度下降或其他優(yōu)化算法來更新這些矩陣的值。這個過程會逐漸減小損失值,使模型的預(yù)測更加準(zhǔn)確。
  6. 迭代過程:這個前向傳播、損失計算、反向傳播和參數(shù)更新的過程會在訓(xùn)練數(shù)據(jù)上多次迭代進(jìn)行,直到模型的性能達(dá)到一定的標(biāo)準(zhǔn)或者不再顯著提升。

    通過這個訓(xùn)練過程,WQ、WK、WV和WO這些矩陣會逐漸調(diào)整它們的值,以便模型能夠更好地理解和處理輸入數(shù)據(jù)。在訓(xùn)練完成后,這些矩陣將固定下來,用于模型的推理階段,即對新的輸入數(shù)據(jù)進(jìn)行預(yù)測。

四、展開查詢向量

在本小節(jié)中,我們將從多個注意力頭中展開查詢向量,得到的形狀是 [32x128x4096] 這里,32 是 llama3 中注意力頭的數(shù)量,128 是查詢向量的大小,而 4096 是令牌嵌入的大小。

q_layer0 = model["layers.0.attention.wq.weight"]head_dim = q_layer0.shape[0] // n_headsq_layer0 = q_layer0.view(n_heads, head_dim, dim)q_layer0.shape

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

這段代碼通過對模型中第一層的查詢(Q)權(quán)重矩陣進(jìn)行重塑(reshape),將其分解為多個注意力頭的形式,從而揭示了32和128這兩個維度。

  1. q_layer0 = model["layers.0.attention.wq.weight"]:這行代碼從模型中提取第一層的查詢(Q)權(quán)重矩陣。
  2. head_dim = q_layer0.shape[0] // n_heads:這行代碼計算每個注意力頭的維度大小。它通過將查詢權(quán)重矩陣的第一個維度(原本是4096)除以注意力頭的數(shù)量(n_heads),得到每個頭的維度。如果n_heads是32(即模型設(shè)計為有32個注意力頭),那么head_dim就是4096 // 32 = 128。
  3. q_layer0 = q_layer0.view(n_heads, head_dim, dim):這行代碼使用.view()方法重塑查詢權(quán)重矩陣,使其形狀變?yōu)閇n_heads, head_dim, dim]。這里dim很可能是原始特征維度4096,n_heads是32,head_dim是128,因此重塑后的形狀是[32, 128, 4096]。
  4. q_layer0.shape?輸出:torch.Size([32, 128, 4096]):這行代碼打印重塑后的查詢權(quán)重矩陣的形狀,確認(rèn)了其形狀為[32, 128, 4096]。

之所以在這段代碼中出現(xiàn)了32和128這兩個維度,而在之前的代碼段中沒有,是因為這段代碼通過重塑操作明確地將查詢權(quán)重矩陣分解為多個注意力頭,每個頭具有自己的維度。32代表了模型中注意力頭的數(shù)量,而128代表了分配給每個頭的特征維度大小。這種分解是為了實現(xiàn)多頭注意力機(jī)制,其中每個頭可以獨立地關(guān)注輸入的不同部分,最終通過組合這些頭的輸出來提高模型的表達(dá)能力。?

實現(xiàn)第一層的第一個頭

訪問了第一層第一個頭的查詢(query)權(quán)重矩陣,這個查詢權(quán)重矩陣的大小是 [128x4096]。

q_layer0_head0 = q_layer0[0]q_layer0_head0.shape

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

我們現(xiàn)在將查詢權(quán)重與令牌嵌入相乘,以獲得令牌的查詢

在這里,你可以看到結(jié)果形狀是 [17x128],這是因為我們有17個令牌,每個令牌都有一個長度為128的查詢(每個令牌在一個頭上方的查詢)。

br

手撕Llama3第1層: 從零開始實現(xiàn)llama3圖片

這段程式碼執(zhí)行了一個矩陣乘法運算,將令牌嵌入(token_embeddings)與第一層第一個頭的查詢(query)權(quán)重矩陣(q_layer0_head0)的轉(zhuǎn)置(.T)相乘,以產(chǎn)生每個令牌的查詢向量(q_per_token)。

  1. q_per_token = torch.matmul(token_embeddings, q_layer0_head0.T):

torch.matmul?是PyTorch中的矩陣乘法函數(shù),它可以處理兩個張量的乘法。

token_embeddings?應(yīng)該是形狀為?[17, 4096]?的張量,表示有17個令牌,每個令牌由4096維的嵌入向量表示。

q_layer0_head0?是第一層第一個頭的查詢權(quán)重矩陣,其原形為?[128, 4096]。 .T?是PyTorch中的轉(zhuǎn)置操作,將?q_layer0_head0?的形狀轉(zhuǎn)置為?[4096, 128]。

這樣,token_embeddings?和?q_layer0_head0.T?的矩陣乘法就是?[17, 4096]?和?[4096, 128]?的乘法,結(jié)果是形狀為?[17, 128]?的張量。

  1. q_per_token.shape?與輸出:torch.Size([17, 128]):

這行程式碼列印出?q_per_token?張量的形狀,確認(rèn)其為?[ 17, 128]。

這表示對於輸入的每個令牌(共17個),我們現(xiàn)在都有了一個128維的查詢向量。這128維的查詢向量是透過將令牌嵌入與查詢權(quán)重矩陣相乘得到的,可以用於後續(xù)的注意力機(jī)制計算。

總之,這段程式碼透過矩陣乘法將每個令牌的嵌入向量轉(zhuǎn)換為查詢向量,為實現(xiàn)注意力機(jī)制的下一步做準(zhǔn)備。每個令牌現(xiàn)在都有了一個與之對應(yīng)的查詢向量,這些查詢向量將用於計算與其他令牌的注意力分?jǐn)?shù)。

#

以上是手撕Llama3第1層: 從零開始實現(xiàn)llama3的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
深度學(xué)習(xí)架構(gòu)的比較分析 深度學(xué)習(xí)架構(gòu)的比較分析 May 17, 2023 pm 04:34 PM

深度學(xué)習(xí)的概念源自於人工神經(jīng)網(wǎng)路的研究,含有多個隱藏層的多層感知器是一種深度學(xué)習(xí)結(jié)構(gòu)。深度學(xué)習(xí)透過組合低層特徵形成更抽象的高層表示,以表徵資料的類別或特徵。它能夠發(fā)現(xiàn)資料的分佈式特徵表示。深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一種,而機(jī)器學(xué)習(xí)是實現(xiàn)人工智慧的必經(jīng)之路。那麼,各種深度學(xué)習(xí)的系統(tǒng)架構(gòu)之間有哪些差異呢? 1.全連接網(wǎng)路(FCN)完全連接網(wǎng)路(FCN)由一系列完全連接的層組成,每個層中的每個神經(jīng)元都連接到另一層中的每個神經(jīng)元。其主要優(yōu)點是“結(jié)構(gòu)不可知”,即不需要對輸入做出特殊的假設(shè)。雖然這種結(jié)構(gòu)不可知使得完

Spring Data JPA 的架構(gòu)和工作原理是什麼? Spring Data JPA 的架構(gòu)和工作原理是什麼? Apr 17, 2024 pm 02:48 PM

SpringDataJPA基於JPA架構(gòu),透過映射、ORM和事務(wù)管理與資料庫互動。其儲存庫提供CRUD操作,派生查詢簡化了資料庫存取。此外,它使用延遲加載,僅在必要時檢索數(shù)據(jù),從而提高了效能。

「AI 工廠」將推動軟體全端重塑,英偉達(dá)提供 Llama3 NIM 容器供用戶部署 「AI 工廠」將推動軟體全端重塑,英偉達(dá)提供 Llama3 NIM 容器供用戶部署 Jun 08, 2024 pm 07:25 PM

本站6月2日消息,在目前正在進(jìn)行的黃仁勳2024臺北電腦展主題演講上,黃仁勳介紹生成式人工智慧將推動軟體全端重塑,展示其NIM(NvidiaInferenceMicroservices)雲(yún)端原生微服務(wù)。英偉達(dá)認(rèn)為「AI工廠」將掀起一場新產(chǎn)業(yè)革命:以微軟開創(chuàng)的軟體產(chǎn)業(yè)為例,黃仁勳認(rèn)為生成式人工智慧將推動其全端重塑。為方便各種規(guī)模的企業(yè)部署AI服務(wù),英偉達(dá)今年3月推出了NIM(NvidiaInferenceMicroservices)雲(yún)端原生微服務(wù)。 NIM+是一套經(jīng)過優(yōu)化的雲(yún)端原生微服務(wù),旨在縮短上市時間

手撕Llama3第1層: 從零開始實現(xiàn)llama3 手撕Llama3第1層: 從零開始實現(xiàn)llama3 Jun 01, 2024 pm 05:45 PM

一、Llama3的架構(gòu)在本系列文章中,我們從頭開始實作llama3。 Llama3的整體架構(gòu):圖片Llama3的模型參數(shù):讓我們來看看這些參數(shù)在LlaMa3模型中的實際數(shù)值。圖片[1]上下文視窗(context-window)在實例化LlaMa類別時,變數(shù)max_seq_len定義了context-window。類別中還有其他參數(shù),但這個參數(shù)與transformer模型的關(guān)係最為直接。這裡的max_seq_len是8K。圖片[2]字彙量(Vocabulary-size)和注意力層(AttentionL

1.3ms耗時!清華最新開源行動裝置神經(jīng)網(wǎng)路架構(gòu) RepViT 1.3ms耗時!清華最新開源行動裝置神經(jīng)網(wǎng)路架構(gòu) RepViT Mar 11, 2024 pm 12:07 PM

論文地址:https://arxiv.org/abs/2307.09283代碼地址:https://github.com/THU-MIG/RepViTRepViT在移動端ViT架構(gòu)中表現(xiàn)出色,展現(xiàn)出顯著的優(yōu)勢。接下來,我們將探討本研究的貢獻(xiàn)所在。文中提到,輕量級ViTs通常比輕量級CNNs在視覺任務(wù)上表現(xiàn)得更好,這主要歸功于它們的多頭自注意力模塊(MSHA)可以讓模型學(xué)習(xí)全局表示。然而,輕量級ViTs和輕量級CNNs之間的架構(gòu)差異尚未得到充分研究。在這項研究中,作者們通過整合輕量級ViTs的有效

AI基礎(chǔ)架構(gòu):IT和資料科學(xué)團(tuán)隊協(xié)作的重要性 AI基礎(chǔ)架構(gòu):IT和資料科學(xué)團(tuán)隊協(xié)作的重要性 May 18, 2023 pm 11:08 PM

人工智慧(AI)已經(jīng)改變了許多行業(yè)的遊戲規(guī)則,使企業(yè)能夠提高效率、決策和客戶體驗。隨著人工智慧的不斷發(fā)展和變得越來越複雜,企業(yè)投資於合適的基礎(chǔ)設(shè)施來支援其開發(fā)和部署至關(guān)重要。這個基礎(chǔ)設(shè)施的一個關(guān)鍵方面是IT和數(shù)據(jù)科學(xué)團(tuán)隊之間的協(xié)作,因為兩者在確保人工智慧計畫的成功方面都發(fā)揮著關(guān)鍵作用。人工智慧的快速發(fā)展導(dǎo)致對運算能力、儲存和網(wǎng)路能力的需求不斷增加。這種需求為傳統(tǒng)IT基礎(chǔ)架構(gòu)帶來了壓力,而傳統(tǒng)IT基礎(chǔ)架構(gòu)並非設(shè)計用於處理AI所需的複雜和資源密集型工作負(fù)載。因此,企業(yè)現(xiàn)在正在尋求建構(gòu)能夠支持AI工作負(fù)

多路徑多領(lǐng)域通吃! GoogleAI發(fā)布多領(lǐng)域?qū)W習(xí)通用模型MDL 多路徑多領(lǐng)域通吃! GoogleAI發(fā)布多領(lǐng)域?qū)W習(xí)通用模型MDL May 28, 2023 pm 02:12 PM

面向視覺任務(wù)(如影像分類)的深度學(xué)習(xí)模型,通常使用單一視覺域(如自然影像或電腦生成的影像)的資料進(jìn)行端到端的訓(xùn)練。一般情況下,一個為多個領(lǐng)域完成視覺任務(wù)的應(yīng)用程式需要為每個單獨的領(lǐng)域建立多個模型,分別獨立訓(xùn)練,不同領(lǐng)域之間不共享數(shù)據(jù),在推理時,每個模型將處理特定領(lǐng)域的輸入資料。即使是面向不同領(lǐng)域,這些模型之間的早期層的有些特徵都是相似的,所以,對這些模型進(jìn)行聯(lián)合訓(xùn)練的效率更高。這能減少延遲和功耗,降低儲存每個模型參數(shù)的記憶體成本,這種方法稱為多領(lǐng)域?qū)W習(xí)(MDL)。此外,MDL模型也可以優(yōu)於單

Docker三分鐘搞定LLama3開源大模型本地部署 Docker三分鐘搞定LLama3開源大模型本地部署 Apr 26, 2024 am 10:19 AM

概述LLaMA-3(LargeLanguageModelMetaAI3)是由Meta公司開發(fā)的大型開源生成式人工智慧模型。它在模型結(jié)構(gòu)上與前一代LLaMA-2相比沒有太大的變動。 LLaMA-3模型分為不同規(guī)模的版本,包括小型、中型和大型,以適應(yīng)不同的應(yīng)用需求和運算資源。小型模型參參數(shù)規(guī)模為8B,中型模型參參數(shù)規(guī)模為70B,而大型模型參參數(shù)規(guī)模則達(dá)400B。然而在訓(xùn)練中,目標(biāo)是實現(xiàn)多模態(tài)、多語言的功能,預(yù)計結(jié)果將與GPT4/GPT4V相當(dāng)。安裝OllamaOllama是一個開源的大型語言模型(LL

See all articles