赞
踩
“如果我不是物理学家,我可能会成为音乐家。我经常在音乐上思考。我在音乐中实现我的白日梦。我从音乐的角度来看待我的生活。——爱因斯坦
我可能不是像爱因斯坦先生那样的物理学家,但我完全同意他对音乐的看法!我不记得有哪一天我没有打开我的音乐播放器。我上下班的旅途伴随着音乐,老实说,它帮助我专注于我的工作。
我一直梦想着作曲,但对乐器却不是很熟悉。直到我遇到了深度学习。使用特定的技术和框架,我可以创作自己的原创音乐,而不需要真正了解任何音乐理论!
这是我最喜欢的专业项目之一。我把我的两个爱好——音乐和深度学习——结合起来,创造了一个自动生成音乐的模型。梦想成真了!
我很高兴与你分享我的方法,包括整个代码,使你能够生成自己的音乐!我们将首先快速理解自动音乐生成的概念,然后再深入探讨我们可以使用的不同方法。最后,我们将启动Python并设计我们自己的自动音乐生成模型。
音乐是一种艺术,一种通用的语言。
我把音乐定义为不同频率的音调的集合。因此,音乐的自动生成是一个创作一小段音乐的过程,并且在在这个过程中人类的介入不多。
产生音乐的最简单形式是什么?
这一切都是从随机选择声音并将它们组合成一段音乐开始的。在1787年,莫扎特提出了一个骰子游戏,这些随机的声音选择。他手工创作了近272个音调!然后,他根据两个骰子的总和选择一个音调。
另一个有趣的想法是利用音乐语法来产生音乐。
音乐语法包括正确安排和组合音乐声音以及正确演奏音乐作品所必需的知识 -音乐语法基础
在20世纪50年代早期,Iannis Xenakis使用统计和概率的概念来创作音乐——通常被称为随机音乐。他把音乐定义为偶然发生的一系列元素(或声音)。因此,他用随机理论来阐述它。他对元素的随机选择完全依赖于数学概念。
最近,深度学习架构已经成为自动生成音乐的最新技术。在本文中,我将讨论使用WaveNet和LSTM(长短时记忆)架构实现自动作曲的两种不同方法。
音乐基本上是由音符和和弦组成的。让我从钢琴乐器的角度来解释这些术语:
我将详细讨论两种基于深度学习的自动生成音乐的架构——WaveNet和LSTM。但是,为什么只有深度学习架构呢?
深度学习是受神经结构启发的机器学习领域。这些网络自动从数据集中提取特征,并且能够学习任何非线性函数。这就是为什么神经网络被称为通用函数逼近器。
因此,深度学习模型是自然语言处理(NLP)、计算机视觉、语音合成等领域的最新技术。让我们看看如何为音乐作曲建立这些模型。
WaveNet是一个基于深度学习的原始音频生成模型,由谷歌DeepMind开发。
WaveNet的主要目标是从原始数据分布中生成新的样本。因此,它被称为生成模型。
Wavenet类似于NLP中的语言模型。
在一个语言模型中,给定一个单词序列,该模型试图预测下一个单词:
与WaveNet中的语言模型类似,给定一个样本序列,它尝试预测下一个样本。
长短时记忆模型(Long- Short-Term Memory Model,俗称LSTM)是循环神经网络(RNNs)的一种变体,它能够捕获输入序列中的长期依赖关系。LSTM在序列到序列建模任务中有着广泛的应用,如语音识别、文本摘要、视频分类等。
让我们详细讨论如何使用这两种方法来训练我们的模型。
这是一个多对一的问题,输入是一系列振幅值,输出是随后的值。
让我们看看如何准备输入和输出序列。
WaveNet将原始音频作为输入。原始音频波是指波在时间序列域中的表示。
在时间序列域中,音频波以振幅值的形式表示,振幅值记录在不同的时间间隔内:
给定振幅值的序列,WaveNet尝试预测连续的振幅值。
让我们通过一个例子来理解这一点。考虑一个采样率为16,000(即每秒16,000个次采样)的5秒的音频波。现在,我们有80000个样本,每隔5秒记录一次。让我们把音频分成大小相等的块,比如1024(这是一个超参数)。
下图展示了模型的输入和输出序列:
我们可以对其余的块使用类似的过程。
从上面我们可以推断出每个块的输出只依赖于过去的信息(即以前的时间步),而不依赖于未来的时间步。因此,该任务称为自回归任务,该模型称为自回归模型。
在推理阶段,我们将尝试生成新的样本。让我们看看怎么做:
WaveNet的构建块是因果扩展的一维卷积层。让我们首先了解相关概念的重要性。
使用卷积的一个主要原因是从输入中提取特征。
例如,在图像处理的情况下,将图像与过滤器进行卷积可以得到一个特征图。
卷积是结合两个函数的数学运算。在图像处理中,卷积是图像某些部分与核的线性组合
一维卷积的目标类似于长短时记忆模型。它用于解决与LSTM类似的任务。在一维卷积中,一个核或一个滤波器只沿着一个方向运动:
卷积的输出取决于核的大小、输入形状、填充类型和步幅。现在,我将带你通过不同类型的填充来理解使用因果扩展一维卷积层的重要性。
当我们设置padding有效值时,输入和输出序列的长度会发生变化。输出的长度小于输入的长度:
当我们将padding设为相同时,在输入序列的两边填充0,使输入和输出的长度相等:
这为因果卷积扫清了道路。
注意:我在这里提到的优点和缺点是针对这个问题的。
这被定义为卷积,其中在t时刻的输出只与来自t时刻以及更早的前一层的元素进行卷积。
简单地说,普通卷积和因果卷积只在填充上不同。在因果卷积中,在输入序列的左侧添加0,以保持自回归原理:
正如你在这里看到的,输出仅受5个输入的影响。因此,网络的接受域为5,非常低。网络的接受域也可以通过添加大尺寸的核来增加,但是要记住计算复杂度会增加。
这让我们想到了因果扩展一维卷积的概念。
在核值之间存在空穴或空隙的因果一维卷积层称为扩展一维卷积。
要添加的空格数由扩展率给出。它定义了网络的接收域。大小为k且扩展速率为d的核在k的每个值之间有d-1个洞。
正如你在这里看到的,将一个3*3的核与一个7*7的输入用扩展率2来进行卷积,其接收域为5*5。
正如你在这里看到的,输出受到所有输入的影响。因此,网络的接受域是16。
一个块包含残差连接和跳跃连接,这些连接只是为了加快模型的收敛速度而添加的:
另一种自动生成音乐的方法是基于长短时记忆(LSTM)模型。输入和输出序列的准备类似于WaveNet。在每个时间步,振幅值被输入到长短时记忆单元-然后计算隐藏的向量,并将其传递到下一个时间步。
在 h t h_t
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。