我希望你能帮助我,因为我对这个话题有一些疑问。我是深度学习领域的新手,虽然我做了一些教程,但我无法相互关联或区分概念。
为什么 NLP 和机器学习社区对深度学习感兴趣?
为什么要使用深度网络?
让我们首先尝试解决非常简单的分类任务。假设您管理一个有时充斥着垃圾邮件的网络论坛。这些消息很容易识别——通常它们包含特定的词,如“购买”、“色情”等,以及指向外部资源的 URL。您想创建过滤器来提醒您此类可疑消息。这变得非常容易——你得到特征列表(例如可疑单词列表和 URL 的存在)并训练简单的逻辑回归(又名感知器),即模型如下:
g(w0 + w1*x1 + w2*x2 + ... + wnxn)
您的特征在哪里x1..xn
(特定单词或 URL 的存在),w0..wn
- 学习系数,并且g()
是使结果介于 0 和 1 之间的逻辑函数。它是非常简单的分类器,但对于这个简单的任务,它可能会产生非常好的结果,创建线性决策边界。假设你只使用了 2 个特性,这个边界可能看起来像这样:
这里 2 个轴代表特征(例如,消息中特定单词的出现次数,归一化为零左右),红点表示垃圾邮件,蓝点表示正常消息,而黑线表示分隔线。
但是很快你就会注意到一些好的消息包含很多出现的单词“购买”,但没有 URL,或者对色情检测的扩展讨论,实际上并不是指色情电影。线性决策边界根本无法处理这种情况。相反,您需要这样的东西:
这种新的非线性决策边界更加灵活,即它可以更接近地拟合数据。有很多方法可以实现这种非线性 - 您可以使用多项式特征(例如x1^2
)或它们的组合(例如x1*x2
)或将它们投影到更高的维度,如内核方法。但在神经网络中,通常通过组合感知器来解决它,或者换句话说,通过构建多层感知器. 这里的非线性来自层间的逻辑函数。层数越多,MLP 可能覆盖的模式就越复杂。单层(感知器)可以处理简单的垃圾邮件检测,2-3 层的网络可以捕捉复杂的特征组合,5-9 层的网络,被大型研究实验室和 Google 等公司使用,可以对整个语言进行建模或检测猫在图像上。
这是拥有深度架构的重要原因——它们可以建模更复杂的模式。
为什么深度网络很难训练?
实际上,只有一个特征和线性决策边界就足够了,只有 2 个训练示例——一个正例,一个负例。对于多个特征和/或非线性决策边界,您需要更多的示例来涵盖所有可能的情况(例如,您不仅需要找到带有和的示例word1
,还需要找到它们所有可能的组合)。在现实生活中,您需要处理成百上千的特征(例如语言中的单词或图像中的像素),并且至少需要几个层才能具有足够的非线性。完全训练此类网络所需的数据集大小很容易超过 10^30 个示例,因此完全不可能获得足够的数据。换句话说,由于有许多特征和许多层,我们的决策功能变得过于灵活word2
word3
能够准确地学习它。
但是,有一些方法可以近似地学习它。例如,如果我们在概率设置中工作,那么我们可以假设它们是独立的并且只学习单个频率,而不是学习所有特征的所有组合的频率,将完整和无约束的贝叶斯分类器减少为朴素贝叶斯,因此需要很多,要学习的数据少得多。
在神经网络中,有几次尝试(有意义地)降低决策函数的复杂性(灵活性)。例如,广泛用于图像分类的卷积网络仅假设附近像素之间的局部连接,因此尝试仅学习小“窗口”(例如,16x16 像素 = 256 个输入神经元)内的像素组合,而不是完整图像(例如, 100x100 像素 = 10000 个输入神经元)。其他方法包括特征工程,即搜索特定的、人工发现的输入数据描述符。
手动发现的功能实际上非常有前途。例如,在自然语言处理中,有时使用特殊字典(如包含垃圾邮件特定词的字典)或捕捉否定词(例如“不好”)会很有帮助。而在计算机视觉中,诸如SURF 描述符或类似 Haar 的特征之类的东西几乎是不可替代的。
但是手动特征工程的问题在于,它需要数年时间才能提出好的描述符。此外,这些功能通常是特定的
无监督预训练
但事实证明,我们可以使用自动编码器和受限玻尔兹曼机等算法从数据中自动获得好的特征。我在另一个答案中详细描述了它们,但简而言之,它们允许在输入数据中找到重复的模式并将其转换为更高级别的特征。例如,仅给定行像素值作为输入,这些算法可能会识别并传递更高的整体边缘,然后从这些边缘构造图形等等,直到您获得真正的高级描述符,例如面部变化。
经过这样的(无监督)预训练网络通常被转换为 MLP 并用于正常的监督训练。请注意,预训练是逐层完成的。这显着减少了学习算法的解决方案空间(以及所需的训练示例数量),因为它只需要学习每一层内部的参数而不考虑其他层。
超越...
无监督预训练已经存在了一段时间,但最近发现其他算法可以改善学习——包括预训练和没有预训练。这种算法的一个值得注意的例子是dropout - 一种简单的技术,它在训练期间随机“丢弃”一些神经元,造成一些失真并防止网络过于紧密地跟踪数据。这仍然是一个热门的研究课题,所以我把它留给读者。
首先,我们需要了解为什么我们需要深度学习。要构建模型,ML 需要带有标签的测试数据(监督或非监督)。在许多领域中,随着数据的增长,使用标签维护数据是很困难的。深度学习网络不需要标记数据。深度学习算法可以找出标签。因此,这消除了领域专家为数据提供标签的需要,这在语音识别、计算机视觉和语言理解领域非常重要。Google Cat 图像识别是一个非常有趣的实验。认识Google 聘用的教授“Geoffrey Hinton”也很有趣。
当你在这个框架中探索时,你可能会获得更多的洞察力。
深度学习已经存在了很长时间。CNN、RNN、Boltzmann 机器确实看起来像新技术,但它们是很久以前开发的。查看深度学习的历史。
深度学习的复兴是由于计算能力从那时起呈指数增长。与以前相比,使用配备 GPU 的笔记本电脑,您可以训练一个复杂的深度学习模型,所需时间非常短。深度学习模型在经验上也非常有效。图像、语音和许多领域的当前最先进的技术是深度学习模型。
我相信由于这些因素,我们可以看到很多 NLP/ML 社区已经将注意力转移到深度学习上。