线性代数|机器学习-P28反向传播-求偏导

1. 随机梯度下降收敛性分析

  • 论文链接:
    通过百度网盘分享的文件:The convergence of the Stochastic G…
    链接:https://pan.baidu.com/s/1F91RaDQtuPs_ObuznybFXA
    提取码:lvfb

1.1 随机采样

  • 问题1:随机梯度下降中,
    – 第一种方式是随机采样m个样本后,将m个样本放回原处重新在N个总集合里面采样?
    – 第二种方式是随机采样m个样本后,将m个样本放回原处只在N-m个集合中重新采样?
    第一种方法太贵了,每次都是从N个总的集合中进行采样。第二种可以使用pytorch 或者matlab中的随机张量列,这样可以将N个样本按照随机打乱不重复的方式进行排列,这样我们进行每m个提取,那么我们就实现了不重复的随机采样。

1.2 列向量方法

  • 通过创建一个不重复的列向量,将1-20数字打乱。这样我们就可以每5个作为一个batch进行采样,这里得到的是序号,我们可以按照序号对另外一个张量进行采样。
    – 第一组:[19 , 4 , 2 , 11, 1]
    – 第二组:[18 , 15 , 14 , 10 , 6]
    – 第三组:[12 , 0 , 16 , 8 , 3]
    – 第四组:[ 9 , 17 , 13 , 7 , 5]
from torch.utils.data import RandomSampler
#  create the index vector
sampler = RandomSampler(range(20))
print([i for i in sampler])
##output :[19, 4, 2, 11, 1, 18, 15, 14, 10, 6, 12, 0, 16, 8, 3, 9, 17, 13, 7, 5]

1.3 从uniform分布中采样5个样本

import torch
low = 0.0
high = 1.0
# create the uniform distribution [low,high]
uniform_dist = torch.distributions.Uniform(low,high)

# get the 5 samples in the uniform
sample_uniform = uniform_dist.sample((5,))
print(f"sample_uniform={sample_uniform}")
# output :sample_uniform=tensor([0.6336, 0.6407, 0.8138, 0.5248, 0.4154])

1.4 梯度下降最小值

我们知道,在求梯度下降最小值时,我们只需要得到在 x ∗ x^* x处的梯度 ∇ f ( x ∗ ) = 0 \nabla f(x^*)=0 f(x)=0
x ∗ = arg min ⁡ x f ( x ) → ∇ f ( x ∗ ) = 0 \begin{equation} x^*=\argmin\limits_{x}f(x)\to \nabla f(x^*)=0 \end{equation} x=xargminf(x)f(x)=0
∇ f ( x ∗ ) = ( ∂ f ( x ) ∂ x 1 , ∂ f ( x ) ∂ x 2 , ⋯   , ∂ f ( x ) ∂ x n ) \begin{equation} \nabla f(x^*)=(\frac{\partial f(x)}{\partial x_1},\frac{\partial f(x)}{\partial x_2},\cdots,\frac{\partial f(x)}{\partial x_n}) \end{equation} f(x)=(x1f(x),x2f(x),,xnf(x))

2. 正向运算和反向传播

2.1 求导的链式法则

假设我们有如下复核函数,那么我们根据链式法则求导
在这里插入图片描述

  • 相当于如下:
    d F d x = d F d y 3 ⋅ d y 3 d y 2 ⋅ d y 1 d y 1 ⋅ d y 1 d x \begin{equation} \frac{\mathrm{d}F}{\mathrm{d} x}=\frac{\mathrm{d}F}{\mathrm{d} y_3}\cdot \frac{\mathrm{d}y_3}{\mathrm{d} y_2}\cdot \frac{\mathrm{d}y_1}{\mathrm{d} y_1}\cdot \frac{\mathrm{d}y_1}{\mathrm{d} x} \end{equation} dxdF=dy3dFdy2dy3dy1dy1dxdy1
  • 每次看到向量或者矩阵的乘法,就会发现这个不断进行相乘会导致值趋近于0,或者爆炸,这就是深度学习里面梯度爆炸和梯度消失的原因,感觉是否可以用酉矩阵来代替,这样矩阵的相乘只是向量角度的变化,而不会影响到整体的长度,也就不会出现梯度消失和梯度爆炸了,后续思考下怎么做。

