目录
前言:反向传播——深度学习的"学习引擎"
想象教一个孩子识别动物。当他认错时,你会指出错误并调整教学方法。反向传播算法正是神经网络的这种"学习机制",它通过误差的反向传递,指导网络调整内部参数。本文将带您深入理解这一改变AI发展进程的核心算法。
一、反向传播的数学基石
1.1 链式法则:反向传播的核心
反向传播本质是微积分中链式法则的巧妙应用:
∂L/∂w = ∂L/∂ŷ · ∂ŷ/∂z · ∂z/∂w
其中:
-
L:损失函数
-
ŷ:网络输出
-
z:神经元加权输入
-
w:权重参数
1.2 计算图视角下的反向传播
前向传播:
输入X → 隐层H → 输出ŷ → 计算损失L
反向传播:
∂L/∂ŷ → ∂L/∂H → ∂L/∂W
二、从零实现反向传播
2.1 Python实现双层神经网络
import numpy as np
# Sigmoid激活函数及其导数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x):
return x * (1 - x)
# 网络参数
input_size = 3
hidden_size = 4
output_size = 1
learning_rate = 0.1
# 初始化权重
W1 = np.random.randn(input_size, hidden_size)
W2 = np.random.randn(hidden_size, output_size)
# 样本数据
X = np.array([[0,0,1], [1,1,1], [1,0,1], [0,1,1]])
y = np.array([[0], [1], [1], [0]])
# 训练循环
for epoch in range(10000):
# 前向传播
hidden_input = np.dot(X, W1)
hidden_output = sigmoid(hidden_input)
output_input = np.dot(hidden_output, W2)
pred = sigmoid(output_input)
# 计算损失
loss = np.mean((pred - y)**2)
# 反向传播