1. Sigmoid函数:神经网络的"温柔开关"
第一次接触Sigmoid函数时,我就被它优雅的S形曲线深深吸引。这个看似简单的函数,在神经网络发展史上扮演着关键角色。想象一下,当你用力按压一个柔软的弹簧时,起初阻力很小,中间段阻力适中,到最后几乎按不动——这种渐进式的变化特性,正是Sigmoid函数的精髓所在。
数学上,Sigmoid函数的定义为:
python复制σ(z) = 1 / (1 + e^(-z))
这个公式中的e是自然常数,约等于2.71828。我常跟学生说,可以把Sigmoid看作是一个"温柔的数字压缩器",无论输入多大的数值,它都能优雅地将其压缩到0到1之间。这种特性让它成为理想的概率输出工具,比如在逻辑回归中预测某件事发生的可能性。
在实际项目中,我发现Sigmoid有几个特别实用的特性:输出范围固定(0,1)、处处可导、函数曲线平滑。这些特性让它在神经网络的反向传播中表现出色。记得我第一次用Python实现Sigmoid时,仅用一行代码就搞定了:
python复制def sigmoid(z):
return 1 / (1 + np.exp(-z))
但真正让我着迷的是它的导数特性——这个我们稍后会详细探讨的数学奇迹。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 求导之旅:从定义出发的探索
让我们开始Sigmoid函数的求导之旅。作为过来人,我建议初学者一定要亲手推导一遍,这比死记硬背公式有意义得多。我们从基础定义出发:
σ(z) = 1 / (1 + e^(-z)) = (1 + e^(-z))^(-1)
这个形式看起来是不是很像复合函数?没错,我们可以用链式法则来求导。记得我初学时常犯的错误是忘记负号,所以建议大家一步步来:
首先,设f(z) = 1 + e^(-z),那么σ(z) = 1/f(z)。根据商的求导法则:
math复制dσ/dz = -1/f(z)^2 * df/dz
接下来求df/dz:
math复制df/dz = d/dz(1) + d/dz(e^(-z)) = 0 + (-e^(-z)) = -e^(-z)
把它们组合起来:
math复制dσ/dz = -1/(1+e^(-z))^2 * (-e^(-z)) = e^(-z)/(1+e^(-z))^2
这个结果看起
