优化sigmoid

原代码

def sigmoid(x):
    result = 1 / (1 + np.exp(-x))
    return result

问题:当-x值过大,会导致溢出错误

改进后代码

def improved_sigmoid(x):
    # 创建一个与输入x相同大小的空数组来存储结果
    result = np.zeros_like(x)
    
    # 找到输入x中所有大于0的元素
    positive_mask = x >= 0
    
    # 对大于0的元素,使用常规计算
    # 这里 exp(-x) 不会下溢
    result[positive_mask] = 1 / (1 + np.exp(-x[positive_mask]))
    
    # 对小于0的元素,使用优化过的公式
    # 避免 exp(-x) 上溢
    # sigmoid(x) = e^x / (1 + e^x)
    negative_mask = x < 0
    exp_x = np.exp(x[negative_mask])
    result[negative_mask] = exp_x / (1 + exp_x)
    
    return result

证明:
1/(1+e^(-x))
=1/(1+1/e^x)
=1/(e^x + 1 /e^x)
=ex/(ex +1)

posted @ 2025-09-20 15:12  李大嘟嘟  阅读(10)  评论(0)    收藏  举报