序列数据的数据增强方法综述

2021-07-22 17:02葛轶洲杨锁荣申富饶
计算机与生活 2021年7期
关键词:标签模型方法

葛轶洲,许 翔,杨锁荣,周 青,申富饶

1.通信信息控制和安全技术重点实验室,浙江 嘉兴 314033

2.中国电子科技集团公司 第三十六研究所,浙江 嘉兴 314033

3.计算机软件新技术国家重点实验室(南京大学),南京 210023

深度学习在计算机视觉、自然语言处理等多个机器学习的子领域上均取得了耀眼的成绩,这归功于越来越庞大复杂的神经网络模型。以图像分类任务为例,解决这类问题的网络层数由2012 年的8 层增加到如今的101 层,甚至有人尝试过1 202 层的卷积神经网络(convolutional neural network,CNN)[1]。神经网络层数的增加,意味着待学习参数数量的增加。为了学习更多的参数,就需要更多的训练数据。当前效果最好的自然语言处理模型GPT-3,其参数量达到了1 700 亿,为此需要45 TB 的数据进行训练[2]。尽管GPT-3 的情况较为极端,但想要将最先进的模型应用到一个现实任务时,经常面临数据不足的问题,数据增强技术应运而生。

“数据增强”一词还没有一个统一的定义,数据增强可以认为是基于少量样本构造出更多样本以扩充数据量的方法。以数据增强技术应用最广泛的计算机视觉任务为例,通过对一张图片进行旋转(rotations)、翻转(flipping)、裁剪(cropping)等操作,就可以把一张图片“增强”成至少四张图片。若对数据集中的所有图片都进行类似的操作,该数据集可以增加到原来的四倍。

数据增强一般被认为是在训练数据集上实施的操作,在训练前进行。可以选择先对数据集整体进行操作,再把增强后的数据集送入整个机器学习流程的后续部分,这种方法被称为线下增强(offline augmentation)。这种方法会显式地增加数据集的大小,只适用于数据较少的情况。更为常用的是线上增强(online augmentation),对即将送入到模型的每一批(batch)数据执行转换,不必显式地占用磁盘空间。现有的机器学习框架实现的图片增强方法大多为线上增强方法,并基于GPU 进行加速[3]。本文介绍的针对序列数据的增强大多采用线下增强方法。本文将先介绍针对序列数据的数据增强的基础方法,再介绍基于深度学习的数据增强方法。

1 序列数据增强的基础方法

不同于图像数据,序列数据的样本间具有时序关系,因此对序列数据进行增强时要特别关注新生成样本间的时序关系。序列数据的类型很多,如连续取值的时间序列数据、离散取值的文本数据、音频数据等。尽管数据类型不同,但应用的数据增强方法背后有共通的设计思路,例如翻转、拉伸或添加噪声等。

本章主要介绍在各类序列数据上通用的基于人们的直观经验设计的数据增强基础方法。图1[4](a)展示了一个原始的时间序列,本章将基于此展示部分方法的效果。

Fig.1 Data augmentation methods applied on time series图1 在时间序列上应用的一些数据增强方法

1.1 几何变换

几何变换(geometric transformations)是最简单和常用的数据增强方法,如变换取值维度的翻转、缩放(scaling)或变换时间维度的窗口规整(window warping)[4]等,分别如图1(b)~(d)所示。图中蓝色虚线是原始序列,红色实线是变换序列(下同)。类似“翻转”方法也可以应用在时间维度上,被称作时间镜像操作[5]。窗口规整、下采样(down sampling)[6]等操作会改变序列长度,可能需要引入额外操作来保持整体长度不变。

应用不同几何变换会产生不同的结果。例如,对于异常检测任务,缩放操作可能会将异常值缩放到正常范围内,窗口规整就不会;窗口规整或下采样操作可能会丢失异常点;翻转操作不适合预测任务,因为操作彻底改变了原序列的趋势。总而言之,几何变换方法相对简单、直观,易于结合具体任务分析不同操作的合理性,但每次只对一个序列进行操作,没有考虑数据集整体的分布特点。

1.2 窗口裁剪

