机器翻译基础与模型 之二: 基于CNN的模型

一、CNN网络

相比于全连接网络,卷积神经网络最大的特点在于具有局部连接(Locally Connected)和权值共享(Weight Sharing)的特性。

1.1 卷积核与卷积操作

1.2 步长与填充

1.3 池化

以上关于CNN的基础概念和技术就不赘述了。

1.4 面向序列的卷积操作

面向序列的卷积操作中,卷积核只在序列这一维度上移动,用来捕捉连续的多个词之间的特征。

二、基于CNN的翻译建模

2.1 ConvS2S模型

ConvS2S 模型是一种高并行的序列到序列的神经计算模型。该模型利用卷积神经网络分别对源语言端与目标语言端的序列进行特征提取,并使用注意力机制来捕获两个序列之间映射关系。

相比于基于多层循环神经网络的 GNMT 模型,其主要优势在于每一层的网络计算是完全并行化的,避免了循环神经网络中计算顺序对时序的依赖。同时,利用多层卷积神经网络的层级结构可以有效地捕捉序列不同位置之间的依赖。即使是远距离依赖,也可以通过若干层卷积单元进行有效的捕捉,而且其信息传递的路径相比循环神经网络更短。

除此之外,模型同时使用门控线性单元、残差网络和位置编码等技术来进一步提升模型性能,达到了和 GNMT 模型相媲美的翻译性能,同时大大缩短了训练时间。

2.2 模型模块介绍

ConvS2S 模型模块组成:位置编码(Position Embedding)、卷积层、门控线性单元(GLU/Gated Linear Units)、残差链接(Residual Connection)、多跳注意力机制(Multi-step Attention/Multi-hop Attention)

2.2.1 位置编码(Position Embedding)

位置编码(Position Embedding):结构图中绿色部分,源语言端词嵌入部分,帮助模型获得词位置(即词序)信息。

该模型的位置编码 p = {p1,...,pm},其中pi 的维度大小为 d,一般和词嵌入维度相等,其中数值作为网络可学习的参数。简单来说, pi 是一个可学习的参数向量,对应位置 i 的编码。

编码的作用就是对位置信息进行表示,不同序列中的相同位置都对应一个唯一的位置编码向量。之后将词嵌入矩阵和位置编码进行相加,得到模型的输入序列 e = {w1 +p1,...,wm +pm}。

2.2.2 卷积层与门控线性单元(GLU)

在 ConvS2S 模型中,编码器和解码器分别使用堆叠的门控CNN对源语言和目标语言序列进行建模,在传统CNN的基础上引入了门控线性单元GLU,通过门控机制对卷积输出进行控制。

结构图中黄色背景框是卷积模块,这里使用GLU作为非线性函数,研究表明这种非线性函数更适合于序列建模任务。实际中为了更好地捕获句子信息,通常使用多层卷积的叠加。

2.2.3 残差连接(Residual Connection)

残差连接是一种训练深层网络的技术,即在多层神经网络之间通过增加直接连接的方式,从而将底层信息直接传递给上层,能够有效提高深层网络的信息传递效率。

在 ConvS2S 中残差连接主要应用于门控卷积神经网络和多跳自注意力机制中,
比如在编码器的多层门控卷积神经网络中,在每一层的输入和输出之间增加残差连
接。

2.2.4 多跳注意力机制(Multi-step Attention/Multi-hop Attention)

在 ConvS2S 模型中,解码器同样采用堆叠的多层门控卷积网络来对目标语言进行序列建模。区别于编码器,解码器在每一层卷积网络之后引入了注意力机制,用来参考源语言信息。 ConvS2S 选用了点乘注意力,并且通过类似残差连接的方式将注意力操作的输入与输出同时作用于下一层计算,称为多跳注意力。

结构图中蓝色框内部展示了基于多跳结构的注意力机制模块。

与循环网络中的注意力机制相比,该机制能够帮助模型甄别已经考虑了哪些先前的输入。也就是说,多跳的注意力机制会考虑模型之前更关注哪些单词,并且之后层中执行多次注意力的“跳跃”。

2.2.5 训练与推断

ConvS2S 模型使用了 Nesterov 加速梯度下降法 (Nesterov Accelerated Gradient,NAG),动量累计的系数设置为 0.99,当梯度范数超过 0.1 时重新进行规范化。

ConvS2S 模型中设置学习率为 0.25,每当模型在校验集上的困惑度不再下降时,便在每轮的训练后将学习率降低一个数量级,直至学习率小于一定的阈值(如0.0004)。

