首页 > 解决方案 > 激活函数如何工作?

问题描述

我仍然对激活函数在神经网络中的工作方式感到有些困惑(好吧,因为无法用外行的术语来解释它们而感到困惑)。到目前为止,我有:

隐藏层中的激活函数决定了神经元是打开(将值传递给下一层)还是关闭(什么都不传递给下一层)。这是通过将权重/偏差计算的结果输入到函数(例如 sigmoid)中来实现的,该函数导致输出为高(ON/值通过)或低(OFF/值未通过)。

让我困惑的是:

接下来发生什么?如果神经元打开,1) 神经元和下一层之间的连接器是否有自己的 w & b 值传递给下一层?2) 激活函数的输入是否传递给下一层?或者,3) sigmoid 函数的输出是否传递到下一层?我认为答案是(1)。

任何人都可以帮助我解决这个困惑的领域吗?

标签: neural-networkactivation-function

解决方案


首先,我认为您应该忘记“开”或“关”的概念,因为它实际上并不是它经常工作的方式:这样的函数的结果不是必须是二进制的。存在阈值激活函数,但它们不是唯一的。sigmoid 函数是一个从实数到集合 ]0,1[ 的函数。应用此函数,除非您添加阈值,否则您的神经元总是输出一些东西,即使它很小或很大,也不是 0 也不是 1。以线性激活函数为例:您甚至可以在所有实数中输出。然后,开/关的想法是不相关的。

此类函数的目标是增加模型的复杂性,并使其非线性。如果你有一个没有这些函数的神经网络,输出只是输入加上偏差的线性加权和,这通常不够复杂,无法解决问题(经常使用用网络模拟 XOR 门的例子,你赢了'不要在没有激活功能的情况下这样做)。使用激活函数,你可以添加任何你想要的东西,比如 tanh、sigmoid、ReLU...

话虽如此,答案是1和3。

  • 如果你在隐藏层中取一个随机神经元 n,它的输入是由权重加权的值和一个偏差(也由通常称为 w0 的权重加权)的总和,然后它在其上应用激活函数。想象一下前面神经元的加权值为 0.5 和 0.2,而你的加权偏差为 0.1。然后你应用一个函数,让我们在 0.5+0.2+0.1=0.8 上取 sigmoid。这使得大约为 0.69。

  • 神经元的输出是函数的结果。下一层的每个神经元将对当前层的输出进行加权求和,包括我们神经元的输出。请注意,下一层的每个神经元在前一层和自身之间都有自己的权重。然后,下一层的神经元将应用一个激活函数(不一定与当前层相同)来产生它们自己的输出。所以,非正式地,它会做类似 activ_func(..+..+0.69*weight_n+..) 的事情。

这意味着,您可以说每一层都将激活函数的结果作为值,该激活函数应用于前一层神经元值的加权和和加权偏差。如果您设法在没有窒息的情况下阅读它,您可以递归地将此定义应用于每一层(当然输入除外)。


推荐阅读