• We don’t know something is blue until we see red.
  • We don’t know something is music until we hear noise.

在过去,无监督学习以例如 VAE、GAN 这样的生成式模型比较多,生成式模型期望利用数据表征重构完整数据。但最近判别式模型逐渐走进了人们的视野。对比学习是何恺明、Hinton、LeCun等大佬最近关注的研究重点之一。对比学习通过数据之间的对比进行表示学习,期望数据表征包含足够多信息即可。近日,唐杰老师对 Self-Supervised Learning 发表了一篇综述性的文章。

CN-Celeb 数据集的发布展现出当前说话人识别系统在真实环境下的性能表现可能并不理想,系统的鲁棒性还有待增强。我认为 SimCLR 为代表的对比学习方法可以更好的提高当前说话人识别系统的鲁棒性,特别是可以提高在 CN-Celeb 数据集上的表现。

Contrastive Learning

对比学习的思路可以用一句话来概括 “We don’t know something is blue until we see red”。它通过数据之间的对比进行表示学习,从而让像的样本所得表示差异小,让不像的样本所得表示差异大。“对比学习”中的“对比”是 positive 样本 和 negative 样本的对比。在学习到的“表示空间”内,增大某样本与其 positive 样本之间的相似度,减少与negative 样本的相似度:

$$\textrm{score}(f(x),f(x^{+})) >> \textrm{score}(f(x), f(x^{-}))$$

其中,互信息(Mutual Information, MI)在对比学习中是一个非常重要的概念,是指一个随机变量由于已知另一个随机变量而减少的不确定性,通过最大化互信息进行表征学习,从而期望数据表征包含足够多信息。 $MI(x;c) = \sum_{x,c}p(x,c)log\frac{p(x|c)}{p(x)}$ 。很多大佬也提出了一系列对比学习的 Loss,其中比较有代表性的是:

  • InfoNCE (InfoNCE 是 MI 的下界)
  • NCE
  • Margin Triplet

在对比学习中,我认为有 3 个非常典型的学习框架可以应用于说话人识别这样的语音信号处理领域中,分别如下:

1. CPC

  • Anchor: 自回归模型历史时序
  • Positive: 同一时序未来时刻的信息
  • Negative: 不同时序未来时刻的信息

2. MoCo

MoCo 是由何恺明一作提出用于 CV 领域的方法。它的网络训练的方法和我之前用 Pytorch 写的 flow 的训练模式很像

3. SimCLR

SimCLR 是由 Hinton 参与提出的一个 Constractive Learning 通用学习框架,我认为它的核心是Data Argument

CN-Celeb Pretrain Experiment

CN-Celeb 数据集的发布展现出当前说话人识别系统在真实环境下的性能表现可能并不理想,系统的鲁棒性还有待增强。

Reference

[1] [Amit Chaudhary] illustrated-simclr

[2] [Amit Chaudhary] SSL

[3] [sthalles] simple-self-supervised-learning