paper-20231007-对抗训练的多歌手seq2seq SVS

【正文开始】

来源

【一、我的概括理解】

//为了解决什么难点问题,提出了哪些方法,达到了怎样的效果

【难点和优化手段】

难点

优化手段

优点

对target-singer进行优化时,存在数据不足的问题

加入其他singer的数据,这也将单一歌手的SVS框架扩展成了多歌手的SVS框架

有点类似于跨歌手的知识迁移学习了;将模型在其他歌手(out-domin)上学到的声学信息传递给要优化的目标歌手(in-domin),以实现目标歌手的定制优化

进行多歌手SVS任务时,存在数据分布不均衡的问题(有的歌手对应的歌声数据多,有的少)

引入梯度反转层的歌手分类任务,并使用对抗损失来进行优化

相当于多任务学习了,梯度反转可以减轻模型对歌手信息的依赖

合成的歌声存在过度平滑以及样本特性单一的问题

引入MRWD(多个随机窗口的discriminater),使得模型成为GAN的形式

(1)多个鉴别器是相互独立的,利用对抗训练的特性,可以计算生成特征和真实特征的相似性;同时也可以计算生成的特征是否与所提供的乐谱信息高度相关;

(2)输入给鉴别器的是随机的声学子片段而不是整个声学序列,既丰富了生成特征的多样性,也起到了数据增广的作用

【系统框架和对比系统】

本文的基线模型是前面学习过的论文(基于FFTseq2seqSVS),再此基础上增加了一些新模块(黑色实线为baseline,绿色虚线为新增模块)

在新模块中,

  • singerEMDecoder_input拼接在一起后作为真正的Decoder_input
  • singerEMmusic_score_EM拼接在一起作为MRWD的条件
  • 经过LR之后的encoer_out喂给歌手分类器,使用对抗损失进行优化

baseline: Single-singer singing model.

module1: Multi-singer singing model.

module2: Singer classifier.

module3: Multiple random window discriminators.

【最终达到的效果】

  • 进行了两组客观测试和两组主观测试实验,都是所提方法比基线更好
    • 客观测试:
      • (1)Mel全局方差,Syestem5的GV最小
      • (2)一段高音在System1-System5上的频谱比较;System5的频谱最清晰
    • 主观测试:
      • (1)MOS:对System1-system5生成的歌声样本进行听音
      • (2)A/B  preference test: System2 VS System3; 4VS5

//其他方面:从本文学到了哪些以前不知道的知识?关于本文还存在哪些疑问?

【其他学到的知识】

(1)本文的LR就是基线所讲的alinger

(2)关于phoneme-duration

为了避免不同duration predictor的影响,本文使用ground-truth phoneme duration(就是使用HMM tool得到的),训练和测试阶段都是GT

基线使用粗略的phoneme-duration-predictor,是一个lookup tabel

3)本文可以借鉴的点:

多歌手提取EM、歌手分类器(提取emo的EM以及emo分类器)

 

【还有哪些疑问】

(1)Similar to [7], we only focus on spectrum modeling and assume F0 are given. (F0是从何而来的)

(2)WORLD vocoder [25] is used to extract acoustic features, which allows the explicit control of F0.(为什么要使用vocoder来提取声学特征,为什么它提取的声学特征就能显示的控制F0?)

(3)关于MRWD需要阅读对应的参考文献

0遗忘的知识/不懂的知识】

1、对GAN的损失的理解

  • GAN中有一个G和一个D,首先要明确它们的目标是什么,才能确定各自的损失是优化什么
    • 生成对抗网络(GAN)由两部分组成:生成器(Generator)和判别器(Discriminator)。
    • 生成器的目标是生成尽可能真实的假样本,而判别器的目标是尽可能准确地区分真实样本和假样本。这两部分的目标形成了对抗性的关系,因此得名生成对抗网络。

  • GAN的损失函数通常包含两部分:一部分是判别器的损失函数,另一部分是生成器的损失函数。
    • 1. 判别器的损失函数:判别器的目标是正确地分类真实样本和假样本。因此,判别器的损失函数通常是二元交叉熵损失函数,用于衡量判别器对真实样本和假样本的分类准确性。
    • 2. 生成器的损失函数:生成器的目标是欺骗判别器,使其无法区分生成的假样本和真实样本。因此,生成器的损失函数通常是判别器在假样本上的损失,即生成器希望判别器在其生成的假样本上的损失尽可能大。

  • 在标准的GAN中,这两个损失函数通常被合并为一个单一的损失函数,如下所示:
    • min_G max_D V(D, G) = E_{x~p_data(x)}[log D(x)] + E_{z~p_z(z)}[log(1 - D(G(z)))]
    • 其中,D(x)是判别器对真实样本x的预测,G(z)是生成器对随机噪声z的输出,E是期望值。
    • 这个损失函数表示判别器希望最大化其对真实样本和假样本的分类准确性,而生成器希望最小化判别器对假样本的分类准确性,即最大化判别器对假样本的分类错误率。
    • 请注意,这只是最基本的GAN损失函数。在实际应用中,可能会使用各种改进的GAN损失函数,如WGAN、LSGAN等。
  • 以下是一个博客的参考:
  • 对GAN的loss的解释

