神经网络结构搭建指导原则

数据挖掘 神经网络
2021-10-11 20:24:15

我研究神经网络,我非常了解具有层、激活函数和连接的结构的逻辑。但一个基本问题尚不清楚:如何将几种可能组合的实际结构组合在一起?在我看来,大多数人只是在没有任何正当理由的情况下随机组合这些(或者在更好的情况下使用蛮力“网格搜索”)。

我已经阅读了几个教程,但没有人解释选择“sigmoind”激活函数而不是“tanh”的原因,更不用说在不同层的不同激活函数的情况下选择哪一个。我强调我自己理解这些函数的工作原理,但它们的顺序逻辑是一个相当大的谜。

4个回答

如果您希望激活值介于 0 和 1 之间,tanh 介于 -1 和 1 之间,则可以使用 sigmoid,这对最后一层很重要,但对于隐藏层,它们之间没有太大区别。

这是一篇关于如何以更系统的方式构建神经网络的文章。

基本原则是只从一层开始,越做越大,直到看到满意的效果,如果没有,再添加一层重新开始。哦,请确保您使用批量标准化,不要使用 sigmoid 或 tanh,使用 PreLU 或 ELU: https ://www.linkedin.com/pulse/keras-neural-networks-win-nvidia-titan-x-abhishek -thakur?trk=prof-post

一般来说:

Sigmoids:用于输出层,它是具有对数损失函数的概率,以及用于 RNN 中的门。

Tanh:用于更新 RNN 中的状态(类似线性的激活可能使其不稳定),或用于变量介于 -1 和 1 之间的输出层。

整流器:用于前馈网络隐藏层的激活。

理论仍然远远落后于神经网络的实践。但 Yann LeCun 的一篇经典论文对包括激活和缩放在内的架构选择提供了一些有用的指导。

对于那些可能不知道这个问题的人:tanh 只是一个移位和缩放的 sigmoid;看到这个问题

没错,大部分结构必须来自数据集上的反复试验。但是,有一些技巧可以节省您的时间,尽管情况并非总是如此。如今,整流线性单元很受欢迎,因为与 sigmoid 激活函数相比,它们更能抵抗梯度消失问题。不过,我认为 sigmoid 和 tanh 激活函数之间没有太大区别。另一个有用的提示是对 2D(前图像)数据集使用卷积。您也不想添加超出数据集大小可以处理的层数(您可能会过拟合)。归根结底,这些都只是建议。没有人能够提前肯定地说,什么对您的特定问题有效。

在构建 NN 时有很多反复试验,但这里有一些关于这个问题的半结构化建议。

一般训练网络:

除了这里提到的LeCun 论文,Geoffry Hinton 对这里的整个过程有一个很好的指南,我建议你阅读。您还可以获得关于批量训练大小的一些直觉,这是训练 NN 时要考虑的另一件事。

隐藏层

关于非循环/非卷积网络上的隐藏层n功能,我发现单个隐藏层的大小x范围内的某处n>x>log(n) 效果很好。

ReLU

在隐藏层中使用 ReLU 有助于稀疏性和对抗消失的梯度。ReLU 的输出为[0,] 照原样 f(x)=max(0,x) 在哪里 x 是单位的输入,其中 sigmoid 单位的输出在范围内 [0,1]. ReLU 具有明显更多的生物学合理性,因为它们更好地近似于神经元放电的常见神经科学模型,即泄漏-积分-放电模型。它们的计算效率略高(唯一的操作是比较、加法和乘法)。有关 ReLU 的更多详细信息,请阅读Glorot、Bordes 和 Bengio