11 - 向量微分、矩阵微分以及基于雅克比矩阵求导数

本文详细解析了机器学习中矩阵求导的必要性,介绍了向量函数的求导概念,包括YX拉伸术实例和常见公式。此外,深入探讨了雅可比矩阵的数学原理、PyTorch实现以及向量与矩阵间的求导技巧,适合理解并应用于深度学习和优化算法中。

1. 手推机器学习-矩阵求导

B站链接

1.1 绪论

(1)理论

  • ML中为什么需要矩阵求导
  • 向量函数与矩阵求导初印象
  • 矩阵求导-YX拉伸术

(2)实战

  • 常见矩阵求导公式举例
  • 矩阵求导补充
  • 最小二乘法

1.2 ML中为什么需要矩阵求导

  • 向量化的数据会让计算变得简单
    对于一个方程组来说
    y 1 = W 1 x 11 + W 2 x 12 y_1=W_{1}x_{11}+W_2x_{12} y1=W1x11+W2x12
    y 2 = W 1 x 21 + W 2 x 22 y_2=W_{1}x_{21}+W_2x_{22} y2=W1x21+W2x22

向量化后可以简写为
[ y 1 y 2 ] = [ x 11 x 12 x 21 x 22 ] [ W 1 W 2 ] (1) \begin{bmatrix} y_1\\\\y_2\end{bmatrix}=\begin{bmatrix}x_{11}&x_{12}\\\\x_{21}&x_{22}\end{bmatrix}\begin{bmatrix}W_1\\\\W_2\end{bmatrix}\tag{1} y1y2=x11x21x12x22W1W2(1)
Y = X W (2) Y=XW\tag{2} Y=XW(2)
由上可以看出,不管我们的怎么增加x,y,w我们都可以用公式2进行表示,那么我们就可以看出来
for 循环和numpy矩阵运算

  • 向量化计算运算快

我们来对同样一组数据进行比较处理,看看for循环与numpy的矩阵

# -*- coding: utf-8 -*-
# @Project: zc
# @Author: zc
# @File name: numpy_new_test
# @Create time: 2022/3/16 18:43
import numpy as np
import time

a = np.random.rand(10000000)
b = np.random.rand(10000000)
time_cur = time.time()
c = a.dot(b)
time_later = time.time()
print(f"c={c}")
vec_time = 1000 * (time_later - time_cur)
print("vectorized is " + str(vec_time) + "ms")
print()
c = 0
time_cur = time.time()
for i in range(a.size):
	c += a[i] * b[i]
time_later = time.time()
print(f"c={c}")
loop_time = 1000 * (time_later - time_cur)
print("Loop is " + str(loop_time) + "ms")
print()
print("times is " + str(loop_time / vec_time))

# 矢量化的时间-用 numpy 计算
c=2499945.9800939467
vectorized is 7.472991943359375ms

# for循环的时间-用for 计算
c=2499945.9800934764
Loop is 3543.708086013794ms

# numpy 居然比 for 循环块474倍
times is 474.2020482388974

