激活函数 - 神经网络

Activation functions - Neural Network

我在空闲时间使用神经网络。 我已经用神经网络开发了一个简单的异或运算。 但是我不知道什么时候应该使用正确的激活函数。

有什么技巧还是只是数学逻辑?

identity, logistic, tanh, Relu等激活函数有很多选择。 激活函数的选择可以基于梯度计算(反向传播)。例如。逻辑函数总是可微的,但当输入值很大时它会饱和,因此会减慢优化速度。在这种情况下,Relu 优于 logistic。 以上只是激活函数选择的一个简单例子。这真的取决于实际情况。 此外,我不认为 XOR 神经网络中使用的激活函数在更复杂的应用中具有代表性。

你可以用 sigmoid 神经元解决你的问题,在这种情况下,激活函数是:

https://chart.googleapis.com/chart?cht=tx&chl=%5Csigma%20%5Cleft%20(%20z%20%5Cright%20)%20%3D%20%5Cfrac%7B1%7D%7B1%2Be%5E%7B-z%7D%7D

其中:

https://chart.googleapis.com/chart?cht=tx&chl=z%20%3D%20%5Csum_%7Bj%7D%20(w_%7Bj%7Dx_%7Bj%7D%2Bb)

在这个公式中,w 是每个输入的权重,b 是偏差,x 是输入,最后你可以使用反向传播来计算成本函数。

何时对另一个使用特定激活函数的主题是正在进行的学术研究的主题。您可以通过在学术数据库中搜索与 "neural network activation function" 相关的期刊文章,或通过 Google Scholar 搜索找到与之相关的论文,例如:

https://scholar.google.com/scholar?hl=en&as_sdt=0%2C2&q=neural+network+activation+function&btnG=&oq=neural+network+ac

通常,使用哪个函数主要取决于您要执行的操作。激活函数就像一个镜头。你将输入输入到你的网络中,它会被激活函数以某种方式改变或聚焦。 您的 输入应如何更改取决于您要实现的目标。您需要考虑您的问题,然后找出什么函数可以帮助您将信号塑造成您试图近似的结果。

问问自己,您要建模的数据的形状是什么?如果它是线性的或近似线性的,那么线性激活函数就足够了。如果它大于 "step-shaped,",你会想要使用类似 Sigmoid 或 Tanh 的东西(Tanh 函数实际上只是一个缩放的 Sigmoid),因为它们的图形表现出相似的形状。对于您的 XOR 问题,我们知道其中任何一个——通过将输出推近 [-1, 1] 范围来工作——都会很好地工作。如果你需要的东西不像这两个那样从零变平,ReLU 函数可能是一个不错的选择(事实上,ReLU 可能是当今最流行的激活函数,值得比这个答案更认真的研究提供)。

您应该分析其中每一个函数的图形,并考虑每个函数对您的数据的影响。您知道要输入的数据。当这些数据通过函数时,会产生什么?该特定功能会帮助您获得所需的输出吗?如果是这样,那是一个不错的选择。

此外,如果您有一些数据的图表,其形状非常有趣,并且与您知道的其他函数相对应,请随时使用它,看看它是如何工作的!一些 ANN 设计是关于理解,但其他部分(至少目前)是直觉。