说话人识别中的Temporal pooling(时序池化)

概述

  • Temporal pooling(时序池化)是说话人识别神经网络中,声学特征经过frame-level变换之后,紧接着会进入的一个layer。目的是将维度为 ( b s , F , T ) (bs,F,T) (bs,F,T)的特征图,变换成维度为 ( b s , F ) (bs,F) (bs,F)的特征向量
    在这里插入图片描述

  • 在这个过程中,T这个维度,也就是frame的个数,消失了,因此时序池化本质上可以看作:从一系列frame的特征中,挖掘出最能代表特征图信息的特征,并且要把长度可变的frame序列,变换为固定长度的特征向量

  • 时序池化的本质决定了Attention机制在其中的重要性,因为不同frame的重要性是不同的,不同frame的不同特征的重要性也是不同的,对整个特征图的每一个值都计算Attention分数(关于Attention分数,可参考深入理解Self-attention(自注意力机制)),然后利用Attention分数加权计算统计量(如均值、标准差),最后串联起来作为输出,成为一种重要的方法

  • 本文将介绍说话人识别中,效果较好的时序池化方法,持续更新

ASTP

  • ASTP(Attentive Statistics Pooling)是2018提出的,至今仍然广为使用的带有Attention的时序池化层
    在这里插入图片描述

  • 假设输入特征图维度为 ( b s , 1536 , T ) (bs,1536,T) (bs,1536,T),记为h,按照T维度计算每个特征维度的均值和标准差,如上图的TSTP公式所示(符号 ⊙ \odot 表示哈达玛积,即对应项相乘,两个因子的维度必须相同,从而结果的维度与因子的维度也相同),从而T维度消失,得到的均值和标准差维度均为 ( b s , 1536 ) (bs,1536) (bs,1536)

  • TSTP公式,将每个frame的重要性视为等同的,然后计算均值和标准差,这是Attention机制出现前,常用的时序池化方法

  • 之后的操作很神奇,将均值在T维度重复堆叠T次,维度恢复为 ( b s , 1536 , T ) (bs,1536,T) (bs,1536,T),对标准差也是堆叠,维度恢复为 ( b s , 1536 , T ) (bs,1536,T) (bs,1536,T),接着将特征图、均值和标准差在特征维度进行串联,得到的特征图维度为 ( b s , 1536 ∗ 3 , T ) (bs,1536*3,T) (bs,15363,T),记为H

  • 对H进行1维卷积,等价于上图的 W × H + b W\times H+b W×H+b(PyTorch1维卷积默认对每个out-channel带有一个bias),目的是将每个frame的特征从1536*3维降维映射到F维,F可取128,然后经过tanh激活函数(如果使用ReLU,会导致网络难以收敛),得到特征图a,维度为 ( b s , F , T ) (bs,F,T) (bs,F,T)

  • 对a进行1维卷积,等价于上图的 V × a + k V\times a+k V×a+k,目的是将每个frame的特征从F维恢复映射到与h相同的维度,即1536,然后在T维度,进行softmax激活,得到特征图a,维度为 ( b s , 1536 , T ) (bs,1536,T) (bs,1536,T)

  • 此时的特征图a的每一行特征,在T维度上求和,都等于1,这是softmax激活的效果,又因为与h的维度相同,所以可以将a视为一种Attention分数,利用上图的ASTP公式,对h求基于Attention的均值和标准差

  • 基于Attention的均值和标准差,维度都为 ( b s , 1536 ) (bs,1536) (bs,1536),再将它们按照特征维度进行串联,得到ASTP最终的输出,维度为 ( b s , 1536 ∗ 2 ) (bs,1536*2) (bs,15362)

