Sigmoid、Tanh、ReLU 及其变体等多种激活函数在 Python 中实现,并对其行为进行可视化。绘制这些函数有助于理解它们的输出范围、饱和点和非线性等特性,这些在设计神经网络层时是重要的考量。我们将使用 NumPy 进行数学计算,并使用 Plotly 创建交互式可视化。首先,我们导入必要的库:import numpy as np现在,我们根据它们的数学公式定义激活函数:# Sigmoid 函数 def sigmoid(x): """计算 Sigmoid 激活值。""" return 1 / (1 + np.exp(-x)) # 双曲正切 (Tanh) 函数 def tanh(x): """计算 Tanh 激活值。""" return np.tanh(x) # 整流线性单元 (ReLU) 函数 def relu(x): """计算 ReLU 激活值。""" return np.maximum(0, x) # 泄漏整流线性单元 (Leaky ReLU) 函数 def leaky_relu(x, alpha=0.01): """计算 Leaky ReLU 激活值。""" return np.maximum(alpha * x, x)接下来,我们将生成一系列输入值,这些值通常以零为中心,以便观察函数在不同输入下的表现。# 生成从 -5 到 5 的输入值 x = np.linspace(-5, 5, 100) # 计算每个激活函数的输出 y_sigmoid = sigmoid(x) y_tanh = tanh(x) y_relu = relu(x) y_leaky_relu = leaky_relu(x)在计算出每个函数的输入值和对应的输出后,我们现在可以绘制它们。这种可视化方法能够直接比较它们的形状和特点。{"layout": {"title": "常见激活函数", "xaxis": {"title": "输入 (x)", "range": [-5, 5]}, "yaxis": {"title": "输出 (f(x))", "range": [-1.2, 5.2]}, "legend": {"yanchor": "top", "y": 0.99, "xanchor": "left", "x": 0.01}}, "data": [{"x": [-5.0, -4.8989898989899, -4.7979797979798, -4.6969696969697, -4.5959595959596, -4.49494949494949, -4.39393939393939, -4.29292929292929, -4.19191919191919, -4.09090909090909, -3.98989898989899, -3.88888888888889, -3.78787878787879, -3.68686868686869, -3.58585858585859, -3.48484848484848, -3.38383838383838, -3.28282828282828, -3.18181818181818, -3.08080808080808, -2.97979797979798, -2.87878787878788, -2.77777777777778, -2.67676767676768, -2.57575757575758, -2.47474747474747, -2.37373737373737, -2.27272727272727, -2.17171717171717, -2.07070707070707, -1.96969696969697, -1.86868686868687, -1.76767676767677, -1.66666666666667, -1.56565656565657, -1.46464646464646, -1.36363636363636, -1.26262626262626, -1.16161616161616, -1.06060606060606, -0.95959595959596, -0.858585858585859, -0.757575757575758, -0.656565656565657, -0.555555555555556, -0.454545454545455, -0.353535353535354, -0.252525252525253, -0.151515151515152, -0.0505050505050506, 0.0505050505050506, 0.151515151515152, 0.252525252525253, 0.353535353535354, 0.454545454545455, 0.555555555555556, 0.656565656565657, 0.757575757575758, 0.858585858585859, 0.95959595959596, 1.06060606060606, 1.16161616161616, 1.26262626262626, 1.36363636363636, 1.46464646464646, 1.56565656565657, 1.66666666666667, 1.76767676767677, 1.86868686868687, 1.96969696969697, 2.07070707070707, 2.17171717171717, 2.27272727272727, 2.37373737373737, 2.47474747474747, 2.57575757575758, 2.67676767676768, 2.77777777777778, 2.87878787878788, 2.97979797979798, 3.08080808080808, 3.18181818181818, 3.28282828282828, 3.38383838383838, 3.48484848484848, 3.58585858585859, 3.68686868686869, 3.78787878787879, 3.88888888888889, 3.98989898989899, 4.09090909090909, 4.19191919191919, 4.29292929292929, 4.39393939393939, 4.49494949494949, 4.5959595959596, 4.6969696969697, 4.7979797979798, 4.8989898989899, 5.0], "y": [0.0066928509242848554, 0.007427296596162802, 0.00823184164157509, 0.009110511944006452, 0.010067986038709233, 0.011109000335700086, 0.01223899565574705, 0.01346386354635331, 0.014790038049901978, 0.016224733555328356, 0.017775938804536994, 0.019452135889424346, 0.021262359976184127, 0.023216311391966647, 0.025324380106374224, 0.02759778795423167, 0.03004850309087786, 0.03268915935857348, 0.03553308743330582, 0.03859439288313326, 0.04188792470703271, 0.04542930085315312, 0.04923483216668821, 0.05332157120214384, 0.05770718180866582, 0.06240994164514449, 0.0674489883096106, 0.07284418089158138, 0.07861619897338093, 0.08478644869243331, 0.09137712591550857, 0.09841005435418234, 0.10590713506949917, 0.11388978448847952, 0.12237841022474855, 0.1313919144274849, 0.14094726874805645, 0.1510598954471698, 0.16174285048186943, 0.17300679163846728, 0.18485883299374685, 0.1973028687557058, 0.2103387699972423, 0.22396245851193602, 0.23816570972004897, 0.2529362115617361, 0.2682573956786535, 0.2841081254847379, 0.3004625714181754, 0.3172894543071179, 0.3345525617160957, 0.3522114448387209, 0.3702218616270206, 0.38853566113113953, 0.4070998221381913, 0.42586010950063785, 0.4447612484129619, 0.4637470192349667, 0.4827611953041876, 0.5017476091468007, 0.5206502822714088, 0.5394134755091329, 0.557981789009338, 0.5763001448098351, 0.5943140977106828, 0.6119699708181997, 0.6292152753814828, 0.6460000035550091, 0.6622758095924049, 0.6779964853908108, 0.6931184352267596, 0.7076000369211896, 0.7214019290630809, 0.7344871841218571, 0.7468213429698903, 0.7583733876223323, 0.7691157232622959, 0.7790241514569933, 0.7880780053491697, 0.7962601855625196, 0.8035581101875107, 0.809963411463599, 0.8154708050805544, 0.8200781219746567, 0.8237861580749766, 0.8265986419750937, 0.8285220802478164, 0.8295655659696596, 0.8297402227551024, 0.8310584187508953, 0.8324997556551518, 0.8340634416605199, 0.8357486963392174, 0.8375547519695847, 0.8394808505074474, 0.8415262527924011, 0.8436899931183626, 0.8459710875369423, 0.8483684851927281, 0.8508810742597614], "mode": "lines", "name": "Sigmoid", "line": {"color": "#228be6"}}, {"x": [-5.0, -4.8989898989899, -4.7979797979798, -4.6969696969697, -4.5959595959596, -4.49494949494949, -4.39393939393939, -4.29292929292929, -4.19191919191919, -4.09090909090909, -3.98989898989899, -3.88888888888889, -3.78787878787879, -3.68686868686869, -3.58585858585859, -3.48484848484848, -3.38383838383838, -3.28282828282828, -3.18181818181818, -3.08080808080808, -2.97979797979798, -2.87878787878788, -2.77777777777778, -2.67676767676768, -2.57575757575758, -2.47474747474747, -2.37373737373737, -2.27272727272727, -2.17171717171717, -2.07070707070707, -1.96969696969697, -1.86868686868687, -1.76767676767677, -1.66666666666667, -1.56565656565657, -1.46464646464646, -1.36363636363636, -1.26262626262626, -1.16161616161616, -1.06060606060606, -0.95959595959596, -0.858585858585859, -0.757575757575758, -0.656565656565657, -0.555555555555556, -0.454545454545455, -0.353535353535354, -0.252525252525253, -0.151515151515152, -0.0505050505050506, 0.0505050505050506, 0.151515151515152, 0.252525252525253, 0.353535353535354, 0.454545454545455, 0.555555555555556, 0.656565656565657, 0.757575757575758, 0.858585858585859, 0.95959595959596, 1.06060606060606, 1.16161616161616, 1.26262626262626, 1.36363636363636, 1.46464646464646, 1.56565656565657, 1.66666666666667, 1.76767676767677, 1.86868686868687, 1.96969696969697, 2.07070707070707, 2.17171717171717, 2.27272727272727, 2.37373737373737, 2.47474747474747, 2.57575757575758, 2.67676767676768, 2.77777777777778, 2.87878787878788, 2.97979797979798, 3.08080808080808, 3.18181818181818, 3.28282828282828, 3.38383838383838, 3.48484848484848, 3.58585858585859, 3.68686868686869, 3.78787878787879, 3.88888888888889, 3.98989898989899, 4.09090909090909, 4.19191919191919, 4.29292929292929, 4.39393939393939, 4.49494949494949, 4.5959595959596, 4.6969696969697, 4.7979797979798, 4.8989898989899, 5.0], "y": [-0.9999329299736164, -0.9998903835928646, -0.9998368284197945, -0.9997701824299947, -0.9996880853317159, -0.9995878176680464, -0.9994662582786871, -0.9993198744779009, -0.9991447403907448, -0.9989365188843639, -0.9986899620779635, -0.9983990924519736, -0.9980571947337355, -0.9976565227399263, -0.9971881528110206, -0.9966419282195696, -0.9960067407358797, -0.995270408413386, -0.9944199001338579, -0.9934409198896334, -0.9923180091181773, -0.991034877587548, -0.9895737644686104, -0.9879156903511366, -0.9860399830751213, -0.9839243199606464, -0.9815447030705881, -0.9788748236593997, -0.9758858960776383, -0.972547007530344, -0.9688247783199816, -0.9646837963578047, -0.9600869085856103, -0.9549951692017709, -0.9493677351552942, -0.9431618887458153, -0.9363319553372438, -0.9288291177959895, -0.9206014849289418, -0.9115942904191444, -0.901749437232192, -0.8909997075527075, -0.8792717862301594, -0.8664861077826558, -0.8525586871432803, -0.8373994238710967, -0.8209131441790326, -0.8029988212190979, -0.783552870368087, -0.7624683792832477, -0.7396364448049972, -0.7149481541162517, -0.6883007293378976, -0.6595997863093232, -0.6287621291388584, -0.5957122363487219, -0.5603848302346251, -0.5227245672227323, -0.4826900457304833, -0.4402570606494751, -0.3954197754777513, -0.3481999798279867, -0.29864987128073135, -0.24685325319217953, -0.1929238715584816, -0.1370054230383524, -0.07926144414266668, -0.019874469764031464, 0.04103841575595254, 0.10329988632427549, 0.1667387553905028, 0.2311890281149147, 0.29649089879188846, 0.3624899719648835, 0.4289937483675518, 0.4958008404991073, 0.5626927932062549, 0.6294432887020643, 0.6958180380420087, 0.7615809888248401, 0.8264963785801218, 0.8803373893985893, 0.9230812680648813, 0.9547711811699836, 0.9756056102036573, 0.9860399830751213, 0.991034877587548, 0.9934409198896334, 0.9944199001338579, 0.995270408413386, 0.9960067407358797, 0.9966419282195696, 0.9971881528110206, 0.9976565227399263, 0.9980571947337355, 0.9983990924519736, 0.9986899620779635, 0.9989365188843639, 0.9991447403907448, 0.9993198744779009, 0.9994662582786871, 0.9995878176680464, 0.9996880853317159, 0.9997701824299947, 0.9998368284197945, 0.9998903835928646, 0.9999329299736164], "mode": "lines", "name": "Tanh", "line": {"color": "#ae3ec9"}}, {"x": [-5.0, -4.8989898989899, -4.7979797979798, -4.6969696969697, -4.5959595959596, -4.49494949494949, -4.39393939393939, -4.29292929292929, -4.19191919191919, -4.09090909090909, -3.98989898989899, -3.88888888888889, -3.78787878787879, -3.68686868686869, -3.58585858585859, -3.48484848484848, -3.38383838383838, -3.28282828282828, -3.18181818181818, -3.08080808080808, -2.97979797979798, -2.87878787878788, -2.77777777777778, -2.67676767676768, -2.57575757575758, -2.47474747474747, -2.37373737373737, -2.27272727272727, -2.17171717171717, -2.07070707070707, -1.96969696969697, -1.86868686868687, -1.76767676767677, -1.66666666666667, -1.56565656565657, -1.46464646464646, -1.36363636363636, -1.26262626262626, -1.16161616161616, -1.06060606060606, -0.95959595959596, -0.858585858585859, -0.757575757575758, -0.656565656565657, -0.555555555555556, -0.454545454545455, -0.353535353535354, -0.252525252525253, -0.151515151515152, -0.0505050505050506, 0.0505050505050506, 0.151515151515152, 0.252525252525253, 0.353535353535354, 0.454545454545455, 0.555555555555556, 0.656565656565657, 0.757575757575758, 0.858585858585859, 0.95959595959596, 1.06060606060606, 1.16161616161616, 1.26262626262626, 1.36363636363636, 1.46464646464646, 1.56565656565657, 1.66666666666667, 1.76767676767677, 1.86868686868687, 1.96969696969697, 2.07070707070707, 2.17171717171717, 2.27272727272727, 2.37373737373737, 2.47474747474747, 2.57575757575758, 2.67676767676768, 2.77777777777778, 2.87878787878788, 2.97979797979798, 3.08080808080808, 3.18181818181818, 3.28282828282828, 3.38383838383838, 3.48484848484848, 3.58585858585859, 3.68686868686869, 3.78787878787879, 3.88888888888889, 3.98989898989899, 4.09090909090909, 4.19191919191919, 4.29292929292929, 4.39393939393939, 4.49494949494949, 4.5959595959596, 4.6969696969697, 4.7979797979798, 4.8989898989899, 5.0], "y": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0505050505050506, 0.151515151515152, 0.252525252525253, 0.353535353535354, 0.454545454545455, 0.555555555555556, 0.656565656565657, 0.757575757575758, 0.858585858585859, 0.95959595959596, 1.06060606060606, 1.16161616161616, 1.26262626262626, 1.36363636363636, 1.46464646464646, 1.56565656565657, 1.66666666666667, 1.76767676767677, 1.86868686868687, 1.96969696969697, 2.07070707070707, 2.17171717171717, 2.27272727272727, 2.37373737373737, 2.47474747474747, 2.57575757575758, 2.67676767676768, 2.77777777777778, 2.87878787878788, 2.97979797979798, 3.08080808080808, 3.18181818181818, 3.28282828282828, 3.38383838383838, 3.48484848484848, 3.58585858585859, 3.68686868686869, 3.78787878787879, 3.88888888888889, 3.98989898989899, 4.09090909090909, 4.19191919191919, 4.29292929292929, 4.39393939393939, 4.49494949494949, 4.5959595959596, 4.6969696969697, 4.7979797979798, 4.8989898989899, 5.0], "mode": "lines", "name": "ReLU", "line": {"color": "#12b886"}}, {"x": [-5.0, -4.8989898989899, -4.7979797979798, -4.6969696969697, -4.5959595959596, -4.49494949494949, -4.39393939393939, -4.29292929292929, -4.19191919191919, -4.09090909090909, -3.98989898989899, -3.88888888888889, -3.78787878787879, -3.68686868686869, -3.58585858585859, -3.48484848484848, -3.38383838383838, -3.28282828282828, -3.18181818181818, -3.08080808080808, -2.97979797979798, -2.87878787878788, -2.77777777777778, -2.67676767676768, -2.57575757575758, -2.47474747474747, -2.37373737373737, -2.27272727272727, -2.17171717171717, -2.07070707070707, -1.96969696969697, -1.86868686868687, -1.76767676767677, -1.66666666666667, -1.56565656565657, -1.46464646464646, -1.36363636363636, -1.26262626262626, -1.16161616161616, -1.06060606060606, -0.95959595959596, -0.858585858585859, -0.757575757575758, -0.656565656565657, -0.555555555555556, -0.454545454545455, -0.353535353535354, -0.252525252525253, -0.151515151515152, -0.0505050505050506, 0.0505050505050506, 0.151515151515152, 0.252525252525253, 0.353535353535354, 0.454545454545455, 0.555555555555556, 0.656565656565657, 0.757575757575758, 0.858585858585859, 0.95959595959596, 1.06060606060606, 1.16161616161616, 1.26262626262626, 1.36363636363636, 1.46464646464646, 1.56565656565657, 1.66666666666667, 1.76767676767677, 1.86868686868687, 1.96969696969697, 2.07070707070707, 2.17171717171717, 2.27272727272727, 2.37373737373737, 2.47474747474747, 2.57575757575758, 2.67676767676768, 2.77777777777778, 2.87878787878788, 2.97979797979798, 3.08080808080808, 3.18181818181818, 3.28282828282828, 3.38383838383838, 3.48484848484848, 3.58585858585859, 3.68686868686869, 3.78787878787879, 3.88888888888889, 3.98989898989899, 4.09090909090909, 4.19191919191919, 4.29292929292929, 4.39393939393939, 4.49494949494949, 4.5959595959596, 4.6969696969697, 4.7979797979798, 4.8989898989899, 5.0], "y": [-0.05, -0.048989898989899, -0.047979797979798, -0.046969696969697, -0.045959595959596, -0.0449494949494949, -0.0439393939393939, -0.0429292929292929, -0.0419191919191919, -0.0409090909090909, -0.0398989898989899, -0.0388888888888889, -0.0378787878787879, -0.0368686868686869, -0.0358585858585859, -0.0348484848484848, -0.0338383838383838, -0.0328282828282828, -0.0318181818181818, -0.0308080808080808, -0.0297979797979798, -0.0287878787878788, -0.0277777777777778, -0.0267676767676768, -0.0257575757575758, -0.0247474747474747, -0.0237373737373737, -0.0227272727272727, -0.0217171717171717, -0.0207070707070707, -0.0196969696969697, -0.0186868686868687, -0.0176767676767677, -0.0166666666666667, -0.0156565656565657, -0.0146464646464646, -0.0136363636363636, -0.0126262626262626, -0.0116161616161616, -0.0106060606060606, -0.0095959595959596, -0.00858585858585859, -0.00757575757575758, -0.00656565656565657, -0.00555555555555556, -0.00454545454545455, -0.00353535353535354, -0.00252525252525253, -0.00151515151515152, -0.000505050505050506, 0.0505050505050506, 0.151515151515152, 0.252525252525253, 0.353535353535354, 0.454545454545455, 0.555555555555556, 0.656565656565657, 0.757575757575758, 0.858585858585859, 0.95959595959596, 1.06060606060606, 1.16161616161616, 1.26262626262626, 1.36363636363636, 1.46464646464646, 1.56565656565657, 1.66666666666667, 1.76767676767677, 1.86868686868687, 1.96969696969697, 2.07070707070707, 2.17171717171717, 2.27272727272727, 2.37373737373737, 2.47474747474747, 2.57575757575758, 2.67676767676768, 2.77777777777778, 2.87878787878788, 2.97979797979798, 3.08080808080808, 3.18181818181818, 3.28282828282828, 3.38383838383838, 3.48484848484848, 3.58585858585859, 3.68686868686869, 3.78787878787879, 3.88888888888889, 3.98989898989899, 4.09090909090909, 4.19191919191919, 4.29292929292929, 4.39393939393939, 4.49494949494949, 4.5959595959596, 4.6969696969697, 4.7979797979798, 4.8989898989899, 5.0], "mode": "lines", "name": "Leaky ReLU (a=0.01)", "line": {"color": "#f76707", "dash": "dash"}}]}Sigmoid、Tanh、ReLU 和 Leaky ReLU 激活函数的比较。注意它们不同的输出范围:Sigmoid(0 到 1),Tanh(-1 到 1),ReLU(0 到 无穷大),以及 Leaky ReLU(负无穷大到正无穷大,对负输入具有小斜率)。观察这个图,我们可以清楚地看到前面讨论的特点:Sigmoid 和 Tanh 呈 S 形,对于大量正或负输入会饱和(变平)。Tanh 是零中心化的,这在训练时通常比 Sigmoid 有益。ReLU 对正输入是线性的,对负输入是零。这种简单性使其计算效率高,但可能导致“ReLU 死亡”问题,即神经元输出始终为零。Leaky ReLU 通过允许负输入有一个小的非零梯度来解决“ReLU 死亡”问题,这在图中表现为轻微的负斜率。这种实际实现有助于将激活函数的数学定义与其实际行为联系起来。理解这些差异是决定在神经网络的隐藏层和输出层中使用哪种激活函数的基础,这取决于具体的任务(例如,二分类任务通常在输出层使用 Sigmoid,多分类任务使用 Softmax,回归任务使用线性函数,而隐藏层常使用 ReLU 或其变体)。