假设词汇量为 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相关推荐

  1. 【Pytorch基础教程28】浅谈torch.nn.embedding

    学习总结 文章目录 学习总结 一.nn.Embedding 二.代码栗子 2.1 通过embedding降维 2.2 RNN中用embedding改进 2.3 deepFM模型中embedding R ...

  2. [深度学习] 一篇文章理解 word2vec

    1 词的独热编码 One-Hot 表示 到目前为止最常用的词表示方法是 One-hot Representation,这种方法把每个词表示为一个很长的向量.这个向量的维度是词表大小,其中绝大多数元素为 ...

  3. Word2Vec解读

    背景 从上一章神经网络语言模型(NNLM)我们了解到,他的优点相比传统的统计语言模型,首次引入词向量word embedding的概念,将离散的统计模型转为了高维空间中的连续稠密向量,解决了传统统计语 ...

  4. NLP-词向量(Word Embedding)-2013:Word2vec模型(CBOW、Skip-Gram)【对NNLM的简化】【层次Softmax、负采样、重采样】【静态表示;无法解决一词多义】

    一.文本的表示方法 (Representation) 文本是一种非结构化的数据信息,是不可以直接被计算的.因为文本不能够直接被模型计算,所以需要将其转化为向量. 文本表示的作用就是将这些非结构化的信息 ...

  5. Pytorch:jieba分词、hanlp分词、词性标注、命名实体识别、one-hot、Word2vec(CBOW、skipgram)、Word Embedding词嵌入、fasttext

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 文本预处理及其作用: 文本语料在输送给模型前一般需要一系列的预 ...

  6. 知识图谱-KGE-语义匹配-双线性模型-2016:ComplEx【ComplEX是Distmul的改进】【将实数的Embedding映射到复数空间,从而可以处理非对称关系】

    ComplEX是Distmul的改进. 前提:采用Bilinear Model,该模型的打分函数为f (h,t)= hT·r·t 基础假设:采用复数u = a + bi的方式表示h和t. 打分函数:因 ...

  7. 什么是embedding?

    本文转自:https://www.jianshu.com/p/6c977a9a53de 简单来说,embedding就是用一个低维的向量表示一个物体,可以是一个词,或是一个商品,或是一个电影等等.这个 ...

  8. word2vec原理(一): 词向量、CBOW与Skip-Gram模型基础

    word2vec原理(一): CBOW与Skip-Gram模型基础 word2vec原理(二):基于Hierarchical Softmax的模型 word2vec原理(三): 基于Negative ...

  9. 06_1.Pytorch中如何表示字符串、word embedding、One - hot、Embedding(Word2vec、BERT、Glove)【学习总结】

    1.6.1.如何表示字符串 1.6.1.1.word embedding 1.6.1.1.1.文本表示(Representation) 1.6.1.1.2.独热编码 | one-hot represe ...

最新文章

  1. 技术图文:如何在Python中定义二维数组?
  2. 学会用core dump调试程序错误(转)
  3. 【Rsync + inotify】 实时同步远程服务器目录文件
  4. IOS弹出视图preferredContentSize
  5. UI2Code智能生成Flutter代码--整体设计篇
  6. 【数学基础】参数估计之贝叶斯估计
  7. cudaMemcpyToSymbol使用
  8. flowable实战(十二)flowable 核心表ACT_RU_EXECUTION 详解(初学者误解的一张表)
  9. Kafka必须掌握的核心技术:Java基础入门期末考试
  10. VB API 之 第七课 字体应用四
  11. 手把手教你开发chrome扩展
  12. 教你如何更好的用ubuntu
  13. C语言编写贪吃蛇游戏
  14. ps 打开失败 提示:暂存盘已满
  15. 帮助你提高排版技巧的18个 PS 文字特效教程
  16. grpc服务认证实现方式
  17. Java设计模式——工厂模式——模拟Spring
  18. 旷视科技面试——算法岗
  19. 51单片机常用波特率初值表(11.0592M和12M)
  20. mac安装完mysql后关机特别慢_升级macOS Sierra 10.12 关机慢

热门文章

  1. 富编译器汇总及二次开发Demo
  2. js时间格式化通用方法
  3. 部分排序算法c语言实现
  4. CentOS7 shell脚本安装jdk
  5. unity塔防游戏怪物转向_红包版塔防游戏合集-可以赚钱领红包的塔防游戏-无广告塔防游戏红包版大全...
  6. 怎么查看linux网关,如何查看linux服务器网关
  7. IDEA配置xml文件头报错:URI is not registered (Settings | Languages Frameworks | Schemas and DTDs)解决方法,亲测有效
  8. 多表关联查询_【函数007】 EXCEL多表关联查询实战
  9. java写入carbondata_Carbondata使用过程中遇到的几个问题及解决办法
  10. 辽宁沈阳计算机学校王斯琪,青春正好,理所当“燃”——沈阳万合技校开展2020-2021年度春季学期跳大绳比赛...