损失函数对权重和偏置的梯度详解
理论:
梯度正负的核心意义
梯度的正负告诉参数:"该增大还是减小"
梯度的大小告诉参数:"该调整多少"
梯度 ∂L/∂w > 0 (正数)
→ 增大w会使损失L增大(变差)
→ 应该减小w
梯度 ∂L/∂w < 0 (负数)
→ 增大w会使损失L减小(变好)
→ 应该增大w
梯度为正要减,梯度为负要加
得到损失函数梯度的目的与作用:精确地、科学地调整权重和偏置,让神经网络越来越准!
1.链式求导法则
1.简单情况:两个函数复合
y = f(u) 且 u = g(x)
那么:y = f(g(x))
dy/dx = (dy/du) × (du/dx)
2.多层复合(像俄罗斯套娃)
y = f(u)
u = g(v)
v = h(x)
那么:y = f(g(h(x)))
dy/dx = (dy/du) × (du/dv) × (dv/dx)
"""
例1:
设:y = (3x + 2)²
分解:
外层函数:f(u) = u² (u = 3x + 2)
内层函数:g(x) = 3x + 2
求导:
1. 外层导数:df/du = 2u = 2(3x + 2)
2. 内层导数:du/dx = 3
链式法则:
dy/dx = (df/du) × (du/dx)
= 2(3x + 2) × 3
= 6(3x + 2)
= 18x + 12
例2:
设:y = sin(e^(x²))
分解为三层:
外层:f(u) = sin(u) (u = e^(x²))
中层:g(v) = e^v (v = x²)
内层:h(x) = x²
求导:
1. 外层:df/du = cos(u) = cos(e^(x²))
2. 中层:du/dv = d(e^v)/dv = e^v = e^(x²)
3. 内层:dv/dx = d(x²)/dx = 2x
链式法则:
dy/dx = cos(e^(x²)) × e^(x²) × 2x
= 2x × e^(x²) × cos(e^(x²))
"""
2.损失函数对权重和偏置的梯度详解
举一个例子,从正向到反向,包含损失函数对权重以及偏置的导数,以及它们的意义:
x₁ = 房屋面积(标准化后) = 0.8
x₂ = 卧室数量(标准化后) = 0.6
x₃ = 房龄(标准化后) = 0.3
真实房价(标准化后):y_true = 0.75
神经网络结构:
输入层(3个特征) → 隐藏层(2个神经元) → 输出层(1个神经元)
激活函数:Sigmoid
损失函数:MSE(均方误差)
# 第一层(输入→隐藏):3个输入 → 2个神经元
W¹ = [[0.2, 0.4, -0.1]T, # 第一个神经元的权重
[0.3, -0.2, 0.5]T] # 第二个神经元的权重
b¹ = [0.1, -0.2] T # 两个神经元的偏置
# 第二层(隐藏→输出):2个输入 → 1个神经元
W² = [0.4, -0.3]T # 输出神经元的权重
b² = 0.2 # 输出神经元的偏置
# 输入
x = [0.8, 0.6, 0.3] # 房屋特征
1.前向传播(一步步计算)
步骤1:第一层计算
z¹ = W¹ @ x + b¹
计算:
第一个神经元:z¹₁ = 0.2×0.8 + 0.4×0.6 + (-0.1)×0.3 + 0.1
= 0.16 + 0.24 - 0.03 + 0.1 = 0.47
第二个神经元:z¹₂ = 0.3×0.8 + (-0.2)×0.6 + 0.5×0.3 + (-0.2)
= 0.24 - 0.12 + 0.15 - 0.2 = 0.07
所以:z¹ = [0.47, 0.07]
激活函数(Sigmoid):
a¹₁ = σ(0.47) = 1/(1+e^{-0.47}) ≈ 0.615
a¹₂ = σ(0.07) = 1/(1+e^{-0.07}) ≈ 0.517
a¹ = [0.615, 0.517]
步骤2:第二层(输出层)计算
z² = W² @ a¹ + b²
= 0.4×0.615 + (-0.3)×0.517 + 0.2
= 0.246 - 0.155 + 0.2 = 0.291
a² = σ(0.291) = 1/(1+e^{-0.291}) ≈ 0.572
步骤3:计算损失
真实房价:y_true = 0.75
预测房价:y_pred = a² = 0.572
MSE损失:L = ½(y_pred - y_true)²
= ½(0.572 - 0.75)²
= ½(-0.178)²
= ½ × 0.0317 ≈ 0.01585
当前预测:房价被低估了!(y_true<y_pred)
2.反向传播
步骤1:输出层梯度
公式:δ² = (∂L/∂a²) × (∂a²/∂z²)
计算:
∂L/∂a² = a² - y_true = 0.572 - 0.75 = -0.178
∂a²/∂z² = a²(1-a²) = 0.572×(1-0.572) = 0.572×0.428 ≈ 0.245
δ² = (-0.178) × 0.245 ≈ -0.0436
输出神经元的误差信号是-0.0436
负号表示:增加z²会减少损失(因为预测偏低)
大小0.0436:调整的紧迫程度
z² = W²₁ × a¹₁ + W²₂ × a¹₂ + b²
∂L/∂W²₁ = (∂L/∂z²) × (∂z²/∂W²₁)=δ²× a¹₁
∂L/∂W²₁ = δ² × a¹₁ = (-0.0436) × 0.615 ≈ -0.0268
∂L/∂W²₂ = δ² × a¹₂ = (-0.0436) × 0.517 ≈ -0.0225
所以:∂L/∂W² = [-0.0268, -0.0225]
第一个隐藏神经元更重要

浙公网安备 33010602011771号