2.2 计算图

  • 假设我们的函数如下 F ( x , y ) = x 3 ( x + 3 y ) F(x,y)=x^3(x+3y) F(x,y)=x3(x+3y)
    在这里插入图片描述
  • 前向传播-链式法则求导:
    ∂ F ∂ x = ∂ F ∂ c ⋅ ∂ c ∂ x + ∂ F ∂ s ⋅ ∂ s ∂ x \begin{equation} \frac{\partial F}{\partial x}=\frac{\partial F}{\partial c}\cdot\frac{\partial c}{\partial x}+\frac{\partial F}{\partial s}\cdot\frac{\partial s}{\partial x} \end{equation} xF=cFxc+sFxs
    在这里插入图片描述
  • 后向传播-链式法则求导:
    ∂ F ∂ x = ∂ F ∂ F ⋅ ∂ F ∂ c ⋅ ∂ c ∂ x + ∂ F ∂ F ⋅ ∂ F ∂ s ⋅ ∂ s ∂ x \begin{equation} \frac{\partial F}{\partial x}=\frac{\partial F}{\partial F}\cdot\frac{\partial F}{\partial c}\cdot\frac{\partial c}{\partial x}+\frac{\partial F}{\partial F}\cdot\frac{\partial F}{\partial s}\cdot\frac{\partial s}{\partial x} \end{equation} xF=FFcFxc+FFsFxs
    在这里插入图片描述

3. 矩阵乘法

  • 假设我们有三个矩阵A,B,C表示如下:
    A m × n , B n × p , C p × q \begin{equation} A_{m\times n},B_{n\times p},C_{p\times q} \end{equation} Am×n,Bn×p,Cp×q
  • 第一种方法 ( A B ) C (AB)C (AB)C - 前向传播算法
    A m × n ⋅ B n × p = ( A B ) m × p → m n p    c a l c u l a t e ( A B ) m × p ⋅ C p × q = ( A B C ) m × q → m p q    c a l c u l a t e T o t a l { ( A B ) C } = m n p + m p q = m p ( n + q ) \begin{equation}\begin{aligned} &A_{m\times n}\cdot B_{n\times p}=(AB)_{m\times p}\to mnp \;calculate\\ &(AB)_{m\times p}\cdot C_{p\times q}=(ABC)_{m\times q}\to mpq \;calculate\\ &Total_{\{(AB)C\}}=mnp+mpq=mp(n+q) \end{aligned}\end{equation} Am×nBn×p=(AB)m×pmnpcalculate(AB)m×pCp×q=(ABC)m×qmpqcalculateTotal{(AB)C}=mnp+mpq=mp(n+q)
  • 第二种方法 A ( B C ) A(BC) A(BC)- 反向传播算法
    B n × p ⋅ C p × q = ( B C ) n × q → n p q    c a l c u l a t e A m × n ⋅ ( B C ) n × q = ( A B C ) m × q → m n q    c a l c u l a t e T o t a l { A ( B C ) } = n p q + m n q = n q ( p + m ) \begin{equation}\begin{aligned} &B_{n\times p}\cdot C_{p\times q}=(BC)_{n\times q}\to npq \;calculate\\ &A_{m\times n}\cdot (BC)_{n\times q}=(ABC)_{m\times q}\to mnq \;calculate\\ &Total_{\{A(BC)\}}=npq+mnq=nq(p+m) \end{aligned}\end{equation} Bn×pCp×q=(BC)n×qnpqcalculateAm×n(BC)n×q=(ABC)m×qmnqcalculateTotal{A(BC)}=npq+mnq=nq(p+m)
  • 小结: 当 C为列向量,即q=1时,我们发现A(BC)的方式明显计算量小于(AB)C的计算方式,所以反向传播计算得到的计算量小于正向传播的计算量,mpn三个数字相乘结果会很大
    T o t a l { ( A B ) C } = m n p + m p q = m p ( n + q ) = m p ( n + 1 ) T o t a l { A ( B C ) } = n p q + m n q = n q ( p + m ) = n ( p + m ) \begin{equation}\begin{aligned} &Total_{\{(AB)C\}}=mnp+mpq=mp(n+q)=mp(n+1)\\ &Total_{\{A(BC)\}}=npq+mnq=nq(p+m)=n(p+m) \end{aligned}\end{equation} Total{(AB)C}=mnp+mpq=mp(n+q)=mp(n+1)Total{A(BC)}=npq+mnq=nq(p+m)=n(p+m)

4. 伴随方法Adjoint method【后续补充】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值