[机器学习-从入门到入土] 神经网络
[机器学习-从入门到入土] 神经网络
[机器学习-从入门到入土] 神经网络
个人导航
知乎:https://www.zhihu.com/people/byzh_rc
CSDN:https://blog.csdn.net/qq_54636039
注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码
参考文章:各方资料
文章目录
- [机器学习-从入门到入土] 神经网络
- 个人导航
- 符号说明
-
-
-
- 权重矩阵 Θ ( l ) \Theta^{(l)} Θ(l)
- 误差项 δ ( l ) \delta^{(l)} δ(l)
- 单样本梯度矩阵 δ k ( l + 1 ) ( a k ( l ) ) T \delta_{k}^{(l+1)} \left(a_{k}^{(l)}\right)^{T} δk(l+1)(ak(l))T
- 批量梯度累加矩阵 Δ ( l ) \Delta^{(l)} Δ(l)
- 总梯度(代价函数梯度) ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial \Theta_{ij}^{(l)}} J(\Theta) ∂Θij(l)∂J(Θ)
-
-
- 激活函数(Activation Function)
- 损失函数 E E E(单样本)
- 代价函数 J J J(全样本)
- 误差项 δ \delta δ(核心)
- 输出层误差项 δ ( L ) \delta^{(L)} δ(L)
- 隐藏层误差项 δ ( L − 1 ) \delta^{(L-1)} δ(L−1)
- 批量梯度累加 Δ ( l ) \Delta^{(l)} Δ(l)
- 总梯度(用于更新)
- 前向传播(Forward Propagation)
- 反向传播(Backpropagation)
- 梯度下降更新
- 总结(反向传播主线)
- 拓展 - 为什么要神经网络
- 拓展 - 数值差分
- 例题1
- 例题2
符号说明
m m m:样本数
k k k:神经元编号 / 输出维度索引
权重矩阵 Θ ( l ) \Theta^{(l)} Θ(l)
Θ ( l ) \Theta^{(l)} Θ(l) 表示 第 l l l 层 → 第 l + 1 l+1 l+1 层的权重矩阵
- 包含该层的 权重 + bias
- 行:第 l + 1 l+1 l+1 层神经元
- 列: 1 + 1+ 1+ 第 l l l 层神经元数(首列为 bias)
维度:(下一层神经元数, 1+当前层神经元数)
Θ ( l ) ∈ R ( next , 1 + self ) \Theta^{(l)} \in \mathbb{R}^{(\text{next},\,1+\text{self})} Θ(l)∈R(next,1+self)
误差项 δ ( l ) \delta^{(l)} δ(l)
δ ( l ) \delta^{(l)} δ(l) 表示 第 l l l 层神经元的误差项
- 本质: ∂ E ∂ z ( l ) \displaystyle \frac{\partial E}{\partial z^{(l)}} ∂z(l)∂E
- 用于将误差从输出层反向传播
特殊记号:
- δ ( L ) \delta^{(L)} δ(L):输出层误差( L L L 为网络总层数)
单样本梯度矩阵 δ k ( l + 1 ) ( a k ( l ) ) T \delta_{k}^{(l+1)} \left(a_{k}^{(l)}\right)^{T} δk(l+1)(ak(l))T
δ k ( l + 1 ) ( a k ( l ) ) T \delta_{k}^{(l+1)} \left(a_{k}^{(l)}\right)^{T} δk(l+1)(ak(l))T
- 表示 单个样本 对 Θ ( l ) \Theta^{(l)} Θ(l) 的梯度
- 外积形式
- 维度与 Θ ( l ) \Theta^{(l)} Θ(l) 相同
批量梯度累加矩阵 Δ ( l ) \Delta^{(l)} Δ(l)
Δ ( l ) \Delta^{(l)} Δ(l) 表示 第 l l l 层在一个 batch( m m m 个样本)上的梯度累加
Δ ( l ) ∈ R ( next , 1 + self ) \Delta^{(l)} \in \mathbb{R}^{(\text{next},\,1+\text{self})} Δ(l)∈R(next,1+self)
总梯度(代价函数梯度) ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial \Theta_{ij}^{(l)}} J(\Theta) ∂Θij(l)∂J(Θ)
∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial \Theta_{ij}^{(l)}} J(\Theta) ∂Θij(l)∂J(Θ)
- 维度与 Θ ( l ) \Theta^{(l)} Θ(l) 相同
- 是 Δ ( l ) \Delta^{(l)} Δ(l) 的平均
| 符号 | 形状 | 解释 |
|---|---|---|
| a ( l ) a^{(l)} a(l) | ( self , 1 ) (\text{self},1) (self,1) | 第 l l l 层神经元的激活后的输出(不含 bias) |
| a ~ ( l ) \tilde a^{(l)} a~(l) | ( 1 + self , 1 ) (1+\text{self},1) (1+self,1) | 第 l l l 层激活向量补 1 后的输入(首元素为 bias) |
| z ( l + 1 ) z^{(l+1)} z(l+1) | ( next , 1 ) (\text{next},1) (next,1) | 第 l + 1 l+1 l+1 层的加权后的输入(线性部分) |
| Θ ( l ) \Theta^{(l)} Θ(l) | ( next , 1 + self ) (\text{next},1+\text{self}) (next,1+self) | 第 l l l 层 → 第 l + 1 l+1 l+1 层的权重矩阵(含 bias) |
| δ ( l ) \delta^{(l)} δ(l) | ( self , 1 ) (\text{self},1) (self,1) | 第 l l l 层神经元的误差项, ∂ E ∂ z ( l ) \displaystyle \frac{\partial E}{\partial z^{(l)}} ∂z(l)∂E |
| δ ( l + 1 ) ( a ~ ( l ) ) T \delta^{(l+1)}(\tilde a^{(l)})^T δ(l+1)(a~(l))T | ( next , 1 + self ) (\text{next},1+\text{self}) (next,1+self) | 单样本对 Θ ( l ) \Theta^{(l)} Θ(l) 的梯度(外积) |
| Δ ( l ) \Delta^{(l)} Δ(l) | ( next , 1 + self ) (\text{next},1+\text{self}) (next,1+self) | batch 内 m m m 个样本的梯度累加矩阵 |
| ∂ ∂ Θ ( l ) J ( Θ ) \dfrac{\partial}{\partial \Theta^{(l)}}J(\Theta) ∂Θ(l)∂J(Θ) | ( next , 1 + self ) (\text{next},1+\text{self}) (next,1+self) | 代价函数对权重的总梯度( 1 m Δ ( l ) \frac{1}{m}\Delta^{(l)} m1Δ(l)) |

