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