我研究神经网络,我非常了解具有层、激活函数和连接的结构的逻辑。但一个基本问题尚不清楚:如何将几种可能组合的实际结构组合在一起?在我看来,大多数人只是在没有任何正当理由的情况下随机组合这些(或者在更好的情况下使用蛮力“网格搜索”)。
我已经阅读了几个教程,但没有人解释选择“sigmoind”激活函数而不是“tanh”的原因,更不用说在不同层的不同激活函数的情况下选择哪一个。我强调我自己理解这些函数的工作原理,但它们的顺序逻辑是一个相当大的谜。
我研究神经网络,我非常了解具有层、激活函数和连接的结构的逻辑。但一个基本问题尚不清楚:如何将几种可能组合的实际结构组合在一起?在我看来,大多数人只是在没有任何正当理由的情况下随机组合这些(或者在更好的情况下使用蛮力“网格搜索”)。
我已经阅读了几个教程,但没有人解释选择“sigmoind”激活函数而不是“tanh”的原因,更不用说在不同层的不同激活函数的情况下选择哪一个。我强调我自己理解这些函数的工作原理,但它们的顺序逻辑是一个相当大的谜。
如果您希望激活值介于 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 之间的输出层。
整流器:用于前馈网络隐藏层的激活。
没错,大部分结构必须来自数据集上的反复试验。但是,有一些技巧可以节省您的时间,尽管情况并非总是如此。如今,整流线性单元很受欢迎,因为与 sigmoid 激活函数相比,它们更能抵抗梯度消失问题。不过,我认为 sigmoid 和 tanh 激活函数之间没有太大区别。另一个有用的提示是对 2D(前图像)数据集使用卷积。您也不想添加超出数据集大小可以处理的层数(您可能会过拟合)。归根结底,这些都只是建议。没有人能够提前肯定地说,什么对您的特定问题有效。
在构建 NN 时有很多反复试验,但这里有一些关于这个问题的半结构化建议。
除了这里提到的LeCun 论文,Geoffry Hinton 对这里的整个过程有一个很好的指南,我建议你阅读。您还可以获得关于批量训练大小的一些直觉,这是训练 NN 时要考虑的另一件事。
关于非循环/非卷积网络上的隐藏层功能,我发现单个隐藏层的大小范围内的某处 效果很好。
在隐藏层中使用 ReLU 有助于稀疏性和对抗消失的梯度。ReLU 的输出为 照原样 在哪里 是单位的输入,其中 sigmoid 单位的输出在范围内 . ReLU 具有明显更多的生物学合理性,因为它们更好地近似于神经元放电的常见神经科学模型,即泄漏-积分-放电模型。它们的计算效率略高(唯一的操作是比较、加法和乘法)。有关 ReLU 的更多详细信息,请阅读Glorot、Bordes 和 Bengio。