当前位置:   article > 正文

深度学习笔记: Sigmoid激活函数_sigmoid函数

sigmoid函数

欢迎Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog

概述:

Sigmoid激活函数是人工神经网络中广泛使用的非线性激活函数之一。它有效地将输入值映射到0和1之间的范围,使其特别适用于输出需要被解释为概率的模型。

数学表达式:

Sigmoid函数的数学定义为:

$\text{sigmoid}(x) = \frac{e^x}{e^x+1} = \frac{1}{1+e^{-x}}$

其中$e$是自然对数的底数,$x$代表函数的输入,通常是神经元输入的加权和。

函数特性:

  • 范围:Sigmoid函数的输出界限在0和1之间,包含两端。
  • 形状:它有一个S形曲线(sigmoid曲线)。
  • 输出解释:接近1的值表示高度激活,而接近0的值表示低激活。这可以直观地理解为神经元被激活的概率。

在神经网络中的应用:

在神经网络的背景下,Sigmoid函数被应用于层内的每个神经元。特别是对于一个全连接层,该函数被应用于每个神经元的输入加权和,产生神经元的激活水平。这个激活的输出然后传递给网络中的下一层。

使用Sigmoid函数允许清晰地解释神经元激活水平:

  • 接近1:表示更高的激活。
  • 接近0:表示较低的激活。

因此,Sigmoid函数作为一种引入非线性到网络中的机制,使其能够学习复杂的模式并作出超出简单线性边界的决策。

示例:

考虑一个隐藏层中的神经元,它从输入层的两个神经元接收输入值0.5和0.8。如果这些输入的权重分别为0.4和0.6,且神经元的偏置为0.1,则预激活输出$x$将被计算为:

$x = (0.5 \times 0.4) + (0.8 \times 0.6) + 0.1 = 0.68$

应用Sigmoid函数得到激活输出:

$\text{activated output} = \frac{1}{1 + e^{-0.68}} \approx 0.6637$

这个激活的输出然后被用作下一层神经元的输入。

可视化:

Sigmoid函数导数的推导

方程 $\frac{\partial \sigma(Z)}{\partial Z} = \sigma(Z) \cdot (1 - \sigma(Z))$ 是通过对Sigmoid函数应用链式法则得到的,Sigmoid函数定义为 $\sigma(Z) = \frac{1}{1 + e^{-Z}}$。以下是如何得到这个导数的逐步分解:

1. 表达Sigmoid函数: sigmoid函数可以为了方便求导而重写为:

$\sigma(Z) = (1 + e^{-Z})^{-1}$

2. 应用链式法则:微积分中的链式法则是一个用来计算两个或更多函数组合的导数的公式。在这个案例中,我们有一个外函数$u^{-1}$(其中$u = 1 + e^{-Z}$)和一个内函数$1 + e^{-Z}$。链式法则指出,如果你有一个函数$h(u) = u^{-1}$$u(Z) = 1 + e^{-Z}$,那么: $\frac{d}{dZ} h(u) = \frac{dh}{du} \cdot \frac{du}{dZ}$

3. 计算 $\frac{du}{dZ}$:  $u(Z) = 1 + e^{-Z}$

关于$Z$的导数是: $\frac{du}{dZ} = -e^{-Z}$

4. 计算$\frac{dh}{du}$:  $h(u) = u^{-1}$

关于$u$的导数是: $\frac{dh}{du} = -u^{-2} = -(1 + e^{-Z})^{-2}$

5. 使用链式法则组合: 现在,使用链式法则组合这些结果得到:

$\frac{d\sigma}{dZ} = -(1 + e^{-Z})^{-2} \cdot (-e^{-Z})$

6. 简化

$\frac{d\sigma}{dZ} = \frac{e^{-Z}}{(1 + e^{-Z})^2}$

7. $\sigma(Z)$表示:
注意到$\sigma(Z) = \frac{1}{1 + e^{-Z}} \implies 1 + e^{-Z} = \frac{1}{\sigma(Z)}$

因此 $e^{-Z} = \frac{1}{\sigma(Z)} - 1$
$(1 + e^{-Z})^2 = \left(\frac{1}{\sigma(Z)}\right)^2$

将这些代入导数得到:

$\frac{d\sigma}{dZ} = \frac{e^{-Z}}{(1 + e^{-Z})^2} = \frac{\frac{1}{\sigma(Z)} - 1}{(\frac{1}{\sigma(Z)})^2} =\sigma(Z) - \sigma^2(Z)$

Sigmoid类实现:

Sigmoid前向传播方程

在前向传播期间,预激活特征$Z$被传递到激活函数Sigmoid以计算它们的后激活值$A$

$\begin{aligned} A &= \text{sigmoid.forward}(Z) \\ &= \sigma(Z) \\ &= \frac{1}{1 + e^{-Z}} \end{aligned}$

Sigmoid后向传播方程

后向传播帮助我们了解在给定后激活值$A$对损失的影响下,预激活特征$Z$的变化如何影响损失。

$\begin{aligned} \frac{dL}{dz} &= \text{sigmoid.backward}(dLdA) \\ &= dLdA \odot \frac{\partial A}{\partial Z} \\ &= dLdA \odot (\sigma(Z) - \sigma^2(Z)) \\ &= dLdA \odot (A - A \odot A) \end{aligned}$

下面是Sigmoid激活函数的Python类实现,包括前向传递(计算激活输出)和后向传递(计算用于反向传播的梯度。

  1. import numpy as np
  2. class Sigmoid:
  3. """
  4. Sigmoid Activation Function:
  5. - 'forward' function applies the sigmoid activation.
  6. - 'backward' function computes the gradient for backpropagation.
  7. """
  8. def forward(self, Z):
  9. self.A = 1 / (1 + np.exp(-Z))
  10. return self.A
  11. def backward(self, dLdA):
  12. dAdZ = self.A * (1 - self.A)
  13. dLdZ = dLdA * dAdZ
  14. return dLdZ
'
运行

主要收获:

Sigmoid函数对于将线性输入转换为可以解释为概率的输出至关重要,从而为神经网络内的激活水平提供了概率基础。

参考资料:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/853335
推荐阅读
  

闽ICP备14008679号