色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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ì)明顯感覺(jué)到“圖層”不再是黑盒。第二算法面試準(zhǔn)備。很多公司面試會(huì)問(wèn)“Transformer 參數(shù)初始化為什么用 Xavier”“Embedding 梯度怎么回傳”“softmax 反向傳播的雅可比是什么”。這些問(wèn)題的答案不親手寫一遍很難講得清楚。第三源碼閱讀和二次開(kāi)發(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ù)原理和常見(jiàn)實(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è)常見(jiàn)錯(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 能不能收斂的隱藏開(kāi)關(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 系列中很常見(jiàn)。更好的實(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)最常見(jià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í)間和空間開(kāi)銷。這也是理解后續(xù) FlashAttention 為什么要合并算子、減少訪存的起點(diǎn)。8. 常見(jiàn)問(wèn)題與排查方法問(wèn)題現(xiàn)象可能原因排查方式解決方案gradcheck 一直報(bào)錯(cuò)沒(méi)有開(kā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
返回資訊列表
欧美成人免费在线观看| 丁香六月啪| 日本色色色视频| 成人网欧美风情| 欧美A片中文字幕| 亚洲欧美日韩有码| 韩国一级婬片A片AAAAA| 国产视频第二页| 夜夜操av亚洲一区二区| 欧美极品性爱天天射| 夜夜嗨免费视频| 国产乱伦性爱AV| 91在线视频国产网站| 久草色悠悠在线视频| 思思热久久成人| 中文字幕久久精品一区| 欧美日韩在线国产在线| WWW.操逼.COM| 青青草依人大香蕉| 激情四射五月天| 免费操逼视频下载| 欧美亚洲素人制服精品| 特色a在线上| 国产成人天堂| 亚洲人妻熟妇三十三区| 人妻天天操天天爽视频免费| 人妻AV 中文字幕的| 国产三级在线现体验区| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 囯产乱伦一区二区三女| 91av一区二区在线观看| 中文一区二区三区影院| 综合情欲网| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 亚洲综合影院| 国产自产22区| 免看60秒涩涩视频| 蜜桃色院一区久久| 97久久精品亚洲| 9国产超碰| 极品色| 久久中文色图| 天天躁日日躁AAA片李宗瑞| 视频一区二区免费在线| 日韩av性爱在线播放| 亚洲人妻精品一区二区| 91N综合网| 国产精品69久久久久孕妇欧美| 91天天综合网,天天综合网| 国产久久一区二区午夜| 亚洲欧美日韩有码| 青青草九九九九九| 色999亚洲人成色| 国产精品久久天天干| 一级性爱视频免费观看 | 69少妇一区二区| 天天干天天燥| 日本操BAV| 国产色综合亚洲色综合吹潮| 天美传媒麻豆一区二区三区国产精| 麻豆AV一区二区| 97碰在线视频| 久久久com| 一起草精品人妻| 欧美成人A√在线一区二区| 人妻精品一区二区| 亚洲春色一区二区三区| 三级激情网站| 国产熟女完整版中字| 黄片免费看的| 曰韩av中文字幕专区| 韩国一级做A片免费的| 六月丁香久久| 九九九久千久久激情蜜桃在线看 | 国产sv美女内射| 97欧美综合| 熟女探花啪啪| 日韩亚洲国产视频| 在线只有精品| 91网18| a片亚洲一本通视频| 青青草影视蜜久久| 秋霞一集毛片观看| 果冻国产精品麻豆成人av| 日韩另类| 六六久久日韩不卡| 欧美 牲| 热热色国产一二区AV| 亚洲丨在线| 欧美人体性爱互联网第一页婷婷日本| 乱伦av麻豆| 密桃99999| av东京热男人的天堂| 欧美伦乱爱| 亚洲日本大香蕉1| 丁香九月婷婷| 色呦呦呦在线观看视频| 天美av在线观看| 天天做天天爽| 久久九九热| 亚洲成人在线高清| 亚州精品一区二区三区香中文字幕在线| 射丝袜高跟鞋99| 色男人色天堂东京热| 亚洲久久久久| 亚洲春色一区二区三区| 天天色播| 99久在线精品99re8热视频在线| 精品九九国产无码| 欧美黑人性猛交91| 综合天天。| 91天天| 久草福利在线资源站| 久操网视频| 亚洲AV免费在线| 国产精品熟女九九九| 久久加勒比| 亚洲激情片| 性开放中文AV高清无码免费看| 超碰亚洲欧美日韩无| 欧洲大香蕉| 国产久9| 久久久久99999| 综合影视国产无码| 色九九九| 国产熟女高潮一区二区三区| 国产成年精品高清在线观看91| 九九色色| 清纯唯美亚洲综合| 亚洲一区二区三区春色| 亚洲欧美经典一区二区| 欧美日韩国产中文精品字幕自在自线, | 少妇一级无码精品| 操高情无码| 男人的天堂色偷偷青青草视频婷婷网| 亚洲熟女国产综合另类| 玖玖97综合| 怡红院成人视频| 蜜臀操逼黄色视频操的好爽| 超碰一区二区| 亚洲欧美高清无码| 啊啊啊啊啊啊好湿好爽视频| 欧美一级黄色免费专区| 久草精品一区| 亚洲?V无码专区在线电影| av婷婷色网| 男人天堂电影院| 色婷婷五月综合| 97免费视频在线| 人人做,人人操,人人摸| 99re这里只有精品中心播放| 欧美日韩午夜精品一区二区三区| www.91欧美| 久久久久99999| 婷婷伊人綜合中文字幕小说| 78操B| 啪啪免费| 亚洲欧洲综合| 亚洲图片欧美制度| 九九九九热| 国产av高清版| 亚洲精品国产熟女| 狠狠爱AV| 亚洲天堂色图| 91精品久久久久| 91中文在线| 午夜一区| 久久一级无码精品毛片6| 伊人大香蕉在线| 五十路熟女人妻一区二区在线观看| 加勒比伊人| 大香蕉国产中文自拍| 超碰是碰在线观看| 无码一区二区三区四区五区六区七区八区九区十区视频 | 亚洲色图欧美色图在线播放| 中文字幕视频2区| 中文字幕久久亚州无码| 日韩精品 资源| 美女被啪到深处抽搐视频| 无码久久亚洲高清,| 久久一二三级一一一| 亚洲AV无线| 青青草五月天| 亚洲av在线免费观看| 偷拍色图| 国产四虎在线| 人人考人人摸人人干| 麻豆 欧美 日韩| 69人妻精品丰满熟女区| 激情四射婷婷四五月天| 天天射天天色成人| 亚洲日本天堂| 国产AV激情无码久久无码 | 五月丁香激情综合网| A片大香蕉在线| 久久中久文96| 日本成人A片免费看| 色噜噜狠狠色综无码久久| 99自拍B亚洲| 中文字幕免费看大片| www.高清无码诱惑一区.com | 曰韩欧美国产传媒麻豆第一区| 一区二区亚州激情久婷婷欧美| 亚洲操操操| 成人激情无码在线视频| 久草在| 视频二区美腿丝袜制服人妻欧美| 日韩一区二区三区四区五区| 熟女91网| 亚州色图欧美| 黄色网址在线免费观看| 国产日韩精品suv| 9久久精品| 嗯嗯嗯好爽| 免费在线观看国内色片网站网址| 日本天天色| 久草国产在线视频| 国产成年女人免费视频播放a| yirendaxiangjiashipin| 人妻22p| 人人操,操人人| 人妻无码一区二区三区久久99| 男人天堂站| 人妻天天爽夜夜爽爽| 97超碰色| 精品国产乱码久久久久久网站入口| 久久综合九九| 国产黄a三级三级三级av在线看| 91精品91久久久中77777| 亚洲精品欧洲色| 精品女同一区二区三区| 亚洲九九九九| 东北老女人的激情视频| 超碰98综合网| 啊…啊…操我用力操我| 日本精品一区三区| 欧美在线官网| 久久爽爽精品| 亚洲欧洲偷拍一区| 久久的网站啊啊啊啊啊| 爽 好舒服 无码刺激久久| 亚洲精品xxx| 日韩免费大片一级播放| 91性片| 夜夜欧美 | 日韩av在线精品观看| 变态综合色| 一本色道久久综合精品婷婷| 屌妞视频久久久久久久| 久湿久久 | 国产精品自在线发布| 操逼1区| 欧美综合网A| 久久中文字幕在线观看| 日韩操啪| 综合网 欧美| 亚洲久久久久| 亚洲国产奇米影视久久| 婷婷爽人人婷婷爽视频| AV麻豆免费一区| 在线看的av| 天堂亚洲精品| 无遮挡男女激烈动态图| 青女偷拍网| 欧美91久久久久| 亚洲图片91| 老司机福利青青草| 欧美大香蕉专区网| 性爱视频免费网址| 无码免费精品高清| 久久久久亚洲AV无码专区少妇| 黄色区免费观看中文字幕| 大香蕉啪啪啪| 色偷偷男人的天堂麻豆| 91在线丝袜视频| 九热超碰| 日本性爰一道本| 九九热三级片| 国产精品一区二区 尿失禁| 操国产逼| 蜜臀久久久99久久久久| 性色AV网站| 国人欧美精品一区二区| 99蜜月精品久久| 欧美日韩国产精品久久色婷婷| 人人操av| 午夜精品人妻二区三区| 偷拍五区| 啪啪视频免费在线观看| 国产AV人人 夜夜人人澡| 少妇色欲综合网2| 99久在线精品99re8热| 久久久久久91香蕉国产| 欧美天天谢综合网| 亚洲少妇在线观看| 综合自拍| 深田咏美亚洲精品福利社| 热久久无毒不卡| 91P0RNY大屁股人妻| 啊啊啊啊啊啊啊啊啊啊在线观看| 亚乱色| 看日韩美女二区三区免费操逼视频 | 午夜福利无毒不卡| 少妇被玩视频二三区| 乱子伦一区二区三区国产精品| 久久精品六区| 91色艳| 97人肏| 亚洲丝袜在线观看| 伊人国产成人av网站| 第四色亚洲色图| 久久99网站| 91欧美丝袜| 无码不卡八戒| 天天天天天超碰| 无码直播久久久| 日韩精彩免费| 婷婷干黄色| 91骚妇| 亚洲一区二区三区中文字幕| 欧美伦乱爱| 老司机天天操| 人人九九精| 国产1727欧美| 五月天激情小说| 欧美大的香蕉有线电视视频| 五月天婷婷色| 美女毛片999| 亚洲一卡2卡3卡4卡乱码网站| 色 亚洲 91| 国产精品一区二区 尿失禁| 性生活无遮挡纯毛片在线看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 三及片网站| 久久大香蕉手机高清| 四虎影院成年人片| 欧美狠狠弄| 午夜欧美J进J出白浆流出久久久 | 一级性爱啪啪视频| 免费av在线播放二区| 久久婷婷亚洲| 日日骚精品视频| a天堂视频| 久久久久久亚洲精品不卡人乳| 日韩欧美~中文字| 伊人宅男大香蕉| 日本欧美成人片AAAA| 日韩天堂av电影在线观看| 国产伦精品免编号公布| 九九精品99| 一二视频神马久久传媒| 五月大香蕉| 日本999精品| 日本媚薬中文字幕在线| 欧美久久婷| 国产91乱伦| 另类欧美色| 99色日| 家庭乱伦麻豆| 天天激情综合站| 在线观看综合精品亚洲| 超碰97资源网亚洲| 日韩八十路老熟女| 清纯唯美亚洲另类| 欧美成人精品一区二区三区| 人人人摸人人| 98久久| 亚洲精品久久久久久久久豆丁网| 日韩一区二区熟女| 亚洲 欧美 日韩 国产一区二区| 国产福利精品最新在线| 色综合久久888| 天天综合网在线| 国产精品久久久久亚洲av| 久久亚洲精品成人av| 天堂涩涩| 97国产|免费| 亚欧无码在线| 蜜臀AV成人精品蜜臀| 亚洲天堂在线怕怕视频| 亚洲s色图| 久久精品人体| 丁香六月婷婷久久综合| 亚洲欧美一区二区三区一猛片| 丁香7月婷婷| 婷婷在线视频| 亚洲操逼无码| 人人妻人人爱人人玩| 久久久久久久久久久久黄色| 九九九九九九九精品视频| 国产大片精久久久久久| 亚洲av影音先锋| 五月激情在线| 午夜毛片高清免费不卡| 欧美午夜视频免费观看| 九X超碰| 狠狠爱综合网| 九九九九九九九九九五码| 在线午夜成人无码视频| 人、人、摸,人、人、草| 中文字幕十五区| 国产视频不卡在线观看| 久操91视频| 欧美激情亚洲| 九九人妻| 久久这里只| 青青草精品| 亚洲男人天堂2017| 特级毛片特黄久久免费看| 欧美九九九| 第四色奇米影视777| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 中国zzijzzijzzwww精品| 夜夜爽夜夜操| 91综合天天| 亚洲性图91| 9999伦理视频| 91嫩草欧美| 91nbbbbbb| 亚洲美女高潮喷水视频| 亚洲国产亚洲天堂| 在线色导航| 亚洲drav色图| 日本3级一区二区免费| AV天堂因数| 99操| 日本操逼视频免费| 日韩操逼HD| 天久久久噜噜噜久久国产精品爽爽| 麻豆 亚洲 97| 思思视频免费看网站| 天美传媒AV国产在线| 不卡一区二区日本视频| 亚洲日韩97| 中出91| 亚洲 欧美 精品专区 极品| 午夜精品久久久久久久男人的天堂| 91热色| 五月婷婷激情| 日韩av电影成人在线| 亚洲欧美精品久| 福利在线观看一区二区| 四虎影视欧美| 性欧美天天| 国产熟女免费观看久久| 97se亚洲综合自| 久久久久97| 亚洲欧洲自拍图片专区满春格| 操逼逼中文字幕| 91丝袜美女国产| 亚洲图片小说欧洲| 骚女高跟AV在线| 97免费在线观看| 国产免费操逼| 草b在线| 激情另类激情| 看一级特黄a大一片| 色噜噜综合在线| 日本顶级天天操狠狠操夜夜操中文字幕| 久久国产精品一区二区| 久久国产999| 久久超碰97| 国产福利电影| 色999五月色| av一区二区三区四区五区久草臀| 天天做天天爱| 一类无码操逼视频| n1038 一二三区| 99精品无码| 精品中文一区二区| 日本123区操B视频| 黑人娇小av在线播放| 国产天天骚| 狠狠操狠狠爱| 无码操逼网| 日本色色色网站免费看不卡| 亚洲精品黄码久久久久| 941超碰| 天天艹天天日| 成人久久精品| 中文字幕交换人妻| 91美女视频电影| 欧美午夜视频免费观看| 久久久国产精品人妻丝袜| 丁香九月婷婷| 电影69乱码96| 国产一国产一级毛片古装| 日本狠狠干| 亚洲综合有码| 人妻AV 中文字幕的| 桑老女人九区| 精品婷婷| 女性91网站| 少妇二级| 国产粉嫩蜜臀av一区二区三区 | 日韩中文字幕在线视频观看| 日韩成人精品视频自拍| 欧美性爱日韩性爱| 日逼视频日本| 国产深喉视频一区二区| 69精品| 91小视频| 欧美少妇高潮久久91| 91大胆欧美| 黄片www视频免费| 色爽爽文学| 国产无码精品无码| 熟女高潮合集-永久久久-成人AV| 国产一区二区三区导航| 成人精品久久| 久久久久久亚洲精品中文字幕人妻| 激情综合 婷婷五月 红杏| 六九九九| 乱伦1色页| 久久久月天| 天天看综合网| 在线色导航| 亚洲人妻久久久| 亚洲美女自拍偷拍视频| 精品久久久久综合无码| 婬女免费一二三区A片| 国产av波波国产精品| 99re公开精品免费视频| 五月天激情影院| 婷色五月| 国产人伦精品一区二区三区| 亚州日韩97| 午夜精品久久久久久久| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | A男人的天堂| 国产精品视频精品一二| 日韩无码视频黄色| 日韩黄色小说| 久久嫩草国产成人一区| 91人人臊| 懂色av色欲av蜜臀av| 天天操妹子| 自拍欧美| 欧洲天天在线| 一级久久性爱视频| 中文字幕,人妻,日韩| 国产精品无套内谢| 日韩欧美日韩| 99色悠悠| 樱花草社区www中国| 人人爽人人精品乱人伦AV| 粉嫩AV一区二区夜夜| 国产精品久久久 | 插入逼91| 精品乱码在线观看| 1204av韩国| 懂色AV中文| 中美日韩毛片| 欧美美女在线高潮999| 欧美在线官网| 精品射1999| 超碰日本97美女人妻人人玩人人爱| 巨爆乳肉感一区二区三区竹菊影视| 日本性爱少妇| 十八禁视频网站| av国产无码| 日本在线视频导航| 亚洲AV免费在线| 日本三级中国三级99人妇网站| 国产成人无码久久精品| 91久热| 五月天激情综合网| 夜夜操二区| 波多野结衣被操50分钟免费视频| 欧美一级色| www久久精品| 强奸乱伦资源| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 麻豆精品一区二区三区四区免费观看| 老鸭窝日丰县女人| 亚洲 日本 不卡| 97欧美在线| 一级AV性爱| 18禁免费视频| 九九九只有精品| 国产精品久久久午夜夜伦鲁鲁| 亚洲中文字幕一区二区| 国产色产精品在线观看| 国产乱伦亚洲| 久久99视频| 久久人妻四季| 天天影视网色欲色香| 999色欧美中文字幕| 国产高清自拍| 色色色欧美| 99性爱视频| 中出789在线视频| 97操综合| 精品日韩人妻视频| 欧美一级做a爰片免费视频| 久久五月份| 97超碰资源网| 麻豆成人影音在线| 综合久久久久久久综合网| 91人妻PORNY九色大屁股| 国产18精品亚洲精品| chaopen97久久| AV 少妇 人妻 偷拍| 沈阳熟女高潮对白视频| 亚洲在高跟鞋自慰久久在色线| 欧美操逼熟女| 天天综合网在线91| 蜜桃久久久久久久| 精品国产乱码久久久兰草影视| 亚洲drav色图| 日本操逼视频在线| 六月婷婷激情| 精品一区二区久久| 日本精品网站在线中文| 中文字幕五区| 久久久三区二区一区| 国产精品免费1区2区视频| 九九热精品| 国产精品久久久久久夜夜夜夜| 在线免费观看高清无码视频| 九九色影院| 97在线资源| 亚洲欧洲中文日韩女优乱码| 亚洲欧美大| av天堂加勒比| 久久久久久久国产a∨| 国产精品麻豆成人av| 九九九九九九九精品视频| 99re6国产精品99re| AⅤ片水多多| 欧美极品女人的天堂| chaopen97久久| 激情网色| 少妇内射视频| 欧美一级久久久久久久大片动画| 青青草视频久久久久| 国产白丝精品在线观看| 啊啊啊啊嗯嗯嗯用力好爽 | 亚洲精品亚洲人成在线麻豆| 亚洲情色一区二区三区| 日韩无码精品综合久久| 亚熟在线| WWW啪啪的com| 偷拍在线观看视频| 欧美日本中字另类在线| 少妇内射www在线观看视频| 91视频伊人| 狠狠搞 亚洲91| 9色国产精品一区粉嫩| 国产女上位好爽在线| 97超碰人妻| 一区二区三区 丝袜 高跟 美腿| 亚洲高清综合网| 偷拍 精品另类 凸凹了四区| 9久精品| 神马久久久久眼| 精品欧美不卡在线播放| 九九亚洲精品| 国产无马视频| 人妖欧美一区二区| 国产女同视频在线播放| 国内外激情在线| 亚洲熟妇自偷自拍另欧美| 久久超碰av在线| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 911粉嫩人妻| 欧美一级做a爰片免费视频| 欧美淫乱视频| 天天流夜夜操| 白丝被操91| 精品中文一区二区| 久草大| 91香蕉国产尤物视频| 久久97资源 网| 国产第25页在线观看| 大逼色网站| 97综合在线观看| 人妻81p| 亚洲自拍小说| 伊人久久国产免费观看视频| 亚洲精品官网在线观看| 成人三级片一区二区三区视频| 天美国产三级传媒| 十八禁av无码免费网站APP| 超碰97综合网| 三级片大波波| 91 亚洲 欧美 日韩 国产 综合| 东北女人高潮视频| 久久綜合很很很| 日韩一级片| 日韩免费高清大片在线| 欧美综合中文| 日日夜夜青青草母狗| 久99久视频| 四虎国产精品永久入口| 欧美综合网站999| 夜夜高潮夜夜爽高清视频一 | 欧美黄色手机在线观看| 欧美日韩精品久久久久东北老熟妇| 欧美不卡在线美女| 久久久无码av精| 天天澡天天爽日日AV| 精品无码一区二区人妻久久蜜桃| 国产精品一区二区在钱播放| 五月婷婷丁香中文字幕| 91精品人妻偷情| 欧美同性恋 的搜索结果 - 91n| 人人污日韩一区二区| 婷婷综合久久| 国产男人又猛又粗又爽| 色y情视频免费看| 亚洲精品骚逼| 欧美日韩222| 久久久99久9| 婷婷色色五月天福利| 中文字幕精品免费一区二区| 色网在线视频观看免费| 亚洲国产日韩欧美熟妇在线| 日韩pv中文| 日本人妻天堂网站在线播放| 久艹99| 熟妇熟女一区二区三区| 自怕偷自怕亚洲精品| 日韩AV熟女乱伦| 色香阁在线| 欧美超碰人妻97| 日韩精品一二三| 岛国片在线播放| 在线播放中文字幕| 欧亚日韩三区| 无马一区二区| 国产操伦| 色性综合| 国产风韵犹存熟妇三区| 久操精品| 午夜福利成人免费视频| 亚洲丝袜天堂| 色爱天堂| blacked精品一区国产| 亚洲欧美一区二区三区在钱蜜桃| 欧美一区二区观看在线| 日韩欧美性爱电影在线观看| 亚洲91网| 国产1024在线播放| 亚洲中文字幕精品一区| 国产成人欧美精品在线| 日本道不卡| 国产精品人妻无码久久久老鸭窝 | 超碰日韩美妻| 福利大香蕉| 中文字幕午夜精品久久久| 国产少妇内射| 激情综合 婷婷五月 红杏| 欧美色另类| 亚洲动态色图| 久久久久久亚洲Av无码精| 性爱视频免费网址| 强奸乱伦大香蕉| 男男H黄动漫啪啪无遮挡网站| 色色色色电影网| 67914亚洲精品| 污到发麻的视频 国产| 麻豆久久久久久久久丝袜| 久久一区,青青青青草视频在线播放| 色五月69夫妻| 日日噜噜夜夜久久亚洲一区二区 | 国产日韩欧美三级片| 99无码| 欧美 日韩 国产传媒| 91强在线播放| 久久久一区二区三区麻豆| 97在线免费看视频| 级做a爱无码性色永久免费| 奇米狠999| 激情综合五月丁香| 久久伊人最新网址视频| www.久久制服糖| 国产树林里野战在线看| 欧美色五月| 伊人青青草久久| 97在线观看视频| 国产毛片片精品天天看视频| 综合欧美激情网| 五月综合久久| 亚洲综合性网址| 成人性交午夜免费片| 午夜福利一区二区影院| 亚洲AV无码久久久国产精品| 精品无码一区二区| 亚洲欧美综合网站| 天美精品原创av片国产| 欧美一区二区观看在线| 狠狠躁AV| 欧美性少妇| 黄色操人| 一区二区偷拍拍视频| 蜜臀亚洲综合一二三四区| 日韩国产十八禁| 亚洲成人贴图| 玖玖蜜臀资源网| 欧美 亚洲 另类 综合| 精品综合久久久久久97| 人人操人人爽人人操人人| 韩国黄色片精品久久久| 欧美天堂超碰97| 男人天堂2017| 大香蕉免费3| 亚州欧美一区| 老鸭窝成人| 国产在线播放成人免费| 激情久久久| 日本999精品| 老熟妇乱轮| 婷婷五月天丁香| 亚洲影视第一页| 97在线精品观看视频| 天天操天天射青青草| 久9爱精品| 亚洲色图日韩精品| 91性感网站| 岛国免费视频在线| 97香焦色区| 94色色电影网| 色综合色色| 97中文综合| 日本在线播放不卡一区| 久久亚洲色图中文字幕| 久久受www免费人成| 色 婷97| 在线视频免费观看午夜| 国产欧美日韩女同性恋ww喷水精品| 天天干人妻视频| 亚欧韩av| 99re99在线视频| 久久性爱免费送| 一二三四区电影| 欧美日韩第一页| 亚洲色图 91| 丁香五月性爱| 97免费视频在线| 99热| 免费精品无码一级毛片牛牛影视 | 亚洲色宗合| 天天看综合网| 欧美影院一区二区三区| 亚洲限制级在线| 欧美亚洲素人制服精品| 成人熟女区| 国产精品自在线发布| 日韩成人人妻网站| 激情综合婷婷| 亚洲色图欧美色图另类图片| 骚乳在线| 欧美色视频在线| 嫩草 我啊~嗯~在线| 99日韩| 啊啊啊免费视频| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 伊人丝袜美腿高跟在线观看高清| 午夜.DJ高清在线观看免费7 | 无码聚合| 日本媚薬中文字幕在线| 九九九九九九亚洲| 亚洲伊人a线观看视频| 黑人干亚洲| 国产玖玖| 99re热有精品视频国产| 夜夜免费视频| 日韩免费人妻色情网站| 色哟哟综合| 少妇激情AV| 激情一区二区三区在线观看| 被窝影院午夜看片无码| 97免费视频在线观看视频| 在线毛片片免费观看| 无码九九| 加勒比性爱成人在线| 久久久禁| 亚洲成人性爱网站在线播放| 今日头条成人一区二区三区四虎精品| 日人妻视频91| 国产精品视频内谢女人| 啊啊啊不要嗯嗯在线观看| 99色色网| 色五天伊人| 日韩15p| 中文字幕人乱码中文字的预防方法 | 国产精品高潮久久久无码| 国产精品久久久久久久免牛肉蒲团 | 五月天偷拍| 天天摸夜夜添无码小视频| 国产搭汕a级片| m欧洲一级午老| 日韩一区二区精品视频| 操逼片国产| 男人的天堂2018| 啊啊啊在线看| 丝袜综合| 欧美制服网站美腿丝袜| 久久精品国产亚洲AV无码电影| 一级性爱网| 综合少妇网| 午夜综合在线| 亚洲综合888| 婷婷亚洲综合| 人妻人人做人人澡人人爽欧美一区| 97干97色| 欧中美三级一区二区三区| 久噜噜| 亚洲限制级在线| 99在线免费视频| 亚洲欧美日韩精品久久久一区二区| 亚洲影院成人| 97碰久久| 欧美激情区| 视频在线观看青青99国产| 蜜臀AV成人精品蜜臀| 欧美黑人猛交春色影视大全| 91超级碰碰碰| 熟女突然公开看18禁影片| 一牛影视成人片免费| 欧美大波激情xxxx| 伊人国产成人av网站| 熟女熟妇一区二区三四区| 无码精品啪啪啪一区二区三区三州| 日韩ab网 | 久久伊人亚洲AV无码网站| 丰满人妻区一区二区三| 亚洲欧美清纯| 欧洲精品二区| 97国产精品一区| 91蜜臀人妻中文字幕在线| 日韩国产九九精品一区二区三区毛片| 91综合国产精品| 午夜啊啊啊| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 综合操逼| 丁香六月东京热| 国产精品香蕉热久久新品| 青娱乐国产精品| 蜜乳AV一区二区三区四| 草草网站影院白丝内射| 99国产精品视频尤物| 乱伦a片视频| 亚洲免费成人精品电影| 熟女精品va中文字幕| 久久精品国产亚洲AV高级北京| 岛国片国产成人亚洲播放| 人人插人人摸人人| av日韩国产一区二区| 亚洲五码一区二区三区| 黄片直播三级黄片两女一男| 黄色一级视| 婷婷视频网| 亚洲图片 91| 蜜桃久久久久久久| 国产精品久久久777| 裸体1区| 情色五月天就去干| 天天综合网在线91| 亚洲精品久久久久毛片A片拉屎| 日欧操屄| 三级网色| 99色在线| 99www.bibizy香蕉资源国产一区二区三区高清 | 人人色97| 欧美 日韩 另类 亚洲| 操死我了啊啊啊| 97操b| 免费观看网黄| 凸凹视频在线观看| 中文字幕在线播放2中文字幕在线观看2| 偷拍欧美综合| 中文字幕女同在线| 91日韩网站| 五月丁香黄色网| 97人人操人人摸| 亚洲少妇喷视频看| 无码视频一区二区| 亚洲一区二区中文字幕| 日本国产亚洲一区在线观看| 黑人无码一区二区| 天天综合色电影| 九九九精品一区二区无码| 久操频道免费在线呗看| 老熟女乱伦一区| 丁香五月自拍| 日本东京热大香蕉a片| 老司机香蕉久久久久| 蜜乳AV.COM| 蜜桃久久一区二区三区| 国产免费久久精品99re韩国| 好爽视频在线观看| 欧美日韩操逼动图| 青娱乐av在线| avav青青草久久夜| 欧美1区二区三区公司| 九九99久久| 亚洲综合贴图91 | 欧美麻豆成人同性GⅤ在线| 99热99re超碰精品| 午夜福利一区二区三区四区五区色婷婷| 日韩欧美日韩| 国产超碰| 激情四射五月天| 日韩肏逼视频| 99天堂网| 人人九九精| 亚洲小电影免费涩涩成人在线高清 | 中文字幕女同在线| 12一15性XXXX粉嫩国产| 丁香五月天堂网| 欧美日韩97在线| 午夜精品久久久久久久久久蜜桃| 亚码激情| 96久久久久久久| 天天干人妇| 无码操逼天堂| 中国一级操逼视频| 欧美性区| 日本国产欧美一区三区二区| 九九亚洲| 乱人乱色一区二区三区免费| 伊人影院综合是一个与深夜成人在线| 97se综合网| 欧亚无码视频| 国产视频一区二区在线观看| 激情欧美97| 欧洲色| 久久香蕉国产线看观看亚洲女人 | 久久日本熟女精品一区| 日本人妻伦在线中文字幕| 后X久久| 国产精品福利视频| 日韩三四五区| 亚洲色图图片| 中文字幕一区 二区三四五 区日 日骚| 日本布卡一区二三区| 免费一级欧美片片线观看| 少妇精品久久久八区九区| h无码动漫在线观看| 嗯嗯啊啊日韩精品| 日韩av在线免费网站| 加勒比久久av| 免费看欧美美女黄色大片| 欧美爱国产综合、| 丁香五月激情综合国产| 亚洲精品 欧美97色色| 九九久久精品| 91人人| www.国产高潮精品| 老熟妇91| 日本黄页视频在线观看| 久久色人体| 日本超碰色精品| 国产操偷| 日韩无码人妻中字久久三区四区| 丁香五月色情| av影片在线观看不卡| 日韩精品人妻中文字幕有码午| 人人看人人插| 久久久久久久久国产| 91日本在线观看| 欧美亚洲图片| 神马久久久久久久久久| 亚洲无码一二三区| 97爱爱官网| 精品久一区免费| 波多野结衣被操50分钟免费视频 | 日韩亚洲国产视频| 97在线视频观看免费| 一区二区三区在线资源| 免费观看网黄| 职场同事知名国产国产精品久久欧美日韩| 一区在线观看中文字幕| 国产深喉视频一区二区| 青青草日本中文字幕| 白嫩国模丰满一二三区| 999综合网| 精品人妻一区二区三区视频| av资源在线播放天堂| 人人操人人色网| 亚洲精品1区| 亚洲操操操| 人人操我人人干| 青女偷拍网| 激情终合网| 天天做天天爽| 日本熟女免费視颖| 女优大全 - 91n| 久久久久网站-538在线视频-欧美永久乱码 | 亚洲天天影视色综合| 日韩一级二级| 亚洲天堂人妻熟妇视频| 精品福利| 综合大香蕉美。| 欧美色图私拍91| 大香蕉九九| 午夜福利av电影在线| 日韩猛交| 欧美在线干| 又摸又舔在线观看网站| a久久| 日本国产高清色www视频在线| 日韩97| 中韩中文字幕在线观看| 熟女一区二区三区| 看看小穴| 成人片在线播放| 91人妻做a观看视频| 亚洲一区二区在线观看91| 日韩电影免费网站麻豆视频| 日韩精品9999| 97AV爱| 99热官网| 国产女人91精品嗷嗷嗷嗷| 一级二级三级黑人无码| 成人久久久| 麻豆av一区二区| 国产中午字一暮区| 97超碰久久色| 日韩av三四区| 国产av高清版| 六月婷婷激情| 国产一区二区三区影片| 日本一级婬片试看三分钟| 国产1024在线播放| 亚洲欧美999| 啊啊啊免费| 熟妇女伦乱视频| 亚洲欧美91| 欧美日韩不卡传媒| 中出人妻中文字幕91在线| 中文字幕超碰CAO| 97免费视频网| 欧美内射少妇| 高清不卡视频| 色香阁在线| 91精品电影18| 久久这里都是精品| 97精品国产97久久久| 久久人妻丝袜一区二区三| 五月丁香婷婷综合| 五月天综合网| 在线只有精品| 99热这里| 嗯啊不要在线观看嗯啊| 婷婷爱五月| 玖玖97综合| 天天干一区二区| 国产白丝精品在线观看| 色成人Www精品永久观看| 国产美女裸体秘 永久无遮挡| 最新国内自拍av免费| 久久国产熟女影院| 免费福利视频中文字幕| 国产特级毛片AAAAAA高潮流水 | 久夜操| 天堂性色| 欧美第一页|