一、神经网络的基本概念

什么是神经网络?

神经网络是一种从输入到输出的参数化模型,由多个线性变换和非线性激活函数堆叠而成。本周聚焦 浅层网络:即只有一个隐藏层的神经网络。

为什么要用神经网络?

  • 人工设特征很难覆盖复杂模式,神经网络能自动学习高阶特征表示
  • 多层结构可表示复杂非线性关系;
  • 与单层(如逻辑回归)相比,具备更强靠近真实函数的能力。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[l1]
  • 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]常选 ReLUsigmoid/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+ez1

  • 优点:输出可解释为概率;
  • 缺点:饱和时梯度趋近 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^)+(1y)log(1y^)]
总损失:
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=1mL(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

α 是学习率,控制更新步长。

八、为什么反向传播有效?

原理解释

  • 前向传播计算输出和中间激活;
  • 反向传播通过链式法则计算每层局部梯度;
  • 权重更新确保损失函数沿负梯度下降,从而逐步逼近最优参数。

这种分层传播保证效率和稳定性,是训练深度网络的核心算法。

九、随机初始化的必要性

初始化相同会导致:

  • 所有神经元学习的特征一样(对称性破缺失败);
  • 网络退化为线性模型;
  • 无法利用隐藏层表达能力。

解决:用 小随机值 初始化权重(例如高斯分布),打破对称性,有助模型学习不同特征。

更多推荐