[Kaiming]Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification

He K, Zhang X, Ren S, et al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification[C]. international conference on computer vision, 2015: 1026-1034.

@article{he2015delving,
title={Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification},
author={He, Kaiming and Zhang, Xiangyu and Ren, Shaoqing and Sun, Jian},
pages={1026--1034},
year={2015}}

本文介绍了一种PReLU的激活函数和Kaiming的参数初始化方法.

主要内容

PReLU

在这里插入图片描述

[f(y_i) = left { egin{array}{ll} y_i, & y_i >0, \ a_i y_i, & y_i le 0. end{array} ight. ]

其中(a_i)是作为网络的参数进行训练的.
等价于

[f(y_i)=max(0, y_i) + a_i min (0,y_i). ]

特别的, 可以一层的节点都用同一个(a).

Kaiming 初始化

Forward case

[mathbf{y}_l=W_lmathbf{x}_l+mathbf{b}_l, ]

在卷积层中时, (mathbf{x}_l)(k imes k imes c)的展开, 故(mathrm{x}_lin mathbb{R}^{k^2c}), 而(mathbf{y}_l in mathbb{R}^{d}), (W_l in mathbb{R^{d imes k^2c}})(每一行都可以视作一个kernel), 并记(n=k^2c).

[mathbf{x}_l=f(mathbf{y}_{l-1}), ]

[c_l = d_{l-1}. ]

在这里插入图片描述

假设(w_l)(x_l)(注意没粗体, 表示(mathbf{w}_l, mathbf{x}_l)中的某个元素)相互独立, 且(w_l)采样自一个均值为0的对称分布之中.

[Var[y_l] = n_l Var [w_lx_l] = n_lVar[w_l]E[x_l^2], ]

除非(E[x_l]=0), (Var[y_l] = n_lVar[w_l]Var[x_l]), 但对于ReLu, 或者 PReLU来说这个性质是不成立的.

如果我们令(b_{l-1}=0), 易证

[E[x_l^2] = frac{1}{2} Var[y_{l-1}], ]

其中(f)是ReLU, 若(f)是PReLU,

[E[x_l^2] = frac{1+a^2}{2} Var[y_{l-1}]. ]

下面用ReLU分析, PReLU是类似的.

[Var[y_l] = frac{1}{2} n_l ar[w_l]Var[y_{l-1}], ]

自然我们希望

[Var[y_i]=Var[y_j] Rightarrow frac{1}{2}n_l Var[w_l]=1, forall l. ]

Backward case

[ ag{13} Delta mathbf{x}_l = hat{W}_l Delta mathbf{y}_l, ]

(Delta mathbf{x}_l)表示损失函数观念与(mathbf{x}_l)的导数, 这里的(mathbf{y}_l)与之前提到的(mathbf{y}_l)有出入, 这里需要用到卷积的梯度回传, 三言两语讲不清, (hat{W}_l)(W_l)的一个重排.

因为(mathbf{x}_l=f(mathbf{y}_{l-1})), 所以

[Delta y_l = f'(y_l) Delta x_{l+1}. ]

假设(f'(y_l))(Delta x_{l+1})相互独立, 所以

[E[Delta y_l]=E[f'(y_l)] E[Delta x_{l+1}] = 0, ]

(f)为ReLU:

[E[(Delta y_l)^2] = Var[Delta y_l] = frac{1}{2}Var[Delta x_{l+1}]. ]

(f)为PReLU:

[E[(Delta y_l)^2] = Var[Delta y_l] = frac{1+a^2}{2}Var[Delta x_{l+1}]. ]

下面以(f)为ReLU为例, PReLU类似

[Var[Delta x_l] = hat{n}_l Var[w_l] Var[Delta y_l] = frac{1}{2} hat{n}_l Var[w_l] Var[Delta x_{l+1}], ]

这里(hat{n}_l=k^2d)(mathbf{y}_l)的长度.

和前向的一样, 我们希望(Var[Delta x_l])一样, 需要

[frac{1}{2}hat{n}_l Var[w_l]=1, forall l. ]

是实际中,我们前向后向可以任选一个(因为误差不会累积).

原文地址:https://www.cnblogs.com/MTandHJ/p/12760160.html