工程师深度学习,第3部分:数据预处理和短时傅里叶变换
从系列:面向工程师的深度学习
布莱恩•道格拉斯
原始形式的数据可能并不适合训练网络。您可以对数据进行一些更改,这些更改通常是需要的,有时是必要的,以使训练更快、更简单,并确保它收敛于解决方案。
本视频介绍了为什么深度学习系统对预处理很重要的三个原因:
- 将数据转换为适合于网络架构的形式
- 减少数据的维度,使模式更加明显
- 调整训练数据,以确保覆盖整个解决方案空间
在上个视频中,我们讨论了如何需要数据来训练分类网络。然而,在许多情况下,原始形式的数据,即收集数据的形式,可能并不适合训练网络。为了使训练更快、更简单,或者确保它在一开始就收敛于解决方案,我们可以对数据进行一些通常需要或有时必要的更改。在这个视频中,这就是我们要讨论的。具体来说,我想强调几种预处理数据的不同方法,以及为什么它对深度学习工作流如此重要。
现在,就像本系列的每一个视频一样,这并不打算涵盖你需要知道的一切。但希望,这至少能让你思考你自己的特殊工程问题以及为了成功实现深度学习你可能需要做的预处理。我希望你能留下来看。我是Brian,欢迎来到MATLAB技术讲座。
数据预处理是一个相当宽泛的术语。它基本上是在将原始数据输入到特定的机器学习操作之前所做的任何事情。它之所以如此重要,至少有三个原因;第一,预处理可以将数据转换为适合网络架构的形式,第二,它可以帮助降低数据的维度,使模式更明显,第三,它可以调整训练数据,以确保覆盖整个解决方案空间。
让我们分别看一个例子,希望你们能理解。我们从转换数据开始。
网络的输入是固定的,取决于你输入的元素的数量。这意味着您的数据需要被组成具有相同数量元素的离散数据包。如果你处理的是图像,每张图像都需要相同的大小,这可能意味着预处理的一部分是裁剪、填充或调整尺寸不正确的图像。
如果你处理的是信号而不是图像,也是一样的。信号的长度和采样率需要一致,否则需要再次裁剪、填充和重采样。这只是一个简单的例子,它强调了网络架构和数据需要如何相互一致,但还有许多其他的事情,比如确保单元是正确的。但是这种数据重新格式化是做预处理的一个原因。
第二个原因是降维,记住深度学习训练一个网络来识别数据中的模式是有帮助的。因此,任何不需要识别你正在寻找的模式的信息都可以被删除,而不会影响整个分类。删除无关的数据有助于使剩余的模式更明显,这将有助于学习过程。一般来说,如果模式对人类来说更明显,那么它们对深度学习算法来说也会更明显。
但降低数据维数的另一个好处是所谓的维数诅咒,更多的维数意味着更多的特征和每个特征的变化,因此需要更多的训练数据来覆盖所有可能的组合。因此,不仅数据本身更大,维度更高,而且需要更多的数据来训练网络。因此,总的来说,它需要更多的网络复杂性,更多的数据存储和更多的训练时间。
例如,拿这两张数字4的图片,按两种不同的分辨率进行缩放。我们可以看出,这两个都是数字4,尽管右边的像素更少,或者维数更低。这是因为构成数字4的决定性特征在两种分辨率下仍然存在。这样,在低分辨率图像集上训练的网络仍然可以作为一个数字分类器,就像在高分辨率图像上训练的网络一样。
现在让我们再来看看稍微不同的4种分辨率。您可以看到这两个实例在细节上略有不同,在较高分辨率下可以很好地捕捉到这些细节,但在较低分辨率下就几乎看不到了。
这就是维度的诅咒开始发挥作用的地方。接受高分辨率图像训练的网络可能会趋同于一个解决方案,认为这个小尾巴是4的定义特征,因此错误地分类了这个,因为它没有尾巴。但由于这些细节在较低的分辨率中缺失,网络几乎别无选择,只能集中在真正定义数字的宽泛细节上。你可能会想,为什么高分辨率的网络不能学会识别更广泛的特征呢?它可以好!只需要更多的训练数据,网络就能弄清楚我们输入的这些小细节不会影响更大的分类。
降维的一个缺点是你必须对你的数据有足够的了解,这样你才能降维,但不至于意外地从数据集中删除关键信息。
例如,假设我们想要训练一个网络,它可以从视觉上识别六角螺母的制造缺陷。通过按比例缩小这些图像的大小并不是一个好主意。我们寻找的缺陷或模式非常小,我们会失去区分它们的细节。在这种情况下,更好的降维方法可能是裁剪图像。
有很多不同的方法来降低维数,比如从数据中去除噪音或趋势,但不管你怎么做,关键是我们想要从数据集中删除任何我们知道不重要的组件,这样网络就不必知道它不重要。
好了,数据预处理的最后一个好处我想说的是用它来覆盖更大的解空间。网络只能从你给它的训练数据中学习。所以,如果你想要一个能够识别数字4的不同书写风格的网络,你需要一些人们写数字4的不同方式的例子是有意义的。然而,写作风格并不是影响一个好的分类的唯一变量。有时数字可能会以这样或那样的方式旋转,或者可能会大一点或小一点。问题是一个训练过所有这些4的网络,将无法对这些旋转和缩放的4进行分类,因为它没有训练过。
现在,我们可以简单地复制训练数据,并通过在整个解决方案空间中旋转和缩放来对其进行预处理,而不是为每个变体收集真实的标记数据。另一方面,我们可以取未标记的数据,这些数据可以以任何方式缩放和旋转,然后对其进行预处理,将其放入网络训练过的方向和大小中。因此,在这些示例中,我们能够操纵数据以覆盖更大的解决方案空间。
好了,这就是数据预处理的快速概述。这里的主要收获是,您希望使用您的一些专业知识和知识来更改原始数据,使学习变得可能、更快和更准确。
为了让你们了解这是什么情况,我想谈谈在MATLAB例子中对音频数据进行的预处理,使用深度学习的语音命令识别。
这个例子向您展示了如何训练卷积神经网络来识别给定的一组口头命令。如果你想了解所有的细节,你可以自己浏览整个过程,但我想向你展示的是为了准备训练的音频信号要做多少预处理。卷积神经网络在图像中寻找模式,所以我们必须将这个音频信号转换成包含可识别模式的2D图像,可以用来区分每个可能的口头命令。
这种特殊的图像被称为光谱图。我认为有必要详细解释一下这张图是如何制作的因为我认为它很好地说明了当你预处理自己的数据时你可能会想到什么。
好的,我这里有一个音频波形,我说“允许”这个词。录音的频率为44.1千赫,时长约0.8秒。我们要做的第一件事是确保这个音频片段的长度与我们想要根据网络分类的所有其他音频片段相同。因为有些单词可能需要超过0.8秒的时间来说,我决定将这个时间延长到恰好1秒。我用0填充信号的开始和结束。
如果我们对这个信号进行FFT处理我们就能知道哪里的频率最高。因为这是在44.1千赫记录的,所以有高达22千赫的频率信息,但正如你所看到的,在更高的频率中没有大量的信息。我将在16千赫重采样音频信号,这将捕获高达8千赫的信号,它不会造成任何重大的质量损失。
好了,这是整个信号的频率内容这不是我们想要的。当我们说话时,频率内容会根据我们所说的声音和音节发生变化,我们希望能够从单词中挑出那些单独的声音,所以我们需要看到频率内容是如何随时间变化的。我们可以用短时间的傅里叶变换来做。
我们首先选择一个比完整信号小的窗口大小,然后在这个数据子集上运行FFT。我选择了一个略高于180毫秒的窗口你可以看到音频是什么样子的。
现在,在这个音频片段上运行FFT有一个问题,那就是FFT期望信号是重复的。如果我把它们一个接一个地排列起来,你会看到我们创造的这种不连续。这一跳跃将人为地添加一堆高频内容,使我们的光谱图比它应该的要嘈杂得多。
为了解决这个问题,我们应用了一个窗口函数。有很多不同的窗函数,但在这个例子中,我用的是汉函数。细节并不重要,因为所有窗口函数背后的基本思想都是一样的。它们在0开始和0结束之间有某种比例。因为窗口函数的起点和终点都是0,当我把它和音频段相乘时它保证了结果信号的起点和终点都是0这意味着当它重复时不会出现不连续。现在这个缩放修复了不连续但是我们丢失了一些靠近窗口边缘的信息,但我很快会告诉你们,这就是为什么窗口重叠。
好了,现在我们可以对这个标度信号,也就是那条红线,进行FFT运算,我们可以看到这里并没有很多内容,这是我们知道的,因为单词还没有开始。但如果我们向上滚动,我们可以移动到下一个窗口,我与前一个重叠了50%。再一次,我们取时间数据用汉恩函数进行缩放。注意,对于重叠的窗口,在第一个窗口中丢失的部分信号在第二个窗口中出现了。所以,我们正在捕捉这些信息。
好的,我们通过在整个信号中跳跃窗口来保持这个,应用窗口函数,然后进行FFT。我只展示了前4个窗口这样你们就能理解了,但是如果我们把整个信号都看一遍剩下的就是按窗口的频率内容。但这里,我们得到的信息还是比我们实际需要的要多。每个FFT产生一个包含数千个值的频谱,我们不需要那种粒度级别。
减少信息量的一种常用方法是将频谱分成若干个单元,然后用mel滤波器组将每个单元的频率缩放和相加。mel滤波器组是一组三角形带通滤波器,它们在较低的频率处间隔更近,然后随着频率的增加逐渐变宽,间隔越来越远。本质上,这是在模拟人类耳朵的敏感度我们对低频率比高频率更敏感。所以,我们基本上只是在较低的频率下捕捉到更好的分辨率。此外,使用三角滤波器,每个容器中间的频率内容在求和中比容器边缘附近的频率权重更大。为了捕捉边缘附近的信息,我们再次重叠箱子。
经过这些分类过滤和求和之后我们得到的结果是这样的。每个bin有一个值,表示那一小段频谱的频率内容。在这里,我根据频率的大小给这些方块上色,但它们看起来都是黑色的,因为这里没有太多的信息。但是如果我们将这个分类和缩放应用到每个窗口你会开始看到这里有一些有趣的内容这个频率内容从一个窗口到下一个窗口都是变化的。
现在我们有了所有这些通过bin和window的信息,最后要做的是将所有这些放入图像中。第一个窗口被放置在图像的左侧,最低频率库位于底部。然后我们把下一个窗口放在它旁边,再下一个,直到我们把整个信号都看过了,我们就得到了光谱图。这很酷,对吧?我们可以像这样创建一个音频信号的图像,这是很巧妙的。
好的,希望你们能看到当我们回到MATLAB的例子时,这个蓝色的图像是如何表示音频信号随时间变化的频率内容的。
但除此之外,希望你们能在这个光谱图中看到明显的模式——比你们在波形中看到的更多。事实上,它们是如此独特,我敢打赌,即使是你也可以用这样的模式来确定正在说的单词。为了证明这一点,看看这张我说allow, aloe, alloy, ally的谱图。
尽管这些单词彼此之间非常接近,但它们在光谱图中形成的模式都具有定义特征,使它们彼此不同。如果我把这些词中的一个再说一遍,你可能只从光谱图就能判断出我说了什么。这正是深度学习算法和卷积神经网络赖以发展的模式的独特性。
好了,我就讲到这里。如果你想了解更多,我在描述中留下了一些不同MATLAB工具的链接,这些工具可以帮助进行特征提取和数据预处理,还有几个例子展示了这些工具在图像、音频和其他信号上的作用。
在下一集视频中,我想谈谈我们如何利用现有的预训练网络进行迁移学习。所以,如果你不想错过这个视频或任何其他Tech Talk视频,不要忘记订阅这个频道。另外,如果你想查看我的频道,控制系统讲座,我也在那里涵盖了更多的控制主题。感谢收看,我们下期见。
相关产品2022世界杯八强谁会赢?
了解更多
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。