我听到最多的第二个偏见就是过度宣传。许多尚未从事AI职业的人,期望深度网络能够给他们一个神话般的表现提升力,仅仅因为它在其他领域有效。其他人则从深度学习在图像、音乐和语言(最贴近人类的三种数据类型)中的令人印象深刻的表现中受到鼓舞,并通过尝试训练最新的GAN架构,而匆匆一头扎进这个领域。当然,在许多方面这种过度宣传也是真实存在的。深度学习已经成为机器学习中不可否认的力量,也是数据建模者的重要工具。它的普及带来了诸如tensorflow和pytorch等重要框架,它们即使是在深度学习之外也是非常有用的。失败者的巨星崛起的故事激励了研究人员重新审视其他以前模糊的方法,如进化方法和强化学习。但这不是万能的。除了考虑天下没有免费的午餐之外,深度学习模型可以非常细微,并且需要仔细,有时甚至是非常昂贵的超参数搜索、调整和测试(文章后续将有更多讲解)。此外,有很多情况下,从实践的角度来看,使用深度学习是没有意义的,而更简单的模型工作得更好。 深度学习不仅仅是.fit() 深度学习模型还有另外一个方面的应用,我认为在其他机器学习领域方面是有所损失的。大多数深度学习的教程和介绍性材料描述了这些模型由层次连接的节点层组成,其中第一层是输入,最后一层是输出,并且你可以使用某种形式的随机梯度下降(SGD)来训练它们。可能有一些简要的介绍随机梯度下降是如何工作的,以及什么是反向传播,大部分解释集中在神经网络类型(卷积、循环等)。而优化方法本身却没有什么人关注,这是很不幸的,因为很有可能深度学习为什么能够起作用的很大(如果不是最大的)一部分原因就是这些特定的方法(例如来自Ferenc Huszár’s的这篇文章和从该文中引用的论文,并且要知道,如何优化它们的参数,以及如何分割数据,从而有效地使用它们以便在合理的时间内获得良好的收敛,是至关重要的。不过,为什么随机梯度如此关键却仍然是未知的,现在也或多或少地出现了一些线索。我最喜欢的一个是将该方法解释为执行贝叶斯推理的一部分。实质上,每当你做某种形式的数值优化时,你都会用特定的假设和先验来执行一些贝叶斯推理。实际上,有一个被称为概率数值计算(probabilistic numerics)的整个领域,就是从这个角度出现的。随机梯度下降是没有什么不同,最新的研究成果表明,该程序实际上是一个马尔可夫链,在某些假设下,可以看作是后向变分近似的静态分布。所以当你停止你的SGD并采用最后的参数时,你基本上是从这个近似分布中抽样的。我发现这个想法是有启发性的,因为优化器的参数(在这种情况下是学习率)使得这种方式更有意义。例如,当你增加SGD的学习参数时,马可夫链就会变得不稳定,直到找到大面积采样的局部极小值;也就是说,增加了程序的方差。另一方面,如果你减少学习参数,马尔可夫链慢慢接近狭义极小值,直到它收敛于一个区域;那就是你增加某个区域的偏差。而另一个参数,SGD中的批量大小也可以控制算法收敛的区域是什么类型的区域:小批量的较大区域和大批次的小区域。 SGD根据学习速率或批量大小而选择较大或极限最小值 这种复杂性意味着深度网络的优化器变得非常重要:它们是模型的核心部分,与层架构一样重要。这与机器学习中的许多其他模型并不完全相同。线性模型(甚至是正则化的,像LASSO算法)和支持向量机SVM都是凸优化问题,没有那么多的细微差别,而且只有一个答案。这就是为什么来自其他领域和/或使用诸如scikit-learn工具的人在他们没有找到一个非常简单的具有.fit()方法的API时会感到困惑。尽管有一些工具,如skflow,尝试将网络简化成一个.fit()签名,我认为这有点误导,因为深度学习的全部重点就是它的灵活性。 何时不需要深度学习? (责任编辑:本港台直播) |