深度学习笔记【Week3】
一、神经网络的基本概念
什么是神经网络?
神经网络是一种从输入到输出的参数化模型,由多个线性变换和非线性激活函数堆叠而成。本周聚焦 浅层网络:即只有一个隐藏层的神经网络。
为什么要用神经网络?
- 人工设特征很难覆盖复杂模式,神经网络能自动学习高阶特征表示;
- 多层结构可表示复杂非线性关系;
- 与单层(如逻辑回归)相比,具备更强靠近真实函数的能力。51CTO 博客
二、网络结构与表示
网络层次
输入层 → 隐藏层 → 输出层
用符号表示:
- a [ 0 ] = X a^{[0]} = X a[0]=X是输入;
- a [ 1 ] a^{[1]} a[1] 是隐藏层激活;
- $a^{[2]} $是输出层激活。
参数定义
对每一层:
- 权重矩阵 W [ l ] W^{[l]} W[l]
- 偏置向量 b [ l ] b^{[l]} b[l]
尺寸:
- W [ l ] ∈ R n [ l ] × n [ l − 1 ] W^{[l]}\in\mathbb{R}^{n^{[l]}\times n^{[l-1]}} W[l]∈Rn[l]×n[l−1]
- b [ l ] ∈ R n [ l ] × 1 b^{[l]}\in\mathbb{R}^{n^{[l]}\times 1} b[l]∈Rn[l]×1
其中 n [ l ] n^{[l]} n[l] 是第 l 层的节点数。
三、前向传播
核心计算
对一个样本 x:
输入层 → 隐藏层
z [ 1 ] = W [ 1 ] x + b [ 1 ] z^{[1]} = W^{[1]}x + b^{[1]} z[1]=W[1]x+b[1]
a [ 1 ] = g [ 1 ] ( z [ 1 ] ) a^{[1]} = g^{[1]}(z^{[1]}) a[1]=g[1](z[1])
激活函数 g [ 1 ] g^{[1]} g[1]常选 ReLU 或 sigmoid/tanh。
隐藏层 → 输出层
z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] z^{[2]} = W^{[2]}a^{[1]} + b^{[2]} z[2]=W[2]a[1]+b[2]
a [ 2 ] = g [ 2 ] ( z [ 2 ] ) a^{[2]} = g^{[2]}(z^{[2]}) a[2]=g[2](z[2])
- 对二分类常用 sigmoid;
- 多分类用 softmax。
为什么要激活函数?
激活函数赋予神经网络非线性表达能力。若全部线性组合,网络退化成简单线性模型,无法学习复杂模式。51CTO 博客
四、激活函数详解
Sigmoid
σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1+e^{-z}} σ(z)=1+e−z1
- 优点:输出可解释为概率;
- 缺点:饱和时梯度趋近 0(梯度消失)。
导数公式:
σ
′
(
z
)
=
σ
(
z
)
(
1
−
σ
(
z
)
)
\sigma'(z)=\sigma(z)(1-\sigma(z))
σ′(z)=σ(z)(1−σ(z))
ReLU(Rectified Linear Unit)
R e L U ( z ) = max ( 0 , z ) \mathrm{ReLU}(z)=\max(0,z) ReLU(z)=max(0,z)
- 不饱和,训练更快;
- 可避免梯度消失。
五、损失函数
对于二分类:
L
(
y
^
,
y
)
=
−
[
y
log
(
y
^
)
+
(
1
−
y
)
log
(
1
−
y
^
)
]
\mathcal{L}(\hat y,y)=-[y\log(\hat y)+(1-y)\log(1-\hat y)]
L(y^,y)=−[ylog(y^)+(1−y)log(1−y^)]
总损失:
J
=
1
m
∑
i
=
1
m
L
(
a
[
2
]
(
i
)
,
y
(
i
)
)
J = \frac{1}{m}\sum_{i=1}^m \mathcal{L}(a^{[2](i)},y^{(i)})
J=m1i=1∑mL(a[2](i),y(i))
原理:使用对数损失等同于 最大似然估计 最优化目标,有良好的数学性质。
六、反向传播
反向传播是通过 链式求导(Chain Rule)逐层计算梯度的过程。
目标
求出每一层参数的导数:
∂
J
∂
W
[
l
]
,
∂
J
∂
b
[
l
]
\frac{\partial J}{\partial W^{[l]}},\quad \frac{\partial J}{\partial b^{[l]}}
∂W[l]∂J,∂b[l]∂J
推导(以两层网络为例)
输出层梯度
假设
g
[
2
]
g^{[2]}
g[2] 是 sigmoid:
δ
[
2
]
=
a
[
2
]
−
y
\delta^{[2]} = a^{[2]} - y
δ[2]=a[2]−y
这是损失对
z
[
2
]
z^{[2]}
z[2] 的梯度。
参数梯度:
∂
J
∂
W
[
2
]
=
1
m
δ
[
2
]
(
a
[
1
]
)
T
\frac{\partial J}{\partial W^{[2]}} = \frac{1}{m}\delta^{[2]} (a^{[1]})^T
∂W[2]∂J=m1δ[2](a[1])T
∂ J ∂ b [ 2 ] = 1 m ∑ δ [ 2 ] \frac{\partial J}{\partial b^{[2]}} = \frac{1}{m}\sum \delta^{[2]} ∂b[2]∂J=m1∑δ[2]
隐藏层梯度
δ [ 1 ] = ( W [ 2 ] ) T δ [ 2 ] ∗ g [ 1 ] ′ ( z [ 1 ] ) \delta^{[1]} = (W^{[2]})^T \delta^{[2]} * g^{[1]'}(z^{[1]}) δ[1]=(W[2])Tδ[2]∗g[1]′(z[1])
其中 g [ 1 ] ′ g^{[1]'} g[1]′ 是隐藏层激活导数。
参数梯度:
∂
J
∂
W
[
1
]
=
1
m
δ
[
1
]
x
T
\frac{\partial J}{\partial W^{[1]}} = \frac{1}{m}\delta^{[1]}x^T
∂W[1]∂J=m1δ[1]xT
∂ J ∂ b [ 1 ] = 1 m ∑ δ [ 1 ] \frac{\partial J}{\partial b^{[1]}} = \frac{1}{m}\sum \delta^{[1]} ∂b[1]∂J=m1∑δ[1]
七、梯度下降更新规则
所有参数按照负梯度方向更新:
W
[
l
]
:
=
W
[
l
]
−
α
∂
J
∂
W
[
l
]
W^{[l]} := W^{[l]} - \alpha\frac{\partial J}{\partial W^{[l]}}
W[l]:=W[l]−α∂W[l]∂J
b [ l ] : = b [ l ] − α ∂ J ∂ b [ l ] b^{[l]} := b^{[l]} - \alpha\frac{\partial J}{\partial b^{[l]}} b[l]:=b[l]−α∂b[l]∂J
α 是学习率,控制更新步长。
八、为什么反向传播有效?
原理解释
- 前向传播计算输出和中间激活;
- 反向传播通过链式法则计算每层局部梯度;
- 权重更新确保损失函数沿负梯度下降,从而逐步逼近最优参数。
这种分层传播保证效率和稳定性,是训练深度网络的核心算法。
九、随机初始化的必要性
初始化相同会导致:
- 所有神经元学习的特征一样(对称性破缺失败);
- 网络退化为线性模型;
- 无法利用隐藏层表达能力。
解决:用 小随机值 初始化权重(例如高斯分布),打破对称性,有助模型学习不同特征。
更多推荐
所有评论(0)