国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

揭秘大模型的魔法:實(shí)現(xiàn)帶可訓(xùn)練權(quán)重的自注意力機(jī)制

人工智能
通過深入剖析自注意力機(jī)制及其可訓(xùn)練權(quán)重的核心作用,我們揭開了大模型處理復(fù)雜任務(wù)時(shí)那份“魔力”的關(guān)鍵一角。自注意力以其獨(dú)特的方式,讓模型能靈活聚焦于輸入序列中的重要信息,大幅提升了上下文理解的能力。

大家好,我是寫代碼的中年人。

上一篇我們實(shí)現(xiàn)了一個(gè)“無可訓(xùn)練參數(shù)”的注意力機(jī)制,讓每個(gè)詞都能“看看別人”,計(jì)算出自己的上下文理解。

雖然實(shí)現(xiàn)起來不難,但它只是個(gè)“玩具級(jí)”的注意力,離真正的大模型還差了幾個(gè)“億”個(gè)參數(shù)。今天,我們來實(shí)現(xiàn)一個(gè)可訓(xùn)練版本的自注意力機(jī)制,這可是 Transformer 的核心!

01、什么叫“可訓(xùn)練”的注意力?

在大模型里,注意力機(jī)制不是寫死的,而是學(xué)出來的。

為了讓每個(gè)詞都能“智能提問、精準(zhǔn)關(guān)注”,我們需要三個(gè)可訓(xùn)練的權(quán)重矩陣:

每個(gè)詞自己造問題,然后去問別的詞,看看誰最“對(duì)味”,然后決定聽誰的意見。

為什么自注意力機(jī)制(Self-Attention)中需要三個(gè)可訓(xùn)練的權(quán)重矩陣,也就是常說的:

Wq:Query 權(quán)重矩陣

Wk:Key 權(quán)重矩陣

Wv:Value 權(quán)重矩陣

這個(gè)設(shè)計(jì)最早出現(xiàn)在 2017 年 Google 的論文《Attention is All You Need》中,也就是Transformer架構(gòu)的原始論文。這三個(gè)矩陣的引入不是隨便“拍腦袋”的設(shè)計(jì),而是有明確動(dòng)機(jī)的:

# ONE

這段論文奠定了 Transformer 的注意力計(jì)算基礎(chǔ)。Transformer 后續(xù)所有的 Multi-Head Attention、Encoder-Decoder Attention,都是基于這個(gè) Scaled Dot-Product Attention 構(gòu)建的。

02、我是誰?我在哪?我要關(guān)注誰?

其實(shí)自注意力就是一種帶可訓(xùn)練權(quán)重的加權(quán)平均機(jī)制,它做了三件事:

把每個(gè)詞向量分別變成三個(gè)形態(tài):Query(查詢)、Key(鍵)、Value(值);

計(jì)算 Query 和所有 Key 的相似度(注意力權(quán)重);

用這個(gè)權(quán)重加權(quán) Value 向量,得出最終的輸出向量。每個(gè)詞都在用“自己的 Query”去看“別人的 Key”,然后決定“我到底該關(guān)注誰”。

如果我們想理解這些內(nèi)容,最好以代碼的形式來逐步理解:

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import matplotlib.pyplot as plt
import numpy as np


plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False




# ------- 定義可訓(xùn)練的自注意力模塊 -------
class SelfAttention(nn.Module):
    def __init__(self, embed_dim, dropout=0.1):
        super().__init__()
        self.embed_dim = embed_dim
        self.dropout = dropout


        self.q_proj = nn.Linear(embed_dim, embed_dim)
        self.k_proj = nn.Linear(embed_dim, embed_dim)
        self.v_proj = nn.Linear(embed_dim, embed_dim)
        self.out_proj = nn.Linear(embed_dim, embed_dim)


        self.last_attn_weights = None


    def forward(self, x):
        B, T, C = x.size()


        Q = self.q_proj(x)
        K = self.k_proj(x)
        V = self.v_proj(x)


        scores = torch.matmul(Q, K.transpose(-2, -1)) / (self.embed_dim ** 0.5)
        attn_weights = F.softmax(scores, dim=-1)
        attn_weights = F.dropout(attn_weights, p=self.dropout, training=self.training)


        self.last_attn_weights = attn_weights.detach()


        out = torch.matmul(attn_weights, V)
        out = self.out_proj(out)
        return out


# ------- Create a Simulated Dataset -------
# Simulate a small vocabulary and word embeddings
vocab = {"寫": 0, "代碼": 1, "的": 2, "中年人": 3, "天天": 4, "<PAD>": 5}
embed_dim = 16
vocab_size = len(vocab)
embedding = nn.Embedding(vocab_size, embed_dim)  # Randomly initialized word embeddings