MQMHASTP

  • MQMHASTP(Multi-query multi-head attention pooling)是2022年提出的,带有多查询多头注意力的时序池化
    在这里插入图片描述

  • 输入特征图仍然记为h,假设维度为 ( b s , 5120 , T ) (bs,5120,T) (bs,5120,T)

  • 将h在特征维度上均等划分为 n - h e a d s n \text{-} heads n-heads份,每一份是一个head,上图的 n - h e a d s = 4 n \text{-} heads=4 n-heads=4,也就是得到了h1,h2,h3,h4四个特征图,每个特征图的维度为 ( b s , d h , T ) (bs,d_h,T) (bs,dh,T) d h = 5120 / / n - h e a d s d_h=5120//n \text{-} heads dh=5120//n-heads,实际使用时,输入特征图的特征维度应确保能被 n - h e a d s n \text{-} heads n-heads整除

  • 对h1,h2,h3,h4每个特征图都进行1维卷积,即上图的 W × h + b W\times h+b W×h+b,得到对应的Attention分数a1,a2,a3,a4,这一部分的运算可以重复 n - l a y e r s n \text{-} layers n-layers

    • n - l a y e r s = 1 n \text{-} layers=1 n-layers=1,1维卷积只进行一次,参数为 ( i n = d h , o u t = d s , k s i z e = 1 ) (in=d_h,out=d_s,ksize=1) (in=dh,out=ds,ksize=1),因此每个Attention分数的维度为 ( b s , d s , T ) (bs,d_s,T) (bs,ds,T),卷积后不接激活函数
    • n - l a y e r s = 2 n \text{-} layers=2 n-layers=2,1维卷积进行两次,激活函数进行一次
      • 第一次卷积参数为 ( i n = d h , o u t = d k , k s i z e = 1 ) (in=d_h,out=d_k,ksize=1) (in=dh,out=dk,ksize=1),因此每个Attention分数的维度为 ( b s , d k , T ) (bs,d_k,T) (bs,dk,T),本次卷积会减少特征维度,因此 d k ≤ d h d_k \le d_h dkdh,通常取 d k = 64 d_k=64 dk=64
      • 接tanh激活函数
      • 第二次卷积参数为 ( i n = d k , o u t = d s , k s i z e = 1 ) (in=d_k,out=d_s,ksize=1) (in=dk,out=ds,ksize=1),因此每个Attention分数的维度为 ( b s , d s , T ) (bs,d_s,T) (bs,ds,T)
        d s = { 1 , 则 A t t e n t i o n 分数,对每个 h e a d 为一个向量,长度等于 T d h , 则 A t t e n t i o n 分数,对每个 h e a d 为一个矩阵,形状等于 ( d h , T ) d_s=\left\{\begin{aligned} &1,则Attention分数,对每个head为一个向量,长度等于T\\ &d_h,则Attention分数,对每个head为一个矩阵,形状等于(d_h,T) \end{aligned}\right. ds={1,Attention分数,对每个head为一个向量,长度等于Tdh,Attention分数,对每个head为一个矩阵,形状等于(dh,T)
  • 每个Attention分数的形状都为 ( b s , d s , T ) (bs,ds,T) (bs,ds,T),接下来在frame维度,接softmax激活函数,此时Attention分数的每一行,求和都等于1。可以将Attention分数作为权重,计算每个head的Attention均值和标准差,计算公式如下,与上述的ASTP公式类似
    μ = ∑ t = 1 T α t h t σ = ∑ t = 1 T α t h t ⊙ h t − μ ⊙ μ \begin{aligned} \mu&=\sum_{t=1}^{T} \alpha_t h_t \\ \sigma&=\sqrt{\sum_{t=1}^{T} \alpha_t h_t \odot h_t-\mu \odot \mu} \end{aligned} μσ=t=1Tαtht=t=1Tαththtμμ

  • 每个head的Attention均值和标准差的维度都为 ( b s , d h ) (bs,d_h) (bs,dh),按照head的顺序,交替地将mean和std串联起来,输出维度为 ( b s , n - h e a d s ∗ d h ∗ 2 ) = ( b s , 5120 ∗ 2 ) (bs,n \text{-} heads*d_h*2)=(bs,5120*2) (bs,n-headsdh2)=(bs,51202)

  • 对于上述的划分head、计算每个head的Attention分数、计算每个head的Attention统计量、串联每个head的Attention统计量,四个步骤,会进行 n - q u e r i e s n \text{-} queries n-queries次,每次的输出维度都是 ( b s , 5120 ∗ 2 ) (bs,5120*2) (bs,51202),因此MQMHASTP的最终输出维度为 ( b s , n - q u e r i e s ∗ n - h e a d s ∗ d h ∗ 2 ) = ( b s , n - q u e r i e s ∗ 5120 ∗ 2 ) (bs,n \text{-} queries*n \text{-} heads*d_h*2)=(bs,n \text{-} queries*5120*2) (bs,n-queriesn-headsdh2)=(bs,n-queries51202)

  • 关于 n - q u e r i e s , n - h e a d s , n - l a y e r s , d s n \text{-} queries,n \text{-} heads,n \text{-} layers,d_s n-queries,n-heads,n-layers,ds这几个超参数,原论文有给出一些消融实验,如下图所示( q , h , n q,h,n q,h,n分别为本文所述的 n - q u e r i e s , n - h e a d s , n - l a y e r s n \text{-} queries,n \text{-} heads,n \text{-} layers n-queries,n-heads,n-layers),可供参考
    在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值