对序列数据进行裁剪,被称为窗口裁剪(window cropping)或窗口切片(window slicing)[4],通过一个滑动窗口在序列上不断滑动取样,生成多个长度更短的新序列。可将新序列拉长到与原序列长度相同,如图1(e)所示;或在采样过程中引入随机性,只保留部分新序列。将这种方法应用在异常检测任务时要小心异常点是否被裁去。

对于自然语言文本,类似的做法是随机删除(random deletion)[7]。针对文本数据的很多数据增强方法会改变文本长度,但自然语言模型对于文本长度并不敏感,长度的变化不影响数据进入后续的训练流程。

1.3 添加噪声

在训练数据中添加噪声被认为是防止机器学习模型过拟合的有效手段。对于数值型序列数据,可以对每一个取值随机地添加一定的噪声来生成新的序列[4,8],且不影响序列的整体性质和标签信息,如图1(f)所示。最常被用来添加的噪声是高斯噪声(Gaussian noise)。

除时间域外,频率域也可实现类似操作。时间域上的序列经过傅里叶变换后可以得到其在频率域的振幅谱(amplitude spectrum)和相位谱(phase spectrum)。在振幅谱上随机选择区间,用基于原始振幅的统计参数重新生成一段信号替换,如图2[9](b)所示;在相位谱上随机选择区间并添加白噪声(white noise),如图2(c)所示。在时间域对比用这种方法的前后效果如图2(a)所示。这种方法不改变序列的整体性质。

Fig.2 Data augmentation on frequency domain图2 在频率域进行数据增强

噪音也可添加到音频上模拟嘈杂的环境[10],常用信噪比(signal to noise ratio,SNR)量化。

也可向自然语言文本添加噪音,如用一个双向语言模型来生成新词,以替换原始文本中某个单词[11]。基于语言模型产生的单词可以保证文本中的语法、语义等信息不被破坏。一个简化版本是用同义词替换的方法替代上述的语言模型[7],将过程简化为查表,降低计算量。相关方法还有随机交换(random swap)和同义词的随机插入(random insertion)。这两种方法连同前述的随机删除和同义词替换方法,被统一命名为EDA(easy data augmentation)方法[7],已被证明在文本分类上有效,但相对本文后续方法而言EDA的数据生成过程较为机械。

1.4 在频率域变换

时频变换是常见的信号分析思路,同样可用于数据增强。在频率域添加噪声是方法之一。

有研究者首先对传感器信号应用短时傅里叶变换(short Fourier transform,STFT)得到具有时序关系的谱特征,再在谱特征上应用两种数据增强方法[12]。一是对每一个属性做局部平均,将局部平均序列拼接在原始序列的后面;二是打乱时序顺序(shuffling),以增加数据的方差。这种方法会使得数据尺寸发生变化。由于STFT 变换得到的谱特征仍然具有时序关系,这种数据增强方法也被认为是在时间-频率域上进行的。

赋值调整傅里叶变换(amplitude adjusted Fourier transform,AAFT)[13]及由其衍生的IAAFT(improved amplitude adjusted Fourier transform)[14]可实现只在频率域进行数据增强。Lee 等人将这些方法应用在信号分类上,可以令原本只有约45%~60%的准确率提高到80%以上[15]。这类方法很好地保留了时域和频域特征,但不适合短周期信号。

对于音频数据,SpecAugment[16]是一种在时间-频率域上做数据增强的方法,在信号的对数梅尔频谱(log Mel spectrogram)上操作。图3[16](a)展示了一段信号的对数梅尔频谱,频谱图的横轴是时间轴,纵轴是频率大小。在时间轴上,可以进行时间规整(time warping)或时间掩蔽(time masking),分别如图3(b)和图3(c)。时间规整是在序列中随机选择一个时间点,拉伸该点之前(之后)的信号,压缩该点之后(之前)的信号,保证序列的长度不发生改变;时间掩蔽是在整个序列中用指定值填充一随机片段。在频率轴也可以进行类似的掩蔽操作,形成图3(d)的效果,被称为频率掩蔽(frequency masking)。实验证明该方法在语音识别任务上可以显著降低字错误率(word error rate,WER)。上述方法都是针对单个序列做数据增强,生成的效率更高,但只利用序列本身的性质,没有考虑数据集整体的分布。

Fig.3 Data augmentation on log Mel spectrogram图3 对信号的对数梅尔频谱图进行数据增强

1.5 基于分解或混合的方法

