文章目录
- 概述
- 一、Approaches And Challenges
- 生成的声音是什么类型
- 训练模型使用的是什么特征
- 原始音频Raw Audio
- 频谱图Spectrograms
- 声音生成模型常用的结构
- 生成模型的输入
- 二、Autoencoders Explained Easily
- 自动编码器的通俗解释
- PCA和编码器的区别
- 如何训练一个编码器
- Deep Autoencoder
- 使用自动编码生成的过程
- 三、Generation with AutoEncoders: Results and Limitations使用自动编码器生成声音的结果和限制
- 四、From Autoencoders to Variational Autoencoders:The Encoder
- 改变了编码器的的组件
- 改变了损失函数
- 五、Sound Generations with VAEs
- 对于音频数据集的预处理
- 使用的数据集
- 训练
- 具体代码
概述
- 这部分是学习网课的具体内容,国外的网站,有时间可以二创一下。
- 下述为课堂笔记
一、Approaches And Challenges
- 这一节主要是介绍声音生成系统,常见的一些方法,以及他们所面对的一些挑战,主要是围绕着几个问题展开
- 生成的声音是什么类型的
- 训练模型使用的特征是什么
- 所采用而深度学习模型是什么
- 生成的模型的输入是什么
生成的声音是什么类型
- 给你一段文字,自动生成相对应的语音
- 给你一段音乐,你可以将之生成为不同风格的另一种音乐
- Foley 声音设计,这就是类似电影用的配乐,根据需求生成汽车发动的声音,大雷声
- 。。。
训练模型使用的是什么特征
原始音频Raw Audio
- 比较有名的文章推荐
- WaveNet:A Generative Model For Raw Audio
- Jukebox:A generative model for music
- 该类型的生成模型具有如下的特点
- 需要处理的数据量大
- 无法提取复杂结构特征
- 这里指的是long range dependency feature
- 比如说音色,旋律、和弦之类的,可能要处理好几秒钟才能学会的东西
- 数据量大,会导致模型很复杂,是的计算量很大
- 生成过程很慢,原始数据量很大,模型很复杂
频谱图Spectrograms
- 使用频谱图代替波形图,横坐标是时间,总坐标是对应的频率,然后颜色表示声音的强度。
具体步骤如下
- 首先使用短时傅立叶变换(short time Fourier Transformation)将波形图转变为时频域的频谱图
- 然后以频谱图作为输入,放到神经网络上进行训练
- 经过训练的网络在生成新的频谱图
- 然后在使用ISTFT(inverse short time Fourier Transformation 逆短时傅立叶变换)将频谱图转变为波形图
频谱图生成声音的优点
- 比起波形图,频谱图的时间轴更加紧凑完整,因为他并没有像时域图一样,保存那么多的节点
- 能够获取比较复杂的特征(long-range dependency)
- 音色、音节、曲风
- 在保证了完整的信息的同时,确保了计算量比较小
频谱图生成声音的缺点
- 难以提取出图片中的局部特征(保真度),因为直接转换成频谱图,类似一种由細颗粒度转成粗颗粒度的过程,所以保真度一般
声音生成模型常用的结构
- 常见的结构有如下的几种
- GAN
- Autoencoder
- Variational Autoencoder(VAE)
- VQ-VAE
生成模型的输入
Conditioning Generations
- 根据输入的语音信息,生成生成符合特定条件的声音
Autonomous Generations
- 模型生成任意的声音,这主要是和训练集相关的
Continuation Generations
- 根据输入的seed生成特定的音频,一般是某一个没有完成的音乐片段
二、Autoencoders Explained Easily
自动编码器的通俗解释
-
自动编码器是一种无监督学习,学习数据中的一些结构和模式
-
自动编码器是一种bottleneck structure 就是上图中间绿色的两个节点,类似一个瓶口的结构,两边宽,中间窄
-
实现的功能就是:
- 将输入数据压缩到编码器中,然后能通过编码器还原出原来的数据
- 确保了原始数据的低维表示
-
构成
- 编码:从宽的结构到窄的结构
- 将原始数据压缩为低维度表示,主要是包含了最重要的属性或者特征
- 解码:从窄的结构到宽的结构
- 将压缩之后的数据,重新恢复到原来的维度,重建原始数据
- 编码:从宽的结构到窄的结构
-
条件
- 需要确保,输入数据的不同维度之间要有依赖关系,如果相互独立,没有办法进行降维
PCA和编码器的区别
- 在上述图中,一个点表示一个数据分布,
- PCA只能在直线上对数据的分布进行拟合
- 编码器可以你和数据分布的非线性关系
- PCA和编码器都是用来降维的,都能减少数据的维度
- PCA只能学习线性关系,只能提取简单的特征
- 编码器能够学习非线性关系,较之于上者,可以提取更加复杂的特征
如何训练一个编码器
- 使用反向传播
- 最小化重建损失函数,直接比较解码器还原的输出和原始的输入之间的差别
- 一般来说用的是平方差,或者根平方差
* 关于损失函数 - 上述重建损失函数,只能确保输出尽可能的利用输入数据的有效特征
- 为了防止过拟合,还需要加上对应的正则化项,具体如下
- 一般来说用的是平方差,或者根平方差
Deep Autoencoder
- 这里参考一下,常见的编码解码器,相关的链接
- 还有一篇国外的链接,讲得也不错,链接
- Encoder编码器
- 卷积层
- Leaky Relu
- Batch normalization
- Decoder解码器
- 卷积层的转置Convolution traspose,不同于卷积的下采样,这里是对卷积进行一个上采样,实现数据的扩充
- Leaky Relu
- Batch normalization
使用自动编码生成的过程
- 每一次输入一个样本之后,都会对特征空间进行改变,具体表现为新增加一个特征点
- 在通过编码器训练特征空间的同时,也会训练解码器,并且通过输出和输入数据的重构损失函数来调整参数
- 声音生成过程,就是在调整之后的特征空间中,随机选择一个点,然后对这个点进行解码,生成新的样本
三、Generation with AutoEncoders: Results and Limitations使用自动编码器生成声音的结果和限制
-
训练过程:
- 上数为编码器中的潜在特征空间,由于一开始设置为二维空间,所以可以直接画出来。不同颜色的点,表示不同类别的样例的特征在二维空间中的映射。
-
生成过程
- 通过对潜在空间进行随机采样,获取任意的点,并通过解码程序,生成对应的新的样例
-
通过观察上述特征图可以看到,自动编码器具有如下的缺点
- 特征空间并不是完全关于原点对称,很多特征点很密集,很多特征点很稀疏
- 特征空间中存在地方并没有任何的颜色,这部分的采样点,并不能生成有效的数字,因为分不清到底属于哪一块
- 特征空间缺少多样性,对于这个特空空间进行采样,可以发现,对于所占面积比较大的区间,选中的概率更大。
四、From Autoencoders to Variational Autoencoders:The Encoder
- 针对上述的三个问题,提出了使用变分自动编码器进行训练
改变了编码器的的组件
- 二者映射关系的对比
- 左侧是自动编码器的映射关系,是将样例映射为潜在特征空间的特征点
- 右侧是变分自动编码器的映射关系,是将样例映射为多元正态分布
首先从一维的正态分布入手
- 标准正态分布的图片
- 标准正态分布的公式
- 参数说明
- σ \sigma σ表示这个正态分布的宽度
- μ \mu μ表示正态分布的中心
- 在标准正态分布中进行采样,使用上述公式,其中 ε \varepsilon ε是从正态分布中抽样的点
多元正态分布的形式化
- 以二维的正态分布为例子
- 这是多个维度下的正态分布公式
- 可以看到,在这里是将样例映射为一个对应二维的分布
多元正态分布的的修正(主要是针对自动变分器的缺点)
- 由于是将样例映射为二维空间中的分布,所以潜在特征空间是连续的,不会存在空白区域
- 距离同一个平均值也就是正态分布的中心比较近的两个点,生成的样例也是比较相似的
改变了损失函数
- KL散度,用来标准正态分布和正态分布之间的差异
- 对于那种方差和标准分布参数完全不同的分布进行矫正
-
α
\alpha
α是重建损失函数的权重,
- 太大,最终的效果和自动编码器的效果相同
- 太小,重建的图片和原图一点关系都没有
五、Sound Generations with VAEs
对于音频数据集的预处理
使用的数据集
训练