ConvS2S 模型中也使用了 Dropout方法。除了在词嵌入层和解码器输出层应用 Dropout 外,还对卷积块的输入层应用了 Dropout。

2.3 局部模型的改进

为了进一步提升计算效率,降低参数量,一些研究人员提出深度可分离卷积(Depthwise Separable Convolution),将空间维度和通道间的信息交互分离成深度卷积(Depthwise Convolution,也叫逐通道卷积)和逐点卷积(Pointwise Convolution)两部分。

除了直接将深度可分离卷积应用到神经机器翻译中,研究人员提出使用更高效的轻量卷积(Lightweight Convolution)和动态卷积(Dynamic Convolution)来进行不同词之间的特征提取。

2.2.1 深度可分离卷积(Depthwise Separable Convolution)

深度可分离卷积由深度卷积和逐点卷积两部分结合而成。

标准卷积中每个输出元素需要考虑卷积核尺度内所有词的所有特征,参数量相对较多。深度卷积只考虑不同词之间的依赖性,而不考虑不同通道之间的关系,相当于使用 O 个卷积核逐个通道对不同的词进行卷积操作。逐点卷积只考虑不同通道之间的依赖性,而不考虑不同词之间的依赖。换句话说,逐点卷积对每个词表示做了一次线性变换。

2.2.2 轻量卷积和动态卷积

一些研究提出了轻量卷积和动态卷积,用来替换注意力机制,并将其应用于基于自注意力机制的模型中。

a.轻量卷积

从形式上来看,深度卷积和注意力机制很类似,区别在于注意力机制考虑了序列全局上下文信息,权重来自于当前位置对其他位置的“注意力”,而深度卷积中仅考虑了局部的上下文信息,权重采用了在不同通道上独立的固定参数。

为了进一步降低参数量,轻量卷积共享了部分通道的卷积参数。通过共享,可以将参数量压缩到 Ka,其中压缩比例为d/a(a 为压缩后保留的共享通道数)。

b.动态卷积

动态卷积,旨在不增加网络深度和宽度的情况下来增强模型的表示能力,其思想就是根据输入来动态地生成卷积参数。

在轻量卷积中,模型使用的卷积参数是静态的,与序列位置无关,维度大小为K ×a;而在动态卷积中,为了增强模型的表示能力,卷积参数来自于当前位置输入的变换。通过这种方式,模型可以根据不同位置的表示来确定如何关注其他位置信息的“权重”,更好地提取序列信息。

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

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

相关文章

嵌入式Linux的RTC读写操作应用

嵌入式Linux的RTC读写操作应用 一、前提二、头文件引用三、设置RTC时间四、读取RTC当前时间 一、前提 嵌入式开发中经常有碰到读取和修改时间的需求,所以会经常用到RTC这个功能。首先保证你的开发板上具有RTC这个模块和支持RTC且能正常工作,然后再进行应…

Vue 3集成海康Web插件实现视频监控

​🌈个人主页:前端青山 🔥系列专栏:组件封装篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来组件封装篇专栏内容:Vue 3集成海康Web插件实现视频监控 引言 最近在项目中使用了 Vue 3 结合海康Web插件来实…

最少前缀操作问题--感受不到动态规划,怎么办怎么办

题目: 标签:动态规划(应该是双指针的,不理解) 小U和小R有两个字符串,分别是S和T,现在小U需要通过对S进行若干次操作,使其变成T的一个前缀。操作可以是修改S的某一个字符&#xff0…

【Maven】nexus 配置私有仓库配置【转】

介绍:【Maven】Nexus几个仓库的介绍-CSDN博客 一、仓库类型 proxy 远程仓库的代理,比如说nexus配置了一个central repository的proxy,当用户向这个proxy请求一个artifact的时候,会现在本地查找,如果找不到,则会从远程…

Python学习------第十天