激活函数(Activation Function)
1. Sigmoid
定义:
g ( z ) = 1 1 + exp ( − z ) \mathbf{g(z)=\frac{1}{1+\exp(-z)}} g(z)=1+exp(−z)1
梯度:
g ′ ( z ) = g ( z ) ( 1 − g ( z ) ) \mathbf{g'(z)=g(z)(1-g(z))} g′(z)=g(z)(1−g(z))
若 a = g ( z ) a=g(z) a=g(z):
g ′ ( z ) = a ( 1 − a ) g'(z)=a(1-a) g′(z)=a(1−a)
2. Tanh
定义:
g ( z ) = tanh ( z ) = e z − e − z e z + e − z \mathbf{g(z)=\tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}}} g(z)=tanh(z)=ez+e−zez−e−z
梯度:
g ′ ( z ) = 1 − tanh 2 ( z ) \mathbf{g'(z)=1-\tanh^2(z)} g′(z)=1−tanh2(z)
若 a = g ( z ) a=g(z) a=g(z):
g ′ ( z ) = 1 − a 2 g'(z)=1-a^2 g′(z)=1−a2
3. ReLU
定义:
ReLU ( z ) = max ( 0 , z ) \text{ReLU}(z)=\max(0,z) ReLU(z)=max(0,z)
梯度:
ReLU ′ ( z ) = { 1 , z > 0 0 , z ≤ 0 \text{ReLU}'(z)= \begin{cases} 1,&z>0\\ 0,&z\le0 \end{cases} ReLU′(z)={1,0,z>0z≤0
损失函数 E E E(单样本)
单个样本的误差,用于衡量模型输出与目标之间的差异
y y y: 预测值
t t t: 真实标签
1.均方误差(MSE)
E = 1 2 ( y − t ) 2 E=\frac{1}{2}(y-t)^2 E=21(y−t)2
2.交叉熵(Binary Cross-Entropy)
E = − [ t log y + ( 1 − t ) log ( 1 − y ) ] E=-[t\log y+(1-t)\log(1-y)] E=−[tlogy+(1−t)log(1−y)]
代价函数 J J J(全样本)
整个训练集的平均损失:
J ( Θ ) = 1 m ∑ i = 1 m E ( i ) J(\Theta)=\frac{1}{m}\sum_{i=1}^{m}E^{(i)} J(Θ)=m1i=1∑mE(i)
误差项 δ \delta δ(核心)
误差项是 损失函数对加权输入 z z z 的偏导数:
δ ( l ) = ∂ E ∂ z ( l ) \delta^{(l)}=\frac{\partial E}{\partial z^{(l)}} δ(l)=∂z(l)∂E
- 输出层误差项 δ ( L ) \delta^{(L)} δ(L)
- 隐藏层误差项 δ ( L − 1 ) \delta^{(L-1)} δ(L−1)
输出层误差项 δ ( L ) \delta^{(L)} δ(L)
假设:
a ( L ) = g ( z ( L ) ) a^{(L)}=g(z^{(L)}) a(L)=g(z(L))
定义:
δ ( L ) = ∂ E ∂ a ( L ) ⊙ g ′ ( z ( L ) ) \delta^{(L)}=\frac{\partial E}{\partial a^{(L)}} \odot g'(z^{(L)}) δ(L)=∂a(L)∂E⊙g′(z(L))
1. Sigmoid + MSE
合法但过时, 早期大量使用
-> 梯度结构是根本问题
E = 1 2 ∑ k ( a k − t k ) 2 E = \frac{1}{2} \sum_k \left(a_k - t_k\right)^2 E=21k∑(ak−tk)2
δ k = ( a k − t k ) a k ( 1 − a k ) \delta_k = (a_k - t_k)\, a_k(1 - a_k) δk=(ak−tk)ak(1−ak)
δ = ( a − t ) ⊙ ( a ⊙ ( 1 − a ) ) \delta = (a - t) \odot \bigl(a \odot (1 - a)\bigr) δ=(a−t)⊙(a⊙(1−a))
2. Sigmoid + Binary Cross-Entropy
神经网络常用
E = − [ t log a + ( 1 − t ) log ( 1 − a ) ] E = -\bigl[t \log a + (1 - t)\log(1 - a)\bigr] E=−[tloga+(1−t)log(1−a)]
δ ( L ) = a ( L ) − t \delta^{(L)} = a^{(L)} - t δ(L)=a(L)−t
3. Sigmoid + Categorical Cross-Entropy
没人这么做
概率假设层面:
-
Sigmoid 的假设: 多标签独立事件
- 每个 a k a_k ak 是 独立 Bernoulli 概率
- 不要求 ∑ k a k = 1 \sum_k a_k = 1 ∑kak=1
-
Categorical Cross-Entropy 的假设: 单标签互斥事件
- t t t 是 one-hot, 事件是 互斥且完备
- 必须要求 ∑ k a k = 1 \sum_k a_k = 1 ∑kak=1
4. Softmax + MSE
E = 1 2 ∑ k ( a k − t k ) 2 E = \frac{1}{2} \sum_k (a_k - t_k)^2 E=21k∑(ak−tk)2
δ 无法化简,包含 Softmax 的 Jacobian \delta \ \text{无法化简,包含 Softmax 的 Jacobian} δ 无法化简,包含 Softmax 的 Jacobian
δ \delta δ无法化简, 极其复杂 -> 没人用
5. Softmax + Binary Cross-Entropy
E = − [ t log a + ( 1 − t ) log ( 1 − a ) ] E = -\bigl[t \log a + (1 - t)\log(1 - a)\bigr] E=−[tloga+(1−t)log(1−a)]
δ ( L ) = a ( L ) − t \delta^{(L)} = a^{(L)} - t δ(L)=a(L)−t
6. Softmax + Categorical Cross-Entropy
这正是现在神经网络最常用的:
- 直接拿linear的输出结果logits传给CrossEntropy的criterion
- 而该criterion内封装了一个softmax
E = − ∑ k t k log a k E = -\sum_k t_k \log a_k E=−k∑tklogak
δ ( L ) = a ( L ) − t \delta^{(L)} = a^{(L)} - t δ(L)=a(L)−t
隐藏层误差项 δ ( L − 1 ) \delta^{(L-1)} δ(L−1)
递推公式(反向传播核心):
δ ( L − 1 ) = ∂ E ∂ a ( L − 1 ) ⊙ g ′ ( z ( L − 1 ) ) = ( ∂ E ∂ z ( L ) ⋅ ∂ z ( L ) ∂ a ( L − 1 ) ) ⊙ g ′ ( z ( L − 1 ) ) = δ ( L ) Θ ( L − 1 ) ⊙ g ′ ( z ( L − 1 ) ) \begin{align} \delta^{(L-1)} &= \frac{\partial E}{\partial a^{(L-1)}}⊙g'(z^{(L-1)}) \\ &=(\frac{\partial E}{\partial z^{(L)}} \cdot \frac{\partial z^{(L)}}{\partial a^{(L-1)}})⊙g'(z^{(L-1)}) \\ &= \delta^{(L)} \Theta^{(L-1)} ⊙ g^{\prime} (z^{(L-1)}) \\ \end{align} δ(L−1)=∂a(L−1)∂E⊙g′(z(L−1))=(∂z(L)∂E⋅∂a(L−1)∂z(L))⊙g′(z(L−1))=δ(L)Θ(L−1)⊙g′(z(L−1))
说明:
- 先通过权重矩阵传播误差
- 再乘以激活函数梯度
批量梯度累加 Δ ( l ) \Delta^{(l)} Δ(l)
单样本梯度:
∂ E ∂ Θ j k ( l ) = ∂ E ∂ z j ( l + 1 ) ⋅ ∂ z j ( l + 1 ) ∂ Θ j k ( l ) = δ j ( l + 1 ) a k ( l ) → δ ( l + 1 ) ( a ( l ) ) T \frac{\partial E}{\partial \Theta_{jk}^{(l)}} = \frac{\partial E}{\partial z_j^{(l+1)}} \cdot \frac{\partial z_j^{(l+1)}}{\partial \Theta_{jk}^{(l)}} = \delta_j^{(l+1)} a_k^{(l)} \\ \rightarrow \\ \mathbf{\delta^{(l+1)}(a^{(l)})^T} ∂Θjk(l)∂E=∂zj(l+1)∂E⋅∂Θjk(l)∂zj(l+1)=δj(l+1)ak(l)→δ(l+1)(a(l))T
批量梯度累加:
Δ ( l ) = ∑ i = 1 m δ i ( l + 1 ) ( a i ( l ) ) T \Delta^{(l)}=\sum_{i=1}^m \delta_i^{(l+1)}(a_i^{(l)})^T Δ(l)=i=1∑mδi(l+1)(ai(l))T
总梯度(用于更新)
是批量梯度累加 Δ ( l ) \Delta^{(l)} Δ(l)的平均
∂ ∂ Θ ( l ) J ( Θ ) = 1 m Δ ( l ) \frac{\partial}{\partial \Theta^{(l)}}J(\Theta)= \frac{1}{m}\Delta^{(l)} ∂Θ(l)∂J(Θ)=m1Δ(l)
前向传播(Forward Propagation)
每一层输入补 1(bias):
a ~ ( l ) = [ 1 a ( l ) ] \tilde a^{(l)}= \begin{bmatrix} 1\\ a^{(l)} \end{bmatrix} a~(l)=[1a(l)]
线性变换:
z ( l + 1 ) = Θ ( l ) a ~ ( l ) z^{(l+1)}=\Theta^{(l)}\tilde a^{(l)} z(l+1)=Θ(l)a~(l)
非线性激活:
a ( l + 1 ) = g ( z ( l + 1 ) ) a^{(l+1)}=g(z^{(l+1)}) a(l+1)=g(z(l+1))
反向传播(Backpropagation)
假设三层全连接网络,Sigmoid + BCE
输出层:
δ ( 3 ) = a ( 3 ) − y \delta^{(3)}=a^{(3)}-y δ(3)=a(3)−y
隐藏层:
δ ( 2 ) = ( Θ ( 2 ) ) T δ ( 3 ) ⊙ g ′ ( z ( 2 ) ) \delta^{(2)}=(\Theta^{(2)})^T\delta^{(3)}\odot g'(z^{(2)}) δ(2)=(Θ(2))Tδ(3)⊙g′(z(2))
梯度下降更新
学习率 α \alpha α:
Θ ( l ) ← Θ ( l ) − α 1 m Δ ( l ) \Theta^{(l)} \leftarrow \Theta^{(l)}-\alpha\frac{1}{m}\Delta^{(l)} Θ(l)←Θ(l)−αm1Δ(l)
总结(反向传播主线)
前向传播:
a → z → a a \rightarrow z \rightarrow a a→z→a
反向传播:
δ ( L ) → δ ( L − 1 ) → ⋯ \delta^{(L)} \rightarrow \delta^{(L-1)} \rightarrow \cdots δ(L)→δ(L−1)→⋯
梯度构造:
δ ( l + 1 ) ( a ( l ) ) T \delta^{(l+1)}(a^{(l)})^T δ(l+1)(a(l))T
拓展 - 为什么要神经网络
如果用线性回归, 那么分界面就是一条直线
如果用广义线性, 那么多项式的项数会特别多, 导致数据集的数量需求也特别多
-> 线性模型的维度灾难(The curse of dimensionality)
当数据特征维度越多, 线性模型的代价越高 -> 发展其他模型 -> 神经网络
用神经网络解决逻辑异或XOR
神经网络实现交集∩:
- 二式+三式: w 1 + w 2 + 2 w 0 < = − 20 w_1+w_2+2w_0<=-20 w1+w2+2w0<=−20
结合一式, 得到: w 0 w_0 w0的临界是 − 30 -30 −30 - 二式: w 1 = 20 w_1=20 w1=20
- 三式: w 2 = 20 w_2=20 w2=20

神经网络实现并集∪:
- 同理: w 0 = − 10 , w 1 = 20 , w 2 = 20 w_0=-10, w_1=20, w_2=20 w0=−10,w1=20,w2=20

同理得到非的并集:
- 同理: w 0 = 10 , w 1 = − 20 , w 2 = − 20 w_0=10, w_1=-20, w_2=-20 w0=10,w1=−20,w2=−20

综合上述结构:

拓展 - 数值差分
参数数量为 W W W
1.有限差分 finite differences
-
定义:数值差分的一种,通过 “给参数 w j i w_{ji} wji 加一个小扰动 ε ε ε”,用函数值的变化量近似梯度,公式为:
∂ E n ∂ w j i ≈ E n ( w j i + ε ) − E n ( w j i ) ε = E n ( w j i + ε ) − E n ( w j i ) ε + O ( ε ) \begin{align} \frac{\partial E_n}{\partial w_{ji}} &\approx \frac{E_n(w_{ji}+\varepsilon) - E_n(w_{ji})}{\varepsilon} \\ &= \frac{E_n(w_{ji}+\varepsilon) - E_n(w_{ji})}{\varepsilon}+O(ε) \end{align} ∂wji∂En≈εEn(wji+ε)−En(wji)=εEn(wji+ε)−En(wji)+O(ε) -
误差阶:近似误差是 O ( ε ) O(ε) O(ε)(即误差和 ε ε ε 同量级)
-
计算复杂度:需要对每个参数 w 单独计算一次函数值,复杂度是 O ( W 2 ) O(W^2) O(W2)
要给每个参数单独加扰动,所以需要额外算 W 次损失
加上原始参数的 1 次,共 W+1 次计算损失而每次计算损失的复杂度为 O ( W ) O(W) O(W)
-> 总计算复杂度: O ( W 2 ) O(W^2) O(W2)
2.中心差分 central differences
-
定义:数值差分的一种,通过 “给参数 w j i w_{ji} wji 同时加、减小扰动 ε ε ε”,用函数值的变化量近似梯度,公式为:
∂ E n ∂ w j i ≈ E n ( w j i + ε ) − E n ( w j i − ε ) 2 ε = E n ( w j i + ε ) − E n ( w j i − ε ) 2 ε + O ( ε 2 ) \begin{align} \frac{\partial E_n}{\partial w_{ji}} &\approx \frac{E_n(w_{ji}+\varepsilon) - E_n(w_{ji}-\varepsilon)}{2\varepsilon} \\ &= \frac{E_n(w_{ji}+\varepsilon) - E_n(w_{ji}-\varepsilon)}{2\varepsilon}+O(ε^2) \end{align} ∂wji∂En≈2εEn(wji+ε)−En(wji−ε)=2εEn(wji+ε)−En(wji−ε)+O(ε2) -
误差阶:近似误差是 O ( ε 2 ) O(ε^2) O(ε2)(误差是 ε ε ε 的平方量级,比有限差分更精确)
-
计算复杂度:同样需要对每个参数单独计算两次函数值,复杂度还是 O ( W 2 ) O(W^2) O(W2)
要给每个参数单独分别加两次扰动,共 2n 次损失计算损失
而每次计算损失的复杂度为 O ( W ) O(W) O(W)
-> 总计算复杂度: O ( W 2 ) O(W^2) O(W2)
BP算法
反向传播BP算法是基于“链式法则”的解析梯度计算方法,核心思路是“正向传播计算输出与误差,反向传播回传误差并求解各层参数梯度”
- 正向传播
- 反向传播
- 梯度求解
优势:无需对参数施加扰动,直接通过数学推导得到梯度解析表达式,计算效率极高,复杂度仅为 O ( W ) O(W) O(W)
例题1


例题2
试给出使用数值差分方法计算神经网络损失函数的梯度的公式,并分析其计算复杂度

更多推荐
所有评论(0)