softmax和sigmoid的区别

sigmoid

公式: s i g m o i d ( x ) = 1 1 + e − x sigmoid(x) = \frac{1}{1 + e^{-x}} sigmoid(x)=1+e−x1

函数曲线如下:

导数公式: f ( x ) ′ = e − x ( 1 + e − x ) 2 = f ( x ) ( 1 − f ( x ) ) f(x)\prime = \frac{ e^{-x}}{(1 + e^{-x})^2} = f(x)(1-f(x)) f(x)′=(1+e−x)2e−x=f(x)(1−f(x))

导数曲线如下:

sigmoid代码:

javascript 复制代码
import torch
import torch.nn.functional as F
 
// sigmoid函数
x = torch.tensor([1.0, 2.0, 3.0])
// y = 1 / (1 + torch.exp(-x))	
y = torch.sigmoid(x)
print(f"sigmoid result: {y}")
print(f"sigmoid derivative: {y * (1 - y)}")

softmax

公式:
s o f t m a x ( z i ) = z i ∑ j = 1 n e z j softmax(z_i) = \frac{z_i}{\sum_{j=1}^n e^{z_j}} softmax(zi)=∑j=1nezjzi

指数函数曲线: y = e x y= e^{x} y=ex

  • 引入指数形式的优点:
    指数函数曲线呈现递增趋势,斜率逐渐增大,在 x 轴上一个很小的变化可以导致 y 轴上很大的变化。
  • 引入指数形式的缺点:
    当 z值非常大时,计算得到的数值会变得非常大,可能会溢出。通常针对数值溢出的方法,是将每一个输出值减去输出值中的最大值。

导数公式:

softmax代码:

javascript 复制代码
import torch
import torch.nn.functional as F

def softmax(x):
    """Compute the softmax of vector x."""
    exps = np.exp(x)
    return exps / np.sum(exps) 

// softmax函数
x = torch.tensor([1.0, 2.0, 3.0])
y = F.softmax(x, dim=0)
print(f"softmax result: {y}")
print(f"softmax derivative: {torch.diag(y) - torch.outer(y, y)}")

softmax与cross entropy的联系

事实上,交叉熵与Softmax没有直接的关系。

交叉熵本质是衡量两个概率分布的距离的,而softmax能把一切转换成概率分布。
H ( L , P ) = − ∑ j = 1 n L j l o g ( P j ) H(L,P) = -\sum_{j=1}^nL_jlog(P_j) H(L,P)=−j=1∑nLjlog(Pj)

其中P是预测概率分布,L是真实标签分布。

相关推荐
yi0112 分钟前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
灯澜忆梦3 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下3 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J3 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛3 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有4 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111114 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS4 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
不会就选b4 小时前
算法日常・每日刷题--<动态规划>14
算法
赛博守夜人4 小时前
跨境业务与出海合规之九:海外买量投放与营销虚假流量(Ad Fraud):跨国机房群控与归因欺诈识别算法
算法·安全