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

news2024/11/18 13:55:09

概述

  • 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),不再考虑bs维度

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

  • 对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 = 1 , k s i z e = 1 ) (in=d_h,out=1,ksize=1) (in=dh,out=1,ksize=1),因此每个Attention分数的维度为 ( b s , 1 , T ) (bs,1,T) (bs,1,T),卷积后不接激活函数
    • n - l a y e r s = 2 n \text{-} layers=2 n-layers=2,1维卷积进行两次,激活函数进行一次
      • 第一次卷积参数为 ( i n = d h , o u t = F , k s i z e = 1 ) (in=d_h,out=F,ksize=1) (in=dh,out=F,ksize=1),因此每个Attention分数的维度为 ( b s , F , T ) (bs,F,T) (bs,F,T),本次卷积会减少特征维度,因此 F < d h F<d_h F<dh,F可取64
      • 接tanh激活函数
      • 第二次卷积参数为 ( i n = F , o u t = d h , k s i z e = 1 ) (in=F,out=d_h,ksize=1) (in=F,out=dh,ksize=1),因此每个Attention分数的维度为 ( b s , d h , T ) (bs,d_h,T) (bs,dh,T),本次卷积会恢复特征维度
  • 对每个Attention分数,都在frame维度,接softmax激活函数,此时Attention分数的每一行,求和都等于1,而且每个Attention分数与对应的head,维度都相同。可以将Attention分数作为权重,计算每个head的Attention均值和标准差,计算公式如下,与上述的ASTP公式类似
    μ h = ∑ t = 1 T α t h h t h σ h = ∑ t = 1 T α t h h t h ⊙ h t h − μ h ⊙ μ h \begin{aligned} \mu^h&=\sum_{t=1}^{T} \alpha_t^h h_t^h \\ \sigma^h&=\sqrt{\sum_{t=1}^{T} \alpha_t^h h_t^h \odot h_t^h-\mu^h \odot \mu^h} \end{aligned} μhσh=t=1Tαthhth=t=1Tαthhthhthμhμh

  • 每个head的Attention均值和标准差的维度都为 ( b s , d h ) (bs,d_h) (bs,dh),按照head的顺序,交替地将mean和std串联起来,输出维度为 ( b s , h ∗ d h ∗ 2 ) = ( b s , 5120 ∗ 2 ) (bs,h*d_h*2)=(bs,5120*2) (bs,hdh2)=(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 ∗ h ∗ d h ∗ 2 ) = ( b s , n - q u e r i e s ∗ 5120 ∗ 2 ) (bs,n \text{-} queries*h*d_h*2)=(bs,n \text{-} queries*5120*2) (bs,n-querieshdh2)=(bs,n-queries51202)

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

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

相关文章

再不来看看常用的PyCharm快捷键就out了,玩转PyCharm仅此一篇!

最近在学习Python的数据可视化项目&#xff0c;在大学有学过Python&#xff0c;还有一些基础的。目前虽说已经工作&#xff0c;但是兴趣使然&#xff0c;依然想在空闲时间学一些其他技能来充实自己&#xff0c;未雨绸缪&#xff01; 在使用工具的时候&#xff0c;必定会对工具有…

【话题:工作生活】2021年工作总结--这些人,那些事。

Hello Everyone&#xff0c; 我又开始撰写自己的工作总结了。2021年的工作总结&#xff0c;拖得太久&#xff0c;拖得我也不想写了。每次写自己一年的工作总结&#xff0c;总是要耗费我大量的时间与心力&#xff0c;有时&#xff0c;我也真的是心好累。 好了&#xff0c;懒散、…

【人工智能原理自学】隐藏层:神经网络为什么Working

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;笔记来自B站UP主Ele实验室的《小白也能听懂的人工智能原理》。 &#x1f514;本文讲解隐藏层&#xff1a;神经网络为什么Working&#xff0c;一起卷起来叭&#xff01; 目录一、…

深度学习 11 梯度下降算法改进

数据初始化要点: 1. 梯度下降算法的三种方式: 批量梯度下降法(batch)&#xff0c;即同时处理整个训练集.小批量梯度下降法&#xff08;Mini-Batch &#xff09;每次同时处理固定大小的数据集.随机梯度下降法&#xff08;stochastic gradient descent&#xff09;, 每次随机选…

acwing基础课——约数

由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板4——数学知识 - AcWing 基本思想&#xff1a; 首先&#xff0c;约数&#xff0c;又称因数。整数a除以整数b(b≠0)除得的商正好是整数而没有余数&#xff0c;我们就说a能被b整除&#xff0c;或b能整除a。a称为b的…

怎样才能过好这一生?

文章目录1. 日拱一卒&#xff0c;功不唐捐1.1 适当的时候给自己一个奖励1.2 一个人可能走的更快&#xff0c;但一群人才能走的更远1.3 通过一些事情去逼自己一把1.4 从真理中去感悟1.5 当你面临绝路时2. 梦想的意义不在于实现3. 孤独4. 烦恼5. 别总说来日方长6. 忍和韧性7. 事情…

【linux kernel】linux内核重要函数 | do_initcalls

