3、机器学习基础知识——矩阵求导相关知识

本文详细解析了标量、向量、矩阵之间的求导运算,包括标量关于向量、矩阵的求导,向量与矩阵间的相互求导,以及机器学习中常见的求导形式,辅以迹相关的公式,旨在深入理解多元微积分在机器学习中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、标量关于标量 x 的求导:

\large \frac{\partial y}{\partial x}

2、向量关于标量 x 的求导:

定义向量 Y:

\large Y=[y_1,y_2,...,y_n]^T

向量 Y 关于标量 x  的导数就是 Y 的每个元素分别对 x 进行求导,于是可以得到:

\large \frac{\partial Y}{\partial x} = \left [ \frac{\partial y_1}{\partial x},\frac{\partial y_2}{\partial x},...,\frac{\partial y_n}{\partial x} \right ]^T

此时,导数是 Y 向量的正切向量。

2、矩阵 Y 关于标量 x 的求导:

矩阵对标量的求导类似于向量关于标量的求导,也就是矩阵的每个元素分别对标量 x 的求导,可以得到:

\large \frac{\partial Y}{\partial x} = \begin{pmatrix} \frac{\partial y_1_1}{\partial x}& \frac{\partial y_1_2}{\partial x}& ...& \frac{\partial y_1_n}{\partial x}\\ \frac{\partial y_2_1}{\partial x}& \frac{\partial y_2_2}{\partial x}& ...& \frac{\partial y_2_n}{\partial x}\\ ...& ...& ...& ...\\ \frac{\partial y_n_1}{\partial x}& \frac{\partial y_n_2}{\partial x}& ...& \frac{\partial y_n_n}{\partial x}\end{pmatrix}

3、向量求导:

3.1、标量关于向量求导:

定义标量 y 关于 x 的向量为:

\large x=[x_1,x_2,...,x_n]^T

对向量 x 关于标量 y 的导数为:

\large \frac{\partial y}{\partial x } = \left [ \frac{\partial y}{\partial x_1},\frac{\partial y}{\partial x_2},...,\frac{\partial y}{\partial x_n} \right ]

此时的向量为:梯度向量导数为标量 y 在空间 R^n 的梯度,该空间以 x 为基

3.2、向量关于向量求导:

向量函数 y ,关于向量 x 的导数即为:

\large x=[x_1,x_2,...,x_n]^T

\large y=[y_1,y_2,...,y_n]^T

 

\large \frac{\partial y}{\partial x} = \begin{pmatrix} \frac{\partial y_1}{\partial x_1}& \frac{\partial y_1}{\partial x_2}& ...& \frac{\partial y_1}{\partial x_n}\\ \frac{\partial y_2}{\partial x_1}& \frac{\partial y_2}{\partial x_2}& ...& \frac{\partial y_2}{\partial x_n}\\ ...& ...& ...& ...\\ \frac{\partial y_n}{\partial x_1}& \frac{\partial y_n}{\partial x_2}& ...& \frac{\partial y_n}{\partial x_n}\end{pmatrix}

 

此时矩阵向量叫做:Jacobian矩阵

3.3、矩阵关于向量求导:

定义矩阵 Y 为:

\large y=\begin{pmatrix} y_1_1& y_1_2& ...& y_1_n\\ y_2_1& y_2_2& ...& y_2_n\\ ...& ...& ...& ...\\ y_n_1& y_n_2& ...& y_n_n \end{pmatrix}

向量 x 为:

\large x=[x_1,x_2,...,x_n]^T

 

所以矩阵 y 关于向量 x 的导数为:

\large \frac{\partial y}{\partial x} = \begin{pmatrix} \frac{\partial y_1_1}{\partial x_1}& \frac{\partial y_1_2}{\partial x_2}& ...& \frac{\partial y_1_n}{\partial x_n}\\ \frac{\partial y_2_1}{\partial x_1}& \frac{\partial y_2_2}{\partial x_2}& ...& \frac{\partial y_2_n}{\partial x_n}\\ ...& ...& ...& ...\\ \frac{\partial y_n_1}{\partial x_1}& \frac{\partial y_n_2}{\partial x_2}& ...& \frac{\partial y_n_n}{\partial x_n}\end{pmatrix}

4、矩阵求导:

我们一般只考虑标量关于矩阵的导数,即标量 y 关于矩阵 x 的导数,此时的导数矩阵是梯度矩阵

\large \frac{\partial y}{\partial x} = \begin{pmatrix} \frac{\partial y}{\partial x_1_1}& \frac{\partial y}{\partial x_2_1}& ...& \frac{\partial y}{\partial x_n_1}\\ \frac{\partial y}{\partial x_2_1}& \frac{\partial y}{\partial x_2_2}& ...& \frac{\partial y}{\partial x_n_2}\\ ...& ...& ...& ...\\ \frac{\partial y}{\partial x_1_n}& \frac{\partial y}{\partial x_2_n}& ...& \frac{\partial y}{\partial x_n_n}\end{pmatrix}