1.3 向量函数与矩阵求导初印象

  • 标量函数:输出为标量的函数
    f ( x ) = x 2 ; x ∈ R ; f ( x ) = x 2 ∈ R f(x)=x^2;x\in R;f(x)=x^2\in R f(x)=x2;xR;f(x)=x2R
    f ( x ) = x 1 2 + x 2 2 ; x = [ x 1 , x 2 ] ∈ R 2 , f ( x ) = x 1 2 + x 2 2 ∈ R (3) f(x)=x_1^2+x_2^2;x=[x_1,x_2]\in R^2,f(x)=x_1^2+x_2^2 \in R\tag{3} f(x)=x12+x22;x=[x1,x2]R2,f(x)=x12+x22R(3)
  • 输入标量;输出矩阵函数
    f ( x ) = [ f 1 ( x ) = x f 2 ( x ) = x 2 ] ; x ∈ R ; [ f 1 ( x ) f 2 ( x ) ] ∈ R 2 (4) f(x)=\begin{bmatrix}f_1(x)=x\\\\f_2(x)=x^2\end{bmatrix};x\in R;\begin{bmatrix}f_1(x)\\\\f_2(x)\end{bmatrix}\in R^2\tag{4} f(x)=f1(x)=xf2(x)=x2;xR;f1(x)f2(x)R2(4)
    f ( x ) = [ f 11 ( x ) = x f 12 ( x ) = x 2 f 21 ( x ) = x 3 f 22 ( x ) = x 4 ] ; x ∈ R ; [ f 11 ( x ) f 12 ( x ) f 12 ( x ) f 22 ( x ) ] ∈ R 4 (5) f(x)=\begin{bmatrix}f_{11}(x)=x&f_{12}(x)=x^2\\\\f_{21}(x)=x^3&f_{22}(x)=x^4\end{bmatrix};x\in R;\begin{bmatrix}f_{11}(x)&f_{12}(x)\\\\f_{12}(x)&f_{22}(x)\end{bmatrix}\in R^4\tag{5} f(x)=f11(x)=xf21(x)=x3f12(x)=x2f22(x)=x4;xR;f11(x)f12(x)f12(x)f22(x)R4(5)
  • 输入矩阵,输出矩阵函数
    f ( x 1 , x 2 ) = [ f 11 ( x ) = x 1 + x 2 f 12 ( x ) = x 1 2 + x 2 2 f 21 ( x ) = x 1 3 + x 2 3 f 22 ( x ) = x 1 4 + x 2 4 ] ; x ∈ R 2 ; [ f 11 ( x ) f 12 ( x ) f 12 ( x ) f 22 ( x ) ] ∈ R 4 (6) f(x_1,x_2)=\begin{bmatrix}f_{11}(x)=x_1+x_2&f_{12}(x)=x_1^2+x_2^2\\\\f_{21}(x)=x_1^3+x_2^3&f_{22}(x)=x_1^4+x_2^4\end{bmatrix};x\in R^2;\begin{bmatrix}f_{11}(x)&f_{12}(x)\\\\f_{12}(x)&f_{22}(x)\end{bmatrix}\in R^4\tag{6} f(x1,x2)=f11(x)=x1+x2f21(x)=x13+x23f12(x)=x12+x22f22(x)=x14+x24;xR2;f11(x)f12(x)f12(x)f22(x)R4(6)
  • 求导的本质
    ∂ A ∂ B = ? : 指 的 是 每 一 个 来 自 A 的 元 素 对 每 一 个 自 B 的 元 素 求 导 \frac{\partial A}{\partial B}=?:指的是每一个来自A的元素对每一个自B的元素求导 BA=?AB

1.4 矩阵求导-YX拉伸术

  • 标量不变,向量拉伸
  • 前面横向拉,后面纵向拉(YX:Y在前-横向拉,X在后-纵向拉)
    (1)假设 f ( x ) f(x) f(x)为标量,x为向量;我们可以得到如下:
    f ( x 1 , x 2 , . . . , x n ) = x 1 + x 2 , . . . , + x n (7) f(x_1,x_2,...,x_n)=x_1+x_2,...,+x_n\tag{7} f(x1,x2,...,xn)=x1+x2,...,+xn(7)
    x = [ x 1 , x 2 , . . . , x n ] T (8) x=[x_1,x_2,...,x_n]^T\tag{8} x=[x1,x2,...,xn]T(8)
    保证标量f(x)不变,向量x拉伸, ∂ f ( x ) ∂ x \frac{\partial f(x)}{\partial x} xf(x)-> YX;X在后面,所以纵向拉,f(x)标量不变;可得如下
    ∂ f ( x ) ∂ x = [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) ∂ x 2 ⋮ ∂ f ( x ) ∂ x n ] (9) \frac{\partial f(x)}{\partial x}=\begin{bmatrix}\frac{\partial f(x)}{\partial x_1}\\\\\frac{\partial f(x)}{\partial x_2}\\\vdots\\\frac{\partial f(x)}{\partial x_n}\end{bmatrix}\tag{9} xf(x)=x1f(x)x2f(x)xnf(x)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值