研究时间序列的一种常见思路是用STL(seasonal and trend decomposition using Loess)[17]方法将序列分解为基础项、趋势项、季节项和残差项,前三者是确定性部分,包含了原序列的绝大部分信息。为了在新序列中保持这部分信息,Kegel 等人基于相似矩阵(similarity matrix)和最近邻搜索等方法为不同成分分配权重,组合新的时间序列[18]。随机的残差项则利用其分布特征和自相关特征重新建模生成。

Bergmeir 等人的方法更为简单。对时间序列信号进行分解后得到除趋势项和季节项以外的剩余项(reminder)。对剩余项进行有放回的重复采样(bootstrap),可以得到新的剩余项序列,再和前两者混合成新的时间序列[19]。这种方法很好地保留了原始时间序列所具有的性质。在M3 数据集[20]上的实验证明这种方法在月频数据上对预测精度的提升最为突出,但在长度较短的序列数据上表现一般。

二者相比,第一种方法以数据集为单位产生新的序列,第二种方法以序列为单位产生新的序列。第一种方法更能利用数据集整体的分布特征来进行数据增强,避免出现使用第二种方法可能会发生的对不典型的序列进行增强的情况。

混响(reverberation)可以看作是在音频数据上一种基于混合的数据增强方法。混响一词本身描述的是在如音乐厅、礼堂等地发生的室内声波经过多次反射和吸收而产生的一种声音现象,在计算机上可以通过混合多个不同强度且具有一定时间差的声音序列来模拟混响效果,用于数据增强[21]。相比于SpecAugment,混响以数据集为单位生成新的数据,但是并没有学习和利用数据之间的内在关系。弥补这一缺点的是后续的基于深度学习的模型。

1.6 异常标签扩展

异常标签扩展(label expansion)是一种仅针对异常检测任务的数据增强方法。出于类别平衡的目的,人们想要增加数量较少的异常标签的数量。Gao等人利用了异常的模糊性和持续性,将与已经标注为异常的数据点在时间上和属性取值上都接近的点也标注成异常点,来达到增加异常数据点的目的。图4[9]对比了原始序列数据和异常标签扩展后的数据。这种方法操作方便,在雅虎数据集[22]上的实验证明了该方法的有效性。

Fig.4 Abnormal label expansion图4 异常标签扩展

2 基于深度学习的序列数据增强方法

使用数据增强方法是为避免模型在较小的原始数据集上发生过拟合。如果像中小学的教辅材料那样对难题进行重点突破,可以构造出模型学不好的数据,让模型显式地在这些数据上也进行学习,就有可能提高模型的“答题能力”,从而取得更好的精度或准确度。基于生成对抗网络(generative adversarial network,GAN)的一系列方法即出于此目的,生成人类无法分辨但可以让模型判断错误的数据。

生成对抗网络最先应用在计算机视觉领域,应用在序列数据上的方法可以看作是这些方法的扩展。因此,本章会介绍一些应用在图像数据上的研究成果,帮助读者更好地理解这类基于深度学习的数据增强方法。

2.1 生成式对抗网络

生成式对抗网络直接生成能“以假乱真”的与训练数据非常接近的新数据。Goodfellow 等人在2014年提出的GAN[23]是后续深度卷积GAN(deep convolutional generative adversarial network,DCGAN)[24]、CycleGAN[25]等各类衍生结构的基础。GAN 由生成器(generator)和判别器(discriminator)组成,如图5[26]所示。判别器判断样本是原始数据集的还是模型生成的,而生成器尽可能地最大化判别器判断错误的概率,整个模型的优化是一个二元极大极小博弈(minimax two-player game)。如今深度神经网络已经成为了生成器和判别器的默认选择,整个GAN 的优化都通过反向传播来实现。

Fig.5 Generative adversarial network图5 生成式对抗网络

生成器把一个简单的分布映射到一个和真实数据集相近的复杂分布,这一简单的分布可以视作一种隐分布。如果同时得到把复杂分布映射回一种隐分布的方法,这种方法就可以被用来做特征表示,双向GAN(bidirectional GAN,BiGAN)[27]就是出于此目的而被发明的一种无监督方法。其学习到的特征表示不仅可以用作后续监督学习模型的输入,从数据增强的角度,GAN 也可以在这个特征空间生成新的数据,而不一定在原始的输入空间生成。有人认为GAN是最值得期待能用于数据增强的生成式建模方法[28]。

