文章目录
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∗)=(∂x1∂f(x),∂x2∂f(x),⋯,∂xn∂f(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=dy3dF⋅dy2dy3⋅dy1dy1⋅dxdy1 - 每次看到向量或者矩阵的乘法,就会发现这个不断进行相乘会导致值趋近于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} ∂x∂F=∂c∂F⋅∂x∂c+∂s∂F⋅∂x∂s
- 后向传播-链式法则求导:
∂ 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} ∂x∂F=∂F∂F⋅∂c∂F⋅∂x∂c+∂F∂F⋅∂s∂F⋅∂x∂s
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×n⋅Bn×p=(AB)m×p→mnpcalculate(AB)m×p⋅Cp×q=(ABC)m×q→mpqcalculateTotal{(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×p⋅Cp×q=(BC)n×q→npqcalculateAm×n⋅(BC)n×q=(ABC)m×q→mnqcalculateTotal{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)