激活函数

                     

贡献者: xzllxls; addis

预备知识 函数(高中),神经网络,张量(向量与矩阵)

   激活函数(Activation function)是人工神经元计算流程的最后一步,跟随在仿射变换之后的一个非线性变换。神经元中的仿射变换是带有参数的,参数的值是模型训练时学习而来的。而激活函数往往是一个无参数的固定的非线性变换,它决定着一个神经元输出的值的范围。

   神经网络中能够采用的激活函数种类繁多,往往须要根据实际应用场景做选择。设激活函数为 $g$ 的输入为 $x$,输出为 $y$,有 $y=g(x)$。

1. 恒等函数

   显然,恒等函数的表达式为:

\begin{equation} y=g(x)=x~. \end{equation}
函数图像为:

图
图 1:恒等函数

   导数为:

\begin{equation} g'(x)=1~. \end{equation}

2. 阶跃函数

   阶跃函数的表达式为:

\begin{equation} g'(x)= \left\{\begin{aligned} 1, x \geqslant 0 \\ 0, x < 0 \end{aligned}\right. ~ \end{equation}
函数图像为:

图
图 2:阶跃函数

   导数为:

\begin{equation} g'(x)= \left\{\begin{aligned} 0, x \neq 0 \\ \text{不存在}, x = 0 \end{aligned}\right. ~ \end{equation}

3. S 型函数

   S 型函数又称为 Sigmoid 函数。表达式为:

\begin{equation} y=g(x)=\frac{1}{1+e^{-x}}~. \end{equation}
函数图像为:

图
图 3:Sigmiod 函数图像

   其导数为:

\begin{equation} g'(x)=g(x)(1-g(x))~. \end{equation}

4. 双曲正切函数

   双曲正切函数表达式为:

\begin{equation} y=g(x)= \tanh\left(x\right) =\frac{e^x-e^{-x}}{e^x+e^{-x}}~. \end{equation}
函数图像为:

图
图 4:双曲正切函数

   导数为:

\begin{equation} g'(x)=1-g^2(x)~. \end{equation}

5. 线性整流单元

   在现代深度神经网络的架构中,最常用的激活函数是线性整流单元(Rectified linear unit, ReLU)。其表达式为:

\begin{equation} y=g(x)=\max\{0,x\}~. \end{equation}

   在 TensorFlow 中,可以用以下函数实现线性整流单元:

tf.nn.relu(Tensor, name)

   参数含义:

   返回值的数据类型为 Tensor 张量。

   例子:

import tensorflow as tf

result = tf.nn.relu([2., -1., 0.]).numpy()
print(result)
执行后输出:
array([2., 0., 0.], dtype=float32)

   从上述代码和执行结果可以看出,tf.nn.relu 函数对于输入张量的每个分量做线性整流处理。输入张量 $[2, -1, 0]$ 的三个分量中的 $2$ 是大于 $0$ 的,因此结果张量中的第 $1$ 个分量为 $2$;第 $2$ 分量为 $-1$,小于 $0$,因此计算后的结果为 $0$;第 $3$ 个分量为 $0$,计算结果显然为 $0$。


致读者: 小时百科一直以来坚持所有内容免费,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 10 元,我们一个星期内就能脱离亏损, 并保证在接下来的一整年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利