神经网络和反向传播
神经网络架构:
更多的神经元,更大的模型容量,使用更强的正则化进行约束。
神经网络的分层计算
f = W 2 m a x ( 0 , W 1 x + b 1 ) + b 2 f=W_2max(0,W_1x+b_1)+b_2 f=W2max(0,W1x+b1)+b2,其中max函数体现了非线性,如果想要加深网络的层次,必须加上非线性函数。
∂ f ∂ x = ∂ f ∂ y ∂ y ∂ x \frac{\partial f}{\partial x}=\frac{\partial f}{\partial y}\frac{\partial y}{\partial x} ∂x∂f=∂y∂f∂x∂y,此处的 ∂ f ∂ y \frac{\partial f}{\partial y} ∂y∂f是上游梯度, ∂ f ∂ x \frac{\partial f}{\partial x} ∂x∂f是下游梯度, ∂ y ∂ x \frac{\partial y}{\partial x} ∂x∂y是局部梯度。
Sigmoid函数:
σ
=
1
1
+
e
−
x
\sigma=\frac{1}{1+e^{-x}}
σ=1+e−x1,
σ
\sigma
σ在
[
0
,
1
]
[0,1]
[0,1]之间,
∂
σ
∂
x
=
σ
(
1
−
σ
)
\frac{\partial \sigma}{\partial x}=\sigma(1-\sigma)
∂x∂σ=σ(1−σ),Sigmoid函数在
x
x
x很大或者很小的时候,梯度几乎为0,即梯度消失。
梯度流中的基本计算模式:
add gate:两个输入的梯度和上游梯度相等
mul gate:另外一个输入和上游梯度的乘积,例如两个输入为x=2,y=3,上游梯度为5,则x的梯度为
3
∗
5
=
15
3*5=15
3∗5=15,y的梯度为
2
∗
5
=
10
2*5=10
2∗5=10。
copy gate:两个输出,一个输入,输入的梯度等于两个上游梯度的和。
max gate:是两个输入中较大的那个的梯度
向量的反向传播
scalar to scalar:
x
∈
R
,
y
∈
R
,
∂
y
∂
x
∈
R
x\in R,y\in R,\frac{\partial y}{\partial x}\in R
x∈R,y∈R,∂x∂y∈R
vector to scalar:
x
∈
R
n
,
y
∈
R
,
∂
y
∂
x
∈
R
n
,
(
∂
y
∂
x
)
n
=
∂
y
∂
x
n
x\in R^n,y\in R,\frac{\partial y}{\partial x}\in R^n,(\frac{\partial y}{\partial x})_n=\frac{\partial y}{\partial x_n}
x∈Rn,y∈R,∂x∂y∈Rn,(∂x∂y)n=∂xn∂y
vector to vector:
x
∈
R
n
,
y
∈
R
m
,
∂
y
∂
x
∈
R
n
×
m
,
(
∂
y
∂
x
)
n
,
m
=
∂
y
m
∂
x
n
x\in R^n,y\in R^m,\frac{\partial y}{\partial x}\in R^{n\times m},(\frac{\partial y}{\partial x})_{n,m}=\frac{\partial y_m}{\partial x_n}
x∈Rn,y∈Rm,∂x∂y∈Rn×m,(∂x∂y)n,m=∂xn∂ym
但是不管怎么变,Loss L依然是标量,
∂
L
∂
x
\frac{\partial L}{\partial x}
∂x∂L的形状总是与x相同
求向量的反向传播时,求得的雅可比矩阵总是稀疏的,非对角线元素总是0
max(x,a)的梯度:对于任何正数x,max(x,a)'=I(x>a),I(x>a)是示性函数