机器学习常见公式推导

线性层的反向传播

对于函数 Y = X W Y = XW Y=XW( 注: X X X是一个 m × n m \times n m×n的矩阵, W W W是一个 n × k n \times k n×k的矩阵, Y Y Y是一个 m × k m \times k m×k的矩阵。这里的 W W W通常代表模型的权重,而 X X X代表输入数据。)

如何求 ∂ Y ∂ W \frac{\partial Y}{\partial W} ∂W∂Y呢,通常我们只关心其一个特定的切片,即 ∂ Y i j ∂ W r s \frac{\partial Y_{ij}}{\partial W_{rs}} ∂Wrs∂Yij。

对于单个元素 Y i j Y_{ij} Yij而言,其是矩阵 X X X的第 i i i行和矩阵 W W W的第 j j j列的点积。因此:

Y i j = ∑ p = 1 n X i p ⋅ W p j Y_{ij} = \sum_{p=1}^{n} X_{ip} \cdot W_{pj} Yij=p=1∑nXip⋅Wpj

当我们对 Y i j Y_{ij} Yij关于 W r s W_{rs} Wrs求导时,我们只关心 W r s W_{rs} Wrs这一项,其他项的导数为0。因此:

∂ Y i j ∂ W r s = ∂ ∂ W r s ( ∑ p = 1 n X i p ⋅ W p j ) \frac{\partial Y_{ij}}{\partial W_{rs}} = \frac{\partial}{\partial W_{rs}} \left( \sum_{p=1}^{n} X_{ip} \cdot W_{pj} \right) ∂Wrs∂Yij=∂Wrs∂(p=1∑nXip⋅Wpj)

∂ Y i j ∂ W r s = X i r ⋅ ∂ W s j ∂ W r s \frac{\partial Y_{ij}}{\partial W_{rs}} = X_{ir} \cdot \frac{\partial W_{sj}}{\partial W_{rs}} ∂Wrs∂Yij=Xir⋅∂Wrs∂Wsj

由于 ∂ W s j ∂ W r s \frac{\partial W_{sj}}{\partial W_{rs}} ∂Wrs∂Wsj只有当 s = r s = r s=r且 j = s j = s j=s时才为1,否则为0,因此:

∂ Y i j ∂ W r s = X i r ⋅ δ s j \frac{\partial Y_{ij}}{\partial W_{rs}} = X_{ir} \cdot \delta_{sj} ∂Wrs∂Yij=Xir⋅δsj

其中 δ s j \delta_{sj} δsj是Kronecker delta 函数,当 s = j s = j s=j时为1,否则为0

因此, ∂ Y ∂ W \frac{\partial Y}{\partial W} ∂W∂Y的每个元素 ∂ Y i j ∂ W r s \frac{\partial Y_{ij}}{\partial W_{rs}} ∂Wrs∂Yij都是一个 m × n × k m \times n \times k m×n×k的张量,其中 i i i和 j j j分别索引 Y Y Y的行和列,而 r r r和 s s s分别索引 W W W的行和列。

然而,通常我们不会将 ∂ Y ∂ W \frac{\partial Y}{\partial W} ∂W∂Y视为一个张量,而是将其简化为一个矩阵。因为在实际应用中,我们通常对整个矩阵 W W W进行更新,而不是单独更新它的每个元素。因此,我们可以将 ∂ Y ∂ W \frac{\partial Y}{\partial W} ∂W∂Y的所有元素 ∂ Y i j ∂ W r s \frac{\partial Y_{ij}}{\partial W_{rs}} ∂Wrs∂Yij合并成一个 m × k × n m \times k \times n m×k×n的张量,然后将其简化为一个 m × n m \times n m×n的矩阵,即 X X X。这是因为在矩阵乘法中, Y Y Y的每个元素 Y i j Y_{ij} Yij只依赖于 X X X的第 i i i行和 W W W的第 j j j列,所以 ∂ Y ∂ W \frac{\partial Y}{\partial W} ∂W∂Y实际上是一个 m × n m \times n m×n的矩阵,而不是一个 m × n × k m \times n \times k m×n×k的张量,最终有:

∂ Y ∂ W = X \frac{\partial Y}{\partial W} = X ∂W∂Y=X

可通过此网站 https://www.matrixcalculus.org/ 验证矩阵求导的正确性。

在神经网络的链式求导过程,我们求 Y Y Y对 W W W的梯度,通常还会乘以 Y Y Y本身对应的梯度 g r a d y grad_y grady, g r a d y grad_y grady 是 m × k m \times k m×k的矩阵,这时候我们需要对 ∂ Y ∂ W \frac{\partial Y}{\partial W} ∂W∂Y转置。

Softmax函数的反向传播

Softmax函数的定义是:

p i = e z i ∑ j e z j p_i = \frac{e^{z_i}}{\sum_j e^{z_j}} pi=∑jezjezi

对于Softmax函数的导数 ∂ p i ∂ z j \frac{\partial p_i}{\partial z_j} ∂zj∂pi, 可以通过以下方式计算:

