返回

神经网络中的传播过程

见解分享

深度学习模型,如神经网络,不断兴起,其原因在于它们能够解决多种复杂任务,从语音识别到机器翻译等。神经网络模型中的关键步骤是向前传播和向后传播。

神经网络的传播过程主要分为两个步骤:

向前传播

向前传播是将输入数据逐层传递给神经网络各个层,直到输出层,并计算出输出值的过程。在这个过程中,每一层的神经元都会将上一层神经元的输出作为自己的输入,并通过激活函数进行计算,得到自己的输出。

向后传播

向后传播是根据输出层和预期输出之间的误差,计算出每一层神经元的梯度,并根据梯度更新权重和偏置值的过程。在这个过程中,每一层神经元的梯度是由上一层神经元的梯度和当前层的激活函数的导数计算而来的。

通过不断地向前传播和向后传播,神经网络能够逐渐调整自己的权重和偏置值,使输出值与预期输出之间的误差越来越小。

下面以一个具体例子来说明神经网络中的传播过程。假设我们有一个三层神经网络,第一层有3个神经元,第二层有5个神经元,输出层有2个神经元。

神经网络的输入为:

x1 = 0.5
x2 = 0.7
x3 = 0.9

第一层神经元的激活函数为sigmoid函数:

f(x) = 1 / (1 + e^(-x))

第一层神经元的输出为:

y1 = f(x1) = 0.6224593312
y2 = f(x2) = 0.7310585786
y3 = f(x3) = 0.8807970779

第二层神经元的激活函数也是sigmoid函数:

f(x) = 1 / (1 + e^(-x))

第二层神经元的输出为:

y4 = f(y1 + y2 + y3) = 0.9338878441
y5 = f(y1 + y2 + y3) = 0.9684440695
y6 = f(y1 + y2 + y3) = 0.9880923212
y7 = f(y1 + y2 + y3) = 0.9975273821
y8 = f(y1 + y2 + y3) = 0.9996646454

输出层神经元的激活函数为softmax函数:

f(x) = e^x / (e^x1 + e^x2 + ... + e^xn)

输出层神经元的输出为:

y9 = f(y4 + y5 + y6 + y7 + y8) = 0.9940808319
y10 = f(y4 + y5 + y6 + y7 + y8) = 0.0059191681

预期输出为:

y9 = 1
y10 = 0

误差为:

E = (y9 - 1)^2 + (y10 - 0)^2 = 0.000019959

通过反向传播,我们可以计算出每一层神经元的梯度。

第一层神经元的梯度为:

∇y1 = (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y4 * (1 - y4)
∇y2 = (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y5 * (1 - y5)
∇y3 = (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y6 * (1 - y6)

第二层神经元的梯度为:

∇y4 = (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y1 * (1 - y1) + (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y2 * (1 - y2) + (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y3 * (1 - y3)
∇y5 = (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y1 * (1 - y1) + (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y2 * (1 - y2) + (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y3 * (1 - y3)
∇y6 = (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y1 * (1 - y1) + (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y2 * (1 - y2) + (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y3 * (1 - y3)
∇y7 = (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y1 * (1 - y1) + (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y2 * (1 - y2) + (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y3 * (1 - y3)
∇y8 = (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y1 * (1 - y1) + (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y2 * (1 - y2) + (y9 - 1) * f'(y4 + y5 + y6 + y7 + y8) * y3 * (1 - y3)

根据梯度,我们可以更新权重和偏置值。

权重更新公式为:

W = W - α * ∇W

偏置更新公式为:

b = b - α * ∇b

其中,α为学习率。

通过不断地向前传播和向后传播,神经网络能够逐渐调整自己的权重和偏置值,使输出值与预期输出之间的误差越来越小。