我们将神经元、权重、偏置和激活函数的原理付诸实践。了解如何计算单个神经元的输出非常重要,因为在前向传播过程中,网络中的每个神经元都会重复这个精确的过程。神经元计算主要包含两个步骤:线性组合: 计算输入项的加权和并加上偏置。我们通常将这个中间值记作 $z$。 $$z = (\sum_{i} w_i x_i) + b$$ 其中 $w_i$ 是权重,$x_i$ 是输入,$b$ 是偏置。激活: 对结果 $z$ 应用非线性激活函数 $f$,以得到神经元的最终输出,记作 $a$。 $$a = f(z)$$示例计算设想一个具有两个输入的单个神经元。我们来定义它的参数和输入值:输入:$x = [x_1, x_2] = [2.0, 3.0]$权重:$w = [w_1, w_2] = [0.5, -1.0]$偏置:$b = 1.0$步骤 1:计算线性组合 (z)我们将每个输入乘以其对应的权重,将这些乘积相加,然后加上偏置:$$z = (w_1 \times x_1) + (w_2 \times x_2) + b$$ $$z = (0.5 \times 2.0) + (-1.0 \times 3.0) + 1.0$$ $$z = 1.0 - 3.0 + 1.0$$ $$z = -1.0$$因此,线性组合的结果是 $z = -1.0$。digraph NeuronCalculation { rankdir=LR; node [shape=circle, style=filled, fillcolor="#a5d8ff"]; edge [arrowhead=vee]; subgraph cluster_inputs { label = "输入与参数"; style=filled; color="#e9ecef"; node [shape=plaintext]; x1 [label="x₁ = 2.0"]; x2 [label="x₂ = 3.0"]; w1 [label="w₁ = 0.5"]; w2 [label="w₂ = -1.0"]; b [label="b = 1.0"]; } subgraph cluster_neuron { label = "神经元计算"; style=filled; color="#e9ecef"; node [shape=circle, style=filled]; z_node [label="z = -1.0", fillcolor="#ffd8a8"]; a_node [label="a = f(z)", fillcolor="#b2f2bb"]; } x1 -> z_node [style=invis]; x2 -> z_node [style=invis]; w1 -> z_node [style=invis]; w2 -> z_node [style=invis]; b -> z_node [style=invis]; {x1, w1} -> z_node [label="0.5 * 2.0", constraint=false]; {x2, w2} -> z_node [label="-1.0 * 3.0", constraint=false]; b -> z_node [label="+ 1.0", constraint=false]; z_node -> a_node [label="f"]; {rank=same; x1; x2; w1; w2; b;} {rank=same; z_node;} {rank=same; a_node;} }此图展示了输入、权重和偏置如何输入到线性组合 ($z$) 的计算中,以及随后的激活 ($a$)。步骤 2:应用激活函数 (f)现在,我们对 $z = -1.0$ 应用激活函数。输出 $a$ 将取决于我们选择的函数。我们来使用讨论过的三种常用函数计算输出:Sigmoid、Tanh 和 ReLU。Sigmoid: Sigmoid 函数将输入压缩到 0 到 1 之间。 $$a = \sigma(z) = \frac{1}{1 + e^{-z}}$$ $$a = \frac{1}{1 + e^{-(-1.0)}} = \frac{1}{1 + e^{1.0}}$$ 使用 $e \approx 2.71828$: $$a \approx \frac{1}{1 + 2.71828} = \frac{1}{3.71828} \approx 0.2689$$ 因此,如果使用 Sigmoid,神经元的输出大约是 $0.2689$。Tanh (Hyperbolic Tangent): Tanh 函数将输入压缩到 -1 到 1 之间。 $$a = \tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}$$ $$a = \frac{e^{-1.0} - e^{1.0}}{e^{-1.0} + e^{1.0}}$$ 使用 $e^{1.0} \approx 2.71828$ 和 $e^{-1.0} \approx 0.36788$: $$a \approx \frac{0.36788 - 2.71828}{0.36788 + 2.71828} = \frac{-2.3504}{3.08616} \approx -0.7616$$ 如果使用 Tanh,神经元的输出大约是 $-0.7616$。ReLU (Rectified Linear Unit): 如果输入为正,ReLU 直接输出输入值,否则输出 0。 $$a = \text{ReLU}(z) = \max(0, z)$$ $$a = \max(0, -1.0)$$ $$a = 0$$ 如果使用 ReLU,神经元的输出是 $0$。结果概述对于给定的输入 $x = [2.0, 3.0]$、权重 $w = [0.5, -1.0]$ 和偏置 $b = 1.0$,我们首先得出 $z = -1.0$。最终神经元输出 $a$ 取决于所选的激活函数:使用 Sigmoid:$a \approx 0.2689$使用 Tanh:$a \approx -0.7616$使用 ReLU:$a = 0.0$这个练习说明了每个人工神经元执行的基本计算。在实际网络中,这个神经元的输出 $a$ 可以成为下一层神经元的输入 $x$。尝试改变输入值、权重或偏置,并使用不同的激活函数重新计算输出,以加深你的理解。这种简单的操作,在多层中重复多次,使得神经网络能够处理信息并学习复杂的规律。