∂ p i ∂ z j = ∂ ∂ z j ( e z i ∑ k e z k ) \frac{\partial p_i}{\partial z_j} = \frac{\partial}{\partial z_j} \left( \frac{e^{z_i}}{\sum_k e^{z_k}} \right) ∂zj∂pi=∂zj∂(∑kezkezi)

使用商的求导法则,我们得到:

∂ p i ∂ z j = e z i ⋅ ∂ ∂ z j ( ∑ k e z k ) − ∂ ∂ z j ( e z i ) ⋅ ∑ k e z k ( ∑ k e z k ) 2 \frac{\partial p_i}{\partial z_j} = \frac{e^{z_i} \cdot \frac{\partial}{\partial z_j}(\sum_k e^{z_k}) - \frac{\partial}{\partial z_j}(e^{z_i}) \cdot \sum_k e^{z_k}}{(\sum_k e^{z_k})^2} ∂zj∂pi=(∑kezk)2ezi⋅∂zj∂(∑kezk)−∂zj∂(ezi)⋅∑kezk

简化后,我们得到:

∂ p i ∂ z j = e z i ⋅ δ i j − e z i ⋅ e z j ( ∑ k e z k ) 2 \frac{\partial p_i}{\partial z_j} = \frac{e^{z_i} \cdot \delta_{ij} - e^{z_i} \cdot e^{z_j}}{(\sum_k e^{z_k})^2} ∂zj∂pi=(∑kezk)2ezi⋅δij−ezi⋅ezj

其中 δ i j \delta_{ij} δij是Kronecker delta函数,当 i = j i = j i=j时为1,否则为0。

进一步简化,我们得到:

∂ p i ∂ z j = p i ⋅ ( 1 − δ i j ) − p i ⋅ p j \frac{\partial p_i}{\partial z_j} = p_i \cdot (1 - \delta_{ij}) - p_i \cdot p_j ∂zj∂pi=pi⋅(1−δij)−pi⋅pj

最终,我们得到Softmax函数的导数为:

∂ p i ∂ z j = { p i ( 1 − p j ) , if i = j ; − p i p j , if i ≠ j \frac{\partial p_i}{\partial z_j} = \begin{cases} p_i (1 - p_j) \text{ , if } i = j; \newline -p_i p_j \text{ , if } i \neq j \end{cases} ∂zj∂pi={pi(1−pj) , if i=j;−pipj , if i=j

Softmax函数的导数是一个矩阵,其中每个元素都是输出概率的函数。

Relu函数的反向传播

ReLU(Rectified Linear Unit)函数是深度学习中常用的一种激活函数,其数学表达式为:

f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)

其反向传播公式为:

∂ f ( x ) ∂ x = { 0 , if x ≤ 0 ; 1 , if x > 0 \frac{\partial f(x)}{\partial x} = \begin{cases} 0 \text{ , if } x \leq 0; \newline 1 \text{ , if } x > 0 \end{cases} ∂x∂f(x)={0 , if x≤0;1 , if x>0

MSE函数的反向传播

MSE(Mean Squared Error)函数是深度学习中常用的一种损失函数,其公式如下:

M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1i=1∑n(yi−y^i)2

其中, n n n是数据点的数量, y i y_i yi是第 i i i个数据点的真实值, y ^ i \hat{y}_i y^i是第 i i i个数据点的预测值。

在反向传播过程中,MSE 损失函数单个预测值 y ^ i \hat{y}_i y^i的梯度可以表示为:

∂ M S E ∂ y ^ i = − 2 n ( y i − y ^ i ) \frac{\partial MSE}{\partial \hat{y}_i} = -\frac{2}{n} (y_i - \hat{y}_i) ∂y^i∂MSE=−n2(yi−y^i)

相关推荐
2601_949593652 分钟前
CANN加速人脸检测推理:多尺度特征金字塔与锚框优化
人工智能
小刘的大模型笔记4 分钟前
大模型LoRA微调全实战:普通电脑落地,附避坑手册
人工智能·电脑
乾元4 分钟前
身份与访问:行为生物识别(按键习惯、移动轨迹)的 AI 建模
运维·网络·人工智能·深度学习·安全·自动化·安全架构
happyprince4 分钟前
2026年02月07日全球AI前沿动态
人工智能
啊阿狸不会拉杆4 分钟前
《机器学习导论》第 7 章-聚类
数据结构·人工智能·python·算法·机器学习·数据挖掘·聚类
Java后端的Ai之路5 分钟前
【AI大模型开发】-AI 大模型原理深度解析与 API 实战(建议收藏!!!)
人工智能·ai·科普·ai大模型·llm大模型
禁默5 分钟前
从图像预处理到目标检测:Ops-CV 助力 CV 任务在昇腾 NPU 上高效运行
人工智能·目标检测·目标跟踪·cann
pp起床8 分钟前
Gen_AI 第四课 模型评估
人工智能
木非哲9 分钟前
机器学习--从“三个臭皮匠”到 XGBoost:揭秘 Boosting 算法的“填坑”艺术
算法·机器学习·boosting
zhangshuang-peta10 分钟前
人工智能代理团队在软件开发中的协同机制
人工智能·ai agent·mcp·peta