日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Embedding改进CBOW

發布時間:2025/3/12 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Embedding改进CBOW 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

假設詞匯量為 100 萬個時的 CBOW 模型如下,輸入層和輸出層存在 100 萬個神經元。

下面兩個問題導致耗時嚴重。

問題一、輸入層的 one-hot 表示和權重矩陣的乘積。one-hot 表示占用內存過多,計算 one-hot 表示與權重矩陣 的乘積,需要花費大量時間。

問題二、中間層和權重矩陣的乘積以及 Softmax 層的計算。需要大量的計算,花費大量時間。

解決問題一:

計算one-hot 表示矩陣和權重矩陣的乘積,其實就是將權重矩陣的某個特定的行取出來。如下圖所示。

Embedding 層:一個從權重矩陣中抽取單詞ID對應行(向量)的層。

使用 params 和 grads 作為成員變量,params中保存要學習的參數,grads中保存梯度。并在成員變量 idx 中以數組的形式保存需要提取的行的索引(單詞ID)。

正向傳播:從權重矩陣W中提取特定的行,并將特定行的神經元原樣傳給下一層。

反向傳播:上一層(輸出側的層)傳過來的梯度將原樣傳給下一層(輸入側的層)。上一層傳來的梯度會被應用到權重梯度dW的特定行(idx)。

反向傳播里面,將梯度累加到對應索引上,用于處理idx 中出現了重復的索引的情況。dW[…] = 0的目的是保持dW的形狀不變,將它的元素設為0。

將原來CBOW模型中輸入側的 MatMul 層換成 Embedding 層,減少內存使用量,避免不必要的矩陣計算。

class Embedding:def __init__(self, W):self.params = [W]self.grads = [np.zeros_like(W)]self.idx = Nonedef forward(self, idx):W, = self.paramsself.idx = idxout = W[idx]return outdef backward(self, dout):dW, = self.gradsdW[...] = 0if GPU:np.scatter_add(dW, self.idx, dout)else:np.add.at(dW, self.idx, dout)return None 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Embedding改进CBOW的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。