SiLU 导数的图像
以下是 SiLU 函数及其导数的图像绘制代码(使用 PyTorch 和 Matplotlib):
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import numpy as np
# 定义 SiLU 激活函数
class SiLU(nn.Module):
def forward(self, x):
return x * torch.sigmoid(x)
# 定义 SiLU 的导数
def silu_derivative(x):
sigmoid_x = torch.sigmoid(x)
return sigmoid_x + x * sigmoid_x * (1 - sigmoid_x)
# 示例输入数据
x = torch.linspace(-10, 10, 400)
silu = SiLU()
y = silu(x)
y_derivative = silu_derivative(x)
# 绘制 SiLU 函数及其导数的曲线
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(x.numpy(), y.detach().numpy(), label='SiLU', color='blue')
plt.title('SiLU Activation Function')
plt.xlabel('Input')
plt.ylabel('Output')
plt.legend()
plt.grid(True)
plt.subplot(1, 2, 2)
plt.plot(x.numpy(), y_derivative.detach().numpy(), label='SiLU Derivative', color='red')
plt.title('SiLU Derivative')
plt.xlabel('Input')
plt.ylabel('Derivative')
plt.legend()
plt.grid(True)
plt.show()
图像说明
- SiLU 函数图像:SiLU 函数在输入为正时接近线性,而在输入为负时逐渐趋于 0,具有平滑的过渡[28]。
- SiLU 导数图像:导数图像在输入为 0 附近达到最大值,随着输入的增加逐渐减小,这表明 SiLU 函数在输入为负时的梯度较大,有助于减轻梯度消失问题[31]。
通过上述代码,你可以直观地看到 SiLU 函数及其导数的形状和特性。