单位阶跃函数是什么?输入过零就从 0 跳到 1 的函数
单位阶跃函数(Unit-step Function),也叫赫维赛德阶跃函数,是一个非常简单的函数:当输入小于零时,输出为 0;当输入大于零时,输出为 1;在输入恰好等于零时,不同的场合有不同的约定,可以取 0、1 或者 0.5。它的图像就像一级台阶:在零点处从 0 一下子跳到 1,所以叫“阶跃”。它以英国物理学家、电气工程师奥利弗·赫维赛德的名字命名,他在 19 世纪末研究电路时使用了这个函数。
在工程和物理中
在信号处理和控制工程中,单位阶跃函数常用来描述一个突然发生的变化,比如在某一时刻突然接通开关,电路中的电压从零突然变为一个固定的值。工程师常常通过观察一个系统对阶跃输入的反应,也就是“阶跃响应”,来分析系统的特性,比如反应有多快、是否会出现超调和振荡。在数学中,它也常被用来把一个函数“截断”,只保留某个点之后的部分。它的导数在广义函数的意义下就是狄拉克 δ 函数。
在神经网络中的历史
单位阶跃函数在人工智能的历史上有着特殊的地位,它是最早的人工神经元所使用的激活函数。1943 年,沃伦·麦卡洛克和沃尔特·皮茨提出了第一个人工神经元的数学模型,模仿生物神经元的工作方式:神经元接收来自其他神经元的输入,把它们加权求和,如果总和超过了某个阈值,神经元就被“激活”,输出 1;否则就不被激活,输出 0。这正是单位阶跃函数的作用:把加权和减去阈值之后的结果送入阶跃函数,就得到了神经元“兴奋”或者“抑制”的状态。1957 年弗兰克·罗森布拉特提出的感知机,同样使用阶跃函数来输出最终的分类结果。
单位阶跃函数在逻辑上非常理想:它把输入干脆利落地分为两类,正好对应着“是”和“否”,与生物神经元“全或无”的发放特性也相符。
为什么后来被替代了
单位阶跃函数有一个致命的缺点:它不连续,在零点处有一个跳变,导数不存在;而在其他所有地方,函数都是平的,导数为零。这意味着它无法提供任何关于“应该往哪个方向调整参数”的信息。训练多层神经网络使用的反向传播算法,需要计算误差对每一个参数的梯度,再沿着梯度的方向调整参数。如果激活函数的导数处处为零,梯度就无法传递,网络就无法学习。感知机之所以能够训练,是因为它只有一层,可以使用一种专门的、不依赖梯度的学习规则;但对于多层的网络,这条路走不通。
因此,人们用一些形状与阶跃函数相似、但光滑可导的函数来代替它。最常用的是对数几率函数,也就是 Sigmoid 函数:它的曲线是平滑的 S 形,在输入很小时接近 0、很大时接近 1,在零附近平滑地过渡,处处可以求导。周志华的《机器学习》在介绍对数几率回归时就指出:单位阶跃函数不连续,因此希望找到能在一定程度上近似它的“替代函数”,并且单调可微,对数几率函数正是这样一个常用的替代函数。后来,又出现了 Tanh、ReLU 等更多的激活函数。不过,在一些特定的研究中,比如二值神经网络,研究者仍然会使用阶跃函数式的激活,并在训练时用“直通估计器”等技巧近似地计算梯度,以获得更快、更节省内存的模型。