5、机器学习中常见的矩阵求导的形式:

\large \beta =\frac{\partial \beta ^TX}{\partial X}

\large X =\frac{\partial X ^TX}{\partial X}

\large (A+A^T)X =\frac{\partial X ^TAX}{\partial X}

 

6、迹相关的公式:

\large tr(a) =a

\large tr(AB) =tr(BA)

\large tr(ABC) =tr(BCA)=tr(CAB)

\large \frac{\partial tr(AB)}{\partial A}=B^T

\large tr(A) =tr(A^T)

\large \frac{\partial tr(ABA^TC)}{\partial A}=CAB+C^TAB^T


参考:

[1]. 斯坦福大学——吴恩达机器学习

[2]. Python机器学习算法

[3]. 深入浅出深度学习——原理剖析于Python实践,黄安阜

 

 

 

 

 

 

 

### PyTorch 机器学习基础入门指南 #### 学习目标 PyTorch 是一种流行的深度学习框架,它提供了灵活的张量操作和自动求导功能,非常适合用于构建复杂的神经网络模型。对于初学者来说,可以从以下几个方面入手来掌握 PyTorch 的基础知识。 --- #### 数据表示与处理 在机器学习中,所有的输入数据都需要被转化为数值形式以便于计算机处理。通常情况下,这些数据会被存储为数组或矩阵的形式[^1]。 为了高效地进行数组和矩阵运算,Numpy 成为了数据科学领域不可或缺的一部分。由于 Numpy 和 PyTorch 中 Tensor 的相似性,熟悉 Numpy 将有助于快速上手 PyTorch[^2]。 以下是创建并操作 Tensor 的基本方法: ```python import torch # 创建一个简单的二维张量 tensor = torch.tensor([[1, 2], [3, 4]]) print(tensor) # 对张量执行加法操作 result = tensor + tensor print(result) ``` 通过上述代码可以看出,PyTorch 提供了类似于 NumPy 数组的操作接口,但更加强调 GPU 加速的支持以及梯度计算的功能。 --- #### 动态计算图机制 与其他一些基于静态计算图的框架不同的是,PyTorch 使用动态计算图来进行前向传播和反向传播过程中的节点定义[^3]。这种设计使得开发者能够实时修改程序逻辑而无需重新编译整个图形结构,从而提高了实验效率并且降低了调试难度。 下面是一个简单线性回归的例子展示如何利用自动微分特性完成参数更新: ```python # 定义权重w和偏置b作为可训练变量 w = torch.tensor([0.5], requires_grad=True) b = torch.tensor([-0.3], requires_grad=True) # 输入特征x及其对应标签y x = torch.tensor([1., 2., 3., 4.]) y_true = torch.tensor([2., 4., 6., 8.]) # 前向传播阶段:计算预测值 y_pred = w * x + b # 计算损失函数 (均方误差) loss = ((y_pred - y_true)**2).mean() # 反向传播阶段:清零之前的梯度信息后再计算当前批次的新梯度 if loss.requires_grad: loss.backward() # 手动模拟优化器步进行为(实际应用推荐使用torch.optim模块下的现成类如SGD Adam等) with torch.no_grad(): learning_rate = 0.01 w -= learning_rate * w.grad b -= learning_rate * b.grad # 清除旧有梯度以防重复累加影响后续迭代效果 w.grad.zero_() b.grad.zero_() print(f'Updated weight: {w.item()}, bias: {b.item()}') ``` 此段脚本展示了最基本的监督学习流程——即给定一组样本点之后调整模型内部参数直至达到预期性能指标为止的过程。 --- #### 工具链支持 除了核心库本身之外,围绕着 PyTorch 还形成了丰富的生态系统,其中包括但不限于可视化工具、预训练模型仓库以及其他辅助插件等等。例如 Anaconda 发行版本就集成了众多常用依赖项便于科研人员迅速搭建环境开展研究工作。 安装方式如下所示: ```bash # 下载Miniconda或者完整版Anaconda wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 执行Shell Script文件按照提示完成配置步骤 bash Miniconda3-latest-Linux-x86_64.sh # 创建新的虚拟env专门运行pytorch项目 conda create --name pytorch_env python=3.9 # 激活指定environment conda activate pytorch_env # 根据官方文档指引挑选适合硬件条件的最佳pip命令下载相应二进制wheel包 pip install torch torchvision torchaudio cpuonly ``` 以上指令序列可以帮助用户轻松建立起适配个人电脑规格的工作区。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值