数据容器-----元组 定义格式,特点,相关操作 元组一旦定义,就无法修改 元组内只有一个数据,后面必须加逗号 """ #元组 (1,"hello",True) #定义元组 t1 (1,"hello") t2 () t3 tuple() prin…

Spring Web入门练习

加法计算器 约定前后端交互接⼝ 约定 "前后端交互接⼝" 是进⾏ Web 开发中的关键环节. 接⼝⼜叫 API(Application Programming Interface), 我们⼀般讲到接⼝或者 API,指的都是同⼀个东西. 是指应⽤程序对外提供的服务的描述, ⽤于交换信息…

uniapp微信小程序接入airkiss插件进行WIFI配网

本文可参考uniapp小程序插件 一.申请插件 微信公众平台设置页链接:微信公众平台 登录您的小程序微信公众平台,进入设置页,在第三方设置->插件管理->添加插件中申请AiThinkerAirkissforWXMini插件,申请的插件appId为【wx6…

蓝队技能-应急响应篇日志自动采集日志自动查看日志自动化分析Web安全内网攻防工具项目

知识点: 1、应急响应-系统日志收集-项目工具 2、应急响应-系统日志查看-项目工具 3、应急响应-日志自动分析-项目工具 演示案例-蓝队技能-工具项目-自动日志采集&自动日志查看&自动日志分析 系统日志自动采集-观星应急工具(Windows系统日志) SglabIr_Co…

类和对象——static 成员,匿名对象(C++)

1.static成员 a)⽤static修饰的成员变量,称之为静态成员变量,静态成员变量⼀定要在类外进行初始化。 b)静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。 …

node.js中express的基本了解

定义 Express是基于Node.js平台,快速、开放、极简的Web开发框架。 本质 Express是一个npm上的第三方包,提供了快速创建Web服务器的便捷方法。 作用 与Node.js内置的http模块类似,Express也是专门用来创建Web服务器的,但它极大地简…

Django实现智能问答助手-基础配置

设置 Django 项目、创建应用、定义模型和视图、实现问答逻辑,并设计用户界面。下面是一步一步的简要说明: 目录: QnAAssistant/ # 项目目录 │ ├── QnAAssistant/ # 项目文件夹 │ ├── init.py # 空文件 │ ├── settings.py # 项目配…

JavaScript 高级—求数组的最大值与最小值

JavaScript 数组操作:求数组的最大值与最小值 在编程中,处理数组是一个常见的任务。JavaScript 提供了一些内建的方法和技巧,可以方便地找到数组中的最大值和最小值。今天,我们就来详细探讨一下如何使用 JavaScript 来实现这一功…

【C语言】C语言代码的编写规范、注释规范

【C语言】C语言代码规范 文章目录 [TOC](文章目录) 前言一、编写规范a、MISRA-C1、背景与目的2、发展历程3、准则内容4、应用与优势 b、华为 二、注释规范1.文件头注释2.函数头注释3.代码行注释4.特殊注释 三、参考资料总结 前言 提示:以下是本篇文章正文内容&#…

LeetCode 1652: 拆炸弹 (Defuse the Bomb)超详细解释

LeetCode 1652: 拆炸弹 (Defuse the Bomb) 题目描述 你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。 为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k …

Spring工作流程

(3)案例工作流程 启动服务器初始化过程 1.服务器启动,执行ServletContainersInitConfig类,初始化web容器功能类似于以前的web.xml 2.执行createServletApplicationContext方法,创建了WebApplicationContext对象 该方法…

unity 中 RectTransform 的常用几个属性

RectTransform rectTransform this.GetComponent<RectTransform>(); rectTransform this.transform as RectTransform; Vector3 vector1 rectTransform.position; //自身轴心点相对于锚点的位置&#xff08;编译器显示的pos&#xff09; …

C语言第13节:指针(3)

1. 回调函数 回调函数的基本思想是&#xff0c;将函数指针作为参数传递给另一个函数&#xff0c;并在需要时通过这个函数指针调用对应的函数。这种方式允许一个函数对执行的内容进行控制&#xff0c;而不需要知道具体的实现细节。 回调函数在以下场景中尤为有用&#xff1a; …

用pyspark把kafka主题数据经过etl导入另一个主题中的有关报错

首先看一下我们的示例代码 import os from pyspark.sql import SparkSession import pyspark.sql.functions as F """ ------------------------------------------Description : TODO&#xff1a;SourceFile : etl_stream_kafkaAuthor : zxxDate : 2024/11/…

【MyBatis 源码阅读与笔记】Mapper 接口的动态代理实现

MyBatis 源码阅读与笔记 题目&#xff1a;Mapper 接口的动态代理实现 研究 MyBatis 如何通过动态代理为 Mapper 接口创建实现类。重点分析 MapperProxy 类&#xff0c;理解其如何拦截方法调用并执行 SQL。 笔记 1 动态代理原理 MyBatis 使用 JDK 动态代理为 Mapper 接口创建…

STM32芯片EXIT外部中断的配置与原理以及模板代码(标准库)

配置EXIT外部中断其实就是把GPIO刀NVIC的各个外设配置好 第一步&#xff1a;配置RCC&#xff0c;把我们涉及到的外设的时钟都打开 &#xff08;此处EXTI是默认打开的&#xff0c;而NVIC是内核外设无需配置&#xff09; 第二步&#xff1a;配置GPIO,选择端口为输入模式 第三…