2.2 基于CNN 的GAN

DCGAN[24]利用了CNN 的特征提取能力,条件GAN(conditional GAN,CGAN)[29]则同时在生成器和判别器引入额外的条件输入,让模型生成指定标签的数据。也有人设计不同的损失函数应用在GAN 结构上,具体实现有CycleGAN[25]、StarGAN 及其变体[30]等。

后续会介绍将RNN(recurrent neural network)和GAN 结合起来应用在序列数据上的方法。尽管RNN及其变种被认为是处理序列数据的默认选择,但实验证明CNN在处理序列数据方面的能力并不亚于RNN,还拥有可以并行化等优点,用基于CNN 的GAN 来生成序列数据自然而然地成为了一个选择。基于CGAN的时间条件GAN(time-conditional GAN,T-CGAN)[31]是在GAN 上使用一维卷积的工作之一,将时间戳作为条件输入使模型可以处理时间间隔不规则的情形。同样使用了一维卷积的ehrGAN[32]被用于增强电子健康记录数据,半监督学习的引入让生成样本和原始样本的类别更有可能一致。也有人尝试将RNN 和CNN结合起来用在生成对抗网络:BiLSTM-CNN GAN[33]将RNN 用于生成器,将CNN 用于判别器。RNN 生成时间序列可以充分利用时序依赖性,基于前一时刻的值决定下一时刻的值;用CNN 做判别器可以在不影响准确度的基础上通过并行化加快判别速度。

对于音频数据,有人参考在频率域进行数据增强的方法,将频谱图看作图片,用DCGAN 生成新的频谱图,如SpecGAN[34]。将DCGAN 扩展到一维的情况,直接对音频信号应用一维CNN 得到WaveGAN。在不同的评价标准下,SpecGAN 和WaveGAN 二者各有优劣[6]。SpecGAN 更能充分利用数据间的内在关系,WaveGAN 简化了增强流程,生成的数据和原始数据更加相似。不过二者都只能生成1 s 左右的短音频,离实际应用仍有差距。

字词天生的离散特性为GAN 应用在自然语言处理任务上增加了难度。前述方法往往只针对实值的、具有连续特征的数据。生成字词的最后一步是选择最大可能性的单词,这一argmax 操作是不可导的。若直接利用现有的语言生成模型作为生成器,整个模型无法反向传播判别器计算的损失。一种方法是引入自编码器(auto-encoder),利用GAN 生成其中的连续的编码表示[35]。不过性能优良的自编码器需要大量的真实语料做训练,与进行数据增强的目的相悖。

2.3 基于RNN 的GAN

类比于DCGAN 和CGAN,有研究者将RNN 引入GAN 设计出循环GAN(recurrent GAN,RGAN)和循环条件GAN(recurrent conditional GAN,RCGAN)[36],生成实值的多维时间序列数据,如图6[36]所示。RGAN在每一时间点都根据不同的随机数种子生成一个随机值,交给生成器生成一段时间序列;判别器在每一时间点都给出一个关于当前时间序列是否为真实序列的判断,最后通过投票机制得到判别结果。RCGAN在此基础上引入条件输入。在医学领域的二分类问题上,尽管使用RGAN 生成的数据进行训练并没有直接使用真实数据训练的效果好,但是考虑到医学领域的很多数据难以获得等现实问题,这种方法仍然具有其应用价值。

Fig.6 RGAN and RCGAN图6 RGAN 和RCGAN

时间序列GAN(time-series GAN,TimeGAN)[37]则在基于RNN 的GAN 的基础上引入可学习的嵌入空间(embedding space),用监督学习和对抗学习共同训练。用有监督的损失函数指导模型学习,可以让模型学习到每一时间点的条件分布,而不是只让模型判断每一个序列的真假;嵌入网络用来降低对抗学习空间的维度。在股票、能源等多个数据集上的实验表明TimeGAN 显著优于RCGAN 等模型,其中TimeGAN 的有监督的损失函数、嵌入网络和共同训练这三点都发挥了非常重要的作用。

在实际应用中,一个数据集可能包含从多种分布产生的时间序列。可以将数据分成多个子集,对每一个子集应用一个GAN 来生成符合具有这一部分子集特点的数据,最后将所有GAN 生成的数据汇总起来。这种使用多个GAN 的方法的有效性在多种数据集上被验证[38-39],但会引入较大计算量。