2、随机变量的期望的物理意义是什么?(期望就是平均值?!)

  • 随机变量的期望(Expectation)或平均值(Mean)是概率论和统计学中的一个基本概念,它提供了随机变量可能取值的“中心”或“平均”位置的度量。
    • 在物理意义上,随机变量的期望可以被理解为在大量重复实验或观察中,随机变量的平均值或期望值。
    • 换句话说,如果你无限次地重复一个随机实验(每次实验都独立于其他实验),并且每次都记录随机变量的值,那么这些值的平均值将接近于随机变量的期望。
  • 例如,假设你有一个公正的六面骰子,你投掷它很多次,并记录每次的结果。随着投掷次数的增加,你会发现所有结果的平均值趋近于3.5,这就是这个随机变量(骰子的面数)的期望1+2+3+…6)/6=3.5
  • 请注意,虽然期望给出了随机变量的“平均”值,但它并不能完全描述随机变量的行为。
    • 例如,两个随机变量可能有相同的期望,但它们的分布可能完全不同。
    • 因此,期望通常与其他统计量(如方差)一起使用,以更全面地描述随机变量的行为

3、什么是A/B preference测试

  • A/B preference测试是一种用户体验研究方法,用于比较两种或多种不同的设计或产品版本,以确定哪一种更受用户喜欢或更有效。
    • 在A/B preference测试中,研究者会创建两个或多个不同的版本(例如,版本A和版本B),每个版本都有一些不同的特性或设计元素。
    • 然后,研究者会让一组用户试用这些不同的版本,并询问他们哪一个版本更符合他们的喜好或需求。

  • 例如,一个网站可能会进行A/B preference测试来确定哪种布局、颜色方案或导航结构更能吸引用户并提高转化率。或者,一个产品团队可能会进行A/B preference测试来确定哪种新功能更受用户欢迎。
    • A/B preference测试的优点是它可以提供直接、实证的反馈,帮助设计师和产品经理做出更好的决策。
    • 然而,它也有一些局限性,例如,它可能无法捕捉到更深层次的用户需求,或者在有多个变量时可能难以确定哪一个变量导致了差异。

4、什么是梯度反转层

  • Gradient Reversal Layer (GRL)是一种在神经网络中使用的特殊层,它的主要作用是在反向传播过程中反转梯度的方向。这种层在训练过程中不改变前向传播的输出,但在反向传播时,它会将传递给它的梯度乘以一个负的比例因子(通常是-1),从而“反转”了梯度的方向
  • GRL在领域自适应(Domain Adaptation)和生成对抗网络(GANs)等任务中非常有用。
    • 在这些任务中,我们希望模型在源领域和目标领域之间学习到的特征分布是相似的,而GRL可以帮助我们实现这一目标。
    • 例如,在领域自适应任务中,我们可能有一个源领域(例如,数字手写体图像)和一个目标领域(例如,街景房号图像)。我们希望训练一个模型,使其在源领域和目标领域上都能表现良好。为此,我们可以在模型中添加一个GRL,使得模型在反向传播过程中尽量减小源领域和目标领域的特征分布差异
    • 具体来说,我们可以设计一个损失函数,使得模型在源领域上的预测错误尽可能小,同时通过GRL使得源领域和目标领域的特征分布差异尽可能小。
  • 在代码中,GRL可以简单地实现为一个自定义的层,例如在PyTorch中,可以如下实现:

class GradientReversalLayer(nn.Module):

    def __init__(self):

        super(GradientReversalLayer, self).__init__()

    def forward(self, x):

        return x

    def backward(self, grad_output):

        return -grad_output

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值