# Sentence data
sentences = [
    ["寫", "代碼", "的", "中年人"],
    ["天天", "寫", "代碼", "<PAD>"]  # Pad the second sentence to match length
]
batch_size = len(sentences)
seq_len = len(sentences[0])  # Sentences have the same length (4)


# Convert sentences to indices
input_ids = torch.tensor([[vocab[word] for word in sent] for sent in sentences])  # (batch_size, seq_len)


# ------- Parameter Settings -------
epochs = 200
dropout = 0.1
model = SelfAttention(embed_dim, dropout)
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=1e-3)


# ------- Train the Model -------
for epoch in range(epochs):
    model.train()
    # Compute input inside the loop to create a fresh computation graph
    x = embedding(input_ids)  # (batch_size, seq_len, embed_dim)
    target = x.clone()  # Target is the same as input for this task


    out = model(x)
    loss = criterion(out, target)


    optimizer.zero_grad()
    loss.backward()  # Compute gradients
    optimizer.step()  # Update model parameters


    if (epoch + 1) % 20 == 0:
        print(f"Epoch {epoch+1:3d}, Loss: {loss.item():.6f}")


# ------- Visualize Attention Weights -------
# Visualize attention matrix for the first sentence
attention = model.last_attn_weights[0].numpy()  # (seq_len, seq_len)
sentence = sentences[0]  # ["寫", "代碼", "的", "中年人"]


plt.figure(figsize=(8, 6))
plt.imshow(attention, cmap='viridis')
plt.title(f"Attention Matrix for Sentence: {' '.join(sentence)}")
plt.xticks(ticks=np.arange(seq_len), labels=sentence)
plt.yticks(ticks=np.arange(seq_len), labels=sentence)
plt.xlabel("Key (Word)")
plt.ylabel("Query (Word)")
plt.colorbar(label="Attention Strength")
for i in range(seq_len):
    for j in range(seq_len):
        plt.text(j, i, f"{attention[i,j]:.2f}", ha="center", va="center", color="white")
plt.tight_layout()
plt.savefig("attention_matrix_sentence1.png")
plt.show()


# Visualize attention matrix for the second sentence
attention = model.last_attn_weights[1].numpy()
sentence = sentences[1]  # ["天天", "寫", "代碼", "<PAD>"]


plt.figure(figsize=(8, 6))
plt.imshow(attention, cmap='viridis')
plt.title(f"Attention Matrix for Sentence: {' '.join(sentence)}")
plt.xticks(ticks=np.arange(seq_len), labels=sentence)
plt.yticks(ticks=np.arange(seq_len), labels=sentence)
plt.xlabel("Key (Word)")
plt.ylabel("Query (Word)")
plt.colorbar(label="Attention Strength")
for i in range(seq_len):
    for j in range(seq_len):
        plt.text(j, i, f"{attention[i,j]:.2f}", ha="center", va="center", color="white")
plt.tight_layout()
plt.savefig("attention_matrix_sentence2.png")
plt.show()

上面的代碼執(zhí)行后輸出:


代碼詳解:

這段代碼實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的自注意力(Self-Attention)模型,并通過一個(gè)模擬的中文數(shù)據(jù)集進(jìn)行訓(xùn)練,展示自注意力機(jī)制如何捕捉句子中詞語之間的關(guān)系。以下是代碼的詳細(xì)解釋,以及對(duì)自注意力機(jī)制的深入分析。

這段代碼的核心目標(biāo)是:實(shí)現(xiàn)自注意力模塊:通過定義一個(gè)SelfAttention類,實(shí)現(xiàn)自注意力機(jī)制,模擬Transformer模型中的核心組件。訓(xùn)練模型:使用一個(gè)簡(jiǎn)單的中文詞匯數(shù)據(jù)集,訓(xùn)練自注意力模型,使其學(xué)習(xí)詞語之間的注意力分布。可視化注意力權(quán)重:通過繪制注意力矩陣,直觀展示模型如何關(guān)注句子中不同詞語之間的關(guān)系。

代碼主要分為以下幾個(gè)部分:數(shù)據(jù)集構(gòu)建:構(gòu)造一個(gè)小型中文詞匯表和兩個(gè)短句,模擬自然語言處理任務(wù)。模型定義:實(shí)現(xiàn)自注意力模塊,包含查詢(Query)、鍵(Key)、值(Value)的線性變換和注意力計(jì)算。訓(xùn)練過程:通過優(yōu)化模型,使其輸出盡可能接近輸入(一種簡(jiǎn)單的自監(jiān)督學(xué)習(xí)任務(wù))。可視化:繪制注意力矩陣,展示模型對(duì)不同詞語的關(guān)注程度。

03、自注意力機(jī)制詳解

自注意力機(jī)制的核心思想

