在第4节中,我们证明了网络架构和优化算法对训练时间的重要性。虽然架构的选择通常与其表现力(expressive power)有关,但我们发现,即使两个架构对于给定任务具有相同的表现力,它们在优化方面可能有巨大的差异。我们从问题的条件数的角度分析了两种架构进行梯度下降优化所需的运行时间。我们进一步表明,条件化技术可以产生额外的数量级的加速。这一节中的实验设置围绕一个看似简单的问题,即编码一个分段线性一维曲线(piece-wise linear one-dimensional curve)。尽管这个问题很简单,但我们发现,遵循“或许我应该用更深/更大的网络”这一常规想法,对这个问题帮助不大。 最后,在第5节中,我们考虑了深度学习对优化过程的“vanilla”梯度信息的依赖。前面我们讨论了使用局部特征来指导全局优化有缺陷。这里我们关注的是更简单的情况,即基于局部信息来解决优化问题,但不是以梯度的形式。我们用包含平坦区间( flat regions)的激活函数的架构进行实验,这些函数容易导致梯度消失问题。在使用这种激活函数时,需要非常小心,并且应用许多启发式技巧来初始化其激活的非平坦区间的网络权重。在这里,我们展示了通过使用不同的更新规则,可以有效解决学习问题。此外,我们可以证明一系列这样的函数都是保证收敛的。这部分提供了一个简洁的例子,其中非梯度优化方法可以克服基于梯度的深度学习方法的不足。
下面提供 Shai Shalev-Shwartz 教授讲解“基于梯度的深度学习的局限”的ppt,对应讲课视频。
有一些简单的问题,但深度学习的标准算法不能很好地工作,甚至根本不工作。至少目前我们可能需要重新思考对算法的监督。深度学习算法并不能解决所有问题。这个 talk 尝试解释什么时候,以及为什么深度学习算法不工作。 不能很好地工作的情况: 需要对更好的结构/算法选择有先验知识 需要梯度更新规则之外的规则 需要分解问题,增加监督 完全不工作的情况: 没有“本地搜索”(local-search)算法可以工作 即使是“漂亮”的分布和指定好的模型也会不工作 过度参数化(也就是不正确的学习)
作者对深度学习算法失败的情况提供了4类例子。第一个例子是分段线性曲线(iece-wise linear curves)。第二个例子是flat activation;第三是端到端训练,这在优化部分可能失败;最后利用学习多种正交函数的问题进行更多的理论解释。
问题:训练一个分段曲线检波器 让我们来看一个非常简单的问题。给出一个分段线性曲线的表示,并给出分段线性曲线Y值的向量,我希望你给我求曲线的参数 a 和 θ。
第一个尝试:深度自编码器(Deep AutoEncoder) 第一个尝试是使用深度自编码器。我们将学习一个编码网络,设为Ew?。但它不能很好地工作。 这里你看到的蓝色是原始曲线,红色是编码和解码之后的曲线。经过500次迭代,它看起来结果很糟糕。执行更多的迭代,曲线开始变得更好。但即使在50000次迭代之后它仍然没有很准确。
第二个尝试:凸目标
第三个尝试:卷积
结果好一点,但仍不是特别好
第四个尝试:卷积+预处理
终于,结果很好。 注意: 使用convnet可以进行有效的预处理 预估和使用 3×3 矩阵,而不是 n×n 矩阵
经验: SGD 会特别慢 先验知识能够让我们:选择更好的架构(不失根据表现力,而是几何);选择更好的算法(预处理的SGD) 第二部分 扁平激活 (责任编辑:本港台直播) |