万能近似定理

神经网络的结构(architecturel)指网络的整体结构. 大多数神经网络被组织成为曾的单元组, 然后将这些层布置成链式结构, 其中每一层都是前一层的函数.

在这种结构种, 第一层由下式给出:

第二层:

第三层, 以此类推!

可以看出, 每一层的主体都是线性模型. 线性模型, 通过矩阵乘法将特征映射到输出, 顾名思义, 仅能表示线性函数. 它具有易于训练的优点, 因为当使用线性模型时, 许多损失函数会导出凸优化问题. 不幸的是, 我们经常希望我们的系统学习非线性函数.

乍一看, 我们可能认为学习非线性函数需要我们想要学习的那种非线性专门涉及一类模型族, 幸运的是, 具有隐藏层的前馈网络提供了一种万能近似框架.

具体来说, 万能近似定理(universal approximation theorem)表明, 一个前馈网络神经网络如果具体线性输出层和至少一层具有任何一种’挤压’性质的激活函数的隐藏层, 只要给予网络足够数量的隐藏单元, 它可以以任意的精度来近似任何从一个有限维控件到另一个有限维空间的可测函数.

万能近似定理意味着无论我们试图学习什么函数, 我们知道一个大的MLP一定能够表示这个函数. 然而, 我们不能保持训练算法能够学到这个函数. 即使MLP能够表示该函数, 学习也可能因两个不同的原因而失败.

  1. 用于训练的优化算法可能找不到用于期望函数的参数值
  2. 训练算法可能由于过拟合而选择了错误的函数.

根据’没有免费的午餐’定理, 说明了没有普遍优越的机器学习算法. 前馈 网络提供了表示函数的万能系统, 在这种意义上, 给定一个函数, 存在一个前馈网络能够近似该函数. 但不存在万能的过程既能够验证训练集上的特殊样本, 又能够选择一个函数来扩展到训练集上没有的点.

总之, 具有单层的前馈网络足以表示任何函数, 但是网络层可能大得不可实现, 并且可能无法正确地学习和泛化.在很多情况下, 使用更深的网络能够减少表示期望函数所需的单元的数量, 并且可以减少泛化误差.

https://zhuanlan.zhihu.com/p/385531651

神经网络能逼近任何函数的原理很简单, 分段线性函数能逼近任何函数, 激活函数让神经网络具备了”分段函数”的能力, 所以神经网络能逼近任何函数.

没有激活函数, 神经网络是线性函数

线性函数在二维控件, A表现为一条直线. B图表现为线性不可分, 说明一条直线不能解决任何线性不可分的问题, 也不能很好的拟合曲线

如果不用激活函数, 神经网络每一层输出都是上层输入的线性函数, 无论神经网络有多少层, 输出都是线性组合(线性函数), 这种情况就是最原始的感知机(Perceptron). 而且, 因为卷积层也是线性运算, 所以如果没有激活函数, 卷积神经网络也是线性函数. 所以, 没有激活函数, 神经网络就是线性函数, 不能解决任何非线性问题. 这里有一个简单的数学证明, 证明任何线性函数的线性组合依然是线性的

“分段”是神经网络能逼近任何函数的关键

其实, 你只需要知道2点:

  1. 任何函数, 可以用”分段”线性函数来逼近
  2. **激活函数, 让线性的神经网络具备了”分段”表达能力.

这就是神经网络能逼近任何函数的原因, 就是这么简单! 还是通过二维控件(输入和输出都是一维)的例子, 来理解这个概念. 如下图, 一个负责的曲线, 可以用多条直线来”分段”分段表达, 即分段函数可以逼近任何曲线函数, 所以, 当神经网络可以逼近分段函数时, 即可认为神经网络可以逼近任何函数.

通过一个具体的实例. 假如尝试用神经网络拟合一个分段函数, 这个分段函数由段直线组成.

以人为的构建如下的神经网络, 这个神经网络, 就完美的实现了上面的3段函数. 1表示的是第一象限的直线, 2表示的是中间的直线, 3表示的第二象限的直线

然后, 关键角色”激活函数”上场了, 使用Relu激活函数

Relu激活函数在输入x小于0时, 输入y为0, 即实现了截断(关闭)功能, 在x大于等于0时, 输入y于输入x相等, 即完全的导通(打开)功能. 可以人工计算, Relu激活函数的输出, 再累加, 然后通过输出层输出, 就是需要的3段函数. **这效果, 起关键作用的是激活函数的”分段”能力, 吧线性函数, 组合成折线函数(分段函数). 再上面的神经网络(和近似的)可以表示任何3段直线组合的分段函数, 即, 能逼近3段直线能拟合的任何函数.

类推到多为空, 即输入的数量从1个变成多个是, 激活函数的”分段”能力, 也可以让神经网络(线性函数)逼近任何函数.

激活函数的”截断”能力为”分段”能力提供来源

如上所述, 因为激活函数的”分段”能力, 可以让审计网络逼近任何函数, 所以, 激活函数最大的特点, 是一定要有”截断”(关闭)能力, 这是为神经网络提供”分段”能力的来源. 激活函数的特点种的”激活”关注了它”打开”的能力, 但有开意味着有关, 即具有”截断”能力. 当然了, 最终能够被输出的, 是”打开”的部门, 所以叫做激活函数. 下面的激活函数基本覆盖了常用的激活函数. 截断能力最强的阶跃函数和ReLu函数, 其他激活函数可以看出它们的”软化”(折线处变曲线, 或变缓)

扩展阅读: Sigmoid的公司并没有说明魔法, 换成其他的软化曲线, 对神经网络的拟合效果也没有多大的影响. 选择这个函数更多是因为求导方便, 训练时计算梯度方便.

扩展阅读: 激活函数的引入, 再训练时还有好处: 把输出压缩到-1到1的范围, 计算损失函数的误差error(output Y - target Y)更新神经网络的参数更方便; 在做反向传播的时候, 计算导数, 帮助更快速找到(试到)模型. 各种激活函数层出不穷, 各有优缺点, 看得人头混眼花, 明白了本质作用, 就不再疑惑

扩展阅读: 激活函数软化, 让分段直线变分段曲线, 可能会更好的拟合函数

神经网络变宽变身先当与让分段函数能分的”段”的数量更多, 大家都知道, 分段直线拟合函数时, 每段直线越短, 拟合程度就越高. 这是神经网络变宽变深, 模型的精度通常更高的原因. 同时, 由于模型变宽或变深后, 参数治安相互影响越来越大, 这导致, 训练难度变大, 且模型精度可能饱和, 不再提升