GLU(Gated Linear Unit) 门控线性单元

文章目录

  • 一、RNN
  • 二、GLU
    • 2.1 整体结构
    • 2.2 输入层(Input Sentence+Lookup Table)
    • 2.3 中间层(Convolution+Gate)
    • 2.4 输出层(Softmax)
    • 2.5 实验结果
    • 2.6 实现代码
  • 三、RNN与GLU的对比
  • 参考资料

GLU可以理解为能够并行处理时序数据的CNN网络架构,即利用CNN及门控机制实现了RNN的功能。优点在进行时序数据处理时严格按时序位置保留信息从而提升了性能,并且通过并行处理结构加快了的运算速度。

一、RNN

可以通过之前的博客回顾一下RNN的典型代表LSTM:RNN神经网络-LSTM模型结构
在这里插入图片描述

在这里插入图片描述

二、GLU

GLU是2016年由Yann N. Dauphin在论文《Language Modeling with Gated Convolutional Networks》中提出。

论文地址:https://arxiv.org/abs/1612.08083

2.1 整体结构

GLU在语言模型的建模方法上相比于循环神经网络更具有竞争力,它提出了一种简单的线性门控单元来堆叠卷积层从而使得文本中的 Token 可以并行化处理来获得上下文的语义特征。而且与循环神经网络相比,其复杂度从 O ( N ) O(N) O(N) 降低到 O(N/k) ,其中的 k k k 为卷积核的宽度, N N N 为文本的上下文集合。论文中整个模型的结构如下图所示:
在这里插入图片描述

从上图可以清晰的看到整个模型的结构,主要也就分为三个部分:输入层(Input Sentence+Lookup Table)、中间层(Convolution+Gate)以及输出层(Softmax),很明显的三层式结构。

2.2 输入层(Input Sentence+Lookup Table)

对于模型的输入的每个文本我们可以表示为 W = [ w 1 , w 2 , . . . , w n ] W = [w_1, w_2,..., w_n] W=[w1,w2,...,wn] ,其中的 w 1 , w 2 , . . . , w n w_1, w_2,..., w_n w1,w2,...,wn 为文本中的每个 Token ,这些 Token 在输入到模型的 embedding layer 时通过查表获取相应的向量,可表示为 E = [ e w 1 , e w 2 , . . . , e w n ] E = [e_{w1}, e_{w2},..., e_{wn}] E=[ew1,ew2,...,ewn] ,其中 E E E 作为该条文本的向量集合。

2.3 中间层(Convolution+Gate)

对于输入层获取的文本向量 E = [ e w 1 , e w 2 , . . . , e w n ] E = [e_{w1}, e_{w2},..., e_{wn}] E=[ew1,ew2,...,ewn] 来说,首先输入到两个卷积层 Conv1Conv2,得到两个输出 C c o n v 1 C_{conv1} Cconv1 C c o n v 2 C_{conv2} Cconv2 ,然后将 C c o n v 2 C_{conv2} Cconv2 输入到激活函数 Sigmoid 中,然后通过Hadamard积逐位相乘得到相应的隐层向量 h h h ,更一般的可表示为:

在这里插入图片描述

在这里插入图片描述

到这里可以看出,门控线性单元与LSTM的门控本质上是一样的,只不过在计算隐层向量时不需要依赖上一个时间步。通过堆叠多层卷积就可以得到文本的上下文信息。

作者还提出了一种GTU的门控机制,其实也就是将GLU的前一项利用 tanh 函数进行激活,但多引入一个激活函数就代表梯度在反向传播过程中就多了一项衰减项,因此,作者认为GLU优于GTU。GTU表示为:
在这里插入图片描述

2.4 输出层(Softmax)

输出层采用了 softmax 函数,将神经元的输出映射到 [ 0 , 1 ] [0, 1] [0,1] 的区间,并且满足所有输出的和为1。对于语言模型建模而言,其词表为 V V V v i v_i vi则表示词表中的第 i i i 个词语,那么语言模型在预测到这个词语的概率经过 softmax 归一化就为:
在这里插入图片描述

2.5 实验结果

在这里插入图片描述

从图上可以看出,在相同的计算资源的条件下,GCNN-13的困惑度小于2层神经元数为2048的LSTM模型,由此可以看出GCNN的优越性,并且GCNN是可以并行计算的。

在这里插入图片描述
将门控线性单元GLU与其他机制以及没有门控的模型进行比较,可以明显看出GLU在模型收敛时更快,并且困惑度是比较低的。

2.6 实现代码

import torch
import torch.nn as nnclass GateLinearUnit(nn.Module):def __init__(self, embedding_size, num_filers, kernel_size, vocab_size, bias=True, batch_norm=True, activation=nn.Tanh()):super(GateLinearUnit, self).__init__()self.batch_norm = batch_normself.activation = activationself.embedding = nn.Embedding(vocab_size, embedding_size)self.conv_layer1 = nn.Conv2d(1, num_filers, (kernel_size, embedding_size), bias=bias)self.conv_layer2 = nn.Conv2d(1, num_filers, (kernel_size, embedding_size), bias=bias)self.batch_norm = nn.BatchNorm2d(num_filers)self.sigmoid = nn.Sigmoid()nn.init.kaiming_uniform_(self.conv_layer1.weight)nn.init.kaiming_uniform_(self.conv_layer2.weight)def gate(self, inputs):"""门控机制"""return self.sigmoid(inputs)def forward(self, inputs):embed = self.embedding(inputs)embed = embed.unsqueeze(1)output = self.conv_layer1(embed)gate_output = self.conv_layer2(embed)# Gate Operationif self.activation is not None:# GTUoutput = self.activation(output) * self.gate(gate_output)else:# GLUoutput = output * self.gate(gate_output)if self.batch_norm:output = self.batch_norm(output)output = output.squeeze()return outputelse:return output.squeeze()if __name__=="__main__":x = torch.randint(1,100,[32, 128])glu = GateLinearUnit(embedding_size=300, num_filers=256, kernel_size=3, vocab_size=1000)out = glu(x)

