我在空闲时间使用神经网络。我已经用神经网络开发了一个简单的异或运算。但我不知道什么时候应该使用正确的激活函数。
有什么诀窍还是只是数学逻辑?
我在空闲时间使用神经网络。我已经用神经网络开发了一个简单的异或运算。但我不知道什么时候应该使用正确的激活函数。
有什么诀窍还是只是数学逻辑?
激活函数的选择有很多,比如identity、logistic、tanh、Relu等,激活函数的选择可以基于梯度计算(反向传播)。例如,逻辑函数始终是可微的,但是当输入具有较大值时它会饱和,因此会减慢优化速度。在这种情况下,Relu 优于logistic。以上只是激活函数选择的一个简单示例。这真的取决于实际情况。此外,我不认为 XOR 神经网络中使用的激活函数在更复杂的应用中具有代表性。
在这种情况下,您可以使用 sigmoid 神经元解决您的问题,激活函数为:
在哪里:
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 是输入,最后你可以使用反向传播来计算成本函数。
何时使用特定的激活函数而不是另一个的主题是正在进行的学术研究的主题。您可以通过在学术数据库中搜索与“神经网络激活函数”相关的期刊文章,或通过 Google Scholar 搜索找到与其相关的论文,例如:
通常,使用哪个功能主要取决于您要执行的操作。激活函数就像一个镜头。你把输入输入到你的网络中,它会被激活函数以某种方式改变或聚焦。如何更改您的输入取决于您要达到的目标。您需要考虑您的问题,然后找出什么函数可以帮助您将信号塑造成您试图近似的结果。
问问自己,您要建模的数据的形状是什么?如果它是线性的或近似线性的,那么线性激活函数就足够了。如果它更“阶梯形”,您可能需要使用 Sigmoid 或 Tanh 之类的东西(Tanh 函数实际上只是一个缩放的 Sigmoid),因为它们的图形呈现出相似的形状。对于您的 XOR 问题,我们知道其中任何一个(通过将输出推到更接近 [-1, 1] 范围来工作)都可以很好地工作。如果您需要的东西不会像这两个一样从零变平,那么 ReLU 函数可能是一个不错的选择(事实上,ReLU 可能是当今最流行的激活函数,值得比这个答案更认真的研究提供)。
您应该分析每个函数的图表,并考虑每个函数将对您的数据产生的影响。你知道你将要输入的数据。当这些数据通过函数时,会输出什么?该特定功能会帮助您获得所需的输出吗?如果是这样,这是一个不错的选择。
此外,如果您有一些数据图表,其形状非常有趣,与您知道的其他功能相对应,请随意使用该图表,看看它是如何工作的!一些 ANN 设计是关于理解的,但其他部分(至少目前)是直觉。