找家里做的工作到什么网站,服务器搭建云电脑,找人做软件去哪个网站找,贵阳专业网站建设公司哪家好活函数#xff0c;属于神经网络中的概念。激活函数#xff0c;就像神经元的开关#xff0c;决定了输入信号能否被传递#xff0c;以及以什么形式传递。为应对不同的场景#xff0c;激活函数不断发展出了各种实现。它们存在的意义#xff0c;就是为信号传递赋予不同种类的…活函数属于神经网络中的概念。激活函数就像神经元的开关决定了输入信号能否被传递以及以什么形式传递。为应对不同的场景激活函数不断发展出了各种实现。它们存在的意义就是为信号传递赋予不同种类的“非线性”特征从而让神经网络能够表达更为丰富的含义。本文旨在梳理常见的 40 多种激活函数也包含少量经典的输出层函数。说明本文将简要介绍激活函数的概念和使用场景并列出其数学公式然后基于Python进行可视化实现。最后一节则以表格的形式从多个维度对比了其中最为经典的 20 多个激活函数以期为读者提供选型参考。本文所有代码实现均基于Jupyter NoteBook感兴趣的读者可以后台留言获取完整ipynb文件。为使得各激活函数的代码实现更为简洁首先做一些初始化操作如导入对应Python库、定义对应的绘图函数等如下# -*- coding: utf-8 -*-# 导入必要的库import numpy as npimport matplotlib.pyplot as pltfrom scipy.special import expit as sigmoid # scipy 的 sigmoidimport warningswarnings.filterwarnings(ignore)# 设置中文字体和图形样式plt.rcParams[font.sans-serif] [SimHei, Arial Unicode MS, DejaVu Sans]plt.rcParams[axes.unicode_minus] Falseplt.style.use(seaborn-v0_8) # 使用美观样式# 定义输入范围x np.linspace(-10, 10, 1000)# 定义画图函数(单张图)def plot_activation(func, grad_func, name):y func(x)dy grad_func(x)plt.figure(figsize(8, 5))plt.plot(x, y, labelname, linewidth1.5)plt.plot(x, dy, labelf{name}s derivative, linestyle--, linewidth1.5)plt.title(f{name} Function and Its Derivative)plt.legend()plt.grid(True)plt.axhline(0, colorblack, linewidth0.5)plt.axvline(0, colorblack, linewidth0.5)plt.show()# 定义画图函数多张图用于对比不同参数的效果def plot_activations(functions, x):plt.figure(figsize(10, 7))for func, grad_func, name in functions:y func(x)dy grad_func(x)plt.plot(x, y, labelname, linewidth1.5)plt.plot(x, dy, labelf{name}s derivative, linestyle--, linewidth1.5)plt.title(Activation Functions and Their Derivatives)plt.legend()plt.grid(True)plt.axhline(0, colorblack, linewidth0.5)plt.axvline(0, colorblack, linewidth0.5)plt.show()接下来让我们开始吧经典激活函数Sigmoid适用于二分类问题的输出层将输出压缩到 (0,1) 区间表示概率。不推荐用于隐藏层因易导致梯度消失。公式实现def sigmoid(x):return 1 / (1 np.exp(-x))def sigmoid_grad(x):s sigmoid(x)return s * (1 - s)plot_activation(sigmoid, sigmoid_grad, Sigmoid)图像imageTanh双曲正切Tanh 输出零中心化使梯度更新方向更均衡收敛更快是一种比 Sigmoid 更优的激活函数适合隐藏层使用尤其在 RNN 中仍有应用。但它仍可能梯度消失。公式实现def tanh(x):return np.tanh(x)def tanh_grad(x):return 1 - np.tanh(x)**2plot_activation(tanh, tanh_grad, Tanh)图像imageLinear主要用于回归任务的输出层保持输出为原始实数不进行非线性变换。不适合用在隐藏层否则整个网络等价于单层线性模型无法学习非线性特征。在某些特定模型如自编码器的中间层或策略网络中也可能使用。公式实现def linear(x):return xdef linear_grad(x):return np.ones_like(x)plot_activation(linear, linear_grad, Linear)图像ImageSoftmax多分类问题的输出层标准激活函数将输出转化为概率分布。不用于隐藏层。公式实现from mpl_toolkits.mplot3d import Axes3Ddef softmax(x):exp_x np.exp(x - np.max(x, axis0, keepdimsTrue)) # 数值稳定return exp_x / np.sum(exp_x, axis0, keepdimsTrue)def softmax_grad(x):s softmax(x).reshape(-1, 1)return np.diagflat(s) - np.dot(s, s.T) # Jacobian矩阵# 生成输入数据二维便于可视化x np.linspace(-10, 10, 100)y np.linspace(-10, 10, 100)X, Y np.meshgrid(x, y)inputs np.vstack([X.ravel(), Y.ravel()]).T# 计算Softmax输出取第一个维度作为输出值因为Softmax输出是概率分布outputs np.array([softmax(p)[0] for p in inputs]).reshape(X.shape)# 计算梯度取Jacobian矩阵的第一个对角线元素gradients np.array([softmax_grad(p)[0, 0] for p in inputs]).reshape(X.shape)# 绘制Softmax函数fig plt.figure(figsize(12, 5))# 1. Softmax函数图像ax1 fig.add_subplot(121, projection3d)ax1.plot_surface(X, Y, outputs, cmapviridis, alpha0.8)ax1.set_title(Softmax (First Output Dimension))ax1.set_xlabel(x1)ax1.set_ylabel(x2)ax1.set_zlabel(P(x1))# 2. Softmax梯度图像ax2 fig.add_subplot(122, projection3d)ax2.plot_surface(X, Y, gradients, cmapplasma, alpha0.8)ax2.set_title(Gradient of Softmax (∂P(x1)/∂x1))ax2.set_xlabel(x1)ax2.set_ylabel(x2)ax2.set_zlabel(Gradient)plt.tight_layout()plt.show()图像ImageReLU 函数及其变体ReLURectified Linear Unit中文名称是线性整流函数是在神经网络中常用的激活函数。通常意义下其指代数学中的斜坡函数。公式实现def relu(x):return np.maximum(0, x)def relu_grad(x):return (x 0).astype(float)plot_activation(relu, relu_grad, RelU)图像ImageReLU6ReLU6 是 ReLU 的有界版本输出限制在 [0, 6] 区间。主要用于移动端和轻量级网络如 MobileNet、EfficientNet 的早期版本其有界性有助于提升低精度推理如量化时的稳定性。也常见于强化学习如 DQN中用于限制输出范围防止训练波动。公式或实现def relu6(x):return np.minimum(np.maximum(0, x), 6)def relu6_grad(x):dx np.zeros_like(x)dx[(x 0) (x 6)] 1return dx