三、RNN与GLU的对比

GLU是能够并行处理时序数据的CNN网络架构,即利用CNN及门控机制实现了RNN的功能。优点在进行时序数据处理时严格按时序位置保留信息从而提升了性能,并且通过并行处理结构加快了的运算速度。

GLU与RNN的结构不同才实现了功能不同,主要有两个区别,一个相同点:

  • 在是否使用时间窗口上不同。RNN与LSTM并不存在时间窗口概念,直接对时序数据进行迭代式处理,至序列结束;而GLU使用了时间窗口,与Transformer类似,只能处理定长的时序数据。

  • 在是否使用了卷积运算上不同。RNN不存在卷积运算,对于时序数据的处理机制是不断将当前时刻的信息加工处理,逐个添加至隐藏层中信息;而GLU使用了卷积运算,主要目标是将时间窗口内当前时刻之前的所有信息进行压缩,由于信息时序位置与实际内容均未发生变化,因而使可以用CNN直接并行处理各时刻的信息数据。

  • 在是否使用了门结构上相同。GLU与LSTM均使用了输出门的结构,但略去了LSTM中的遗忘门与写入门,通过输出门实现了基于时序信息位置对内容输出的控制,达到了理想地输出效果。

参考资料

  • FLASH:高效Transformer解析(1)—GLU(Gated Linear Unit,门控线性单元)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/697626.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES扩缩容

ES扩容 1.1 页面扩容ES1 1.2 拷贝插件及ssl文件 JSON [ec_admin@kde-offline3 ~]$ sudo rsync -avP /usr/kde_ec/2.3.6.6-1/elasticsearch1/plugins/* kde-offline6:/usr/kde_ec/2.3.6.6-1/elasticsearch1/plugins/ ;echo $? [ec_admin@kde-offline3 ~]$ sudo rsync -avP /us…

“圣诞树图案的打印~C语言”

圣诞树图案的打印~C语言 题目原文:[圣诞树](https://www.nowcoder.com/practice/9a03096ed8ab449e9b10b0466de29eb2?tpId107&rp1&ru/ta/beginner-programmers&qru/ta/beginner-programmers/question-ranking&difficulty&judgeStatus&tags&…

linux部署安装DataX和DataX-Web

1.基础环境 JDK(1.8 及其以上都可以,推荐 1.8),安装过程略 Python(2 或者 3 都可以),安装过程略 Apache Maven 3.6.1(只有DataX源码编译安装时需要) 1.1下载maven安装…

【MQTT】paho.mqtt.c 库的“介绍、下载、交叉编译” 详解,以及编写MQTT客户端例子源码

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-05-13 1…

kubeflow文档-介绍与架构

1. kubeflow介绍 Kubeflow项目致力于使机器学习(ML)工作流在Kubernetes上的部署变得简单、可移植和可扩展。目标不是重新创建其他服务,而是提供一种直接的方法,将ML的开源系统部署到不同的基础设施中。无论在哪里运行Kubernetes&a…

【408真题】2009-10

“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…

【数据结构】-- 相交链表-环形链表

交叉链表 . - 力扣(LeetCode) 如果链表的两条链的长度一样,链表两端对齐,解决这个问题将会变得非常简单,直接分别遍历两个链表,想等时的节点即为所求。我们想办法让链表对齐--分别从a和b遍历链表&#xff…

群晖NAS本地搭建Bitwarden密码管理服务并实现远程同步密码托管

文章目录 1. 拉取Bitwarden镜像2. 运行Bitwarden镜像3. 本地访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问Bitwarden7. 固定公网地址8. 浏览器密码托管设置 Bitwarden是一个密码管理器应用程序,适用于在多个设备和浏览器之间同步密码。自建密码管理软件bitwarde…

数字人解决方案——AniTalker声音驱动肖像生成生动多样的头部说话视频算法解析

1.概述 AniTalker是一款先进的AI驱动的动画生成工具,它超越了简单的嘴唇同步技术,能够精准捕捉并再现人物的面部表情、头部动作以及其他非言语的微妙动态。这不仅意味着AniTalker能够生成嘴型精准同步的视频,更重要的是,它还能够…

增强型植被指数EVI、ndvi数据、NPP数据、GPP数据、土地利用数据、植被类型数据、降雨量数据

引言 多种卫星遥感数据反演增强型植被指数(EVI)产品是地理遥感生态网推出的生态环境类数据产品之一,产品包括1986-2021年度月度数据,数据类型tif栅格数据。该产品经过专家组验证,质量良好。 正文 栅格数据源 数据名…

CentOS使用Docker搭建Nacos结合内网穿透实现无公网IP远程登录本地管理平台

文章目录 1. Docker 运行Nacos2. 本地访问Nacos3. Linux安装Cpolar4. 配置Nacos UI界面公网地址5. 远程访问 Nacos UI界面6. 固定Nacos UI界面公网地址7. 固定地址访问Nacos Nacos是阿里开放的一款中间件,也是一款服务注册中心,它主要提供三种功能:持久化…

Windows 11 下 kafka 的安装踩坑

安装 windows系统kafka小白入门篇——下载安装,环境配置,入门代码书写(推荐) kafka在windows下安装和使用入门教程 问题1 参考链接 运行kafka集成的zookeeper时,命令:bin\windows\zookeeper-server-star…