基于RNN 的GAN 在音频数据上的应用多集中在音乐生成任务上。音乐被视为是离散的符号序列,同样会面对与用GAN 生成自然语言文本类似的不可导问题。为了解决这一问题,在生成器和判别器都使用了RNN 的C-RNN-GAN[40]将每一时刻的音乐特征化为了连续值,SeqGAN[41]则引入了强化学习的策略梯度方法,但只在生成器使用RNN。用于人声和伴奏分离任务的G-RNN-GAN[42]将判别器简化成了多层感知机。简单的结构有助于提高模型效率,但是该方法的作者并没有证明使用多层感知机的充分性,判别器的性能提升空间仍有待探索。DCRGAN(deep convolutional recurrent generative adversarial network)[43]是将RNN 结构的生成器用于语音增强任务的一例,而判别器使用CNN。相比于CNN,RNN 在音频数据上的应用很少且多只在生成器上应用,判别器使用CNN 等可以并行化的结构有助于提高判别效率。

增强自然语言文本同样存在不可导问题。前述的引入自编码器的思路也可以在编码空间使用RNN生成和判别[44],但相应的缺陷依然存在。有人提出了更为简单的方法,用可导的Gumbel-Softmax 函数替代原来的argmax 操作[45]。这种方法有对现有模型的修改小,“即插即用”的优点,但只被证明在简单符号序列上有效。整体而言,用GAN 做语料生成的技术并不成熟,距离工业应用有一定差距。

3 总结与讨论

3.1 总结

本文以应用在不同序列数据上的增强方法背后的共同点为线索,介绍了在时间序列、音频、自然语言等多种序列数据上进行数据增强的方法,分别如表1~表3 所示。这些方法更多地适用于分类问题,而应用在其他任务上的数据增强方法还有待更多的研究。

Table 1 Comparison of augmentation methods for time series表1 时间序列数据的增强方法比较

Table 2 Comparison of augmentation methods for audio data表2 音频数据的增强方法比较

Table 3 Comparison of augmentation methods for text data表3 文本数据的增强方法比较

3.2 在测试集上应用数据增强方法

数据增强方法一般被应用在训练数据集上,实际也可以应用在测试数据集上,实现类似于集成学习的方法。这样的方法被称为测试时间的数据增强(test-time augmentation),用以和常见的训练时间的数据增强(train-time augmentation)相区别。

例如在时间序列分类任务中,对一个原始序列应用窗口切片方法得到多个序列,分别预测这些序列的标签,再投票决定原始序列的标签输出[4]。在通用的UCI 数据集上的实验表明了该方法的有效性。类似的方法也被应用在医学领域[46-47],减少了以高置信度输出错误答案的情况。这类方法可以帮助模型输出更好的不确定性估计,但是会显著增加测试时间。

3.3 标签上应用数据增强方法

不同于常见的对输入数据变换的增强方法,DisturbLabel[48]是对标签进行修改,在训练过程中的每一轮引入小部分标签被故意改错的数据。尽管这种做法是反直觉的,但这种方法被证明在心电图数据[47]和调制信号[49]等多个序列数据的分类任务中有效。在信噪比较高时DisturbLabel 的效果最好。不过整体而言这种方法应用在序列数据上的情况较少,有待后续研究探索更多在序列数据上的应用。

3.4 用数据增强方法缓解数据不平衡问题

如果在使用数据增强方法时指定生成那些原始数据量较少的类的样本,数据增强方法可以用来缓解数据不平衡的问题。前述的异常标签扩展方法就是为了增加样本数量较少的异常数据而设计的。CycleGAN 被用来生成情绪分类(emotion classification)数据中出现次数较少的情绪标签,使得分类任务的精度提升5%~10%[50];GAN 的一个变种对抗自编码器(adversarial autoencoder,AAE)[51]被应用在异常检测任务中生成不频繁但是正常的数据点,帮助异常检测算法更好地判断哪些是真正的异常点[52]。这同时也证明了数据增强技术可以应用在无监督任务中并取得不错的效果。在这些例子中,GAN 一类的方法可以看成是一种聪明的过采样的方法。

