本文主要记录GE2E的理论知识学习,防止遗忘,方便以后复习。
论文地址:
https://arxiv.org/abs/1710.10467
论文的整体翻译:
GENERALIZED END-TO-END LOSS FOR SPEAKER VERIFICATION
该文提出了一种新的损失函数,称为广义端到端(GE2E)损失,它使说话人验证模型的训练比我们以前的基于元组的端到端(TE2E)损失函数更有效。与TE2E不同,GE2E丢失功能以强调实例的方式更新网络,这些实例在训练过程的每个步骤中都难以验证。此外,GE2E损失不需要选择样本的初始阶段。通过这些特性,具有新损失函数的模型可以通过在较短的时间内通过将训练时间减少> 60%来减少10%以上的EER,从而学习更好的模型。
1.1 背景介绍
说话者验证(SV)是通过语音匹配等应用程序根据某位说话者的已知说话(即注册说话)来验证该说话是否属于特定说话者的过程。
取决于注册和验证所用话语的限制,说话者验证模型通常分为两类之一:与文本相关的说话者验证(TD-SV)和与文本无关的说话者验证(TI-SV)。在TD-SV中,注册和验证话语的笔录都受到语音的限制,而在TI-SV中,注册或验证话语的笔录没有词典限制,从而暴露出更大的音素变化和发音持续时间。在这项工作中,我们专注于TI-SV和TD-SV的特定子任务,称为全局密码TD-SV,其中验证基于检测到的关键字,例如“ OK Google” 。
在以前的研究中,基于i-vector的系统一直是TD-SV和TI-SV应用的主要方法。近年来,更多的努力集中在使用神经网络进行说话人验证上,而最成功的系统则使用端到端训练。在这样的系统中,神经网络输出向量通常被称为嵌入向量(也称为 d-vectors)。类似于 i 向量的情况,然后可以使用这种嵌入来表示固定维空间中的发音,在该维中,可以使用其他通常更简单的方法来消除说话者之间的歧义。
1.2 TE2E Loss
在这之前,提出了基于元组的端到端(TE2E)模型,该模型模拟了训练期间运行时注册和验证的两阶段过程。在实验中,结合了LSTM 的TE2E模型达到了当时的最佳性能。对于每个训练步骤,将一个评估发音
x
j
∼
x_{j \sim}
xj∼和
M
M
M个注册发音
x
k
m
x_{km}
xkm(其中
m
=
1
,
.
.
.
,
M
m = 1,...,M
m=1,...,M)的元组输入到我们的LSTM网络中:{
x
j
∼
x_{j\sim}
xj∼,
(
x
k
1
,
.
.
.
,
x
k
M
)
(x_{k1},...,x_{kM})
(xk1,...,xkM)},其中
x
x
x表示固定长度段的特征(对数mel频谱),
j
j
j和
k
k
k表示发声的说话者,
j
j
j可以或可以不等于
k
k
k。元组包括来自说话者
j
j
j的单个发声和来自说话者
k
k
k的
M
M
M个发声。如果
x
j
∼
x_{j \sim}
xj∼和
M
M
M个注册语音来自同一说话者,即
j
=
k
j=k
j=k,则我们称元组为正,否则为负。我们交替生成正负元组。
对每个输入元组,我们计算
L
S
T
M
LSTM
LSTM的
L
2
L2
L2归一化响应:{
e
j
∼
e_{j\sim}
ej∼,
(
e
k
1
,
.
.
.
,
e
k
M
)
(e_{k1},...,e_{kM})
(ek1,...,ekM)}。在此,每个
e
e
e是固定大小的嵌入向量,该向量是由LSTM定义的序列到向量的映射产生的。元组的质心
(
e
k
1
,
.
.
.
,
e
k
M
)
(e_{k1},...,e_{kM})
(ek1,...,ekM)表示从
M
M
M语音构建的声纹,并定义如下:
c k = E m [ e k m ] = 1 M ∑ m = 1 M e k m (1) c_k = E_m[e_{km}] = \frac{1}{M}\sum_{m=1}^{M} e_{km} \tag{1} ck=Em[ekm]=M1m=1∑Mekm(1)
使用余弦相似度函数定义相似度:
s
=
w
⋅
c
o
s
(
e
j
∼
,
c
k
)
+
b
(2)
s= w \cdot cos(e_{j \sim}, c_k)+b\tag{2}
s=w⋅cos(ej∼,ck)+b(2)
具有可学习的
w
w
w和
b
b
b。TE2E损耗最终定义为:
L
T
(
e
j
∼
,
c
k
)
=
σ
(
j
,
k
)
σ
(
s
)
+
(
1
−
σ
(
j
,
k
)
)
(
1
−
σ
(
s
)
)
(3)
L_T(e_{j \sim}, c_k) = \sigma(j,k)\sigma(s) + (1-\sigma(j,k))(1-\sigma(s))\tag{3}
LT(ej∼,ck)=σ(j,k)σ(s)+(1−σ(j,k))(1−σ(s))(3)
这里,
σ
(
x
)
=
1
/
(
1
+
e
−
x
)
\sigma(x) = 1/(1+e^{-x})
σ(x)=1/(1+e−x)是标准的S型函数,如果
j
=
k
j=k
j=k,则
σ
(
j
,
k
)
\sigma(j,k)
σ(j,k)等于1,否则等于0。当
k
=
j
k = j
k=j时,TE2E损失函数鼓励s的值较大,而当
k
≠
j
k \ne j
k=j时,s的值较小。考虑正元组和负元组的更新-此损失函数与FaceNet中的三元组损失非常相似[15]。
1.3 总览
本文介绍了TE2体系结构的神经网络化。这种新架构以更有效的方式从各种长度的输入序列构造元组,从而大大提高了TD-SV和TI-SV的性能和训练速度。本文的组织方式如下:2.1我们给出了GE2E损失的定义;2.2是为什么GE2E更有效地更新模型参数的理论依据;2.3 一种称为“ MultiReader”的技术,它使我们能够训练一个支持多种关键字和语言的模型;最后,我们在Sec中介绍我们的实验结果。
GE2E
通用端到端(GE2E)培训基于一次处理大量语音的形式,该批处理包含N个说话者,平均每个说话者有M个说话,如图1所示。
2.1 训练方式
我们获取
N
×
M
N×M
N×M语音以构建批处理。这些话语来自
N
N
N个不同的说话者,每个说话者有
M
M
M个话语。每个特征向量
x
j
i
x_{ji}
xji (
1
≤
j
≤
N
1≤j≤N
1≤j≤N 和
1
≤
i
≤
M
1≤i≤M
1≤i≤M)代表从说话人
j
j
j 说的第
i
i
i 句话提取的特征。
与TE2E相似,我们将从每个每句
x
j
i
x_{ji}
xji提取的特征输入LSTM网络。线性层连接到最后一个LSTM层,作为网络最后一个帧响应的附加转换。我们将整个神经网络的输出表示为
f
(
x
j
i
;
w
)
f(x_{ji} ; w)
f(xji;w),其中
w
w
w代表神经网络的所有参数(包括LSTM层和线性层)。嵌入矢量(d-vector)定义为网络输出的
L
2
L2
L2归一化:
e
j
i
=
f
(
x
j
i
;
w
)
∣
∣
f
(
x
j
i
;
w
)
∣
∣
2
(4)
e_{ji} = \frac{f(x_{ji} ; w)}{||f(x_{ji} ; w)||_2}\tag{4}
eji=∣∣f(xji;w)∣∣2f(xji;w)(4)
这里
e
j
i
e_{ji}
eji表示第
j
j
j个说话者的第
i
i
i句语音的嵌入向量。通过公式(1),将来自第
j
j
j个说话者
[
e
j
1
,
.
.
.
,
e
j
M
]
[e_{j1},...,e_{jM}]
[ej1,...,ejM]的嵌入矢量的质心定义为
c
j
c_ j
cj。
相似度矩阵
S
j
i
S_{ji}
Sji,
k
k
k定义为每个嵌入矢量
e
j
i
e_{ji}
eji与所有质心
c
k
c_k
ck(1≤j,k≤N,1≤i≤M)之间的缩放余弦相似度:
S
j
i
,
k
=
w
⋅
c
o
s
(
e
j
i
,
c
k
)
+
b
(5)
S_{ji,k } = w \cdot cos(e_{ji}, c_k) + b\tag{5}
Sji,k=w⋅cos(eji,ck)+b(5)
其中
w
w
w和
b
b
b是可学习的参数。我们将权重限制为正
w
w
w> 0,因为当余弦相似度较大时,我们希望相似度较大。TE2E和GE2E之间的主要区别如下:
- TE2E的相似度(等式2)是一个标量值,它定义了嵌入矢量 e j ∼ e_{j \sim} ej∼和单个元组质心 c k c_k ck之间的相似度。
- GE2E建立相似度矩阵(等式5),该矩阵定义每个
e
j
i
e_{ji}
eji和所有质心
c
k
c_k
ck之间的相似度
图1展示了整个过程,包括来自不同说话者的特征,嵌入矢量和相似度得分,并用不同的颜色表示。
在训练期间,我们希望每个语音的嵌入都与该语音说话者的质心相似,同时又远离其他说话者的质心。如图1中的相似度矩阵所示,我们希望有色区域的相似度值较大,而灰色区域的相似度值较小。图2以不同的方式说明了相同的概念:我们希望蓝色嵌入矢量接近其说话者的质心(蓝色三角形),而远离其他质心(红色和紫色三角形),尤其是最接近的质心(红色三角形))。给定嵌入向量 e j i e_{ji} eji,所有质心 c k c_k ck和对应的相似度矩阵 S j i S_{ji} Sji, k k k,有两种方法可以实现此概念:
(1) Softmax: 我们在
k
=
1
,
.
.
.
,
N
k = 1,...,N
k=1,...,N上对
S
j
i
S_{ji}
Sji,
k
k
k放置一个softmax,如果
k
=
j
k = j
k=j输出等于1,否则使输出等于0。因此,每个嵌入矢量
e
j
i
e_{ji}
eji上的损失可以定义为:
L
(
e
j
i
)
=
S
j
i
,
j
−
l
o
g
∑
k
=
1
N
e
x
p
(
S
j
i
,
k
)
(6)
L(e_{ji}) = S_{ji,j}-log \sum_{k=1}^{N}exp(S_{ji}, k)\tag{6}
L(eji)=Sji,j−logk=1∑Nexp(Sji,k)(6)
此损失函数意味着我们将每个嵌入矢量推向其质心附近,并将其拉离所有其他质心。
(2) Contrast: 对比度损失在正向和的负向上定义为:
L
(
e
j
i
)
=
1
−
σ
(
S
j
i
,
j
)
+
max
1
≤
k
≤
N
k
≠
j
σ
(
S
j
i
,
k
)
(7)
L(e_{ji}) = 1 - \sigma(S_{ji,j})+ \max_{1\le k \le N}^{k \ne j} \sigma(S_{ji,k})\tag{7}
L(eji)=1−σ(Sji,j)+1≤k≤Nmaxk=jσ(Sji,k)(7)
其中
σ
(
x
)
=
1
/
(
1
+
e
−
x
)
\sigma(x)= 1 /(1 + e^{ -x})
σ(x)=1/(1+e−x)是S形函数。对于每种话语,损失中都会精确添加两个分量:(1)一个正分量,它与嵌入矢量和真实说话人的声纹(质心)之间的正匹配相关。(2)负分量,与嵌入向量和声纹(质心)之间的负匹配相关,在所有假说话者中相似度最高。
在图2中,正项对应于将
e
j
i
e_{ji}
eji(蓝色圆圈)推向
c
j
c_j
cj(蓝色三角形)。负项对应于将
e
j
i
e_{ji}
eji(蓝色圆圈)拉离
c
j
c_j
cj(红色三角形),因为与
c
k
’
c_{k^’}
ck’相比,
c
k
c_{k}
ck与
e
j
i
e_{ji}
eji更相似。因此,对比度损失使我们可以专注于嵌入向量和负质心的困难对。
GE2E损失的两种实现方式都是有用的:对比度损失对于TD-SV表现更好,而softmax损失对于TI-SV表现更好。
此外,我们观察到在计算真实说话者的质心时删除
e
j
i
e_{ji}
eji可使训练稳定并有助于避免琐碎的解决方案。因此,尽管在计算负相似度(即
k
≠
j
k \ne j
k=j)时仍使用等式1,但当
k
=
j
k = j
k=j时我们使用等式8:
c
j
−
i
=
1
M
−
1
∑
m
=
1
,
m
≠
j
M
e
j
m
(8)
c_{j}^{-i} = \frac{1 }{M-1} \sum \limits _{m=1,m \ne j} ^{M} e_{jm}\tag{8}
cj−i=M−11m=1,m=j∑Mejm(8)
S
j
i
,
k
=
{
w
⋅
c
o
s
(
e
j
i
,
c
j
−
i
)
+
b
if k=j
w
⋅
c
o
s
(
e
j
i
,
c
k
)
+
b
otherwise
(9)
S_{ji,k } = \begin{cases} w \cdot cos(e_{ji}, c_j^{-i}) + b & \text{if k=j}\\ w \cdot cos(e_{ji}, c_k) +b & \text{otherwise} \end{cases}\tag{9}
Sji,k={w⋅cos(eji,cj−i)+bw⋅cos(eji,ck)+bif k=jotherwise(9)
结合公式4、6、7和9,最终的GE2E损耗
L
G
L_G
LG是相似矩阵(
1
≤
j
≤
N
1≤j≤N
1≤j≤N,且
1
≤
i
≤
M
1≤i≤M
1≤i≤M)上所有损耗的总和:
L
G
(
x
;
w
)
=
L
G
(
S
)
=
∑
j
,
i
L
(
e
j
i
)
L_G(x; w) = L_G(S) = \sum_{j,i} L(e_{ji})
LG(x;w)=LG(S)=j,i∑L(eji)