日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

手寫Transformer核心模塊:從零實(shí)現(xiàn)Linear、Embedding與反向傳播

手寫Transformer核心模塊:從零實(shí)現(xiàn)Linear、Embedding與反向傳播 這次我們來看一項(xiàng)很多人學(xué)完 Transformer 但依然沒完全搞懂的事情不只是會(huì)調(diào)用nn.Transformer而是親手把 Linear Layer、Embedding Layer、參數(shù)初始化和反向傳播全部實(shí)現(xiàn)出來。本文對應(yīng)的場景是 Stanford CS 336 3.3也就是在課程作業(yè)中要求用最樸素的 PyTorch 張量操作搭建語言模型組件并通過梯度檢查驗(yàn)證手寫反向傳播的正確性。標(biāo)題里的四個(gè)關(guān)鍵詞其實(shí)就對應(yīng)了 Transformer 落地中四個(gè)最容易翻車的點(diǎn)參數(shù)初始化決定模型能不能收斂反向傳播決定你寫的網(wǎng)絡(luò)是不是真的“能學(xué)”Linear Layer 是所有前饋計(jì)算的地基Embedding Layer 則承擔(dān)著離散 token 到連續(xù)向量的映射。如果這幾個(gè)模塊只是靠nn.Linear和nn.Embedding一帶而過那遇到 loss 不降、梯度 NaN、維度對不上這類問題的時(shí)候往往只能瞎猜。自己手拼一遍之后很多報(bào)錯(cuò)一眼就能看出問題。這篇文章會(huì)從零實(shí)現(xiàn)一個(gè)可訓(xùn)練的最小 Transformer包含前向傳播、手寫 backward、參數(shù)初始化、梯度驗(yàn)證最后在一個(gè)小模型上完成端到端訓(xùn)練測試。全程使用 CPU 即可運(yùn)行不依賴 GPU也不需要下載任何預(yù)訓(xùn)練權(quán)重。適合正在啃 Transformer 源碼、準(zhǔn)備算法面試、或者做課程作業(yè)時(shí)想把原理徹底吃透的讀者。1. 核心能力速覽先把這篇文章涉及的技術(shù)目標(biāo)和運(yùn)行約束講清楚。下面的表格不是項(xiàng)目 README而是你讀完這篇文章后應(yīng)該具備的“能力驗(yàn)收清單”。能力項(xiàng)說明項(xiàng)目類型從零手寫 Transformer 核心模塊的教學(xué)實(shí)現(xiàn)來源Stanford CS 336 Language Modeling 課程 3.3 小節(jié)主題核心模塊Linear Layer、Embedding Layer、LayerNorm、參數(shù)初始化、手寫反向傳播技術(shù)棧Python 3.9、PyTorch 2.x、NumPy 可選運(yùn)行方式本地腳本運(yùn)行支持 Jupyter Notebook硬件要求CPU 可跑顯存不是必需是否依賴 nn.Linear不依賴手動(dòng)實(shí)現(xiàn) forward/backward是否依賴 nn.Embedding不依賴手動(dòng)實(shí)現(xiàn)查表與梯度回傳反向傳播方式手動(dòng)推導(dǎo)并實(shí)現(xiàn)通過 torch.autograd.gradcheck 驗(yàn)證驗(yàn)證方式形狀測試、梯度對比、小模型端到端 loss 下降適合人群學(xué)習(xí) Transformer 原理、面試準(zhǔn)備、課程作業(yè)、源碼閱讀從表格可以看出這是一篇“先別用庫、先把原理跑通”的教程。它的核心產(chǎn)出不是一個(gè)大而全的訓(xùn)練框架而是一套你可以自己掌控每個(gè)張量形狀和每個(gè)梯度去向的最小實(shí)現(xiàn)。2. 適用場景與使用邊界手寫 Transformer 并不是為了讓 PyTorch 用戶拋棄官方 API。相反它適合在以下幾個(gè)場景里發(fā)揮作用第一課程作業(yè)或?qū)嶒?yàn)報(bào)告。CS 336 這類課程的核心目標(biāo)就是讓學(xué)生脫離高級封裝理解語言模型內(nèi)部到底發(fā)生了什么。自己實(shí)現(xiàn) Linear、Embedding、LayerNorm 之后再去看nn.TransformerEncoder的實(shí)現(xiàn)會(huì)明顯感覺到“圖層”不再是黑盒。第二算法面試準(zhǔn)備。很多公司面試會(huì)問“Transformer 參數(shù)初始化為什么用 Xavier”“Embedding 梯度怎么回傳”“softmax 反向傳播的雅可比是什么”。這些問題的答案不親手寫一遍很難講得清楚。第三源碼閱讀和二次開發(fā)。當(dāng)你想修改某一層的行為比如給 Attention 換成線性注意力或者把 LayerNorm 換成 RMSNorm如果只依賴高層 API往往不知道改哪里但手寫過底層模塊之后你能很快定位到具體實(shí)現(xiàn)位置。同時(shí)也要明確使用邊界。這套手寫代碼主要用于教學(xué)和原理驗(yàn)證不推薦直接用于大規(guī)模訓(xùn)練。手寫循環(huán)、GPU 算子融合、FlashAttention 這些工程優(yōu)化都不在范圍內(nèi)。如果目標(biāo)是在生產(chǎn)環(huán)境訓(xùn)練大模型應(yīng)該直接使用成熟框架PyTorch 的nn.Transformer、Hugging Face 的transformers或者 Megatron-LM 等。另一個(gè)必須強(qiáng)調(diào)的是合規(guī)邊界。課程代碼、作業(yè)要求、課件內(nèi)容都有各自的版權(quán)和使用協(xié)議本文只講解通用技術(shù)原理和常見實(shí)踐不復(fù)制任何課程原始材料。訓(xùn)練時(shí)不要使用未經(jīng)授權(quán)的數(shù)據(jù)、人臉信息、版權(quán)文本或用戶隱私數(shù)據(jù)盡量在本地構(gòu)造的玩具數(shù)據(jù)集上驗(yàn)證。3. 環(huán)境準(zhǔn)備與前置條件手寫層不需要復(fù)雜環(huán)境。建議使用 Python 3.9 以上版本和 PyTorch 2.x安裝命令pip install torch numpy tqdm如果沒有 GPU直接用 CPU 跑小模型即可。這里的關(guān)鍵不是訓(xùn)練速度而是驗(yàn)證前向輸出形狀與反向傳播梯度是否正確。建議的工程目錄結(jié)構(gòu)transformer_from_scratch/ ├── layers/ │ ├── __init__.py │ ├── linear.py │ ├── embedding.py │ ├── layernorm.py │ └── attention.py ├── init.py ├── model.py ├── train.py └── tests/ └── test_gradcheck.py這種按層拆分的結(jié)構(gòu)能讓你在調(diào)試時(shí)只關(guān)心單個(gè)模塊而不會(huì)一次面對整個(gè)網(wǎng)絡(luò)。動(dòng)手之前還需要確認(rèn)三塊數(shù)學(xué)基礎(chǔ)矩陣乘法求導(dǎo)公式、鏈?zhǔn)椒▌t、softmax 的雅可比矩陣。不需要研究得很深但至少要知道對于一個(gè)線性變換y x W從上層傳回的梯度dy應(yīng)該分別回傳到dx和dW公式是dx dy W.T、dW x.T dy。后面所有代碼都建立在這條基本規(guī)則上。4. 從零實(shí)現(xiàn)核心模塊4.1 手寫 Linear LayerLinear Layer 是最基礎(chǔ)的計(jì)算單元公式很簡單y x W b。但參數(shù)初始化和梯度回傳是兩個(gè)容易被忽略的細(xì)節(jié)。第一個(gè)細(xì)節(jié)是參數(shù)初始化。下面用 Xavier 均勻初始化它的上下界是bound sqrt(6 / (fan_in fan_out))。這種初始化適合線性層和 tanh 激活函數(shù)能讓每層輸出的方差保持在一個(gè)合理范圍內(nèi)避免深層網(wǎng)絡(luò)時(shí)梯度消失或爆炸。第二個(gè)細(xì)節(jié)是反向傳播。除了dx要回傳給上一層還要計(jì)算dW和db供優(yōu)化器更新。這里有一個(gè)常見錯(cuò)誤把dW寫成了grad_output.T x正確寫法是x.T grad_output。推導(dǎo)方法是對損失函數(shù)求 W 的偏導(dǎo)保持張量形狀對齊即可。import torch import math class LinearLayer: def __init__(self, in_features, out_features, biasTrue): self.in_features in_features self.out_features out_features self.bias bias # Xavier 均勻初始化 bound math.sqrt(6.0 / (in_features out_features)) self.W torch.empty(in_features, out_features).uniform_(-bound, bound) self.b torch.zeros(out_features) if bias else None def forward(self, x): self.x x out x self.W if self.b is not None: out out self.b return out def backward(self, grad_output): dx grad_output self.W.T dW self.x.T grad_output db grad_output.sum(dim0) if self.b is not None else None return dx, dW, db這段代碼最值得注意的地方是forward里保存了self.x。這是手寫反向傳播的基礎(chǔ)backward 需要用到前向時(shí)輸入的原始值。很多新手寫的反向傳播出錯(cuò)不是因?yàn)楣酵茖?dǎo)錯(cuò)而是因?yàn)榍跋驔]有保存必要的中間變量。4.2 手寫 Embedding LayerEmbedding Layer 本質(zhì)上是一個(gè)查表操作。輸入是 token id 序列輸出是形狀為[batch_size, seq_len, embedding_dim]的向量序列。它的反向傳播很有特點(diǎn)并不是所有 embedding 行都會(huì)被更新只有當(dāng)前 batch 中實(shí)際被查到的 token 行才有梯度。實(shí)現(xiàn)方式是用torch.index_add_把梯度累加到對應(yīng)的行上。class EmbeddingLayer: def __init__(self, num_embeddings, embedding_dim, init_scale0.1): self.num_embeddings num_embeddings self.embedding_dim embedding_dim # 常用做法均勻分布 [-init_scale, init_scale] self.E torch.empty(num_embeddings, embedding_dim) self.E.uniform_(-init_scale, init_scale) def forward(self, tokens): self.tokens tokens return self.E[tokens] def backward(self, grad_output): dE torch.zeros_like(self.E) # 把梯度累加到被查到的行上 dE.index_add_(0, self.tokens.flatten(), grad_output.flatten(0, 1)) return dE這里有一個(gè)工程細(xì)節(jié)index_add_是原地操作調(diào)用前必須確保dE是全零矩陣。如果同一個(gè) token 在一句話中出現(xiàn)多次它的梯度會(huì)自然累加這也符合 embedding 反向傳播的定義。你不需要為它手動(dòng)去重。4.3 參數(shù)初始化決定 Transformer 能不能收斂的隱藏開關(guān)參數(shù)初始化在 PyTorch 使用里常常被忽略因?yàn)閚n.Linear已經(jīng)封裝好了默認(rèn)初始化。但手寫模塊時(shí)每層初始化都必須自己處理。先看原始 Transformer 論文中的做法embedding 層使用均值 0、方差 1 的正態(tài)分布初始化之后乘以sqrt(d_model)。也就是說如果 embedding 矩陣初始化為N(0, 1)那么實(shí)際查表輸出要再乘一個(gè)sqrt(d_model)。這樣做的目的是讓輸入到 Attention 的向量范數(shù)不要太小避免 softmax 之前的所有點(diǎn)積都擠到極小值附近。GPT 風(fēng)格的大模型通常采用更小的初始化方差例如N(0, 0.02)。原因很簡單模型層數(shù)越深殘差分支積累的隱狀態(tài)方差越大逐層用小方差初始化可以抑制這種累積。如果你在深層 Transformer 里發(fā)現(xiàn)訓(xùn)練初期 logits 出現(xiàn) NaN或者 loss 長時(shí)間不下降首先排查初始化方差是否過大。下面給出一個(gè)簡單的參數(shù)初始化工具函數(shù)def init_linear_weight(W, modexavier): if mode xavier: fan_in, fan_out W.shape bound math.sqrt(6.0 / (fan_in fan_out)) W.uniform_(-bound, bound) elif mode gpt: nn.init.normal_(W, std0.02) else: raise ValueError(fUnknown init mode: {mode}) def init_embedding(E, d_model, modenormal): if mode normal: E.normal_(mean0.0, std1.0) E.mul_(math.sqrt(d_model)) elif mode uniform: scale 0.1 E.uniform_(-scale, scale) else: raise ValueError(fUnknown init mode: {mode})從實(shí)踐角度看訓(xùn)練一個(gè)小模型時(shí)建議 Linear 層優(yōu)先用 Xavier 均勻初始化Embedding 層可以用uniform(-0.1, 0.1)這種比較保險(xiǎn)的小范圍初始化。如果訓(xùn)練不收斂再嘗試 GPT 風(fēng)格的N(0, 0.02)并配合 warmup 學(xué)習(xí)率調(diào)度。4.4 手寫反向傳播并用 gradcheck 驗(yàn)證手寫反向傳播最難的不是某一層的公式而是整個(gè)鏈路的梯度形狀。一個(gè)效率很高的驗(yàn)證方式是用torch.autograd.gradcheck。它會(huì)用數(shù)值差分計(jì)算梯度再和你的手動(dòng) backward 梯度對比誤差在閾值內(nèi)就說明反向傳播正確。from torch.autograd import gradcheck torch.manual_seed(0) linear LinearLayer(64, 128) x torch.randn(2, 32, 64, requires_gradTrue, dtypetorch.float64) # 注意gradcheck 需要高精度通常使用 float64 linear.W linear.W.double() linear.b linear.b.double() output linear.forward(x) grad_output torch.randn_like(output) dx_manual, dW_manual, db_manual linear.backward(grad_output) # 用 autograd 計(jì)算參考梯度 output_double x.double() linear.W.double() linear.b.double() dx_auto torch.autograd.grad(output_double.sum(), x)[0] print(dx 誤差:, (dx_manual - dx_auto).abs().max().item())gradcheck函數(shù)更嚴(yán)格可以直接傳一個(gè)自定義函數(shù)def linear_forward_wrapper(W, b, x): return x W b linear_layer LinearLayer(16, 32) linear_layer.W linear_layer.W.double() linear_layer.b linear_layer.b.double() x torch.randn(4, 16, dtypetorch.float64, requires_gradTrue) W linear_layer.W.clone().requires_grad_(True) b linear_layer.b.clone().requires_grad_(True) check gradcheck( lambda w, b_: linear_forward_wrapper(w, b_, x), (W, b), eps1e-6, atol1e-5, ) print(gradcheck passed:, check)如果你是在課程作業(yè)里驗(yàn)證反向傳播務(wù)必把所有參數(shù)和輸入都轉(zhuǎn)成float64。數(shù)值差分在float32下誤差會(huì)很大導(dǎo)致明明公式正確gradcheck卻報(bào)錯(cuò)。4.5 LayerNorm 與殘差Transformer 穩(wěn)定訓(xùn)練的第二道防線LayerNorm 在 Transformer 中負(fù)責(zé)把每一層的輸出拉回穩(wěn)定的數(shù)值范圍。手寫時(shí)可以直接使用簡化形式y(tǒng) (x - mean) / sqrt(var eps)反向傳播用一個(gè)更緊湊的公式class LayerNorm: def __init__(self, dim, eps1e-5): self.gamma torch.ones(dim) self.beta torch.zeros(dim) self.eps eps def forward(self, x): self.x x self.mean x.mean(dim-1, keepdimTrue) self.var x.var(dim-1, unbiasedFalse, keepdimTrue) self.x_hat (x - self.mean) / torch.sqrt(self.var self.eps) return self.gamma * self.x_hat self.beta def backward(self, grad_output): N self.x.shape[-1] dy grad_output * self.gamma dx (dy - dy.mean(dim-1, keepdimTrue) - self.x_hat * (dy * self.x_hat).mean(dim-1, keepdimTrue) ) / torch.sqrt(self.var self.eps) dgamma (grad_output * self.x_hat).sum(dim(0, 1)) dbeta grad_output.sum(dim(0, 1)) return dx, dgamma, dbeta這個(gè)反向公式的推導(dǎo)過程相當(dāng)經(jīng)典。核心思路是歸一化操作同時(shí)依賴mean和var所以dx中必須包含dy.mean以及dy * x_hat的均值項(xiàng)。很多人手寫 LayerNorm 反向時(shí)少了一項(xiàng)導(dǎo)致gradcheck一直不過幾乎都是這個(gè)原因。殘差連接則是把輸入和子層輸出相加它的反向傳播不需要任何額外計(jì)算梯度在相加處直接“分叉”。實(shí)現(xiàn)時(shí)只要在 forward 里保存原始輸入即可。4.6 組裝一個(gè)最小 Transformer Block有了 Linear、Embedding、LayerNorm 和殘差可以組裝一個(gè)最小 Transformer Block。這里為了控制篇幅Attention 部分不手寫 backward而是用 PyTorch 基礎(chǔ)算子實(shí)現(xiàn) forward反向交給 autograd。import torch import torch.nn.functional as F class MultiHeadAttention: def __init__(self, d_model, n_heads): self.d_model d_model self.n_heads n_heads self.head_dim d_model // n_heads self.Wq torch.empty(d_model, d_model) self.Wk torch.empty(d_model, d_model) self.Wv torch.empty(d_model, d_model) self.Wo torch.empty(d_model, d_model) for w in [self.Wq, self.Wk, self.Wv, self.Wo]: nn.init.xavier_uniform_(w) def forward(self, x): B, T, D x.shape q x self.Wq k x self.Wk v x self.Wv q q.view(B, T, self.n_heads, self.head_dim).transpose(1, 2) k k.view(B, T, self.n_heads, self.head_dim).transpose(1, 2) v v.view(B, T, self.n_heads, self.head_dim).transpose(1, 2) scores q k.transpose(-2, -1) / (self.head_dim ** 0.5) attn torch.softmax(scores, dim-1) out attn v out out.transpose(1, 2).reshape(B, T, D) return out self.Wo這里的關(guān)鍵知識(shí)點(diǎn)是縮放因子。Attention 公式里scores q k.T / sqrt(d_head)不能省略。如果不做縮放點(diǎn)積結(jié)果會(huì)隨著d_head增大而變大softmax 會(huì)進(jìn)入飽和區(qū)梯度接近 0訓(xùn)練會(huì)非常慢。5. 功能測試與效果驗(yàn)證5.1 測試 Linear 前向形狀第一個(gè)測試很簡單確認(rèn)輸出形狀正確。torch.manual_seed(0) linear LinearLayer(64, 128) x torch.randn(2, 32, 64) out linear.forward(x) print(Linear input shape:, x.shape) print(Linear output shape:, out.shape) # 期望輸出 (2, 32, 128)如果這里形狀不對問題幾乎一定出在W的定義方式上。W應(yīng)該是(in_features, out_features)這樣x W才能把最后一維從 64 映射到 128。5.2 測試 Embedding 反向是否正確構(gòu)造一個(gè)只有 0、1、2 三個(gè) token 的序列驗(yàn)證 embedding 各行的梯度。torch.manual_seed(0) embed EmbeddingLayer(num_embeddings3, embedding_dim8) tokens torch.tensor([[0, 1], [0, 2]]) out embed.forward(tokens) grad_output torch.randn_like(out) dE embed.backward(grad_output) print(dE shape:, dE.shape) print(dE row 0:, dE[0])判斷依據(jù)第 0 行梯度應(yīng)該等于輸入中 token 0 對應(yīng)位置梯度的累加。如果第 1 行或第 2 行也出現(xiàn)了不該有的梯度說明index_add_的索引寫錯(cuò)了。5.3 用 gradcheck 驗(yàn)證全部手寫層強(qiáng)烈建議給每個(gè)手寫層都寫一個(gè) gradcheck。以 LinearLayer 為例用前文包裝函數(shù)方式驗(yàn)證 W 和 b 的梯度EmbeddingLayer 則驗(yàn)證 E 矩陣的梯度。def embedding_forward_wrapper(E, tokens): return E[tokens] E torch.randn(10, 16, dtypetorch.float64, requires_gradTrue) tokens torch.tensor([[1, 2, 3], [4, 5, 6]], dtypetorch.long) gradcheck_check gradcheck(embedding_forward_wrapper, (E, tokens)) print(Embedding gradcheck:, gradcheck_check)注意gradcheck要求輸入張量至少有一個(gè)是requires_gradTrue且所有浮點(diǎn)張量都建議使用float64。整數(shù) token 張量不需要梯度。5.4 端到端小模型訓(xùn)練觀察 loss 是否下降這是最后一個(gè)驗(yàn)證能證明整個(gè)鏈路從參數(shù)初始化到反向傳播都沒有大問題。import torch import torch.optim as optim torch.manual_seed(0) vocab_size 64 d_model 32 n_heads 4 block MultiHeadAttention(d_modeld_model, n_headsn_heads) embed EmbeddingLayer(vocab_size, d_model) x torch.randint(0, vocab_size, (2, 8)) y torch.randint(0, vocab_size, (2, 8)) optim_params [ {params: [block.Wq, block.Wk, block.Wv, block.Wo]}, {params: [embed.E]}, ] optimizer optim.Adam(optim_params, lr1e-3) loss_fn torch.nn.CrossEntropyLoss() for step in range(20): h embed.forward(x) h block.forward(h) logits h embed.E.T loss loss_fn(logits.view(-1, vocab_size), y.view(-1)) optimizer.zero_grad() # 這里故意用 autograd 計(jì)算整條鏈路梯度因?yàn)?MultiHeadAttention 沒有手寫 backward loss.backward() optimizer.step() if step % 5 0: print(step, step, loss, loss.item())這段代碼用到了一個(gè)取巧但合理的設(shè)計(jì)embedding 矩陣既負(fù)責(zé)查表也作為輸出投影矩陣。這種“共享嵌入”的寫法在 GPT 系列中很常見。更好的實(shí)現(xiàn)是單獨(dú)定義一個(gè)輸出 Linear 層但從教學(xué)角度看共享嵌入能顯著減少參數(shù)。判斷標(biāo)準(zhǔn)如果 loss 在 20 步內(nèi)明顯下降說明參數(shù)初始化、前向、反向、優(yōu)化器調(diào)度全部工作正常如果 loss 原地不動(dòng)優(yōu)先檢查學(xué)習(xí)率是否太大或者太小其次檢查初始化方差。6. 從“手寫層”到“接口化調(diào)用”批量實(shí)驗(yàn)與可復(fù)用設(shè)計(jì)這個(gè)項(xiàng)目沒有 HTTP API也不需要提供 Web 服務(wù)。但從工程化角度看你可以把自定義層設(shè)計(jì)成統(tǒng)一的“前向 反向”接口方便批量跑實(shí)驗(yàn)。比如定義一個(gè) BaseLayer 風(fēng)格class BaseLayer: def forward(self, x): raise NotImplementedError def backward(self, grad_output): raise NotImplementedErrorLinearLayer、EmbeddingLayer、LayerNorm 都繼承這個(gè)接口這樣在訓(xùn)練循環(huán)里可以統(tǒng)一調(diào)度。批量實(shí)驗(yàn)最常見的場景是掃描不同初始化模式對收斂速度的影響。可以寫一個(gè)小腳本init_modes [xavier, gpt, uniform] learning_rates [1e-4, 1e-3, 1e-2] for init_mode in init_modes: for lr in learning_rates: model build_transformer(init_modeinit_mode) final_loss train_short(model, lrlr) print(init_mode, lr, final_loss)當(dāng)你把“參數(shù)初始化”和“反向傳播”都變成可配置項(xiàng)之后就能系統(tǒng)性地觀察為什么 GPT 風(fēng)格的小方差初始化在深層模型中表現(xiàn)更好為什么 Xavier 在淺層模型中已經(jīng)足夠。這種實(shí)驗(yàn)往往比單純閱讀論文更有價(jià)值。如果你確實(shí)想把模塊暴露成服務(wù)也可以額外包一層 FastAPI但這屬于教學(xué)項(xiàng)目之外的擴(kuò)展不推薦在原理學(xué)習(xí)階段引入。7. 資源占用與性能觀察手寫模塊的最大問題是性能遠(yuǎn)低于 PyTorch 原生算子。因?yàn)檫@里為了教學(xué)把 forward 和 backward 的中間張量都保存在內(nèi)存中也沒有做算子融合。如果是大型模型訓(xùn)練這種寫法會(huì)占用大量顯存。觀察資源使用可以這樣寫import time import psutil x torch.randn(4, 128, 256) linear LinearLayer(256, 256) # warmup linear.forward(x) t0 time.time() for _ in range(10): out linear.forward(x) _, _, _ linear.backward(torch.randn_like(out)) t1 time.time() print(平均耗時(shí):, (t1 - t0) / 10) mem psutil.Process().memory_info().rss / 1024 / 1024 print(當(dāng)前內(nèi)存占用 MB:, mem)如果訓(xùn)練時(shí)顯存不足有幾種通用降載方法減小 batch size減小序列長度降低 d_model 和 n_heads把不必要的中間變量從 forward 中移出例如 forward 結(jié)束后只保留反向需要用到的張量不保存完整 attention 矩陣對大模型訓(xùn)練改用半精度或混合精度。從性能觀察的角度說手寫版的價(jià)值不在于快而在于你能清楚看到每個(gè)操作的時(shí)間和空間開銷。這也是理解后續(xù) FlashAttention 為什么要合并算子、減少訪存的起點(diǎn)。8. 常見問題與排查方法問題現(xiàn)象可能原因排查方式解決方案gradcheck 一直報(bào)錯(cuò)沒有開啟 float64檢查輸入張量和參數(shù) dtype全部轉(zhuǎn)成torch.float64Linear 反向維度報(bào)錯(cuò)dW寫成grad_output.T x打印x.shape、grad_output.shape改為x.T grad_outputEmbedding 梯度全部為 0查表后沒有保存 token 索引檢查forward是否保存self.tokens在 forward 中保存輸入 tokenloss 不下降學(xué)習(xí)率不合適或初始化方差太小打印梯度均值、方差調(diào)大 learning rate 或改用 GPT initloss 出現(xiàn) NaN初始化方差太大或 Attention 沒有縮放打印 logits 是否存在 inf使用sqrt(d_head)縮放減小初始化方差LayerNorm 反向公式缺項(xiàng)忘記處理 mean 和 var 的依賴用 gradcheck 定位使用包含dy.mean與dy*x_hat項(xiàng)的簡化公式Attention 維度 reshape 錯(cuò)誤Q、K、V 的 view/transpose 順序不對打印q.shape、k.shape、scores.shape先 view 成[B, T, n_heads, head_dim]再 transpose 成[B, n_heads, T, head_dim]CPU 訓(xùn)練太慢batch size / 序列長度偏大用 time 統(tǒng)計(jì) forward/backward 耗時(shí)減小 batch size 和 seq_len從上表能看出手寫 Transformer 的大部分報(bào)錯(cuò)都集中在維度形狀和梯度公式上。我的建議是遇到問題不要直接搜答案先打印梯度的 shape 和數(shù)值范圍往往能更快定位。9. 最佳實(shí)踐與使用建議寫手寫 Transformer 項(xiàng)目時(shí)有幾條通用的工程建議值得遵守。第一按層拆分文件。不要把所有自定義層堆在一個(gè) Python 文件里。按linear.py、embedding.py、layernorm.py、attention.py拆分每層只做一件事調(diào)試時(shí)直接定位對應(yīng)文件。第二每寫一層就立即驗(yàn)證一層。不要等到所有模塊寫完了再驗(yàn)證。驗(yàn)證工具就是torch.autograd.gradcheck它比任何肉眼觀察都可靠。每層驗(yàn)證通過之后再進(jìn)入下一步。第三先跑最小配置。第一個(gè)實(shí)驗(yàn)建議使用vocab_size64、d_model32、n_heads4、batch_size2、seq_len8。這么小的配置可以在幾秒內(nèi)完成完整訓(xùn)練循環(huán)。如果最小配置都能跑通再逐步放大。第四保留一個(gè) baseline 對照。用 PyTorch 官方nn.Linear、nn.Embedding或nn.TransformerEncoder實(shí)現(xiàn)同樣的網(wǎng)絡(luò)不斷對比前向輸出和梯度。這樣能快速排除“手寫層寫錯(cuò)”和“訓(xùn)練邏輯寫錯(cuò)”兩類問題。第五模型文件、訓(xùn)練代碼和測試代碼分目錄管理。避免把臨時(shí)調(diào)試代碼和正式代碼混在一起。如果你要批量跑初始化實(shí)驗(yàn)建議加一個(gè)配置字典或者命令行參數(shù)。第六涉及真實(shí)數(shù)據(jù)時(shí)注意合規(guī)。本文教學(xué)項(xiàng)目只需要隨機(jī) token 或自己構(gòu)造的玩具數(shù)據(jù)不需要真實(shí)文本。如果后續(xù)擴(kuò)展項(xiàng)目需要真實(shí)語料務(wù)必確認(rèn)數(shù)據(jù)來源合法、授權(quán)完整不涉及個(gè)人隱私和版權(quán)內(nèi)容。10. 總結(jié)與下一步這個(gè)手寫項(xiàng)目最值得驗(yàn)證的功能就是“參數(shù)初始化 手寫反向傳播”的組合。你先跑通一層 Linear 的 gradcheck再試一個(gè)最小 Transformer 的 loss 下降就會(huì)理解為什么Transformer的每一層都需要精心設(shè)計(jì)梯度通路。最容易踩的坑有三個(gè)Linear 反向里dW的維度順序、LayerNorm 反向里缺少歸一化依賴項(xiàng)、Attention 里的縮放因子。這三個(gè)坑只要踩過一個(gè)以后再看到類似報(bào)錯(cuò)就會(huì)很敏感。下一步建議做三件事第一給 MultiHeadAttention 也實(shí)現(xiàn)手寫 backward完整覆蓋所有模塊第二加入 causal mask讓 Attention 只能看到當(dāng)前位置之前的 token變成一個(gè)真正的自回歸語言模型第三把學(xué)到的參數(shù)初始化經(jīng)驗(yàn)搬到一個(gè)小型文本數(shù)據(jù)集上觀察 loss 曲線在不同 init 和 learning rate 下的表現(xiàn)。做完這三步你對 Transformer 的掌握就不再停留在“會(huì)用層”的層面而是真正進(jìn)入了“能寫層”的階段。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91精品丝袜久久久久久无码人妻| 九九色综合| 日韩不卡网操逼中文字幕日韩| 国产精品亚洲美女久久久久| 自拍偷拍 日韩欧美| 四虎视频在线观看| 亚洲欧洲小说图片视频 | 91精品人| 久操凹凸视频| 襙一襙| 中文字幕无码不卡啪啪| 99色日| 夜夜嗨一区二区| 色哟哟511老熟女| 91五十路| 嗯嗯不要 视频| 中文幕97| 精品久久久不卡一区二区| 精品丰满人妻一区二区三区免费观| 天天色黄色影院天天操| 最新av网站在线观看| 91色色网站| 亚洲三级。日韩三级| 亚洲 另类 丝袜 自拍 动漫| 精品十三区| 精品久久久九九九孕妇| 国产青一二三| 99re69| 亚洲最大的黄色电影网站。| 久久9 9 9精品| 亚洲日韩肥臀视频在线观看| 又黄又爽在线观看视频| 女优免费一区二区永久| AA丁香综合激情| 免费观看的黄色的网站| 99久久久er直播网址| 欧亚性爱在线视频| 中文字幕一区二区三区高清| 一起草精品人妻| 99久久婷婷丁香| 精品国产一区二区三区香蕉欧美| 亚洲天堂一区二区久久| 夜色AV无码手机在线影院| 在线色导航| 久久亚洲欧美中文字幕国语| 91三级理论片播放器| 久久久亚洲欧美综合| 欧美操逼熟女| 在线 制服丝袜中出 人妻| 精品一区二区啪啪啪| 国产在线不卡导航| 亚洲限制级| 亚洲drav色图| 国产一二三在线视频五十路| 亚洲久久久久| WWW啪啪的com| 操我无码| 伊人激情| 亚洲色天堂九9| 欧美日韩另类激情图片| 国产h小视频在线观看免费| 久久曰曰| 东北女人av| 青青草在线视频人人想人人上| 91网亚洲| 超碰一区二区| 玖玖爱影院| 天天色黄色影院天天操| 高清在线偷拍自拍视频| 东北黄色电影| 97爱啪| 在线中文字幕视频| 天天日B夜夜干B时时操B| 婷婷五月天小说| 麻豆黄色五月天| 亚洲的天堂网| 亚洲情欲| 丁香五月激情综合国产| 蜜桃精久三区| 一区二区三区美女超清| 欧美日韩99| 久久亚州高清| 亚洲天堂精品日韩电影| 激情久久av一区av二区av| 91oumei| 天美传媒AV国产在线| 青青草原伊人网| 久久久久久69国产一区二区| 操91| 免费精品无码一级毛片牛牛影视 | 啪啪一区| 果冻传媒A片一二三区| 色欧洲| aaaa黄片| SUV一区二区在线看| 91中文字幕| 蜜乳AV网址| 伊人国产视频| 综合av社区| 五月天婷婷欧美三区| 亚洲女人毛茸茸91| 手机在线中文字幕国产| 欧美性,亚州色| 亚洲男人天堂手机版| 亚欧无码在线| 亚拍在线| 欧美自拍偷拍免费观看| 欧美亚洲涩涩| 国内精品久久人妻性色av| 美日韩成人| 操淫穴亚洲五月丁香 | 久久深夜无码| 秋霞操逼片| 中文字幕老熟妇黄色视频| 狠狠入| 日本一级性爱| 97鸡把在线视频| 免费一级毛片在线视频观看| 丰满美女一级毛片在线播放| 久久久工口| 啊啊啊啊啊啊啊啊视频| 狠狠中文字幕| 少妇综合网| 四虎AV无码| 综合97| 亚洲国产综合久久久性感熟妇| 色香欲影| 亚洲天堂另类小说男人| 制度丝袜99| 国产成人精品午夜福利| 亚洲强奸乱伦影视网| 亚洲极品| 蜜桃臀av在线观看| 超碰97欧美| 色哟哟-国产专区| 四虎国产精品永久在线囯在线 | 91成人无码| 久久午夜伦| 国内外内射高清视频| 欧美精品人妻视频| 琪琪精品免费一区二区三区| 亚洲激情视频| 好吊色一区| 亚洲色图欧美色图日韩色图| 欧美草草高清日韩视频| 夜夜操91744565| 日本Xx性爱| 精品无人区麻豆乱码1区2区图片| 国产日韩精品一区二区三区| 黄色区免费观看中文字幕| 日本性一区| 色婷婷亚洲婷婷| 99999精品| 免费人人搞97| 日本在线视频导航| 丁香婷婷五月| 婷婷激情丁香| 久久精品72| 亞洲久久直播| 欧美色人| 成人情色综合网| 综合国产97| 嗯啊视频免费在线观看| 九九热av| 日本一久是| 亚州伊人色综台| 国产一区在线观看无码AV| 91美女视频。| 啊啊啊啊啊啊啊啊要喷了| 色色激情| 国产AV毛片| 大香蕉99999| 欧美 亚洲 91| 一区=区三区视频| 99热99色| 乱伦av麻豆| 97亚洲精品超碰| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 九九九九久久久| 久久久久久人妻一区精品色欧美| 日韩肏逼视频| 91青青草| 欧美情色亚洲| 久久久精品视频欧州站| 久久中出在线| 欧美后入视频| 日韩三级在线观看mp4| 91精品久久久久久综合五月天| 免费久久一级毛片大黄| 精品少妇999| 后入福利| 超清中文乱码字幕| 国产又黄又爽| 四虎在线观看视频| 亚洲图片第一页| 激情另类激情| 久久久亚洲精品中文字幕人妻| 天天日天天屌天天操| 欧美色三级片91| 日韩电影天堂视频二区三区| 日韩有码 一区二区三区| wwwss在线观看| 国产亚洲美日韩Aⅴ中文字幕无码成人| 国产60页| 亚洲影院365| 欧美不在线| 国产农村妇女毛片精品久久| 欧美淫乱视频| 久久这里只有精品9| 少妇熟女一区二区三区| 98人妻精品一区二区色欲| 97超碰超碰| 欧美色乱| 午夜视频黄| 国产精品福利资源在线尤物| AV麻豆免费一区| 久久只有精品| 91av一区二区在线观看| 丰满岳乱妇一区二区三区| 青青操综合网| 无码伊人久久大杳蕉中文无码| 国产又色又爽又舒服的三级视频| 久久9精品视频| 国产原创精品| 一区二区三区男人的天堂| 欧美性少妇| 91免费看中出视频| 国产免费一区2区3区| 国产强奸乱伦欧美| 九月丁香综合网| 人人透人人操| 国产免费大片| 老熟女综合网| 午夜啪| 国产一区二区三区白丝| 国产精品99久久久www| 成人综合久久精品色婷婷| 丁香六月婷婷久久综合| 亚洲AV永久无码精品成人调教| 易易A毛视频| 欧美精品成人一区二区在线观看| 最好看的中文字幕在线2018| 激情丁香五月婷婷| 欧洲小说色图视频另类| 青草一区二区| 色狠狠 - 百度| 天天做日日爱夜夜爽| 婷婷五月天成人| 熟妇熟女一区二三区| 97超碰在线资源网站| 97久操| 国产精品探花色| 色香色欲天天综合网天天来吧| 欧美午夜精品久久久久久3D| 九七人妻在线| 一级性爱啪啪视频| 发朗少妇买婬全视频中文| 伊人国产视频| 精品无码久久久久久久久果冻糖心| 国产亚洲精品无码三区| 啊…啊…操我用力操我| 国产情色在线| 一二三四视频中文字幕在线看| 91超碰人人操| 欧亚日韩综合精品国产| 尤物视频视频官网| 夜夜爽爽爽| 久久久91福利姬| 白丝被操91| www.夜夜操| 天天综合站| 久久久久久久国产视频| 日本精品88888888| 三久久久四久久久久| 国产69精品久久久久99尤物| 天天看特黄的免费网站| 成人羞羞视频国产| 日韩免费人妻色情网站| 成人性交午夜免费片| 亚洲av乱伦色图网站| 乱子伦一区二区三区国产精品| 精品九九九九| av操操不卡| 精品免费一区| 麻豆亚洲Av成人无码一区精品| 国产在线激情| 伊人影院中文字幕| 色激情综合网站| 婷婷五月天激情网| 亚洲国产成人综合碰碰三级经典| 夜夜爽妓女| 欧美第二页| 色97| 肉动漫无遮挡h在线观看| 鲁鲁色综合网| 国产精品直播在线观看直播| 欧美少妇内射| 九月激情婷婷| 色哟哟AV| 91九九| 欧美色综合网| 亚州精品丝袜-不卡成人免费| 78久久| 欧美一区91大爱| 亚洲欧美黄| 婷婷国产精品九区| 国模无码人体一区二区三| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 韩国嫰模上门援交视频| 91久热| 91 丝袜在线播放| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | julia高潮后不停追击中出| 91国模| 国产人伦精品一区二区三区| 欧美一区二区观看在线| 大香蕉久久| 亚洲男人的天堂AV| 97任你吞精| 精品九区| 夜夜欢天天干| 亚洲综合小视频小说在线观看| 国产精品日韩在线一区| 国产精品69久久久久久久| 激情五月综合网| 人妻另类 专区 欧美 制服| 久久人妇| 四虎永久在线精品免费网址| 91c色| 97在线视频免费看| 91久久堂| 亚欧精品久久久久久久久久久| www.亚洲黄色| 久久99干一本高清| 欧美精品偷拍| 91在线页| 911粉嫩人妻| 国产一区二区三区高清视频| 亚洲精品蜜桃久久久| 青青草亚洲一区| 8050无码八戒| 26uuu久久| 中字一区| 久草资源在线视频官方总站日韩丝袜美腿| 欧美性爱视频免费一区一A| 国产精品香蕉| 一二三区视频在线观看| 小骚逼被操的爽不爽| 嗯嗯啊中文字幕| 国产呦精品一区二区三区下载| 久久神马| 亚洲性高潮| 天天综合网亚洲综合网| 国产中文福利| 亚洲欧洲视频小说在线观看| 日本免费亚洲欧美| 综合五月婷婷亚洲一区| 日本精品网站在线中文| 成人线上超碰| 国产精品久久久久久久久久久久久久吹| 欧美 牲| 天天综合亚在线| 女人被添高潮免费视频| 国产真实野战在线视频| 18禁中文字幕| 欧美十八禁导航成人| 最新av中文字幕高清| 国内伊人久久久久久网站视频| a啊啊啊啊啊啊啊啊一区二区| 欧美久久久| 夜草欧美| 伦理弟一页| 天美精品一区二区三区四区在线观看| 校园春色亚洲欧洲| 啊啊啊快操我视频| 夜精品久无码| 国产夫妻性生活视频| 少妇色综合| 欧美性爱网97| 啊嗯嗯啊好大好爽| 超碰在线综合97| 强乱老妇中文字幕| 亚洲人综合19| 国产高清午夜成人在线观看| 人人看人人插| 日韩激情小说一区二区| 亚洲av影音先锋| 老女人日韩美91| 91国产精品在线看| A啊啊在线观看| 亚洲精品1区| 九九九九欧美| 久超碰这里只有精品| 欧美第五页| 天堂亚洲欧美| 国产粉嫩蜜臀av一区二区三区| 天天干天天操天天操夜夜操天天操| 天天看天天日天天操| 欧亚无码视频| 操逼1区| 狠狠爱综合网| 中文字幕一区二区三区蜜臀| 国产精品久久久999| 久久人妻无码毛片A片麻豆| 亚洲精品黑丝| 久久久无码视频| 色色色日本| 1769一区二区| 欧美日韩情色一区二区| 98福利在线视频| 欧美亚洲在线| 俺去啦俺来也久久综合 | 亚洲丝袜B诱惑| 亚洲日韩久久精品一区| 亚洲成人贴图| 草草网站影院白丝内射| 天天综合网~69| 2017大香蕉国产精品久久| 97超碰中文字幕| 91亚洲在线| 东京热男人的天堂精品| 97资源超碰| 欧美性视频二区三区| 国产综合久久久麻桃个| 青娱乐国产精品| 亚洲图片 91| 91超碰在线播放| 亚洲在线91| 国产精品久久久久久无码红治院| 九色97| 97精品视频在线播放| 欧美色青| **一级毛片国产| 精品九九九九九九九| 啊啊啊啊好多水| 最新亚洲人成网站在线影院| 91蜜臀在线久久久久| 99精品高潮| 12一15性XXXX粉嫩国产| 五月婷婷综合网| 少妇丝袜在线观看AV| 欧美夜夜草视频| 曰韩av中文字幕专区| 亚洲第一二区另类图| 偷拍 亚洲 欧美| 午夜男女爽爽爽在线视频| 97超碰在线资源网站| 午夜精品久久久| 久久久久9999| 99最新日韩偷拍视频| 黄色av网站在线播放| 欧美|91色综合| 天天干人妻视频| 国产男人又猛又粗又爽| 情侣操 逼视频99| 午夜天堂啪啪| 亚洲涩图欧美| 亚洲成人一区二区精品| 激情综合网一盗摄| 天天看天天在线精品| 免费9 1久久| 天天躁日日躁狠狠躁| 激情网五月天| 清纯唯美综合| 色色婷| 美女高潮国产高清| 激情四射婷婷四五月天| 精品999999| 九月丁香婷婷| 色综合一本| 日本精品国产视频| 久久精品国产AV一区二区三区| 三级片大波波| 以及麻豆国产入口在线观看免费| 加勒比日本在线| 久久受www免费人成| 久久人爽| 激情看片网站| 91视频综合| 欧美 青青草| 天天色天天干天天射| 玖玖草久草99蜜月一区二区三区| JIZZJIZZ国产精品喷水| 国产成人精品网站| 久久久工口| 亚洲欧洲中文日韩女优乱码| 亚州高清色综合| 99久久久久久久久| 大香蕉草草| 久久色人体| 99亚洲精品| 4虎在线视频| 久热超碰| 看免费的黄片| 啊啊啊在线看| 少妇蜜汁| 伊人黄色视频免费观看| 国产精品女aA片爽爽视频| 久久精品老司| 国内毛片免费h片在线| 欧美色图 色综合图| 美女97超碰| 日韩中文字幕视频在线观看| 天天噜| 91超碰碰在线| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 我爱操| 桃色六月天| 被体育老师抱着c到高潮| 欧美高清第一页| 欧美影音在线| 97青青操视频| 久久久久9| 日本色色视频网站| 91欧美色| 色香网| 丝袜综合| 91xingse| 久久曰曰| 精品一区二区人妖| 免费av高清无码| 一二三区视频在线观看| 九七人妻在线| 天天综合网1| 狠狠中文字幕| 欧美影音在线| 成人资源中文字幕在线观看天天| 自拍偷拍 日韩无码| 国产视频一区二区三区在线免费观看| 欧美亚洲中文字幕| 91网站18+| 丰满少妇高潮无码| 欧色综合| 91女人的网站| 懂色AV一区二区三区| 综合久久中文字幕综合日韩精品 | 超碰这里只有精品| 少妇一区二区三区在线观看| 日本精品一区三区| 婷婷色网| 99热精品在线播放| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 丝袜av一区二区三区| 久久天天摸| 丁香六月综合激情| 亚洲另类在线观看| 99碰碰| 日韩不卡av一二三| 久久欧美性爱视频| 日本肉体xxxx裸交| 国产超碰| 天天拍天天操| 久久香蕉国产传媒一区剧情天美| 亚洲操操操| 九九碰九九爱97超碰| 大香蕉综合在线| 97香蕉碰碰人妻国产欧美| 国产福利影视| 九九99精品| 九九激情网| 操久久久久久| 欧美九九爱| 中文字幕在线观看AV| 国产精品小视频一区二区三区| 国内91熟女人妻丝袜天天精品视频在线 | 男人兔费天堂| 麻豆AV一区二区| 久久夜色一区二区| AV中文字幕剧情1区2区3| 久9久精品视频| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 日本免费一区二区不卡| 男生通女生屁股| 91色狼| 久久久久久99AV无码免费网站| 人妻性爱一区二区| 丰满高潮18xxxx| 丁香五月天堂| 97色欧州| #NAME?| 日日爱99| 日韩欧美tv一区二区在线观看| 国产精品自拍欧美在线| 久久久人体| 欧美日韩精品国产91| 中文字幕av片| 日本精品五区| 久久夜黄色无码A级大片| av资源在线观看少妇| 久久久久久中文字幕中文字幕最新| 欧美综合第一| 久久久一区二区三区麻豆| 精品免费视频国产一区| 亚洲砖码砖专无区2023| 69超碰综合| 91 亚洲情侣偷拍 久久| 91成人无码| 美女诱惑1区2区| 中文字幕综合人妻| 亚洲97综| A片 AV一级在线播放观看免费 | 日躁天天爽爽| 亚洲欧美国产成人综合不卡| 日韩美脚一区二区网站| 台湾佬中文娱乐网久久久久久久久久com| 亚洲欧美碰碰| 日本一区二区不卡精品| 成人网欧美风情| 老司机香蕉久久久久| 在线播放一级无码视频| 综合色图亚洲欧美| 高潮9999外国| 日va操| 欧美 传媒 麻豆 日韩 偷拍| 992视频一区| 欧美激情中文字幕另类小说| 性老妇一区二区三区| 另类图片综合| 很很干很很操| av2014 日韩在线中文字幕| 久久首页| 日本日日色视频| 99人妻| 大香蕉久久| 99精品丰满人妻无码| AV和黑人在线播放| yazhousetuoumei| 中文字幕97| 伊人91| 亚洲综合草草| 国产精品探花视频| 欧美性天天影院| 国产黄色影片在线观看| 欧美高清第一页| 久久久久久久9最新免费视频观看| 日本天堂网| 欧美一级做a爰片免费视频| 国产Aα| 久久久久久中文| 亚洲啪啪综合?v一区综合精品区| 色婷婷久久| 蜜臀网址在线| 色色色999| 99re这里只有精品2| 亚洲码专区| 欧美九一精品久久久熟妇| 思思在线免费视频| 亚洲欧美综合网站| 人人摸人人叼| 人妻激情视频| 涩五月婷婷| 日韩十八禁| 亚洲色图超碰在线| 明星性猛交ⅹxxx乱大交| 亚洲夜色在线| 日本羞羞的视频在线播放| 亚洲成人一二三区| 97人人夜夜精品视频| 动漫av中文| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 久久的免费性爱视频| 欧洲免费一区二| 国产丝袜美女在线一区| 亚洲日韩乱码中文无码蜜桃臀网站| 日韩欧美午夜一区二区| 丝袜内射| 五十路六十路七十路熟婆| 欧美少妇高潮久久91| 中文字幕成人理论在线| 欧美性色网| 99国产天美| 国产三级多多影院2022国产AA一级毛片无码 | 久久老女人| 欧美日韩国产电影| 5月婷婷6月六月丁香| 伊人网高清| 久久av网| 亚洲成?V人片在线观看福利| 97在线视频免费观看| 91高跟美女在线播放| 亚洲一区二区三区欧美日韩| 97干在线视频| aaa淫乱视频| 在线视频免费播放一区| 男人天堂新在线| 亚洲精品欧洲精品| 日本日皮视频逼| 色在线视频导航| 麻豆传媒一区二区在线观看| 99热免费| 美女写真| 极品销魂美女一区二区 | 老熟妇91| 国产女人9999| 欧美性爱97超碰| 亚洲超碰AV| 狠狠婷婷亚洲中文综合久久| 欧美激情一| 国产极品999| 国产AV久久久蜜爱影集| 欧美成人A√在线一区二区| 美女91网址 | 亚洲精品天堂久久A∨51成人漫| 快播久久人人aV| 欧美激情超碰777| 婷婷99| 91成人久久| 国产精品一二三区18| 久久99干一本高清| 蜜桃精品视频一区| 蜜桃久久久久久| 天天操夜夜操| 欧美一区二区观看在线| 三级精品三级在线观看| 日韩少妇无码| 久久久久熟女| 蜜臀av中文字幕| 久久 亚洲 日韩 人妻| 天美传媒国产原创中文字幕亚洲欧美另类 | 后入人妻无码| 久久妇| 福利天堂| 91熟女综合| 无码一区二区三区四区五区六区七区八区九区十区视频 | 国产亚洲精品自在线亚洲情侣| 国产强奸乱伦xd| 欧美黄色手机在线观看| 国产精品日日摸夜夜添骚逼| 综合色区偷拍| 色欧美在线| 青青草五月份天| 啊啊啊轻点在线观看| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 屁股久久久久久| 亚洲女人91| 麻豆91熟妇人妻中文字幕茄子| 欧美日韩不卡传媒| 亚洲天堂少妇| 后入合集| 久久岛国| 久久精品一区二区| 人妻少妇久久中文字幕一区二区 麻豆| 成人青青草原伊人| 欧美色另类| 91熟女丨老女人| 精品久| 日本在线观看网址| 欧美特大AA级黄片| 91碰超| 亚欧成人中文字幕一区| 破苞ⅩXXX性无码动漫无码| 国产女生在线| 丁香激情网| 91男女啊啊啊| 久久精品老司| 尤物视频偷拍免费| 亚洲中文sv| 东北女人操逼| 日韩黄色av中文字幕| 无码人妻丰满热妇又大又粗| 亚洲欧洲网站免费观看| 日日日日日| 中文字幕版| 欧美亚洲综合999| 91M一社| 国产老太乱伦一区| 国产女乱淫真高清免费视频| 久久男女激情视频网站| 亚洲午夜免费狠狠干| 天天亚洲综合| 亚洲AV不卡在线观看| 综合色欧美| 十八禁视频一区二区| 国产AV激情无码久久无码| 99啪啪视频| 在线综合 亚洲 欧美中文字幕| 中文字幕神马久久| 超碰色图| 26uuu性物| 丁香五月天啪啪| 北京美女一区二区| 亚洲人妻色图| 欧美伊人久久综合网| 久久婷婷影院| 熟女欧美日韩综合婷婷| 99re99在线视频| 富女玩鸭子一级毛片| 日本123区操B视频| 曰本熟女视频| 亚洲高清综合网| www.av在线视频| 欧美亚洲玖玖玖| 啊啊啊啊啊啊啊网址在线观看| 春色91| 国产精品久久久久久久黄无码 | 思思热一热婷婷热一热| 亚洲五月丁香花狠狠干一区二区三区| 日韩钢筋无码高清啾啾啾| 婷婷8月天青娱乐| 免费一级黄色录像影片| 色噜噜综合在线| 老熟妇一区二区三区| 日本潮催一卡操| 日日夜夜狠狠| 校园春色家庭伦理欧美激情| 麻豆国产视频精品观看| 大香蕉亚洲中文| 亚洲AV不卡在线观看| 飘花国产午夜精品不卡| 超AV色女| 91熟女网| 九九色影院| 欧美亚洲成人在线一区二区三区| 天天干天天操天天操夜夜操天天操 | 97色欧州| 绯色一区二区三区不卡少妇 | 岛国不卡超碰护士AV在线播放| 欧美v日韩v亚洲v最新在线| 99啪啪| 9美女超碰在线免费观看| 欧美亚洲色图另类国产| 亚洲永久永久永久永久一级一级一级精品| 97久久综合网| 免费看欧美美女黄色大片| 91精品婷婷国产综合久久竹菊| 国产在线能看的你懂的| 鲁鲁色综合网| 少妇色| 欧美男女午夜啪啪| 神马久久久久| 婷婷四五区| 操逼操逼操| 天天透伊人| 日本久久女同性恋视频| 久久久久日本视| 亚洲欧洲成人在线电影| 中文字幕55555| 国产精品久久久久久高清无码免费看| 91人人看| 日本高清免费一本视频在线观看| 婷婷色香| 丁香六月激情| 黄色一区三区| 五月丁香综合啪啪| 男同专区一区二区三区在线| 乱精品一区字幕二区| 另类图片天天影视| 嗯嗯啊啊用力视频免费| 翔田千里A片一区二区| 91亚州欧美| 不卡一区二区日本视频| 伊人视频| 午夜精品久久久久久久男人的天堂| 性91| 精品97精品97| 一区二区影院| 日天天九九天堂666| 少妇 综合| 无码直播久久久| 超碰免费欧美7| 9久久精品| 熟女探花啪啪| 中文字幕神马久久| 色婷婷导航| 屁股久久久久久| 神马午夜久久久| 91精品国产高清久久久久久,亚洲成人| 噜噜噜亚洲精| 精品人妻二区三区| 无码高清专| 97爱综合| 91精产一区二区三区| 天天插天天插| 91精品久久久| 亚洲色性| 91l欧美在线| 超碰99热| 日本性爱欧美性爱| 一卡二卡在线播放| 日韩av三四区| 久久久久久久久久8888| 翔田千里无码一区| 国产后入式在线观看| 69综合网| 丁香啪啪| 色狠狠 - 百度| 亚洲人妻日日日| 91久久久老司机| 啊…啊…操我用力操我| 久久久久亚洲?V片无码V| 丝袜AV一区二区三区| 亚洲国产青青| 激情图片伦理国产一区二区日韩| 伊人五月天| 九九精品无码专区免费| 9 1果冻精品视频| 欧美亚洲高清不卡| 日韩美女久久一区二区三区| 自拍偷拍2025在线观看| 国内精品a| 日韩综合色图| 91模特在线观看| 97超碰资源网| 人妻出轨一区二区三区| 成人夜夜爽| 亚洲色图殴美色图激情乱伦| 一级性爱啪啪视频| 大JI巴好深好爽又大又粗视频| 夜夜嗨一区二区三区三州加勒比 | 天天操天天射天天日| 久久九色| 78操B| 日本ZZ高免费A级视频| 久久精品视| 国产精品suv一区| 97人人中文网| 久久久工口| 色蜜AV| 五月丁香六月| 欧美色五月| 日韩操人| 婷婷五月天影院| 人妻-91porn| 国产精品自在线发布| 很黄很色的视频在线观看| 国产欧美在线观看免费观看| 中文字幕一二三| 日韩大香蕉AV影片| 五月天婷婷社区| 大香蕉性欧美| 91N综合网| 99热精品在线观看| 日韩性色| 91亚洲人| 丰满人妻一区二区三区色-百度| 久久精品超碰| 97超碰欧美手机| 91制服丝袜中文字幕| 91高潮| 日本熟妇浓毛hdsex| 天天日天天操天天射河南省| 欧美精品宗合| 国产在线综合网| 操啊国产| a一区二区三区乱码在线| 国产一级特黄大片处女| 精品人妻av在线播放| 韩国午夜理伦三级好看| 国产小视频91| 三级片网站在线播放| 日本三级大片| 青青草日逼视频| 人人澡综合涩| 超碰到97情色| 亚洲资源一区| 视频国产欧美在线播放| 18禁免费视频| 亚洲蜜桃V妇女| 五月婷婷激情网| 国产自产91区13区| 欧美91网站| 99超碰网| 久久大| 手机在线播放国产福利| 综合色啪| 日本精品88888888| 成人精品视频| 久久久久白虎| 色视频蜜乳| 黄色区免费观看中文字幕| 凹凸视频特色日本特黄| 久久久久久久久久久久久9999| 色大师网站www永久网站视频| 91美女高潮| 亚洲欧美另类图片| 午夜一级免费毛片| 99热自拍| www.高清无码诱惑一区.com| 青青草导航在线视频| 91天天| 亚洲色图亚洲无码强奸乱伦| 欧美日不卡| 久色99999| 亚洲丝袜诱惑| 欧美大香蕉专区网| 91欧美高清| 国产精品粉嫩福利在线| 中国一级αV| 五月丁香社区婷婷日韩欧美精品影院| 欧美性爱97超碰| 香蕉色网| 亚洲麻豆av一区二区| 在线强奷到舒服的无码视频| 人妻一区二区三区| 97在线播放| 黑人白女精品一区| 天天欧美色| 91综合天天看| 国产免a费看黄片在线| 男人天堂2019亚洲| 国产日韩中文字幕欧美| 人人干黄色| 99在线免费视频| 久久精品男人的天堂| 天堂69亚洲精品中文字| 九九热精品| 夜夜免费视频| 免费av在线播放二区| 天天欧美欧美亚洲网| 夜夜夜夜爽| 国产成人精品必看| 91xingse| 婷婷午夜清品久久久久久久性色视频观| 无码黑人精品一区二区三区三| WWW4虎| 野狼福利社区| 六月丁香婷| 九九久精品| 一区操逼日比视频| 高跟伊人julia ann| 日韩欧美福利视频看看| 九九九九久久久| 校园春色 亚洲| 久久久夜夜嗨免费视频| 久久人妻无码毛片A片麻豆| 国产家庭乱伦性爱视频| 国产白嫩精品久久| 美女裸体无遮挡永久免费观看网站| 99国产人成精品| 一本色道人妻久久| 99精品热| 久九九九九九九九热| 97人人干人人操| 精品少妇高潮久久| 粉嫩在线一区二区懂色| 欧美九一精品久久久熟妇| 日韩 欧美 视频 在线 一区| 97一本大道亚洲一区| 国产女人高潮嗷嗷嗷叫小说 | 久久免费少妇| 欧美黑人XXXⅩ高潮交| 精品午夜福利| 小草精彩毛片| www.av家庭乱伦| 美女的肌被草喷水视频| 被男人吃奶很爽的毛片| 国产熟妇一区二区| 99在线无码精品秘 入口黑人| 校园春色中文字幕AV| 大香网站| 91色欧美| 开心激情站| 私人尤物在线精品不卡| 粉嫩国产精品久久久| 日韩av不卡在线看| 国产精品午夜精品| 国产67194| 97视频在线看| 目产99999久久999| 国产第25页在线观看| 99在线观看视频在线高清| 精品人妻伦一二三区久久| 麻豆美女丝袜人妻中文| 天天舔九色婷婷| 国产成人手机视频激情| 正宗无毛一线天嫩逼| 色嘟嘟人妻天堂网| 尹人免费观看视频在线| 啊啊啊啊啊啊啊啊啊在线观看| 成人三级片无码| 九色黄站| www.男人天堂| 色狠狠综合| 超碰免费人妻人人| 五月天欧美色图| 天美传媒av 在线| 亚洲熟女性高潮久久久| 亚洲色欧| 久久欧洲| 婷婷伊人网| 成人性爱免费播放| 伊人嫩草| 偷拍 精品 另类 四区| 综合 欧美 亚洲 日本| 久久久久99精品成人片蜜臀| 狠狠操一区二区| 欧美很很操视频| 黑人精品XXX一区一二区| 九草九九九| 欧美丝袜激情| 五月激情啪啪| 日韩激情毛片一级久久久| 91免费看中出视频| 天天综合欧美综合| 亚洲人妻av| 一类无码操逼视频| 久操视频在线观看| 舔舔啊| 婷婷情色五月天| 日韩精品 资源| 国产黄色 A 片免费看| 白嫩少妇| 97伊人超碰| 欧美少妇性乱| 久久久久久亚洲精品中文字幕人妻| xxx0国产在线播放| 看免费一级在线播放毛片| 最新制服中文第一页| 欧美大片一区二区三区| 不卡九肏| 大香蕉男女超碰精品在线| 亚洲一欧洲中文字幕在线| 久久精品国产亚洲5555| 99热婷婷一区二区三| 日本熟妇精品九九| 97久久久精品| 久久精品免费| 丁香五月天堂网| 日本日皮视频逼| 日韩亚洲中文字幕在线| 亚洲黄色视频在线观看视频| 精…码一二三区| 亚州性色| www男人天堂| 四虎免费在线播放| 欧美综合狠| 天天拍天| 日韩欧美中文字| 久久超碰98| 亚洲大色堂| 色老汉色| 欧美爆操91| 91色鬼| 色老汉色| 午夜啊啊啊| 亚洲欧美日韩有码| 久久久久久久78| 日本丝袜美腿人妻九九| 99re6国产精品99re在线| 白嫩嫩一区| 白丝1区2区3区| 亚洲情色婷婷五月天| 日本青青草在线| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 亚洲欧洲无码bt精品合集| 超碰97人妻| 日本乱人伦片中文三区| 欧美欧美啪啪视频| 日韩成人私密一级精品av| 日韩欧无码一区二区三区免费不卡 | 乱伦AVxx| 全球成人中文在线| 毛片电影一区二区三区| 激情色播| 97资源制服丝袜| 精品大久久| 日本不卡二三区| 91老熟女91老女人| 麻豆熟妇乱妇熟色A片在线看| 久久这里只|