色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

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

手寫Transformer核心模塊:從零實(shí)現(xiàn)Linear、Embedding與反向傳播 這次我們來(lái)看一項(xiàng)很多人學(xué)完 Transformer 但依然沒(méi)完全搞懂的事情不只是會(huì)調(diào)用nn.Transformer而是親手把 Linear Layer、Embedding Layer、參數(shù)初始化和反向傳播全部實(shí)現(xiàn)出來(lái)。本文對(duì)應(yīng)的場(chǎng)景是 Stanford CS 336 3.3也就是在課程作業(yè)中要求用最樸素的 PyTorch 張量操作搭建語(yǔ)言模型組件并通過(guò)梯度檢查驗(yàn)證手寫反向傳播的正確性。標(biāo)題里的四個(gè)關(guān)鍵詞其實(shí)就對(duì)應(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一帶而過(guò)那遇到 loss 不降、梯度 NaN、維度對(duì)不上這類問(wèn)題的時(shí)候往往只能瞎猜。自己手拼一遍之后很多報(bào)錯(cuò)一眼就能看出問(wèn)題。這篇文章會(huì)從零實(shí)現(xiàn)一個(gè)可訓(xùn)練的最小 Transformer包含前向傳播、手寫 backward、參數(shù)初始化、梯度驗(yàn)證最后在一個(gè)小模型上完成端到端訓(xùn)練測(cè)試。全程使用 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)說(shuō)明項(xiàng)目類型從零手寫 Transformer 核心模塊的教學(xué)實(shí)現(xiàn)來(lái)源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)通過(guò) torch.autograd.gradcheck 驗(yàn)證驗(yàn)證方式形狀測(cè)試、梯度對(duì)比、小模型端到端 loss 下降適合人群學(xué)習(xí) Transformer 原理、面試準(zhǔn)備、課程作業(yè)、源碼閱讀從表格可以看出這是一篇“先別用庫(kù)、先把原理跑通”的教程。它的核心產(chǎn)出不是一個(gè)大而全的訓(xùn)練框架而是一套你可以自己掌控每個(gè)張量形狀和每個(gè)梯度去向的最小實(shí)現(xiàn)。2. 適用場(chǎng)景與使用邊界手寫 Transformer 并不是為了讓 PyTorch 用戶拋棄官方 API。相反它適合在以下幾個(gè)場(chǎng)景里發(fā)揮作用第一課程作業(yè)或?qū)嶒?yàn)報(bào)告。CS 336 這類課程的核心目標(biāo)就是讓學(xué)生脫離高級(jí)封裝理解語(yǔ)言模型內(nèi)部到底發(fā)生了什么。自己實(shí)現(xiàn) Linear、Embedding、LayerNorm 之后再去看nn.TransformerEncoder的實(shí)現(xiàn)會(huì)明顯感覺到“圖層”不再是黑盒。第二算法面試準(zhǔn)備。很多公司面試會(huì)問(wèn)“Transformer 參數(shù)初始化為什么用 Xavier”“Embedding 梯度怎么回傳”“softmax 反向傳播的雅可比是什么”。這些問(wèn)題的答案不親手寫一遍很難講得清楚。第三源碼閱讀和二次開發(fā)。當(dāng)你想修改某一層的行為比如給 Attention 換成線性注意力或者把 LayerNorm 換成 RMSNorm如果只依賴高層 API往往不知道改哪里但手寫過(guò)底層模塊之后你能很快定位到具體實(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如果沒(méi)有 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ì)一次面對(duì)整個(gè)網(wǎng)絡(luò)。動(dòng)手之前還需要確認(rèn)三塊數(shù)學(xué)基礎(chǔ)矩陣乘法求導(dǎo)公式、鏈?zhǔn)椒▌t、softmax 的雅可比矩陣。不需要研究得很深但至少要知道對(duì)于一個(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ì)算單元公式很簡(jiǎn)單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)方法是對(duì)損失函數(shù)求 W 的偏導(dǎo)保持張量形狀對(duì)齊即可。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)榍跋驔](méi)有保存必要的中間變量。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_把梯度累加到對(duì)應(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)。也就是說(shuō)如果 embedding 矩陣初始化為N(0, 1)那么實(shí)際查表輸出要再乘一個(gè)sqrt(d_model)。這樣做的目的是讓輸入到 Attention 的向量范數(shù)不要太小避免 softmax 之前的所有點(diǎn)積都擠到極小值附近。GPT 風(fēng)格的大模型通常采用更小的初始化方差例如N(0, 0.02)。原因很簡(jiǎn)單模型層數(shù)越深殘差分支積累的隱狀態(tài)方差越大逐層用小方差初始化可以抑制這種累積。如果你在深層 Transformer 里發(fā)現(xiàn)訓(xùn)練初期 logits 出現(xiàn) NaN或者 loss 長(zhǎng)時(shí)間不下降首先排查初始化方差是否過(guò)大。下面給出一個(gè)簡(jiǎn)單的參數(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 梯度對(duì)比誤差在閾值內(nèi)就說(shuō)明反向傳播正確。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í)可以直接使用簡(jiǎn)化形式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)過(guò)程相當(dāng)經(jīng)典。核心思路是歸一化操作同時(shí)依賴mean和var所以dx中必須包含dy.mean以及dy * x_hat的均值項(xiàng)。很多人手寫 LayerNorm 反向時(shí)少了一項(xiàng)導(dǎo)致gradcheck一直不過(guò)幾乎都是這個(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. 功能測(cè)試與效果驗(yàn)證5.1 測(cè)試 Linear 前向形狀第一個(gè)測(cè)試很簡(jiǎn)單確認(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)如果這里形狀不對(duì)問(wèn)題幾乎一定出在W的定義方式上。W應(yīng)該是(in_features, out_features)這樣x W才能把最后一維從 64 映射到 128。5.2 測(cè)試 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 對(duì)應(yīng)位置梯度的累加。如果第 1 行或第 2 行也出現(xiàn)了不該有的梯度說(shuō)明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ù)初始化到反向傳播都沒(méi)有大問(wèn)題。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 沒(méi)有手寫 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)明顯下降說(shuō)明參數(shù)初始化、前向、反向、優(yōu)化器調(diào)度全部工作正常如果 loss 原地不動(dòng)優(yōu)先檢查學(xué)習(xí)率是否太大或者太小其次檢查初始化方差。6. 從“手寫層”到“接口化調(diào)用”批量實(shí)驗(yàn)與可復(fù)用設(shè)計(jì)這個(gè)項(xiàng)目沒(méi)有 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)最常見的場(chǎng)景是掃描不同初始化模式對(duì)收斂速度的影響??梢詫懸粋€(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. 資源占用與性能觀察手寫模塊的最大問(wèn)題是性能遠(yuǎn)低于 PyTorch 原生算子。因?yàn)檫@里為了教學(xué)把 forward 和 backward 的中間張量都保存在內(nèi)存中也沒(mé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減小序列長(zhǎng)度降低 d_model 和 n_heads把不必要的中間變量從 forward 中移出例如 forward 結(jié)束后只保留反向需要用到的張量不保存完整 attention 矩陣對(duì)大模型訓(xùn)練改用半精度或混合精度。從性能觀察的角度說(shuō)手寫版的價(jià)值不在于快而在于你能清楚看到每個(gè)操作的時(shí)間和空間開銷。這也是理解后續(xù) FlashAttention 為什么要合并算子、減少訪存的起點(diǎn)。8. 常見問(wèn)題與排查方法問(wèn)題現(xiàn)象可能原因排查方式解決方案gradcheck 一直報(bào)錯(cuò)沒(méi)有開啟 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查表后沒(méi)有保存 token 索引檢查forward是否保存self.tokens在 forward 中保存輸入 tokenloss 不下降學(xué)習(xí)率不合適或初始化方差太小打印梯度均值、方差調(diào)大 learning rate 或改用 GPT initloss 出現(xiàn) NaN初始化方差太大或 Attention 沒(méi)有縮放打印 logits 是否存在 inf使用sqrt(d_head)縮放減小初始化方差LayerNorm 反向公式缺項(xiàng)忘記處理 mean 和 var 的依賴用 gradcheck 定位使用包含dy.mean與dy*x_hat項(xiàng)的簡(jiǎn)化公式Attention 維度 reshape 錯(cuò)誤Q、K、V 的 view/transpose 順序不對(duì)打印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 / 序列長(zhǎng)度偏大用 time 統(tǒng)計(jì) forward/backward 耗時(shí)減小 batch size 和 seq_len從上表能看出手寫 Transformer 的大部分報(bào)錯(cuò)都集中在維度形狀和梯度公式上。我的建議是遇到問(wèn)題不要直接搜答案先打印梯度的 shape 和數(shù)值范圍往往能更快定位。9. 最佳實(shí)踐與使用建議寫手寫 Transformer 項(xiàng)目時(shí)有幾條通用的工程建議值得遵守。第一按層拆分文件。不要把所有自定義層堆在一個(gè) Python 文件里。按linear.py、embedding.py、layernorm.py、attention.py拆分每層只做一件事調(diào)試時(shí)直接定位對(duì)應(yīng)文件。第二每寫一層就立即驗(yàn)證一層。不要等到所有模塊寫完了再驗(yàn)證。驗(yàn)證工具就是torch.autograd.gradcheck它比任何肉眼觀察都可靠。每層驗(yàn)證通過(guò)之后再進(jìn)入下一步。第三先跑最小配置。第一個(gè)實(shí)驗(yàn)建議使用vocab_size64、d_model32、n_heads4、batch_size2、seq_len8。這么小的配置可以在幾秒內(nèi)完成完整訓(xùn)練循環(huán)。如果最小配置都能跑通再逐步放大。第四保留一個(gè) baseline 對(duì)照。用 PyTorch 官方nn.Linear、nn.Embedding或nn.TransformerEncoder實(shí)現(xiàn)同樣的網(wǎng)絡(luò)不斷對(duì)比前向輸出和梯度。這樣能快速排除“手寫層寫錯(cuò)”和“訓(xùn)練邏輯寫錯(cuò)”兩類問(wèn)題。第五模型文件、訓(xùn)練代碼和測(cè)試代碼分目錄管理。避免把臨時(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í)語(yǔ)料務(wù)必確認(rèn)數(shù)據(jù)來(lái)源合法、授權(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è)坑只要踩過(guò)一個(gè)以后再看到類似報(bào)錯(cuò)就會(huì)很敏感。下一步建議做三件事第一給 MultiHeadAttention 也實(shí)現(xiàn)手寫 backward完整覆蓋所有模塊第二加入 causal mask讓 Attention 只能看到當(dāng)前位置之前的 token變成一個(gè)真正的自回歸語(yǔ)言模型第三把學(xué)到的參數(shù)初始化經(jīng)驗(yàn)搬到一個(gè)小型文本數(shù)據(jù)集上觀察 loss 曲線在不同 init 和 learning rate 下的表現(xiàn)。做完這三步你對(duì) Transformer 的掌握就不再停留在“會(huì)用層”的層面而是真正進(jìn)入了“能寫層”的階段。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
97天天操| 亚洲啪啪视频免费| 亚洲少妇色| 精品人妻中文字幕4399| 97欧美综合| 骚逼自拍99| 国产成人网址| 91人妻尻屄视频| 欧美 精品国产制服第一页| 啊啊啊在线看| 亚洲男人的天堂va亚洲男人社| 91麻豆天美国产| 男女打扑克高清网站| 亚洲AV无线| dy888午夜老子影视达达兔| 欧美在线中M| 高清不卡视频| 综合日本女人伊人| 国产丝袜视频| AAA久久| 久久国产热视频97电影| 女同女同恋久久级三级| 人妻一区二区三区四区视频| 一区二区三区高清| 97欧美综合网| 精品人妻15区| 久久久青青草| 高清国产精品福利网站| 亚洲自拍偷拍视频在线| 日韩免费在线观看不卡| 丁香色色网| 亚洲伊人久久精品狠狠在线| 黄色工厂这里只有精品| 国厂麻豆77q4| 97干com| 牛牛操视频逼| 欧美色九九| 熟妇熟女一区二三区| 久久精品店| 女欧美一区二三区| 四虎AV无码| 伊人久久亚洲中文字幕不卡| 亚洲精品欧洲色| 亚洲91色在线| 亚洲影视第一页| 天天看综合网| 午夜婷婷| 欧美人妻一区二区| 日韩情色视频| 91成人精品在线播放| 乱老熟女一区二区三区| 超碰91在线| 乱伦图av| 久久久久9999妇女| 97欧美色资源| 久久尹人大香焦视| 中文字幕第2页| 亚洲资源一区| 97精品久久| 精品无码欧美三级| 国产精品麻豆免费视频| 性开放中文AV高清无码免费看| 国产乱码久久久| 老熟女中文字幕高清| 久久的网站啊啊啊啊啊| 色蜜AV| 97色伦欧美| 欧美高清色| 久久久9 9 9精品| www.男人天堂| 亚洲开心网| 久久久性爱| renqi久久久久久久久久久久| 91搞逼视频| 久久久四区| 亚洲丁香花色| 中文字幕人乱码中文字的预防方法| 亚洲人妻精品一区二区| 91五月天| 国模私拍一区二区三区神乳| 蜜臀久久99精品久久久久久成人小说| 99re99在线视频| 色青青久久影视| 成人性爱电影一区二区| 一级二级在线观看| 综合熟女| 日韩精品9999| 亚洲欧美日韩制服另类| 96精品久久| 久久av色| 精国久久一区二区三区98| 亚洲无码精品AV久久久| 九九色综合| 精品无码久久久久久国产浪潮| 色欲久久综合| 欧美欲色| 色诱中文字幕| 中文字幕少妇色| 国产亚洲精品一区二区三区| 99精品久久久久久久婷婷蜜桃| 国产AV色黄看到爽| 中文字幕日本久久| 日韩紧密久久| 青娱乐 青青青操 日逼| 国产h小视频在线观看免费| 美女淫穴| 色噜噜国产精品视频一区二区| 久久人妇| 97超碰超| 日本影视久久免费| 边做饭边操逼逼| 射久久| 中文字幕一区二区三区四五区| 亚洲五码一区二区三区| 曰本道人妻久久久在线不卡色视频| 日韩欧美性吧婷婷乱伦大香蕉| 久久精品欧美一区二区三区不卡| 就去色综合| 91精品91久久久久77777俄罗斯老妇姓x| 天天色综亚洲91污| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 国产精品久久久蜜臀| 精久久久| 91五月天| 久久欧美激情| 中出在线视频| 天堂а√在线最新版在线| 九九九九久久久久| 欧美极品少妇| 大香蕉97久久| 国产91精品福利在线| 吻戏激情性巴克| 日韩欧美中文字| 97国产天堂岛| 亚洲Av诱惑| 91久热| 国产精品女久久久久av爽| 欧美强奸乱| 欧差乱伦二三| 0755午夜福利视频| 欧美日本天堂| 国产中出内射一区二区| 久久久久久中文字幕中文字幕最新| 97久久资源| 亚洲资源网| 日本精品九九九| 欧美一级做a爰片免费视频| 欧美乱色| 久久精品视频久久久| 色官网色综合| 乳欲人妻办公室奶水| 亚洲熟女一区| 亚洲精品无码少妇久久| 最新av在线| 亚洲男人天堂网| 自拍偷拍 高清无码| 大鸡巴久久| 曰韩无码777| 久久婷婷亚洲| 九九九只有精品| 日韩av影片在线观看| 我爱搞逼综合网| 国产区91柔拿会所技师| 日本欧美m v精品网站加| 中文字幕精品日韩中文字幕| 美女骚尻视频| 好吊妞转入那个网| 不卡av免费在线网址| 在线啊啊啊啊| 免费亚洲黄色视频在线观看 | 国产欧美一级在线观看| 999熟女精品| 亚洲色五月| 国产精品女aA片爽爽视频| 婷婷激情一区二区三区俺也去| 眼镜人妻101.com| 五月开心久久AV官网| 亚洲精品中文字幕一区在线视频 | 亚洲色性| 天天综合有色网| 国产色精品午夜大片| 96久久久久| 91超碰碰在线| 精品91摸| 欧美很很操视频| 操逼无码操逼| 日韩熟女精一区二区三区不卡| 日韩三级网址| 午夜一区| 亚欧美综合| 午夜福利一区二区三区四区五区色婷婷| 日韩欧美成人综合在线| 日本天堂在线播放| 五月丁香六月婷| 91美女视频在线观看| 久久熟女人| 91女优在线观看| 伊人991| www.99热在线只有精品| 99亚洲人人| 亚洲视频一二区| 亚洲无限观看| 色色青青久久| 久久久久久人妻一区精品色欧美| 免费观看性欧美一级| 超碰99在线观看| 国产AV高清AV无码| 久久亚州大香蕉| 亚洲无码国产探花在线观看| 蜜臀久久99精品久久综合| 美女上床网站| 久久久免费懂色| 免费综合亚洲中文| 丁香五月性爱| 欧美人与动性人交a| 黄片免费视频2019| 小日子操bb在线看| 日韩无码一区二区三区| 国产在线综合福利网站| 国产一区在线观看无码AV | 麻豆久久久久久久久丝袜| 亚洲脚交| 3d成人精品一区二区| 91女网站| 黄色片一区二区三区四区五区| 偷窥自拍亚洲色图| 殴美在线AⅤ| 欧美欧美啪啪视频| 国产精品久久久久亚洲av| 91精品伊人久久久大香线蕉91| 亚洲欧美激情在线视频| 亚洲熟妇AV日韩熟妇在线| 国产欧美日产一区二区三区 - 国产欧美日| 欧美91精彩| 秋霞怕怕片| 国产三级片在线观看| 91啪啪视频| 日本裸体久久色噜噜| 91伊人大香蕉| 亚洲AV麻豆Aⅴ无码电影一| 五月丁香啪啪| 亚洲在钱| 毛片17S| 操死我了啊啊啊| 麻豆精品一区二区三区四区免费观看| 欧美亚洲国产91在线| 亚洲中文电影| 国产精品久久久久久久免牛肉蒲团| 99re免费视频精品全部| 久久九九热| 久久黄片国产一区二区| 果冻传媒A片一二三区| 丁香激情网| 亚洲小说视频| 激情五月天婷婷| 吖在线不卡一区二区国产剧情| 久久啊啊啊视频| 国产成人bd在线观看| 精品九区| 午夜色婷婷| 亚洲综合婷婷| 日韩兔费看黄片| 第二页中文字幕| 五月激情影院| 一本色道久久综合精品婷婷| av绯色| 91熟女视频网| 亚洲性感丝袜诱惑在线观看| 五月天激情网图片| 欧美日韩国产黄色片| www.高清无码诱惑一区.com| 丰满丝袜少妇AV| 综合网天天| 尤物网站91| 激情综合网一盗摄| 久久一区,青青青青草视频在线播放| 1二区9| xxx0国产在线播放| 亚洲日本成人动漫| 男人天堂一区二区| 亚洲人妻AV| 怡红院成人视频| 水多多映视AV| 天堂种子在线www网资源| 国产乱弄免费在线视频。 | 亚洲综合性网址| 国产精品无码在线| 蜜臀va69| 欧美 亚洲精品首页| 亚洲欧美爆| 免费精品无码一级毛片牛牛影视| 久久久久九九九| 亚洲第一在线视频| 日本激情免费大片| 九九九久久久久| 亚洲国产综合久久久性感熟妇| 人人妻人人爽一区二区三区| 亚洲色图 欧美热图 清纯唯美 另类自拍| 九月丁香综合网| 啪啪啪精品视频| 久热九九| 人妻熟女字幕一区二区| 91无码人妻| 色亚州人久干视频在线观看免费版| 91激情网| 日本一区二区电影网站| 一区二区影院| 视频一区二区免费在线| 激情综合五月| 久久色激情一区二区三区| 中文字幕91页| 97亚洲资源| 67914亚洲精品| 天天在线91| 超碰1997| 人人操人人叉人人插人人| PMv在线观看| 欧美色图20p| 国产精品一区午夜福利| 国产三级在线现体验区| 综合亚洲网| 岛国黄片网站| 精品人妻一区二区免费看| 99国内熟女露脸视频| av资源在线播放天堂| 四虎国产精品永久地址入口| 自拍盗摄一区| 操熟女91| 国产精品探花色| 夜夜国产一区| 九九九999久久久网站| 亚洲另类久操网| 中文字幕99999| 丁香五月天啪啪| 精品人妻一区二区三区视频| 人人贴人人摸| 午夜男女爽爽爽在线视频 | 伊人网高清| 亚州色交| 国产久久日| 日韩欧美操逼xxx| 国产精品在线一区二区| 亚洲九月丁香| 在线综合 亚洲 欧美中文字幕 | 婷婷精品视频| 亚洲欧美一区二区不卡视频播放| 成人自拍三级在线观看| 日韩性爱啪啪视频| 国产精品秘 福利姬在线观看| 日本在线视频导航| 国产黄片在线免费观看| 日韩中文字幕宗合在线| 日韩电影在线观看网址| 日韩射图| 日韩三级一区| 青草一区二区| 又大又长又粗又爽又黄| 91美女看B| 一区二区三区四区在线不卡| 色色色色综合网| 国产精品一二三在线看| A级在线视频| 精品十三区| 中国和日本人色哪个不下载能放| 亚洲十八禁止| 黄色一级视| 少妇蹲下买菜露大唇0| 午夜福利免费福利视频| 亚洲成人贴图| 天天躁狠狠躁av| 欧美精品成人亚洲| 特级特黄一级毛片免费| 啊啊啊爽爽| 国产日产精品久久快鸭的功能介绍| 成人小电影网站tex| 在线可观看的黄色网址| 黄色免费网页无码| 久久久久久久久9| 污污汅18禁网站在线永久免费观看| 欧美白嫩女HD| 禁止观看美女黄| 亞洲久久直播| 一,爱啪啪,在线免费视频| 激情五月天社区| 91亚洲色图| 老鸭窝成人| 91色图片| 久久久99免费| 国产午夜福利电影免费在线观看| 色综合久久久久| 高清国产精品无码| av黄图片在线观看| 国产精品久久久久无码Av网曝门| 99re这里只有精品3| 日韩去日本高清在| 色老汉玖玖爱| 亚洲超碰在线| 精品玖九九久| 毛片99-全集电影手机免费观看完整-B029AV| 伊人国产成人av网站| 天天综合麻豆视频| 无码区蜜乳| 人人操人人操人妻人| 九九九九九精品十六| 亚洲 综合 第一页| 久久久一区二区| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 蜜屁Av| 伊人青青一区成人视频在线观看区| 婷婷久久五月综合激情| 色在线视频导航| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 综合网亚洲1| 国产精品久久久久久亚洲色欲| 2018天天干在线视频| 亚洲日本男人天堂网| 97蜜桃综合| 国产极品99热在线播放69| 超碰成人最新最好看| 色网综合网| 国产乱码精品久久久久久| 91在线精品| 亚洲一区二区中文字幕| 秋霞无码av鲁丝片一区| 97色五月天完| 亚洲人体视频在线观看| 久久黄片国产一区二区| JIZZJIZZ国产精品喷水| 天堂av2019| 国产精品操| 欧美91精品国产自产| 超碰免费人妻人人| 九九九网页| 亚洲无992tv| 最近2019中文字幕国语免费版| 91成人亚洲色图| 欧美—性—交—色| 青娱乐淫乱1314| 亚洲九九夜夜| 好爽免费视频| 国产欧美日韩女同性恋ww喷水精品| 欧美自拍网| www..com操老师| 99日韩| 韩国女主播青草在线| 在线强奷到舒服的无码视频| 亚洲AV成人在线| 色婷婷激情| 亚洲怡春院| 99后入| 百度百度日本操逼| 91精品人妻一区二区三区蜜桃| 吖在线不卡一区二区国产剧情| 无码直播久久久| 嫩草 人人网精品| 高清在线不卡一区二区 视频| 美女啊啊啊啊啊| 九久9精品| 国产高清26uuu| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 婷婷五月色| 亚洲宅男天堂| 夜夜爽妓女| 青青操青娱乐| 色777999综合| 亚洲熟女中文字幕在线| 秋霞男人网| 蜜臀久久99精品久久久电影| 五月天社区| 91狠狠综合久久| 欧美在线播放aaaa| 无码78| 26uuu欧美| 校园春色 欧美| 天天综合色电影| 91综合在线| 嗯嗯嗯啊啊啊操的我好爽| 国产精品电影大全| 欧美亚洲第1页| 一级特黄aaa大片在线观看成人一级片在线观看 | 啊啊好多水| 日韩国产不卡在线视频| 国产精品电影推荐| 韩国一级做A片免费的| 亚洲熟女一区二区| 99久久网站| 国产 日韩 欧美一区| 国产精品久久久亚洲一区| 婷婷色综合欧美日韩| A啊啊在线观看| 男人a天堂手机在线版| 国产成人精品网站| 夜夜操91744565| 欧美三级中文字幕hd| 91在线观看,天天综合| 久九九九九九九热| 亚洲欧美国产日本一区二区三区| 欧美色图欧美| 人妻免费观看| 丁香五月天社区| 国产AV激情无码久久无码| 日本亚洲嫩草影院啪啪| 欧美在线啊啊啊| 久久久久久久久久黄色网| www.激情| 国产97在线播放| 成年人一级黄色毛片大全在线观看| 熟女天天干| 午夜a成v人电影| 精品国产污一区二区三区| 国产人妻精品一区二区三区秋霞| 国产精品另类| 国产精品一区二区a| 日本欧美一区二区三区免费| 99性爱视频| 97超碰天天爱天天爱| AV高清一区| 天天干天天日天天射黄色| 91丨九色丨国产丨人妻在线| 999岛国大片| 五月天九九日国产精品一区二区三区| 国产天天看| 亚洲清纯综合| 精品无码秘 人妻一区二区| 天天亚洲综合| 99爱久久视频频| 18禁的网站在线| 男人的天堂欧美| 亚洲少妇综合| 亚洲图片偷拍视频区| 五月婷婷综合网| 久色99999| 99热在线不卡| 狠狠操一区二区| 东京热不卡视频| 青娱乐蜜桃臀AV色婷| 小情侣高清国产在线视频| 美女被啪到深处抽搐视频| 人爽不卡视频| 天天干夜夜一操| 综合伊人网12色| 91无码中出人妻视频| 女人的天堂大香蕉网| 看全色黄大色大片免费视频| 一区二区高清视频| 五月天色五月| 玖玖大干人妻| 久久大黄片| 欧美特黄视频网站| 97看操| 爆乳免费黄网站| 一级乱伦网站| 另类天堂| 波多野42部无码喷潮在线观看| 国产色呦呦| av日韩在线观看电影| 97色碰| 国产综合色精品在线观看| 婷婷久久五月天| 国产av强奸美女| 国产精品粉嫩福利在线| 无码抄逼网| 亚洲精品性爱片| 精品久久艹| 亚洲天堂男人在线| 日韩免费中文字幕视频| 色av中文字幕| 亚洲综合网图| 可以免费观看的av| 亚洲天堂2020| 新怡红院| 国产丰满少妇久久久精品影院| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 午夜视频久久久| 久久婷婷亚洲| 色综合一本| 亚洲亚洲亚洲天堂天堂| 综合久久9| 2019午夜福利视频| 国产综合日韩伦理| 鲁鲁色综合网| 97欧美综合| 欧美乱色| 午夜福利1区2区3区| 久久久久日本视| 射久久| 国产视频三区四区| 国产午夜精品理论片a大结局| 亚 欧 美 综合| 亚洲高清视频在线免费观看| 男人的天堂2018东京热啪啪啪| 欧亚日韩一区在线| 99国产在线绯色一区| 成人小说视频在线精品欧美| 美女诱惑在线一区| 久久九九99| 国产精品诱惑| 日本久久综合| 5月婷婷6月六月丁香| 精品人妻15区| 久久视网78| 日本 欧美 国产一区| 亚洲啪啪综合?v一区综合精品区| 久久这里精品国产99丫e6| 无码av永久免费专区网站| 欧美激情高清性猛交| 欧美日日夜夜| 中字乱伦AV| 久久久久亚洲三级电影| 啊啊啊啊嗯嗯在线久久久| 330dv亚洲成年视频网| 天美麻花大全视频| 女人与公拘交酡2020视频| 狠狠操狠狠燥| 久久夜嗨| 日韩一级二级在线| 97中文超碰| 国产AV高清AV无码| 精品中文字幕第一页| 成人毛片免费| 高清视频一区| 中国熟妇| 久久日韩肥臀| 夜夜夜夜久久久久| 亚洲色图 91| 久久超碰天天| 欧美日韩精品久久久久东北老熟妇| 国产久久视频| 欧美中文狠| AV中文字幕剧情1区2区3| 色网在线| 国产精品视频白浆免费| 国产美女高潮视频| 五月综合视频| 91久久免费视频互動交流| 久久精品免费| 日本潮催一卡操| 欧美激情中文字幕另类小说| 婷婷丁香五月综合| 午夜福利在线合集| 99久久久无码国产精品性啊聊| 久久国产熟女影院| 日韩一级二级| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 九九九九精品一区| 无码人妻精品一区二区三区99不卡| 99成人| 色婷婷六月丁香七月婷婷| 超碰资源亚洲97| 免费人成毛片乱码| 蜜臀精品1区2区| 韩三级a视频在线观看| 日本精品无码三级网站| 乱老熟女一区二区三区| 青娱乐福利99| 97欧美色综合| 国产精品探花视频| 精品无码一区二区三区| 日本1区2区不卡视频| 国产探花精品在线| 欧美性爱在线无码| 国产一区二区三区不卡手机在线| 天天摸夜夜操视频| 亚洲成人ab| 人人操人人操草草| 亚洲国产综合久久天堂| 51一区二区三区| 人妻干天天| 成人情色一区二区| 亚拍在线| 黄色片,com| 国产欧美一区二区| 久久69| 超碰人人超在线观看| 91熟女综合| 国产中出内射一区二区| 91综合在线| 上床啊啊啊| 五月色网| 东北老熟女| 日本熟女中文| 欧美综合综合| 丁香婷婷久久 | 中文字幕精品日韩中文字幕| 99热97| 免费精品无码一级毛片牛牛影视| 久久久网站| 91N综合网| 95人妻爽爽人人做人人澡| 男人天堂毛片| 激情自拍 校园春色| 日本一区不卡| 99re9这里只有精品| 超碰色男人操熟女| 国产成人精品一区| 国产无套粉嫩白浆在| 精品玖九九久| 九色 人妻 大香蕉| 强奸乱伦AV网站| 日韩欧美麻豆 | 一级特级aaaa毛片免费观看| 男人把坤坤插入女人的下体| 老司机射| 91熟女在线| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 男女一进一出视频久久| 后入国产| 日韩不卡在线一区二区| 自拍丝袜美腿人妻| 色妺妺AⅤ| 日韩成人无码| 日本三级一区二区 在线| 中文字幕丰满人妻日本| 翔田千里AV无码秘 三区| 中文字幕乱妇免费视频| 大奶的诱惑| 91爱| 国产成人99久久亚洲综合| 国产日韩无码一区二区三区久久区| 高清肉丝中文无码| 另类图片五月| 欧美片第一页| 性色AV蜜色av色欲av| 无码伊人久久大杳蕉中文无码| 91强在线播放| 噜噜噜在线视频| 麻豆国产原创AV色哟哟 | 久久精品99久久久久久| 九九九热| 欧美亚州综合图片| 偷拍偷窥与盗摄视频专区| 黄页网站免费高清在线观看| 美女尤物人人操| 婷婷国产精品九区| 国产91美女视频| 亚洲啪AⅤ永久无码| 亚洲九月丁香| 欧美中文综合| 91综合无码| 欧美天天搞| 亚洲阿v天堂在线| 蜜区区视频79| 加勒比av网| 热的中文 热的有码 热的国产| 天美传媒国产原创中文字幕亚洲欧美另类 | 精品熟女呻吟久久91| 51一区二区三区| 欧美淫乱视频| www.人人摸在线视频| 亚州精品人妻一二三区| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 久久精品99| A男人的天堂| 亚洲高清少妇| 熟女91网| 国产精品一区二区三区在线| 96久久久久久久| 亚州性9| 永久免费观看的毛片的网站| 亚洲天堂久久久久久粉红视频| 大香蕉综合网| 天天射天天| 日韩性爱1级片视频| www.99中文字幕| 韩国午夜理伦三级好看| 人妻中文字幕日韩电影| 天美麻花大全视频| 大香蕉123| 九九九久千久久激情蜜桃在线看| 欧美精品第四五页中文字幕在线观看| 草久久久| 99国产精品自在自在| 中文字幕熟女人妻丝袜丝| 97色操| 被操高清无码视频| 国产理论视频在线播放| www久久99| 午夜久久一区二区无码中出| 日韩情色AV| 亚洲做性| 亚洲精品国产精品成人| 一区操逼日比视频| 九九久久综合| 欧美激情超碰777| 午夜无码熟妇丰满人妻| 99超碰碰| 欧美的性爱网站免费| 亚洲砖码砖专无区2023| 97干日韩| 亚洲九九视频在线观看| 中文字幕欧美日韩三级| 成人激情无码在线视频| 久久99热这里只频精品6学生| 日欧美色| 抽插亚洲无码| 国产高清26uuu| 日韩草久视频| 熟女露脸激情自拍视频| 免费a v| 一级久久性爱视频| 亚洲美欧999| 伊色久人大在线| 精品人妻一区二区视频| 狠狠中文字幕| 超碰欧美97资源| 99视频这有这里有精品| 国产久久久| 一起草视频在线| 国产女人高潮嗷嗷嗷叫小说 | 不卡六六在线91| 日韩免费高清大片在线| 激情婷婷丁香| 日本性一区| 国产a片操逼| 久热99| 亚洲熟妇综合久久久久久| 放黄片放3级黄片没穿衣服| 日本www操操操| 国产精品 午夜福利| 91精品人妻| 亚洲最大网站av| 久草婷婷| 午夜男女爽爽大片免费观看| 日韩九区| 色九九综合AV| 国产亚洲精品激情| 国产精品久久发布| 人妻精品一区二区三区| 99国产在线 精品 视频| 操我啊啊啊啊啊| 96麻豆精品一区二区三区| 国产麻豆福利av在线播放| 精品人妻夜夜草| 日日夜夜精品视频| 天天干,天天日| 日日嗷| 国产精品蜜乳AV| 天天射夜夜| 亚洲成人日韩小说| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 男人天堂网址| 殴美,日韩国产伦精品| 亚洲第一男人天堂| 深夜国产一区二区三区在线看| 欧美色日本| 懂色av色欲av蜜臀av| 日韩电影天堂视频一区二区| 乱伦图av| 国产精品另类一区大香蕉| 91粉嫩萝控精品福利网站_精品影音先锋国 | 人妻天天爽夜夜爽精品2| 丁香婷婷五月| 麻豆一区二区三区精品| 国产极品美女高潮无套在线观看| 试看60秒| 九九色热| 亚洲综合欧美| 欧美72网页| 91操人| 丝袜 中出 制服 人妻 美腿 中文字幕| 狠狠综合网| 乱伦强奸区日韩| 国产白丝在线| www欧美性爱| 精品黄色电影| 中出789在线视频| 国产精品无码AV网站| 久久精品区| 亚洲丝袜B诱惑| 91午夜无码| 玖玖爱视频网站| 久久理论字幕视频| 久久国产免费激情视频| 久久精品人妻一区二区三区| 夜夜操2028| 欧美日韩另类在线| 一本久久久精品| 少妇天堂网络| 国模吧 一区二区三区| 久久大黄片| 免费看国产大AB| 亚州宗合另类| 一区二区三区黄片免费观看| 我要色综合网站| 97超碰天天爱天天爱| 天天操天天舔| 婷婷干黄色| 91制服丝袜| 伊人久久大香线综合无码| www.色综合| 国产乱伦性爱区| 97在线免费看视频| 久久99草| 91丝袜美女| 色综合色综合网| 国产成人一级av88| 人人操人人摸人人骑| 高清孕妇孕交 交孕妇| 精精夜夜| 激情五月天丁香| 国产精品免费日韩| 欧美国产精品久久九九| 久久日韩肥臀| 国产性爱欧美性爱在线| 高凊专区人人操| 国产又爽又黄| 日欧亚洲二三区大片不卡| 在线观看中文字幕| 国产深喉| 国产精品电影推荐| 一个人在线看的黄色电影网站| 亚洲欧美经典一区二区| 国产亚洲日韩在线三区黑人| 国产精品美女久久久久久网站| 清纯唯美综合| 亚洲AV色图一区| 欧美天堂第二区| 99久久久无码| 狠狠中文字幕| 欧美后进式| 亚洲va综合va国产va中文| 立川理惠加勒比无码| blacked精品一区国产| 黄色激情电影在线观看| 欧州一区二区三区四区| 色欧洲| 色97干| 久久久久久九九九九九| 青青久日| 中文字幕av一区二区三区人妻少妇 | 午夜精品久久久久久久久久久久久 | 久热最新在线杭州| 超碰九区| 亚洲国产精品成人久久蜜臀| 国产97亚洲| 在线视频97| 视频一区二区免费在线| 人人么人人操| 日韩无码视频黄色| 人人爱人人乐人人操| 91av熟女人妻| Sekablack无码一区| 国产真乱mangent| 秋霞网—男女啪啪亚洲免费体验区 | 欧美不卡五十路| 最新av中文字幕高清| 欧 美 自 拍 偷 拍| av天堂精品久久| 日逼国产| 丁香六月婷婷综合| 欧美日韩高潮喷水91| 伊人97色天使| 亚洲AV不卡在线观看尤物| 天综合网欧美| 欧亚 另类 久| 97国产超碰| 久久久久亚洲三级电影| 强奸国产在线| 色色婷婷丁香| 嗯嗯嗯,草死我| 色偷综合| 欧美精品黑人猛交高潮| 欧美精品二区视频在线| 日韩欧美成人综合在线| 911粉嫩人妻| 99热在线观看| 啊啊啊97视频| 免费精品AB| 在线午夜成人无码视频| www.av在线视频| 日本99视频| 久久久久久久久久久久久久久乱码| 欧美日动态视频| 大逼色网站| 一级二级三级黑人无码| 国产伦乱91| 粉嫩国产精品久久粉嫩| 97爱b| 91网站18禁| 日韩色欲久久一二三四区| 啪啪综合网| 日韩精品作爱导航| 亚州色综合| 亚洲精品啪视频| 肉丝网站91| 久久线上视频免费看| 丰满美女一级毛片在线播放| 综合欧美日本三级| 日本97久久久精品| 深喉吞精| 欧美丝袜制服久久| 国产乱婷婷精品二区三区| 国产又大又粗又长视频| 亚洲日韩视频二区| 五月丁香六月婷| 久草久日| 久久久久久亚洲Av无码| 婷婷丁香六月| 精品美女人人干| 久久精品 六十路 熟女 欧美| 极品白嫩美女白浆成人福利在线看| 久夜视频| 91干熟女| 日韩资源网| 网站A V在线| 青青草日韩无码| 色综合 加勒比| 国产野战露脸在线播放| 色噜噜国产在线| 91日韩国产欧美亚洲另类精盘州至城都 | 九热视频| 嫩草黄页| 亚洲一级性爱视频免费看| 国产人伦精品一区二区三区 | 日日夜夜骚| 久久免费少妇| wwwss在线观看| 天天碰久久入| 黄aaaaaaaaaaaaaaaaaa色网站| 久草综合视频| 嫩呦国产一区二区三区AV| 99国产在线绯色一区| 日韩欧美日韩| 伊人97超碰| 中文字幕一区二区三区50路| 天天干天天插| 日本在线伊人啪啪| 久久五月天婷婷| 美女黄页网站| 99热在线播放| 东京热毛片177b2viP| 天天干天天拍| 69精品| 四虎影视在线| 日韩免费在线观看不卡| 欧美色图亚州激情| 1769成人国产精品视频| 老女人日韩美91| 国产精品内射婷婷一级二| 亚洲熟妇图片| 亚洲伊人久久综合97| 欧美综合色站| 亚洲精品白浆高清久久久久久| 国产有码一区| 日韩欧洲操屄视频| 久久夜嗨| 日韩欧美一级特黄大片| 欧美在线|亚洲| 欧美一区二区亚洲天堂| 久久久久女教师免费一区| 色色色色网站| 久久久久熟女| 91精品国产综合久久久蜜臀| 青青草中文字幕| 中文字幕视频2区| 影音先锋新男人| 加勒比色综合| 久草婷婷| 人人搞人人插人人操| 国产有码一区| 国产精品成人福利在线| 久久青娱乐| 插入综合网| 欧美 日韩 亚洲 春色| 懂色av中文字幕一区二区三区天美| av片在线观看免费播放| 91精品国产综合久久久蜜臀酒店| 麻豆av一区二区三区| 日韩精品人妻一| 亚洲精品黄码久久久久| 1024久久高清视频| 天天操人人操狠狠插| 亚洲熟妇AV日韩熟妇在线| 夜色五月天| 久久首页| 97网站在线观看 | 91综合无码| 超碰 av 女人天堂| 男女真人网18| 国产综合色精品在线观看| 另类视频在线| 91一区二区| 福利操逼| 欧美色图第一页| 婷婷另类小说| www.夜夜操| 69少妇一区二区| 97视频播放| 日本中文字幕一区| 久操视频免费在线观看| 亚洲成人无码影院| 男人久久天堂| 欧美高清在线| 天天弄欧美| 丁香婷婷久久| 国产精品视频麻豆入口| 91色宗合| 九热超碰| 91人妻少妇| 波多野结衣AV无码一区| 国产亚洲99久久精品| 婷婷99| 久草综合京东| 精品中文日韩字幕视频| 日本孕妇一区二区视频操逼免费看| 欧美亚洲高清不卡| 1区2区3区在线视频| 国产精品成人无码av无码免费| 久久精品国产Aⅴ| 狠综合网| 亚洲色系另类精品国产| 69AV女优男人的天堂| 欧美色九九| 狠狠激情综合狠狠操中文字幕| 精品视频日日夜夜| 加勒比海色香蕉婷婷| 国产女s强制榨精视频| 亚欧性爱ab| 亚洲涩涩| 你懂的在线观看区国产| 中文字幕精品区先锋资源| 丰满丝袜少妇AV| 亚洲污污网站| 亚洲有薄码区日本系列中文字幕| 国产高清成人mv在线观看| 在线观看一级α片刺激高潮视频| 九九九不卡| 国产偷拍网站| 国产路线专区| 九九九成人| 欧美色图99| 色哟哟av| 97超碰影音| 欧美,日韩,中文,另类| 日本一久是| 91爱欧美| 97视频在线视频| 丰满人妻一区二区中文| 亚洲黄色网址| 97超碰人操| 97精品97久久| 中出后入| 国产精品第一页国产大屁股视频免费区i| 97色涩| 午夜后入| 九九九草| 偷窥自拍亚洲| 国产农村妇女毛片精品久久| 97操b| 免费一二区| www.色吧5.com| 八戒无码国产午夜福利| 超碰在线香蕉| 激情接吻视频久久久久久| 欧美视频边做饭边橾| 色婷婷香蕉| 天天91~综合入口| 国产嫩草精品A88AV在线| 天天做天天爱天天爽AV| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 |