Conformer阅读笔记

论文:《Conformer: Convolution-augmented Transformer for Speech Recognition》

摘要

基于transformer和卷积神经网络cnn的模型在ASR上已经达到了较好的效果,都要优于RNN的效果。Transformer能够捕获长序列的依赖和基于内容的全局交互信息,CNN则能够有效利用局部特征。因此本文将transformer和cnn结合起来,对音频序列进行局部和全局依赖都进行建模,针对语音识别问题提出了卷积增强的transformer模型,称为conformer,模型性能比transformer和cnn都要好,成为了新的sota。在Libri Speech benchmark上,consformer不使用语言模型时WER就达到了2.1%/4.3%,使用外部语言模型时WER为1.9%/3.9%。

1 Introduction

基于self-attention或者convolutions的模型都有各自的局限性。虽然transformer可以对大范围的全局上下文进行建模,但是它不能提取细粒度的局部特征;卷积神经网络(CNN)可以利用局部信息进行计算,但是它的缺陷是需要更多的层和参数去捕获全局性信息。
最近的研究表明,将卷积和self-attention结合起来能够得到更好的提升效果,既能够学习到基于位置的局部特征,也能学习到基于内容的全局交互信息。
本文提出了一种新的self-attention和cnn结合起来的方式,在两方面都实现了最佳的效果:self-attention学习全局交互,cnn学习基于相对位置偏移的局部相关性,并将二者以sandwiched的方式结合起来,夹到一对前馈神经网络模块之间,模型结构如下图所示。提出的模型称为conformer,由两个macaron style(即feed-forward在两端,中间是multi-head self attention和convolution)的feed-forward的残差结构和multi-head self attention、convolution连接组成,后面跟着layernorm层进行归一化。
在这里插入图片描述
实验表明conformer在librispeech上实现了sota效果,在使用外部语言模型的情况下,性能比之前效果最好的transformer transducer提高了15%。

2、Conformer Encoder

encoder部分首先使用卷积子采样层处理输入,然后再输入进多个conformer blocks,可以理解为把transformer模型结构中的decoder部分不变,encoder部分变成了上图所示的conformer encoder,接下来详细介绍上图中的conformer blocks。

2.1 Multi-Headed Self-Attention Module

Multi-headed self-attention(MHSA)使用的是Transformer-XL中的相对位置编码,这种方法可以让这个模块对不同输入长度的语音更通用、更具有鲁棒性。MHSA的模块结构图如下图3所示,它由pre-norm(即layernorm放置于残差结构内)、残差和dropout组成,有助于对更深层次的网络模型进行训练和正则化。
在这里插入图片描述

2.2 Convolution Module

Convolution block模块结构图如下Figure 2所示,由Pointwise卷积、Depthwise卷积和Glu激活层、Swish激活层组成。BatchNorm只放到卷积层之后,以帮助训练深层的模型。
Depthwise卷积与Pointwise卷积讲解参考
Depthwise卷积与Pointwise卷积参数对比
在这里插入图片描述

2.3 Feed Forward Module

在这里插入图片描述
Feed Forward(FFN) module的模型结构图如上图4所示,由两个线性变换和一个非线性的激活函数组成,并使用pre-norm和残差结构进行连接。

2.4 Conformer Block

Conformer block的整体结构包括两个FFN、MHSA和卷积模块组成。这种结构的灵感来自Macaron-Net,使用两个均为1/2权重的FFN,并且第二个FFN后接layernorm。文中3.4.3节的消融实验也表明这种结构的FFN比单个FFN效果更好。设 x i x_i xi是conformer block的输入, y i y_i yi是conformer block的输出,则用数学表示conformer block的输入输出如下:
在这里插入图片描述

3、结论

文章将CNN和Transformer结合起来组成了Conformer模型结构,用于端到端语音识别,并进行了多个实验研究了conformer比transformer性能要好,还证明了其中每个组成部分和卷积模块都对模型的性能很重要。与之前在LibriSpeech数据集上的工作相比,conformer具有更好的精度和更少的参数,并实现了1.9%/3.9%的sota性能。

wenet中的conformer代码

### 李宏毅机器学习hw4 资料教程解答 #### 关于Conformer结构 在李宏毅教授的机器学习课程第四次作业中,重点探讨了Conformer模型的应用。Conformer是一种结合卷积神经网络(CNN)和自注意力机制(self-attention mechanism)来处理序列数据的强大架构[^1]。 ```python import torch.nn as nn class ConformerBlock(nn.Module): def __init__(self, dim, heads=8, ff_expansion_factor=4, kernel_size=32, dropout_rate=0.1): super().__init__() self.ffn_pre = FeedForward(dim, expansion_factor=ff_expansion_factor, dropout_rate=dropout_rate) self.attn = Attention(heads=heads, dim=dim, dropout_rate=dropout_rate) self.conv_module = ConvolutionModule(kernel_size=kernel_size, channels=dim) self.norm_1 = LayerNorm(dim) self.norm_2 = LayerNorm(dim) self.dropout = Dropout(dropout_rate) def forward(self, x): residual = x # FFN Pre-Norm x = self.norm_1(x) x = self.ffn_pre(x) x += residual residual = x # Multi-head Self-Attention Post-Norm x = self.norm_2(x) x = self.attn(x) x += residual # Conv Module x = self.conv_module(x) return x ``` #### 自注意力池化(Self-Attention Pooling) 除了Conformer之外,另一个重要的概念是自注意力池化技术。这种方法能够有效地捕捉输入特征之间的依赖关系,并通过加权求和的方式聚合信息,从而提高模型的表现力。 ```python def self_attention_pooling(q, k, v, mask=None): d_k = q.size(-1) scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(d_k) if mask is not None: scores = scores.masked_fill(mask == 0, -1e9) p_attn = F.softmax(scores, dim=-1) output = torch.matmul(p_attn, v) return output, p_attn ``` #### 基线代码资源链接 对于想要获取具体实现细节的同学来说,可以访问官方提供的Colab笔记本文件`ML2023_hw04.ipynb`来进行更深入的学习与实践操作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值