为什么 Bert 的三个 Embedding 可以进行相加?

server/2024/12/14 19:24:41/

Embedding的本质

Embedding的数学本质,就是以one hot为输入的单层全连接。

也就是说,世界上本没什么Embedding,有的只是one hot。

现在我们将token,position,segment三者都用one hot表示,然后concat起来,然后才去过一个单层全连接,等价的效果就是三个Embedding相加。

在这里用一个简单的例子在尝试理解一下:

假设Token Embedding矩阵的维度为[4,768],Position Embedding的矩阵维度为[3,768],Segment Embedding矩阵维度为[2,768]。

对于一个word来说,假设它的Token one-hot为[1,0,0,0] ; 它的Position one-hot为[1,0,0],它的segment one-hot为[1,0]。

那么这个字最后的word Embedding,就是上面三种Embedding相加之和。

如此得到的word Embedding,事实上和concat后的特征:[1,0,0,0,1,0,0,1,0],在过维度为[4+3+2,768]=[9,768]的全连接层,得到的向量其实是一样的。

我们可以再换一个角度进行理解:

不妨直接将三个one-hot特征concat起来得到的[1,0,0,0,1,0,0,1,0],虽然形式上不再是one-hot了,但是可以将其映射到三个one-hot组成的特征空间,此时特征空间的维度为432=24,而在这个新的特征空间中,这个字的one-hot就是[1,0,0,0…] (23个0)。

此时,Embedding的矩阵维度就是[24,768],最后得到的word Embedding依然是和上面等效,但是三个小Embedding矩阵的大小会远远小于新特征空间对应的Embedding矩阵大小。

当然,在相同初始化方法的前提下,两种方式得到的word Embedding可能方差会有差别,但是BERT模型还有Layer Norm,会把Embedding结果统一到相同的分布。

所以BERT的三个Embedding相加,本质上可以看做一个特征融合,强大如BERT应该可以学到融合后特征的语义信息的。

转自知乎,侵权删:
https://www.zhihu.com/question/374835153


http://www.ppmy.cn/server/150168.html

相关文章

全球叉车市场 2023 - 2032 年发展趋势:自动化、电商与电动叉车的崛起

全球叉车市场到2032年将达到955.1亿美元,年复合增长率为7.49% | Astute Analytica 全球叉车市场正迎来显著增长,市场估值预计将从2023年的498.6亿美元增长至2032年的955.1亿美元,预测期内年复合增长率(CAGR)为7.49%。这…

docker搭建haproxy实现负载均衡

华子目录 获取haproxy镜像建立haproxy容器的数据卷获取haproxy的配置文件编写yaml文件运行测试 获取haproxy镜像 [rootdocker-node1 ~]# docker pull haproxy:2.3建立haproxy容器的数据卷 conf目录为数据卷 [rootdocker-node1 ~]# mkdir /var/lib/docker/volumes/conf/获取h…

制作WINDOWS恶意软件以获取AHELL时,通常使用什么软件

制作 Windows 恶意软件并获得 Ahell(假设是指“Access Hell”或者类似的控制/权限提升目标)时,攻击者通常会使用一系列工具和技术来构建和部署恶意软件。以下是一些常见的工具和技术,它们被广泛用于创建恶意软件并获取系统权限&am…

第二章 包装类和泛型

一 包装类 1.产生的原因: Java的发明者既想要保存原有基本类型不变,但同时很多功能机制又需要为引用类型/类才可以使用(可以将其与Object类统一为统一体系),所以将基本类型包装了一下,为包装类型 2.写法…

RabbitMQ中点对点(Point-to-Point)通讯方式的Java实现

RabbitMQ是一个广泛使用的开源消息代理软件,它实现了高级消息队列协议(AMQP)。RabbitMQ支持多种消息传递模式,其中最基本的是点对点(Point-to-Point)通讯方式。在这种模式下,消息生产者将消息发…

java配置环境变量 jdk配置环境变量 linux环境

一. 使用yum安装jdk centos系统中可以使用yum来安装jdk, 执行以下命令 查询yum仓库信息 yum list java* java-1.8.0-openjdk.x86_64 1:1.8.0.422.b05-1.1.al7 updates java-1.8.0-openjdk-devel.x86_64 …

使用Vue.js的步骤

使用Vue.js开发一个应用的详细流程和代码示例如下: 1. 环境准备和项目初始化 使用Vue CLI创建项目 Vue CLI是一个全局命令行工具,用于快速搭建Vue项目。首先,你需要安装Vue CLI: bash npm install -g vue/cli # 或者 yarn glo…

【解决】k8s使用flannel网络插件的问题整理

问题1: 拉取镜像失败ImagePullBackOff 问题排查 1、查看所有pod的状态 kubectl get pods --all-namespaceskube-flannel的两个pod状态为ImagePullBackOff,由于镜像拉取异常导致 2、查看pod启动日志,获取更详细的信息 kubectl logs -n 命名空间namesp…