自注意力是Transformer模型的核心組件,用于捕捉序列中元素(詞、字符等)之間的關(guān)系。

其核心思想是:

每個(gè)輸入元素(如詞)同時(shí)扮演查詢(Query)、鍵(Key)和值(Value)三個(gè)角色。通過計(jì)算查詢與鍵的相似度,生成注意力權(quán)重,決定每個(gè)元素對(duì)其他元素的關(guān)注程度。使用注意力權(quán)重對(duì)值進(jìn)行加權(quán)求和,生成上下文感知的表示。

數(shù)學(xué)公式:

# ONE

訓(xùn)練權(quán)重的作用:

在訓(xùn)練過程中,自注意力機(jī)制的權(quán)重(W_q, W_k, W_v, W_out)通過優(yōu)化器更新,目標(biāo)是使模型輸出盡可能接近輸入(MSE損失)。

具體作用:

學(xué)習(xí)語義關(guān)系:通過調(diào)整W_q和W_k,模型學(xué)習(xí)詞之間的語義關(guān)聯(lián)。例如,“寫”和“代碼”可能有較高的注意力權(quán)重,因?yàn)樗鼈冊(cè)谡Z義上相關(guān)。

增強(qiáng)表示:通過W_v和W_out,模型生成更豐富的上下文表示,捕捉句子中詞語的相互影響。

動(dòng)態(tài)關(guān)注:注意力權(quán)重是動(dòng)態(tài)計(jì)算的,允許模型根據(jù)輸入內(nèi)容靈活調(diào)整關(guān)注重點(diǎn)。

通過深入剖析自注意力機(jī)制及其可訓(xùn)練權(quán)重的核心作用,我們揭開了大模型處理復(fù)雜任務(wù)時(shí)那份“魔力”的關(guān)鍵一角。自注意力以其獨(dú)特的方式,讓模型能靈活聚焦于輸入序列中的重要信息,大幅提升了上下文理解的能力。但這只是開端。在下一章,我們將進(jìn)一步探討多頭注意力機(jī)制,看它如何通過并行處理多組注意力,為模型帶來更強(qiáng)的表達(dá)力和靈活性。

責(zé)任編輯:龐桂玉 來源: 寫代碼的中年人
相關(guān)推薦

2025-08-11 06:17:54

2018-08-26 22:25:36

自注意力機(jī)制神經(jīng)網(wǎng)絡(luò)算法

2025-04-25 00:20:00

大模型tokenizer

2024-06-28 08:04:43

語言模型應(yīng)用

2024-04-03 14:31:08

大型語言模型PytorchGQA

2023-05-05 13:11:16

2025-10-16 09:00:00

大模型

2024-12-09 00:00:10

2020-09-17 12:40:54

神經(jīng)網(wǎng)絡(luò)CNN機(jī)器學(xué)習(xí)

2025-07-16 10:15:51

2024-12-17 14:39:16

2023-01-01 13:31:47

模型訓(xùn)練

2024-12-04 09:25:00

2024-09-19 10:07:41

2025-06-20 10:18:58

大模型

2024-06-06 09:18:48

2023-10-07 07:21:42

注意力模型算法

2024-10-31 10:00:39

注意力機(jī)制核心組件

2017-08-03 11:06:52

2023-12-11 14:21:00

