深度学习——激活函数ReLu、LReLu、PReLu原理解析
简介
论文链接: https://arxiv.org/abs/1502.01852
- 由于项目需要,需要了解msra 权重初始化方法原理, 正好Kaiming 大神这篇论文提出了PReLu。本博客主要介绍PReLu。文中两个创新点是使用PReLu和msra初始化后,在I ImageNet 2012 classification dataset上,达到top5=4.94%,超越了人类识别水平。
原理分析
激活函数主要来做非线性变换,目前我知道激活函数有20多种,CV领域主要用到是sigmoid、ReLu系列。
- ReLu公式
f ( y i ) = { y i i f , y i > 0 0 i f , y i ≤ 0 ( 1 ) f(y_i)=\left\{ \begin{aligned} y_i & & {if, \quad y_i >0 } \\ 0 & & {if ,\quad y_i \leq0 } \\ \end{aligned} \qquad(1)\right. f(yi)={yi0if,yi>0if,yi≤0(1) - Leaky ReLu(LReLu)公式
f ( y i ) = { y i i f , y i > 0 0.01 ∗ y i i f , y i ≤ 0 ( 2 ) f(y_i)=\left\{ \begin{aligned} y_i & & {if, \quad y_i >0 } \\ 0.01*y_i & & {if ,\quad y_i \leq0 } \\ \end{aligned} \qquad(2)\right. f(yi)={yi0.01∗yiif,yi>0if,yi≤0(2) - PReLu公式
f ( y i ) = { y i i f , y i > 0 a i ∗ y i i f , y i ≤ 0 ( 3 ) f(y_i)=\left\{ \begin{aligned} y_i & & {if, \quad y_i >0 } \\ a_i * y_i & & {if ,\quad y_i \leq0 } \\ \end{aligned} \qquad(3)\right. f(yi)={yiai∗yiif,yi>0if,yi≤0(3) - The motivation of LReLU is to avoid zero gradients, PReLu是为了防止ReLu在小于0的情况下,梯度为0。根据文中作者介绍,LReLu相对与ReLu对模型影响相差不大。故作者提出了PReLu,通过学习 a i a_i ai,让模型更加完美。其实 P R e L u = R e L u + a i ∗ m i n ( 0 , y i ) PReLu= ReLu+a_i *min(0,y_i) PReLu=ReLu+ai∗min(0,yi)
- 当 a i a_i ai = 0.01时候,等于LReLu.
- a i a_i ai 中的 i i i是指 i t h i^{th} ith channel的参数, y i y_i yi是指 i t h i^{th} ithfeature map.
PReLu 反向传播过程
- 来自上一层的delta为 δ \delta δ, 求 a i a_i ai梯度 ,根据 chain rule
- 当一个层中a_i每个通道不共享时候
∂ δ ∂ a i = ∑ i = 1 w ∗ h ∂ δ ∂ f ( y i ) ∂ f ( y i ) ∂ a i = ∑ i = 1 w ∗ h ∂ δ ∂ f ( y i ) { 0 i f , y i > 0 y i i f , y i ≤ 0 ( 4 ) \frac{\partial \delta}{\partial a_i } = \sum_{i=1}^{w*h}\frac{\partial \delta}{\partial f(y_i)} \frac{\partial f(y_i)}{\partial a_i} = \sum_{i=1}^{w*h}\frac{\partial \delta}{\partial f(y_i)} \left\{ \begin{aligned} 0 & & {if, \quad y_i >0 } \\ y_i & & {if ,\quad y_i \leq0 } \\ \end{aligned} \qquad(4)\right. ∂ai∂δ=i=1∑w∗h∂f(yi)∂δ∂ai∂f(yi)=i=1∑w∗h∂f(yi)∂δ{0yiif,yi>0if,yi≤0(4) - 当一个层中只要一个a时,也就是所有通道共享。
∂ δ ∂ a i = ∑ j = 1 c h a n n e l ∑ i = 1 w ∗ h ∂ δ ∂ f ( y i ) ∂ f ( y i ) ∂ a i = ∑ j = 1 c h a n n e l ∑ i = 1 w ∗ h ∂ δ ∂ f ( y i ) { 0 i f , y i > 0 y i i f , y i ≤ 0 ( 5 ) \frac{\partial \delta}{\partial a_i } = \sum_{j=1}^{channel}\sum_{i=1}^{w*h}\frac{\partial \delta}{\partial f(y_i)} \frac{\partial f(y_i)}{\partial a_i} = \sum_{j=1}^{channel}\sum_{i=1}^{w*h}\frac{\partial \delta}{\partial f(y_i)} \left\{ \begin{aligned} 0 & & {if, \quad y_i >0 } \\ y_i & & {if ,\quad y_i \leq0 } \\ \end{aligned} \qquad(5)\right. ∂ai∂δ=j=1∑channeli=1∑w∗h∂f(yi)∂δ∂ai∂f(yi)=j=1∑channeli=1∑w∗h∂f(yi)∂δ{0yiif,yi>0if,yi≤0(5) - update
a
i
a_i
ai
adopt the momentum method when updating ai
Δ a i = u Δ a i + ε ∂ δ ∂ a i ( 6 ) \varDelta a_i = u\varDelta a_i+\varepsilon \frac{\partial \delta}{\partial a_i}\qquad(6) Δai=uΔai+ε∂ai∂δ(6)
u u umomentum, ε \varepsilon ε代表学习速率。use ai = 0:25 as the initialization
throughout this pape
实验结果
文中主要对
a
a
a做了两种实验,一种是一个层只要一个a,也就是share模式。另外一种是一个层中每个通道都有一个a,wise模式。实验表明wise结果更好。