Design an NN
设计一个神经网络
DL依赖于网络,网络由一些关键的构建模块组成,而这些模块又可以以多种方式进行配置。在本节中,我们将介绍神经网络的工作原理并说明它们的最重要意义
用于设计不同架构的组件。
人工神经网络最初的灵感来自于像人脑一样的学习生物模型,要么是试图模仿它的工作方式并获得类似的成功,要么是为了通过模拟获得更好的理解。目前的神经网络研究较少利用神经科学,尤其是因为我们对大脑的理解还没有达到足够的粒度级别。另一个限制是总体大小:即使神经网络自上世纪50年代诞生以来,使用在神经网络中的神经元数量每年继续翻倍,它们也只能在2050年左右达到人类大脑的规模。
我们还将解释反向传播(通常简称为backprop)如何使用梯度信息(代价函数对参数的偏导数的值)根据训练误差调整所有神经网络参数。各种非线性模块的组成意味着目标函数的优化是相当具有挑战性的。我们还介绍了反向传播的改进,旨在加速学习过程。
一个简单的前馈神经网络结构
在本节中,我们介绍了前馈神经网络,基于多层感知器(MLP)和由一个或多个隐藏层连接的输入输出层,在前馈神经网络中,信息流动从输入到输出,这样他们可以表示成有向无环图。
我们将首先描述前馈神经网络的架构,以及如何使用NumPy实现它。然后,我们将解释反向传播如何学习神经网络的权值,并在Python中实现它来训练二进制分类网络,即使类不是线性可分的,也能产生完美的结果。
转换链从输入层开始,输入层将源数据传递给几个内部或隐藏的层之一,并以输出层结束,输出层计算结果以便与示例的输出值进行比较。隐藏层和输出层由节点或神经元组成。全连接层或密集层的节点与前一层的部分或全部节点相连。网络架构可以用深度来概括,用隐含层数来衡量,也可以用每层的宽度和节点数来衡量。
每个连接都有à权值,用于计算输入值的线性组合。一层也可以有一个偏置节点,总是输出一个1,并被后面的节点使用,就像一个常量在线性回归。训练阶段的目标是学习这些权重的值,以优化网络的预测性能。
关键设计选择
一些神经网络的设计选择类似于其他监督学习模型。例如,输出由ML问题的类型决定,如回归、分类或排序。给定输出,我们需要选择一个代价函数来衡量预测的成功和失败,以及一个算法来优化网络参数以使代价最小化。
特定于神经网络的选择包括层数和每层节点数、不同层节点之间的连接以及激活函数的类型。
一个关键问题是训练效率:激活的函数形式可以促进或阻碍反向传播算法可用的梯度信息的流动,该算法根据训练错误调整权重。对于大输入值范围,具有平坦区域的函数具有非常低的梯度,当参数值卡在这样的范围时,可能会阻碍训练的进展。
有些架构添加了跳跃连接,在相邻层之外建立直接链接,以促进梯度信息的流动。另一方面,故意省略连接可以减少参数的数量以限制网络的容量,并可能降低泛化误差,同时也降低了计算代价。
深度网络信息如何规范化
神经网络近似任意函数的能力的缺点是大大增加了过拟合的风险。防止过拟合的最佳方法是在更大的数据集上训练模型。数据增强(比如创建稍微修改过的图像版本)是一种强大的替代方法。
作为获取更多数据的替代或补充,正则化可以帮助降低过拟合的风险。例子包括添加到脊和套索回归目标的惩罚,以及决策树和基于树的集成模型中使用的分割或深度约束。
通常,正则化采用对参数值的软约束的形式,以抵消一些额外的偏差以降低方差。一个常见的实际发现是,具有最低泛化误差的模型不是具有精确的参数大小的模型,而是一个已很好地正则化的更大的模型。常用的神经网络正则化技术可以组合使用,包括参数范数惩罚、早期停止和退出。
训练更快-优化深度学习
Backprop指的是关于我们希望更新的内部参数的成本函数梯度的计算,并使用这个信息来更新参数值。梯度是有用的,因为它表明参数变化的方向,导致代价函数的最大增加。因此,根据负梯度调整参数可以产生最优成本降低,至少对于非常接近观察样本的区域是如此。参见Ruder(2017)对关键梯度下降优化算法的优秀概述。
由于目标函数是非凸的,且可能需要大量的参数,训练深度神经网络非常耗时。有几个挑战可以显著延迟收敛,找到一个较差的最优或导致振荡或偏离目标:
局部极小值会阻止收敛到全局最优,从而导致性能较差
不是局部最小值的低梯度平坦区域也可以防止收敛,而很可能远离全局最优
几个大权重相乘产生的高梯度的陡峭区域可能会导致过度调整
RNN中的深度架构或长期依赖关系需要在反向传播过程中乘上许多权值,导致梯度消失,至少部分神经网络接收到很少。