文章目录一、导读二、do_initcalls三、构造section并添加函数&#xff08;3-1&#xff09;构造初始化调用section&#xff08;3-2&#xff09;向section中添加函数四、总结一、导读 在linux内核启动过程中&#xff0c;会向终端打印出很多的日志信息&#xff0c;从这些日志信息…

c++开源协程库libgo介绍及使用

协程这个概念&#xff0c;最近这几年可是相当地流行了。尤其 go 语言问世之后&#xff0c;内置的协程特性&#xff0c;完全屏蔽了操作系统线程的复杂细节。甚至使 go 开发者“只知有协程&#xff0c;不知有线程”了。当然 C也有高性能的协程库&#xff0c;比如我了解到的微信的…

基于微信小程序的企业职工薪资查询系统小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…

卷积神经网络(CNN)详细介绍及其原理详解

文章目录前言一、什么是卷积神经网络二、输入层三、卷积层四、池化层五、全连接层六、输出层七、回顾整个过程总结前言 本文总结了关于卷积神经网络&#xff08;CNN&#xff09;的一些基础的概念&#xff0c;并且对于其中的细节进行了详细的原理讲解&#xff0c;通过此文可以十…

自动(智能)驾驶 | 4D雷达的数据集

上篇文章分享了关于Oculii 4D雷达的两篇报告。数据集是一个非常重要的研究工具&#xff0c;对于4D雷达领域来说&#xff0c;处于一个研究前沿的位置&#xff0c;鲜有公开的数据集&#xff0c;目前能找到的数据集有&#xff1a; 这些文章中的数据集有不少博主也写过&#xff0c…

S1000D规范导读

S1000D最初是由欧洲航空工业联盟开发的技术出版物规范&#xff0c;它主要为具有较长生命的复杂产品运行和维修而设计。这些年不断发展&#xff0c;已经扩展到这些行业的产品&#xff1a;国防系统 - 包括海、陆、空的产品&#xff0c;民用航空产品&#xff0c;基建行业产品和船舶…

15/365 java static final

1.static属性,方法 类内属性或方法用static修饰&#xff0c;表示该属性或方法属于类&#xff0c;不依赖于实例对象&#xff0c;所以不需要用对象调用&#xff0c;而是直接用类名调用。 static方法只能调用其他static方法&#xff0c;而普通方法可以调用其他的普通方法和stati…

Vue3商店后台管理系统设计文稿篇(二)

记录使用vscode构建Vue3商店后台管理系统&#xff0c;这是第二篇&#xff0c;主要记录Vue3中生命周期钩子&#xff0c;模板语法&#xff0c;以及相关的代码 文章目录一、Vue3生命周期二、Vue3模板语法三、代码展示正文内容&#xff1a; 一、Vue3生命周期 每个 Vue 实例在被创建…

拆机详解2:比Macintosh还早?苹果Lisa拆解

hello大家好&#xff0c;我是每天&#xff08;实际并不是每天&#xff0c;你们点的赞太少了&#xff0c;每人点一个赞我就日更&#xff09;给你们讲解的Eric_Bells.这里感谢博主半身风雪的支持&#xff0c;我会更新的&#xff01;看到的麻烦点个关注谢谢拉 今天唠唠一台比Maci…

【蓝桥杯基础题】2017年省赛—九宫幻方

&#x1f451;专栏内容&#xff1a;&#x1f449;蓝桥杯刷题&#x1f448;⛪个人主页&#xff1a;&#x1f449;子夜的星的主页&#x1f448;&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录一、题目背景二、题目描述1.问题描述2.输入格式3.输出格式4.一个例…

CAN通信----(创芯科技)CAN分析仪使用----CANTest安装和驱动安装

前言 我在调试CAN通信时&#xff0c;使用的是在淘宝买的CAN分析仪。 CAN分析仪的实物如下&#xff1a; 使用CAN分析仪&#xff0c;调试CAN通信&#xff0c;PC电脑端需要使用CANTest测试软件&#xff0c;还需要安装驱动。 一、创芯科技 CAN分析仪资料包下载 步骤1&#xff1…

测开-基础篇

一、软件测试的生命周期 先来回顾软件的生命周期 &#x1f351;软件的生命周期 需求分析--》计划--》设计--》编码--》测试--》运营维护 需求分析&#xff1a;进行市场分析&#xff0c;这个需求量大不大&#xff1f;投入与盈利的占比&#xff1f;技术上 能否实现或者说实现的…

深度学习 10 神经网络简介

1. 深度学习和机器学习的主要区别在于对数据的处理, 机器学习主要通过算法直接进行推断, 而深度学习主要通过神经网络对各种算法进行加权, 然后汇总得出结论. 2. 常用的激活函数: tanh函数relu函数leaky relu函数1.1 深度学习介绍 1.1.1 区别 机器学习的特征工程步骤是要靠手…

Effective Objective-C 2.0学习记录(五)

23.通过委托和数据源协议进行对象间通信 使用委托模式&#xff1a;获取网络数据的类含有一个“委托对象”&#xff0c;在获取完数据后&#xff0c;它会回调这个委托对象。 利用协议机制&#xff0c;很容易就 能以OC代码实现此模式&#xff0c;在图中演示的情况下。可以这样定义…