C语言BP神经网络框架-神经网络正反向传播
符号对照表
数学符号对照表
符号 | 含义 |
---|---|
x x x | 标量 |
x \bm{x} x | 向量 |
X \bm{X} X | 矩阵 |
X X X | 张量 |
( ⋅ ) T (\cdot)^T (⋅)T | 向量或者矩阵的转置 |
⊙ \odot ⊙ | 按元素相乘 |
∥ ⋅ ∥ p \|\cdot\|_p ∥⋅∥p | L p L_p Lp范数 |
∥ ⋅ ∥ \|\cdot\| ∥⋅∥ | L 2 L_2 L2范数 |
∑ \sum ∑ | 连加 |
∏ \prod ∏ | 连乘 |
f ( ⋅ ) f(\cdot) f(⋅) | 函数 |
log ( ⋅ ) \log(\cdot) log(⋅) | 自然对数函数 |
exp ( ⋅ ) \exp(\cdot) exp(⋅) | 指数函数 |
d y d x \frac{dy}{dx} dxdy | y y y关于 x x x的导数 |
∂ y ∂ x \frac{\partial y}{\partial x} ∂x∂y | y y y关于 x x x的偏导 |
∇ x y \nabla_{\bm{x}} y ∇xy | y y y关于向量 x \bm{x} x的梯度 |
⋅ ∼ N ( μ , σ 2 ) \cdot \sim N(\mu, \sigma^2) ⋅∼N(μ,σ2) | 随机变量 ⋅ \cdot ⋅服从高斯分布 |
⋅ ∼ U ( − α , α ) \cdot \sim U(-\alpha,~ \alpha) ⋅∼U(−α, α) | 随机变量 ⋅ \cdot ⋅服从均匀分布 |
E ( ⋅ ) E(\cdot) E(⋅) | 随机变量 ⋅ \cdot ⋅的数学期望 |
V a r ( ⋅ ) Var(\cdot) Var(⋅) | 随机变量 ⋅ \cdot ⋅的方差 |
神经网络参数符号对照表
符号 | 含义 | 备注 |
---|---|---|
N t N_t Nt | 训练样本维度 | N t > 0 N_t>0 Nt>0 |
N T N_T NT | 训练样本数量 | N T > 0 N_T>0 NT>0 |
N ( i ) N^{(i)} N(i) | 第i层神经元个数 | i ∈ { 0 , 1 , 2 , ⋯ , H + 1 } i = H + 1 i\in \{0,1,2,\cdots,H+1\}~~~~i=H+1 i∈{0,1,2,⋯,H+1} i=H+1表示输出层~~不带Bias |
H H H | 隐藏层数 | 包含H个隐藏层 |
K | 分类类别数 | K > 1 K>1 K>1 |
S l S_l Sl | 损失函数 | S l ∈ { Mean Square Error,Cross Entropy Loss } S_l\in \{\text{Mean~~Square ~~Error,Cross~~Entropy~~Loss}\} Sl∈{Mean Square Error,Cross Entropy Loss} |
符号 | 含义 | 备注 |
---|---|---|
x \bm{x} x | 输入行向量 | 一个训练样本特征为一个行向量 |
y \bm{y} y | 标签向量 | 一个训练样本标签为一个行向量 (ONEHOT) |
s \bm{s} s | 求和值行向量 | 每层对应一个行向量 |
a \bm{a} a | **值行向量 | 每层对应一个行向量 |
σ \sigma σ | **函数 | σ ∈ { s i g m o i d , t a n h , r e l u , l e a k y r e l u , s o f t m a x } \sigma \in {\text\{sigmoid,tanh,relu,leaky relu,softmax}\} σ∈{sigmoid,tanh,relu,leakyrelu,softmax} |
⋅ j ( i ) \bm{\cdot}^{(i)}_j ⋅j(i) | i代表网络层次~~~j代表分量 | 0 ≤ i ≤ H + 1 0\leq i\leq H+1 0≤i≤H+1 |
符号 | 含义 | 备注 |
---|---|---|
X \bm{X} X | 输入训练样本 | 维度 N T × N t N_T\times N_t NT×Nt~~相当**值矩阵 A ( 0 ) A^{(0)} A(0) |
X + \bm{X}^+ X+ | 输入训练样本加偏置列 | 维度 N T × ( N t + 1 ) N_T\times (N_t+1) NT×(Nt+1)~~相当**值矩阵 ( A ( 0 ) ) + \big(A^{(0)}\big)^+ (A(0))+ |
S ( i ) \bm{S}^{(i)} S(i) | 第 i 层求和值矩阵 | 维度 N T × N ( i ) N_T\times N^{(i)} NT×N(i)~~ i = 1 , ⋯ , H , H + 1 i=1,\cdots,H,H+1 i=1,⋯,H,H+1 |
A ( i ) \bm{A}^{(i)} A(i) | 第 i 层**值矩阵 | 维度 N T × N ( i ) N_T\times N^{(i)} NT×N(i)~~ i = 0 , 1 , ⋯ , H , H + 1 i=0,1,\cdots,H,H+1 i=0,1,⋯,H,H+1 |
( A ( i ) ) + \big(\bm{A}^{(i)}\big)^+ (A(i))+ | 第 i 层**值矩阵加偏置列 | 维度 N T × ( N ( i ) + 1 ) N_T\times (N^{(i)}+1) NT×(N(i)+1)~~ i = 0 , 1 , ⋯ , H i=0,1,\cdots,H i=0,1,⋯,H |
W ( i ) \bm{W}^{(i)} W(i) | 第 i 层权值矩阵 | 维度 N ( i − 1 ) × N ( i ) N^{(i-1)}\times N^{(i)} N(i−1)×N(i), i = 1 , ⋯ , H , H + 1 i=1,\cdots,H,H+1 i=1,⋯,H,H+1. |
W ( H + 1 ) \bm{W}^{(H+1)} W(H+1) | 输出层权值矩阵 | 维度 N ( N ) × K N^{(N)}\times K N(N)×K~~标签有 K 个类目 |
W b ( i ) \bm{W}_b^{(i)} Wb(i) | 第 i 层权值偏置矩阵 | 维度 ( N ( i − 1 ) + 1 ) × N ( i ) (N^{(i-1)}+1)\times N^{(i)} (N(i−1)+1)×N(i), i = 1 , ⋯ , H , H + 1 i=1,\cdots,H,H+1 i=1,⋯,H,H+1. |
W b ( H + 1 ) \bm{W}_b^{(H+1)} Wb(H+1) | 输出层权值偏置矩阵 | 维度 ( N ( N ) + 1 ) × K (N^{(N)}+1)\times K (N(N)+1)×K~~标签有 K 个类目 |
S ( H + 1 ) \bm{S}^{(H+1)} S(H+1) | 输出层求和值矩阵 | 维度 $N_T\times K $ |
A ( H + 1 ) \bm{A}^{(H+1)} A(H+1) | 输出层**值矩阵 | 维度 $N_T\times K $ |
Y \bm{Y} Y | 训练数据标签 | 维度 N T × K N_T \times K NT×K (ONE-HOT) |
Δ ( i ) \bm{\Delta}^{(i)} Δ(i) | 反向传播中间变量矩阵 | 维度 N T × N ( i ) N_T \times N^{(i)} NT×N(i)~~ i = 1 , ⋯ , H , H + 1 i=1,\cdots,H,H+1 i=1,⋯,H,H+1 |
Δ ( H + 1 ) \bm{\Delta}^{(H+1)} Δ(H+1) | 输出层反向传播中间变量矩阵 | 维度 N T × K N_T \times K NT×K |
神经网络正反向传播
神经网络的正反向传播是神经网络训练的重要组成部分,以图为例进行数学建模,最终扩展得到模型的矩阵运算形式。
自定义运算符:
-
x + \bm{x}^+ x+ 运算符:为向量 x \bm{x} x添加 B i a s Bias Bias列,具体在第 0 0 0列添加全 1 1 1。
x = ( a b c d e f g h i ) x + = ( 1 a b c 1 d e f 1 g h i ) \bm{x} = \left( \begin{matrix} a & b & c \\ d & e & f \\ g & h & i \end{matrix} \right) ~~~~~~\bm{x}^+ = \left( \begin{matrix} 1 & a & b & c \\ 1 & d & e & f \\ 1 & g & h & i \end{matrix} \right) x=⎝⎛adgbehcfi⎠⎞ x+=⎝⎛111adgbehcfi⎠⎞ -
x − \bm{x}^- x− 运算符:为向量 x \bm{x} x删去 B i a s Bias Bias列,具体删除第 0 0 0列。
x = ( a b c d e f g h i ) x − = ( b c e f h i ) \bm{x} = \left( \begin{matrix} a & b & c \\ d & e & f \\ g & h & i \end{matrix} \right) ~~~~~~ \bm{x}^- = \left( \begin{matrix} b & c \\ e & f \\ h & i \end{matrix} \right) x=⎝⎛adgbehcfi⎠⎞ x−=⎝⎛behcfi⎠⎞
神经网络正向传播
-
神经网络示例推导:
-
矩阵扩展推导形式:
神经网络反向传播
-
示例推导:
1.1 输出层权值梯度:1.2 隐藏层权值梯度:
-
矩阵扩展推导形式:
2.1 输出层权值求导:2.2 隐藏层权值求导:
神经网络张量流
前向传播 | 维度 | 反向传播 | 维度 |
---|---|---|---|
X \bm{X} X | N T × ( N t + 1 ) N_T\times (N_t+1) NT×(Nt+1) | LOSS | Scalar |
S ( 1 ) \bm{S}^{(1)} S(1) | N T × N ( 1 ) N_T\times N^{(1)} NT×N(1) | Δ ( H + 1 ) \bm{\Delta}^{(H+1)} Δ(H+1) | N T × K N_T\times K NT×K |
( A ( 1 ) ) + (\bm{A}^{(1)})^+ (A(1))+ | N T × ( N ( 1 ) + 1 ) N_T\times (N^{(1)}+1) NT×(N(1)+1) | ∇ W ( H + 1 ) L \nabla_{\bm{W}^{(H+1)}}\mathcal{L} ∇W(H+1)L | ( N ( H ) + 1 ) × K (N^{(H)}+1)\times K (N(H)+1)×K |
S ( 2 ) \bm{S}^{(2)} S(2) | N T × N ( 2 ) N_T\times N^{(2)} NT×N(2) | Δ ( H ) \bm{\Delta}^{(H)} Δ(H) | N T × ( N ( H ) + 1 ) N_T\times (N^{(H)}+1) NT×(N(H)+1) |
( A ( 2 ) ) + (\bm{A}^{(2)})^+ (A(2))+ | N T × ( N ( 2 ) + 1 ) N_T\times (N^{(2)}+1) NT×(N(2)+1) | ∇ W ( N ) L \nabla_{\bm{W}^{(N)}}\mathcal{L} ∇W(N)L | ( N ( H − 1 ) + 1 ) × N ( H ) (N^{(H-1)}+1)\times N^{(H)} (N(H−1)+1)×N(H) |
⋮ \vdots ⋮ | ⋮ \vdots ⋮ | ⋮ \vdots ⋮ | ⋮ \vdots ⋮ |
S ( H ) \bm{S}^{(H)} S(H) | N T × N ( H ) N_T\times N^{(H)} NT×N(H) | Δ ( i ) \bm{\Delta}^{(i)} Δ(i) | N T × ( N ( i ) + 1 ) N_T\times (N^{(i)}+1) NT×(N(i)+1) |
( A ( H ) ) + (\bm{A}^{(H)})^+ (A(H))+ | N T × ( N ( H ) + 1 ) N_T\times (N^{(H)}+1) NT×(N(H)+1) | ∇ W ( i ) L \nabla_{\bm{W}^{(i)}}\mathcal{L} ∇W(i)L | ( N ( i − 1 ) + 1 ) × N ( i ) (N^{(i-1)}+1)\times N^{(i)} (N(i−1)+1)×N(i) |
S ( H + 1 ) \bm{S}^{(H+1)} S(H+1) | N T × K N_T\times K NT×K | Δ ( 1 ) \bm{\Delta}^{(1)} Δ(1) | N T × ( N ( 1 ) + 1 ) N_T\times (N^{(1)}+1) NT×(N(1)+1) |
A ( H + 1 ) \bm{A}^{(H+1)} A(H+1) | N T × K N_T\times K NT×K | ∇ W ( 1 ) L \nabla_{\bm{W}^{(1)}}\mathcal{L} ∇W(1)L | ( N t + 1 ) × N ( 1 ) (N_t+1)\times N^{(1)} (Nt+1)×N(1) |
计算Loss | 计算Loss | 更新梯度 | 更新梯度 |