模型訓(xùn)練
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国内精品视频久久| 九九热精品在线播放| 亚洲老女人视频免费| 日韩精品在线免费播放| 黄色在线观看网| aa级大片欧美| 日本黄色播放器| 日本欧美一区二区在线观看| 丁香五月网久久综合| 久久精品国产99久久| 17婷婷久久www| 粉嫩的18在线观看极品精品| 欧美成人合集magnet| 精品国产黄a∨片高清在线| 亚洲视频欧美视频| 欧美日韩电影免费看| 精品丝袜一区二区三区| 欧美性天天影视| 日韩欧美a级成人黄色| 在线人体午夜视频| 亚洲高清一区二区三区| 最后生还者第二季在线观看| 精品欧美激情精品一区| 丝袜视频国产在线播放| 色系网站成人免费| 日本综合在线| 日韩欧美国产wwwww| 成全电影大全在线观看| 亚洲精品电影网| 久久野战av| 久久综合五月天| 91精品国产自产精品男人的天堂| 久久久久久九九九| 亚洲区小说区图片区qvod按摩| 国产999在线| 日韩在线观看一区| 激情小说综合区| 日韩激情中文字幕| 男人添女荫道口女人有什么感觉| bt欧美亚洲午夜电影天堂| 嫩草影院国产精品| 亚洲.国产.中文慕字在线| 国产三级在线| 亚洲国产精品女人久久久| 亚洲精品在线影院| 97成人在线视频| 欧美黄色aaaa| 亚洲成人动漫在线| 国产精品看片你懂得| 一级片在线免费看| 欧美变态口味重另类| 成人亚洲免费| 国产精品久久视频| 麻豆精品91| 午夜精品久久久久久久无码 | 国产999在线观看| 亚洲手机在线| 亚洲精品天堂成人片av在线播放 | 中文字幕在线亚洲三区| 久久综合九色综合97婷婷女人| 婷婷福利视频导航| 日韩欧美在线影院| 草草视频在线一区二区| 成人羞羞视频免费| 国产精品自产自拍| 免费观看v片在线观看| 亚洲精品99久久久久| 欧美日韩一区二区三区在线电影| 麻豆av一区二区三区| 欧美国产综合一区二区| 婷婷视频在线| 久久久亚洲精选| 日本欧洲一区二区| 日本福利片免费看| 日韩精品福利网站| 成人免费在线播放| 国产一区 在线播放| 欧美性生交xxxxx久久久| 欧美成a人片免费观看久久五月天| 5566中文字幕一区二区| 99re亚洲国产精品| a视频在线观看| 欧美一级大片视频| 懂色av中文一区二区三区| 国产在线三区| 69精品小视频| 国产suv精品一区二区三区| 国产爆初菊在线观看免费视频网站| 久久精品中文字幕| 日韩高清不卡一区二区| 美国一级片在线免费观看视频 | 国产精品伦一区二区| 成人av免费在线看| 日本一区二区三区四区| 激情国产在线| 精品日本一区二区三区| 亚洲综合色婷婷| 国产一区 二区| 在线视频精品一区| 在线精品国精品国产尤物884a| 大奶一区二区三区| 日韩欧美精品免费| 亚洲国产91色在线| 亚洲最大的免费视频网站| 四虎最新地址发布| 亚洲国产精品成人va在线观看| 六月丁香久久丫| 日韩 欧美 自拍| 欧洲精品中文字幕| 亚洲妇女av| 日韩av片在线看| 亚洲国产精品va在线| 午夜精品免费| 在线国产小视频| 欧美激情亚洲视频| 成人动漫在线一区| 超碰在线公开| 欧美精品一区二区三区在线四季| 中文字幕一区三区| 久久伦理中文字幕| 国产精品无码人妻一区二区在线| 亚洲精品大尺度| 久久久精品网| porn亚洲| 国产成人精品一区二区三区福利| 亚洲福利视频一区| 亚洲人成精品久久久| 在线观看亚洲色图| 欧美日韩成人黄色| 国产欧美一区二区精品忘忧草| 中文.日本.精品| 欧美三级理论片| 日韩毛片在线免费看| 日韩欧美三级在线| 欧美一区不卡| 少妇性bbb搡bbb爽爽爽欧美| 欧美在线视频免费| 91视视频在线观看入口直接观看www| wwwww亚洲| 亚洲高清精品中出| 日韩欧美国产综合一区| 久久国产66| 91麻豆免费在线视频| 欧美日韩电影一区二区三区| 欧美视频你懂的| 中日韩视频在线观看| 久久久久久久久免费视频| 成人国产1314www色视频| 色网站国产精品| 综合天堂久久久久久久| 免费在线高清av| www.一区二区三区| 日韩网站在线看片你懂的| 日韩av网站免费在线| 中文字幕乱码在线播放| 日韩精品一区在线视频| 中文字幕少妇一区二区三区| 久久中文娱乐网| 午夜精品影视国产一区在线麻豆| 1024亚洲| 99re在线国产| 欧美本精品男人aⅴ天堂| 国产黄色91视频| 麻豆一二三区精品蜜桃| 日本在线аv| 国产日韩精品推荐| 日韩国产一区三区| 久久蜜臀精品av| 日韩精品首页| 超碰在线网址| 日韩伦理在线免费观看| 91成人天堂久久成人| 欧美亚洲综合网| 国产精品资源在线| 国产区精品视频在线观看豆花| 黄色高清在线观看| 欧美在线播放一区| 久久综合免费视频| 亚洲va韩国va欧美va| 免费在线观看日韩欧美| 国产精品视频3p| porn亚洲| 久久久久久久久久久视频| 国产精品久久久久久久电影 | 亚州精品国产| 日本全棵写真视频在线观看| 久久人人97超碰人人澡爱香蕉| 正在播放欧美一区| 精品久久久久久久久久ntr影视| 免费欧美日韩国产三级电影| 美女精品久久| 国产福利小视频在线观看| 无码人妻少妇伦在线电影| 国产综合福利在线| 一区二区亚洲精品国产| 欧美日韩亚洲系列| 91亚洲精华国产精华精华液| 激情欧美丁香| 麻豆一区一区三区四区| 色偷偷色偷偷色偷偷在线视频|