Rumah > Artikel > Peranti teknologi > Llama3 yang mengoyak tangan lapisan 1: Melaksanakan llama3 dari awal
Dalam siri artikel ini, kami melaksanakan llama3 dari awal.
Seni bina keseluruhan Llama3:
Gambar
Parameter model Llama3:
Mari kita lihat nilai sebenar parameter ini dalam model LlaMa 3.
Pictures
Apabila membuat instance kelas LlaMa, pembolehubah max_seq_len mentakrifkan tetingkap konteks. Terdapat parameter lain dalam kelas, tetapi parameter ini paling berkaitan secara langsung dengan model pengubah. Maks_seq_len di sini ialah 8K.
Gambar
Kelas Transformer ialah model yang mentakrifkan perbendaharaan kata dan bilangan lapisan. Perbendaharaan kata di sini merujuk kepada set perkataan (dan token) yang model dapat mengenali dan memproses. Lapisan perhatian merujuk kepada blok pengubah (gabungan lapisan perhatian dan suapan ke hadapan) yang digunakan dalam model.
Gambar
Mengikut nombor ini, LlaMa 3 mempunyai perbendaharaan kata 128K, yang agak besar. Tambahan pula, ia mempunyai 32 blok pengubah.
[3] Dimensi ciri dan ketua perhatian
Dimensi ciri dan ketua perhatian diperkenalkan ke dalam modul Perhatian Kendiri. Dimensi ciri merujuk kepada saiz vektor token dalam ruang benam (dimensi ciri merujuk kepada saiz dimensi data input atau vektor benam), manakala kepala perhatian termasuk modul QK yang memacu mekanisme perhatian kendiri dalam transformer.
Gambar
Dimensi tersembunyi merujuk kepada saiz dimensi lapisan tersembunyi dalam rangkaian neural suapan hadapan (Feed Forward). Rangkaian saraf suapan hadapan biasanya mengandungi satu atau lebih lapisan tersembunyi, dan dimensi lapisan tersembunyi ini menentukan kapasiti dan kerumitan rangkaian. Dalam model Transformer, dimensi lapisan tersembunyi rangkaian saraf suapan hadapan biasanya merupakan gandaan dimensi ciri untuk meningkatkan keupayaan perwakilan model. Dalam LLama3, dimensi tersembunyi ialah 1.3 kali dimensi ciri. Perlu diingatkan bahawa lapisan tersembunyi dan dimensi tersembunyi adalah dua konsep.
Bilangan lapisan tersembunyi yang lebih tinggi membolehkan rangkaian membuat dan memanipulasi perwakilan yang lebih kaya secara dalaman sebelum menayangkannya semula ke dalam dimensi output yang lebih kecil.
Picture
Matriks pertama ialah matriks ciri input, yang diproses oleh lapisan Attention untuk menjana ciri Attention Weighted. Dalam imej ini, matriks ciri input hanya bersaiz 5 x 3, tetapi dalam model Llama 3 sebenar ia berkembang kepada 8K x 4096, yang sangat besar.
Seterusnya ialah lapisan tersembunyi dalam Rangkaian Feed-Forward, berkembang kepada 5325 dan kemudian turun semula kepada 4096 pada lapisan terakhir.
Gambar
LlaMa 3 menggabungkan 32 blok transformer di atas, dan output dihantar dari satu blok ke blok seterusnya sehingga ia mencapai yang terakhir. .
Gambar
Langkah 2: Dalam kes ini, hasil dimensi rendah ini menjadi 4096, iaitu dimensi yang ditentukan bagi ciri dalam model LlaMa yang kita lihat sebelum ini.
Dalam rangkaian saraf, peningkatan dimensi dan pengurangan dimensi adalah operasi biasa, dan setiap satu mempunyai tujuan dan kesan yang berbeza.
Peningkatan dimensi biasanya untuk meningkatkan kapasiti model supaya dapat menangkap ciri dan corak yang lebih kompleks. Apabila data input dipetakan ke dalam ruang dimensi yang lebih tinggi, kombinasi ciri yang berbeza boleh dibezakan dengan lebih mudah oleh model. Ini amat berguna apabila menangani masalah bukan linear, kerana ia boleh membantu model mempelajari sempadan keputusan yang lebih kompleks.
Pengurangan dimensi adalah untuk mengurangkan kerumitan model dan risiko overfitting. Dengan mengurangkan dimensi ruang ciri, model boleh dipaksa untuk mempelajari perwakilan ciri yang lebih halus dan umum. Di samping itu, pengurangan dimensi boleh digunakan sebagai kaedah regularisasi untuk membantu meningkatkan keupayaan generalisasi model. Dalam sesetengah kes, pengurangan dimensi juga boleh mengurangkan kos pengiraan dan meningkatkan kecekapan operasi model.
Dalam aplikasi praktikal, strategi peningkatan dimensi dan kemudian pengurangan dimensi boleh dianggap sebagai proses pengekstrakan dan transformasi ciri. Dalam proses ini, model mula-mula meneroka struktur intrinsik data dengan meningkatkan dimensi, dan kemudian mengekstrak ciri dan corak yang paling berguna dengan mengurangkan dimensi. Pendekatan ini boleh membantu model mengelakkan pemasangan berlebihan pada data latihan sambil mengekalkan kerumitan yang mencukupi.
Langkah 3: Ciri ini diproses melalui blok Transformer, pertama oleh lapisan Attention, dan kemudian oleh lapisan FFN. Lapisan Perhatian memproses merentas ciri secara mendatar, manakala lapisan FFN memproses merentas dimensi secara menegak.
Langkah 4: Langkah 3 diulang untuk 32 lapisan blok Transformer. Akhir sekali, dimensi matriks yang terhasil adalah sama seperti yang digunakan untuk dimensi ciri.
Langkah 5: Akhir sekali, matriks ini ditukar kembali kepada saiz matriks perbendaharaan kata asal, iaitu 128K, supaya model boleh memilih dan memetakan perkataan yang terdapat dalam perbendaharaan kata.
Beginilah cara LlaMa 3 mendapat markah tinggi pada penanda aras tersebut dan mencipta kesan LlaMa 3.
Kami akan meringkaskan beberapa istilah yang mudah dikelirukan dalam bahasa ringkas:
Ini ialah bilangan maksimum token yang boleh diterima oleh model dalam satu pemprosesan.
Dalam model LlaMa 3-8B, parameter ini ditetapkan kepada 8,000 token, iaitu, Saiz Tetingkap Konteks = 8K. Ini bermakna bilangan maksimum token yang boleh dipertimbangkan oleh model dalam satu pemprosesan ialah 8,000. Ini penting untuk memahami teks panjang atau mengekalkan konteks perbualan jangka panjang.
Ini ialah bilangan semua token berbeza yang boleh dikenali oleh model. Ini termasuk semua kemungkinan perkataan, tanda baca dan aksara khas. Perbendaharaan kata model ialah 128,000, dinyatakan sebagai Saiz Perbendaharaan Kata = 128K. Ini bermakna model itu dapat mengenali dan memproses 128,000 token berbeza, yang merangkumi pelbagai perkataan, tanda baca dan aksara khas.
Komponen utama dalam model Transformer. Ia bertanggungjawab terutamanya untuk memproses data input dengan mempelajari bahagian mana data input yang paling penting (iaitu token yang "dihadiri"). Model mungkin mempunyai berbilang lapisan sedemikian, masing-masing cuba memahami data input dari perspektif yang berbeza.
Model LlaMa 3-8B mengandungi 32 lapisan pemprosesan, iaitu Bilangan Lapisan = 32. Lapisan ini termasuk berbilang Lapisan Perhatian dan jenis lapisan rangkaian lain, yang setiap satunya memproses dan memahami data input daripada perspektif yang berbeza.
Mengandungi modul berbilang lapisan berbeza, biasanya termasuk sekurang-kurangnya satu Lapisan Perhatian dan Rangkaian Suapan Hadapan. Model boleh mempunyai berbilang blok transformer Blok ini disambungkan secara berurutan, dan output setiap blok adalah input blok seterusnya. Blok pengubah juga boleh dipanggil lapisan penyahkod.
Dalam konteks model Transformer, biasanya kita mengatakan bahawa model itu mempunyai "32 lapisan", yang boleh bersamaan dengan mengatakan bahawa model itu mempunyai "32 blok Transformer". Setiap blok Transformer biasanya mengandungi lapisan perhatian kendiri dan lapisan rangkaian saraf suapan ke hadapan Kedua-dua sub-lapisan ini bersama-sama membentuk unit pemprosesan lengkap atau "lapisan".
Jadi, apabila kita katakan bahawa model itu mempunyai 32 blok Transformer, kita sebenarnya menerangkan bahawa model itu terdiri daripada 32 unit pemprosesan sedemikian, yang setiap satunya mampu memproses perhatian sendiri dan pemprosesan rangkaian suapan ke hadapan data. Pembentangan ini menekankan struktur hierarki model dan keupayaan pemprosesannya pada setiap peringkat.
Ringkasnya, "32 lapisan" dan "32 blok Transformer" pada asasnya sinonim apabila menerangkan struktur model Transformer Kedua-duanya bermaksud model tersebut mengandungi 32 kitaran pemprosesan data bebas, dan setiap kitaran termasuk perhatian kendiri dan operasi rangkaian Feedforward.
Ini ialah dimensi setiap vektor apabila token input diwakili sebagai vektor dalam model.
Setiap token ditukarkan kepada vektor yang mengandungi 4096 ciri dalam model, iaitu, Dimensi ciri = 4096. Dimensi tinggi ini membolehkan model menangkap maklumat semantik yang lebih kaya dan hubungan kontekstual.
Dalam setiap Lapisan Perhatian, boleh terdapat berbilang Attention-Heads, dan setiap ketua menganalisis data input secara berasingan daripada perspektif yang berbeza.
Setiap Lapisan Perhatian mengandungi 32 Ketua Perhatian bebas, iaitu Bilangan Ketua Perhatian = 32. Ketua ini menganalisis data input daripada aspek yang berbeza dan bersama-sama menyediakan keupayaan analisis data yang lebih komprehensif.
Ini biasanya merujuk kepada lebar lapisan dalam Rangkaian Feed-Forward, iaitu bilangan neuron dalam setiap lapisan. Biasanya, Dimensi Tersembunyi akan lebih besar daripada Dimensi Ciri, yang membolehkan model mencipta perwakilan data yang lebih kaya secara dalaman.
Dalam Rangkaian Feed-Forward, dimensi lapisan tersembunyi ialah 5325, iaitu Dimensi Tersembunyi = 5325. Ini lebih besar daripada dimensi ciri, membolehkan model melaksanakan terjemahan ciri yang lebih mendalam dan pembelajaran antara lapisan dalaman.
Hubungan antara Lapisan Perhatian dan Ketua Perhatian: Setiap Lapisan Perhatian boleh mengandungi berbilang Ketua Perhatian.
Hubungan berangka: Model mungkin mempunyai berbilang blok pengubah, setiap blok mengandungi Lapisan Perhatian dan satu atau lebih lapisan lain. Setiap Lapisan Perhatian mungkin mempunyai berbilang Ketua Perhatian. Dengan cara ini, keseluruhan model melaksanakan pemprosesan data yang kompleks dalam lapisan dan kepala yang berbeza.
Muat turun skrip pautan rasmi model Llama3: https://llama.meta.com/llama-downloads/
Kod berikut menunjukkan cara menggunakan perpustakaan tiktoken untuk memuatkan dan menggunakan a. Pengekodan berasaskan Pasangan Byte (BPE) tokenizer. Tokenizer ini direka bentuk untuk memproses data teks, terutamanya untuk digunakan dalam pemprosesan bahasa semula jadi dan model pembelajaran mesin.
Kami memasuki dunia helo dan melihat cara pembahagian perkataan melakukan pembahagian perkataan.
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!"))
Gambar
Lihat nama 20 parameter atau pemberat pertama yang terkandung dalam fail model.
model = torch.load("Meta-Llama-3-8B/consolidated.00.pth")print(json.dumps(list(model.keys())[:20], indent=4))
Pictures
Pictures
Secara keseluruhannya, output ini mendedahkan komponen utama model pembelajaran mendalam berdasarkan seni bina Transformer. Model ini digunakan secara meluas dalam tugas pemprosesan bahasa semula jadi, seperti klasifikasi teks, terjemahan mesin, sistem menjawab soalan, dsb. Struktur setiap lapisan adalah hampir sama, termasuk mekanisme perhatian, rangkaian suapan ke hadapan dan lapisan normalisasi, yang membantu model menangkap ciri jujukan input yang kompleks.
Lihat konfigurasi parameter model Llama3:
with open("Meta-Llama-3-8B/params.json", "r") as f:config = json.load(f)config
图片
我们使用这个配置来推断模型的细节,比如:
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"])
图片
代码如下:
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', ' ']
截止到目前,我们的[17x1]令牌现在变成了[17x4096],即长度为4096的17个嵌入(每个令牌一个)。
下图是为了验证我们输入的这句话,是17个token。
图片
代码如下:
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
图片
我们接着使用 RMS 归一化对嵌入进行归一化,也就是图中这个位置:
图片
使用公式如下:
图片
代码如下:
# 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 的函数,它实现了对输入张量(tensor)的RMS(Root Mean Square,均方根)归一化处理。这个函数接受两个参数:tensor 和 norm_weights。tensor 是需要进行归一化处理的输入张量,而 norm_weights 是归一化时使用的权重。
函数的工作原理如下:
在进行归一化处理后,我们的数据形状仍然保持为 [17x4096],这与嵌入层的形状相同,只不过数据已经过归一化。
token_embeddings = rms_norm(token_embeddings_unnormalized, model["layers.0.attention_norm.weight"])token_embeddings.shape
图片
图片
接下来,我们介绍注意力机制的实现,也就是下图中的红框标注的位置:
图片
图片
计算 ( Q ) 和 ( K ) 的点积。
对点积结果进行缩放。
应用softmax函数得到注意力权重。
用注意力权重乘以值矩阵 ( V ) 得到输出矩阵 ( Z )。
这张图展示了Transformer模型中多头注意力机制的实现过程,从输入句子的嵌入开始,经过多头分割、注意力计算,最后拼接结果并生成输出。每个步骤都详细说明了如何从输入矩阵 ( X ) 生成最终的输出矩阵 ( Z )。
当我们从模型中加载查询(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)
Gambar
Bentuk matriks berat pertanyaan (wq.weight) ialah [4096, 4096]. Bentuk matriks berat utama (wk.weight) ialah [1024, 4096]. Bentuk matriks berat nilai (wv.weight) ialah [1024, 4096]. Bentuk matriks berat keluaran (Output) (wo.weight) ialah [4096, 4096]. Keputusan output menunjukkan bahawa bentuk matriks berat pertanyaan (Q) dan output (O) adalah sama, kedua-duanya [4096, 4096]. Ini bermakna kedua-dua ciri input dan ciri output mempunyai dimensi 4096 untuk kedua-dua pertanyaan dan output. Bentuk matriks berat kunci (K) dan nilai (V) juga adalah sama, kedua-duanya [1024, 4096]. Ini menunjukkan bahawa dimensi ciri input untuk kunci dan nilai ialah 4096, tetapi dimensi ciri output dimampatkan kepada 1024. Bentuk matriks berat ini mencerminkan cara pereka model menetapkan dimensi bahagian berlainan mekanisme perhatian. Khususnya, dimensi kekunci dan nilai dikurangkan mungkin untuk mengurangkan kerumitan pengiraan dan penggunaan memori, sementara mengekalkan pertanyaan dan output dalam dimensi yang lebih tinggi mungkin untuk mengekalkan lebih banyak maklumat. Pilihan reka bentuk ini bergantung pada seni bina model tertentu dan senario aplikasi
Mari kita gunakan ayat "Saya mengagumi Li Hongzhang" sebagai contoh untuk memudahkan proses pelaksanaan menerangkan mekanisme perhatian dalam rajah ini. Masukkan ayat: Pertama, kita mempunyai ayat "Saya mengagumi Li Hongzhang". Sebelum memproses ayat ini, kita perlu menukar setiap perkataan dalam ayat tersebut ke dalam bentuk yang boleh diproses secara matematik, iaitu vektor perkataan. Proses ini dipanggil penyisipan perkataan.
Pembenaman perkataan: Setiap perkataan, seperti "Saya", "penghargaan", "Li Hongzhang", akan ditukar menjadi vektor bersaiz tetap. Vektor ini mengandungi maklumat semantik perkataan.
Pecah kepada beberapa kepala: Untuk model memahami ayat dari perspektif yang berbeza, kami membahagikan vektor setiap perkataan kepada beberapa bahagian, berikut ialah 8 kepala. Setiap kepala memberi tumpuan kepada aspek ayat yang berbeza.
Kira perhatian: Untuk setiap kepala, kami mengira sesuatu yang dipanggil perhatian. Proses ini melibatkan tiga langkah: Ambil "Saya menghargai Li Hongzhang" sebagai contoh Jika kita ingin memberi tumpuan kepada perkataan "penghargaan", maka "penghargaan" adalah pertanyaan, dan perkataan lain seperti "Saya" dan "Li Hongzhang". adalah kunci. Vektor ialah nilai.
Pertanyaan (S): Ini adalah bahagian di mana kita ingin mencari maklumat. Kunci (K): Ini adalah bahagian yang mengandungi maklumat. Nilai (V): Ini ialah kandungan maklumat sebenar. Penyambungan dan keluaran: Selepas mengira perhatian setiap kepala, kami menggabungkan keputusan ini dan menjana keluaran akhir melalui matriks berat Wo. Output ini akan digunakan dalam lapisan pemprosesan seterusnya atau sebagai sebahagian daripada hasil akhir.
Masalah bentuk yang dinyatakan dalam ulasan pada rajah adalah tentang cara menyimpan dan memproses vektor ini dengan cekap dalam komputer. Dalam pelaksanaan kod sebenar, untuk meningkatkan kecekapan, pembangun boleh membungkus pertanyaan, kunci dan vektor nilai berbilang pengepala bersama-sama dan bukannya memproses setiap pengepala secara individu. Ini boleh mengambil kesempatan daripada keupayaan pemprosesan selari komputer moden untuk mempercepatkan pengiraan.
Hasil keluaran menunjukkan bahawa:
Bentuk matriks berat ini mencerminkan cara pereka model menetapkan dimensi bahagian berlainan mekanisme perhatian. Khususnya, dimensi kekunci dan nilai dikurangkan mungkin untuk mengurangkan kerumitan pengiraan dan penggunaan memori, sementara mengekalkan pertanyaan dan output dalam dimensi yang lebih tinggi mungkin untuk mengekalkan lebih banyak maklumat. Pilihan reka bentuk ini bergantung pada seni bina model tertentu dan senario aplikasi
Mari kita gunakan ayat "Saya mengagumi Li Hongzhang" sebagai contoh untuk memudahkan proses pelaksanaan menerangkan mekanisme perhatian dalam rajah ini.
Pertanyaan (S): Ini adalah bahagian di mana kita ingin mencari maklumat.
Kunci (K): Ini adalah bahagian yang mengandungi maklumat.
Nilai (V): Ini ialah kandungan maklumat sebenar.
Masalah bentuk yang dinyatakan dalam ulasan pada rajah adalah tentang cara menyimpan dan memproses vektor ini dengan cekap dalam komputer. Dalam pelaksanaan kod sebenar, untuk meningkatkan kecekapan, pembangun boleh membungkus pertanyaan, kunci dan vektor nilai berbilang pengepala bersama-sama dan bukannya memproses setiap pengepala secara individu. Ini boleh mengambil kesempatan daripada keupayaan pemprosesan selari komputer moden untuk mempercepatkan pengiraan.
Kami terus menggunakan ayat "Saya menghargai Li Hongzhang" untuk menerangkan peranan matriks berat WQ, WK, WV dan WO.
Dalam model Transformer, setiap perkataan ditukarkan kepada vektor melalui pembenaman perkataan. Vektor ini kemudiannya melalui satu siri transformasi linear untuk mengira skor perhatian. Transformasi linear ini dilaksanakan melalui matriks berat WQ, WK, WV dan WO.
Dalam keseluruhan proses, WQ, WK, WV dan WO dipelajari melalui latihan Mereka menentukan cara model menukar vektor perkataan input kepada perwakilan yang berbeza, dan cara menggabungkan perwakilan ini untuk mendapatkan output akhir. Matriks ini adalah bahagian teras mekanisme perhatian dalam model Transformer, dan ia membolehkan model menangkap hubungan antara perkataan yang berbeza dalam ayat.
WQ (matriks berat Q), WK (matriks berat K), WV (matriks berat V) dan WO (matriks berat O). . Ia dipelajari daripada kaedah pengoptimuman seperti algoritma dan keturunan kecerunan.
Mari kita lihat bagaimana proses pembelajaran ini berfungsi:
在本小节中,我们将从多个注意力头中展开查询向量,得到的形状是 [32x128x4096] 这里,32 是 llama3 中注意力头的数量,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
图片
这段代码通过对模型中第一层的查询(Q)权重矩阵进行重塑(reshape),将其分解为多个注意力头的形式,从而揭示了32和128这两个维度。
之所以在这段代码中出现了32和128这两个维度,而在之前的代码段中没有,是因为这段代码通过重塑操作明确地将查询权重矩阵分解为多个注意力头,每个头具有自己的维度。32代表了模型中注意力头的数量,而128代表了分配给每个头的特征维度大小。这种分解是为了实现多头注意力机制,其中每个头可以独立地关注输入的不同部分,最终通过组合这些头的输出来提高模型的表达能力。
访问了第一层第一个头的查询(query)权重矩阵,这个查询权重矩阵的大小是 [128x4096]。
q_layer0_head0 = q_layer0[0]q_layer0_head0.shape
图片
在这里,你可以看到结果形状是 [17x128],这是因为我们有17个令牌,每个令牌都有一个长度为128的查询(每个令牌在一个头上方的查询)。
br
Picture
Kod ini menjalankan operasi pendaraban matriks, membandingkan pembenaman token (token_embeddings) dengan transpose (.T) matriks berat pertanyaan (q_layer0_head0) kepala pertama lapisan pertama Darab untuk menjana per -vektor pertanyaan token (q_per_token).
torch.matmul ialah fungsi pendaraban matriks dalam PyTorch, yang boleh mengendalikan pendaraban dua tensor.
token_embeddings hendaklah berupa tensor bentuk [17, 4096], mewakili 17 token, setiap satu diwakili oleh vektor benam 4096 dimensi.
q_layer0_head0 ialah matriks berat pertanyaan bagi kepala pertama lapisan pertama dan bentuk asalnya ialah [128, 4096]. .T ialah operasi transpose dalam PyTorch, yang menukar bentuk q_layer0_head0 kepada [4096, 128].
Dengan cara ini, pendaraban matriks token_embeddings dan q_layer0_head0.T ialah pendaraban bagi [17, 4096] dan [4096, 128], dan hasilnya ialah tensor dengan bentuk [17, 128].
Baris kod ini mencetak bentuk q_per_token tensor, mengesahkan bahawa ia adalah [17, 128].
Ini bermakna untuk setiap token yang dimasukkan (17 kesemuanya), kami kini mempunyai vektor pertanyaan 128 dimensi. Vektor pertanyaan 128 dimensi ini diperoleh dengan mendarab pembenaman token dan matriks berat pertanyaan dan boleh digunakan untuk pengiraan mekanisme perhatian seterusnya.
Ringkasnya, kod ini menukarkan vektor pembenaman setiap token kepada vektor pertanyaan melalui pendaraban matriks, menyediakan untuk langkah seterusnya melaksanakan mekanisme perhatian. Setiap token kini mempunyai vektor pertanyaan yang sepadan dengannya, dan vektor pertanyaan ini akan digunakan untuk mengira skor perhatian dengan token lain.
Atas ialah kandungan terperinci Llama3 yang mengoyak tangan lapisan 1: Melaksanakan llama3 dari awal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!