激活函数如何工作?

How an Activation Function Works?

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

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

让我困惑的是:

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

谁能帮我解决这个困惑?

首先,我认为您应该忘掉“ON”或“OFF”的概念,因为它通常不是真正的工作方式:这样的函数的结果不一定是二进制的。 存在阈值激活函数,但不是唯一的。 sigmoid 函数是从实数到集合 ]0,1[ 的函数。应用这个函数,除非你添加一个阈值,否则你的神经元总是输出一些东西,即使它是小的或大的,既不是 0 也不是 1。 以线性激活函数为例:你甚至可以在所有实数之间输出。那么,on/off的想法就不相关了。

此类函数的目标是增加模型的复杂性,并使其成为non-linear。如果你有一个没有这些函数的神经网络,输出将只是输入加上偏差的线性加权和,这通常不够复杂以解决问题(经常使用用网络模拟异或门的例子,你赢了'在没有激活函数的情况下进行)。使用激活函数,您可以添加任何您想要的东西,例如 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+..).

这意味着,你可以说每一层都将激活函数应用于前一层神经元值的加权和以及加权偏差的结果作为值。如果你设法阅读它而不窒息,你可以递归地将这个定义应用于每一层(当然除了输入)。