初始化网络参数:
1. 输入层大小:n
2. 隐藏层大小:m
3. 输出层大小:k
4. 学习率:α
5. 迭代次数:epochs
初始化权重和偏置:
1. 隐藏层权重 W1 ∈ R^(m × (n + 1)) # 包含偏置项
2. 输出层权重 W2 ∈ R^(k × (m + 1)) # 包含偏置项
for each epoch in 1 to epochs do:
for each training sample (x, y) in training_data do:
# 前馈过程
# 1. 隐藏层计算
z1 = W1 * x # 加权和
a1 = σ(z1) # 激活函数,输出隐藏层
# 2. 输出层计算
z2 = W2 * a1 # 加权和
a2 = σ(z2) # 激活函数,输出层
# 计算损失(使用均方误差或交叉熵等)
loss = 计算损失(a2, y)
# 反向传播过程
# 1. 输出层误差
delta2 = (a2 - y) * σ'(z2) # σ'是激活函数的导数
# 2. 隐藏层误差
delta1 = (W2^T * delta2) * σ'(z1)
# 3. 更新权重和偏置
W2 = W2 - α * (delta2 * a1^T)
W1 = W1 - α * (delta1 * x^T)
# 可选:更新偏置
# b2 = b2 - α * delta2
# b1 = b1 - α * delta1
# 可选:打印损失以监控训练进度
print("Epoch:", epoch, "Loss:", loss)
返回训练好的权重 W1 和 W2
浙公网安备 33010602011771号