构建神经网络背后的标准

Criteria Behind Structuring a Neural Network

我刚开始学习 Torch 和神经网络,只是浏览了大量示例代码和教程,我发现人们构建神经网络的方式多种多样。有 Linear()、Tanh()、Sigmoid() 等层以及 MSE、ClassNLL、MultiMargin 等标准。

我想知道人们在创建网络结构时会考虑哪些因素?例如,我知道在 ClassNLLCriterion 中,您希望网络的最后一层是 LogSoftMax() 层,以便您可以输入正确的对数概率。

在创建这些网络时是否有任何其他一般规则或指南?

谢谢

这是一个很好的网页,其中包含一些主要激活功能的优缺点;

http://cs231n.github.io/neural-networks-1/#actfun

它可以归结为手头的问题,当出现问题时知道该怎么做。例如,如果您有一个庞大的数据集,并且您不能非常快速地处理它,那么 ReLU 可能会更好,以便快速达到局部最小值。但是,您可能会发现某些 ReLU 单元 "die",因此您可能希望跟踪该特定层中激活神经元的比例,以确保这种情况没有发生。

就标准而言,它们也是针对特定问题的,但不那么模糊。比如二元分类的二元交叉熵,回归的MSE等。这真的取决于整个项目的objective。

对于整体网络架构,我个人认为可以尝试不同的架构,看看哪些在您的测试集上有效,哪些无效。如果您认为手头的问题非常复杂,并且您需要一个复杂的网络来解决问题,那么您可能想尝试首先制作一个非常深的网络,然后 add/remove 一次几层看看你有没有 under/overfitted。再举一个例子,如果您使用的是卷积网络并且输入相对较小,那么您可能会尝试使用一组较小的卷积滤波器开始。