3.5 数据增强可能导致数据标签发生改变

在做数据增强时需要特别留心的一点,是使用增强方法后新得到的数据的训练目标(如分类标签)是否和原始数据一致。比如在异常检测任务中应用裁剪方法可能会将异常点裁剪出序列,此时序列的标签应是一个正常序列。不改变训练目标的数据增强方法被称为“标签保持的变换”(label-preserving transformation)[28]。而当使用的方法不满足这一条件时,可能需要人工重新标注新生成的数据,这时需要平衡数据增强的效果和人工标注的成本。

3.6 数据增强方法的好坏没有统一标准

本篇文章所提及的数据增强方法大多适用于分类任务,对于其他任务的研究则相对匮乏。数据增强方法的好坏不能一概而论,具体应使用的方法取决于具体任务。例如,尽管CGAN 是基于GAN 衍生出来的,且实验证明在许多任务上CGAN 是优于GAN 的,但Sheng 等人针对儿童语音识别任务的研究[53]发现,平均来看GAN 反而优于CGAN[4]。有研究者基于具体任务研究不同数据增强方法的优劣,或设计多种评价标准来评价方法的好坏,具体可以参考文献[54]。

使用数据增强算法本身往往伴随着内存、训练时间等资源开销的增加,使用数据增强方法时应平衡任务效果的提升和引入的资源开销。另外,本文提及的各类数据增强方法可以组合使用,进而提升数据增强的效果,这已被多个研究证明[55-56]。即使是同一个增强方法也可以在同一批数据上重复使用。图7[12]展示了一个对序列数据进行数据增强的流程例,其中局部平均这一方法被重复使用了两次。

Fig.7 Flow chart of data augmentation on sequence data图7 对序列数据进行数据增强的流程图

3.7 医学数据是数据增强常见的应用领域

不难发现,无论是序列数据,还是图片数据,数据增强研究和应用最为广泛的往往是医疗领域的数据[15,32-33,36,38,56-57]。一些疾病的诊断依赖于专业医生在体征信号中根据时序关系的异常来发现,但由于保护患者隐私、商业竞争等原因,医学数据往往是匮乏的。GAN 等方法不是简单地对现有的数据进行复制,因此基于GAN 来生成相关的人造的医疗数据不仅可以起到增加训练数据的作用,共享相关的生成数据也不会侵犯个人隐私。这也是GAN 被广泛应用在医疗数据上的一个原因。

3.8 将强化学习应用于数据增强

随着强化学习的兴起,出现了基于强化学习进行数据增强的工作。强化学习模型通过与环境的不断交互,可以自己挑选出最优的数据增强方法[58]或组合出最优的数据增强流程[59]。

回顾增强文本数据或音乐数据时出现的不可导问题,强化学习解决不可导问题的方法给这一问题的解决提供了思路,如Hu 等人的方法[60]、TextGAIL(text generative adversarial imitation learning)[61]、CTGAN(conditional text generative adversarial network)[62]等。不过强化学习方法本身的鲁棒性差、调参困难等问题尚未得到解决,应用到数据增强时这些问题依然存在,相关方法还有很大的探索空间。

4 展望

基于深度学习的数据增强是当今机器学习领域研究最为火热的子领域之一,还有非常多的问题供研究者们探索,如结合元学习(meta-learning)和数据增强[63],结合神经网络结构在特征空间进行数据增强,用强化学习方法来增强数据等。在讨论部分简单介绍了在测试阶段或对标签信息进行数据增强的方法,这方面的更多研究成果也值得期待。

有人可能认为数据增强技术更像是一个应用问题,依赖于深度学习技术的发展而无法给深度学习的理论研究带来帮助。事实上一些数据增强方法对于效果提升的帮助的原因还不清楚,了解其背后作用的机理不仅有助于人们更好地使用、设计数据增强方法,也可能帮助人们更深入地理解CNN 等神经网络结构,提高神经网络的可解释性。

猜你喜欢
标签模型方法
适用于BDS-3 PPP的随机模型
自制空间站模型
不害怕撕掉标签的人,都活出了真正的漂亮
模型小览(二)
离散型随机变量分布列的两法则和三模型
用对方法才能瘦
让衣柜摆脱“杂乱无章”的标签
四大方法 教你不再“坐以待病”!
赚钱方法
科学家的标签