0_3-激活函数的反向传播-ReLU、LeakyReLU、PReLU、ELU、SELU

numpy实现神经网络系列

工程地址:https://github.com/yizt/numpy_neuron_network

基础知识

0_1-全连接层、损失函数的反向传播

0_2_1-卷积层的反向传播-单通道、无padding、步长1

0_2_2-卷积层的反向传播-多通道、无padding、步长1

0_2_3-卷积层的反向传播-多通道、无padding、步长不为1

0_2_4-卷积层的反向传播-多通道、有padding、步长不为1

0_2_5-池化层的反向传播-MaxPooling、AveragePooling、GlobalAveragePooling、GlobalMaxPooling

0_3-激活函数的反向传播-ReLU、LeakyReLU、PReLU、ELU、SELU

0_4-优化方法-SGD、AdaGrad、RMSProp、Adadelta、Adam

DNN练习

1_1_1-全连接神经网络做线性回归

1_1_2-全连接神经网络做mnist手写数字识别

CNN练习

2_1-numpy卷积层实现

2_2-numpy池化层实现

2_3-numpy-cnn-mnist手写数字识别

本文目录

    • numpy实现神经网络系列
    • 依赖知识
    • ReLU
      • 前向过程
      • 后向过程
    • LeakyReLU
      • 前向过程
      • 后向过程
    • PReLU
      • 前向过程
      • 后向过程
    • ELU
      • 前向过程
      • 后向过程
    • SELU
      • 前向过程
      • 后向过程

本文介绍常见的激活函数的前向过程及反向传播过程

依赖知识

a) 熟悉全连接层、损失函数的反向传播

b) 熟悉ReLU、LeakyReLU、PReLU、ELU、SELU

ReLU

​ 整流线性单元Rectified Linear Unit

前向过程

ReLU(z)={z0z>0z<=0(1) (1) R e L U ( z ) = { z z > 0 0 z <= 0

后向过程

a) 我们将激活函数也看做一层, 设第 l l 层输出为 zl z l , 经过激活函数后的输出为 zl+1 z l + 1

b) 记损失函数L关于第 l l 层的输出 zl z l 的偏导为 δl=Lzl δ l = ∂ L ∂ z l

​ 则损失函数L关于关于第l层的偏导如下:

δl=Lzl+1zl+1zl=δl+1ReLU(zl)zl=δl+1{10zl>0zl<=0={δl+10zl>0zl<=0(1)(2)(3)(2) (1) δ l = ∂ L ∂ z l + 1 ∂ z l + 1 ∂ z l (2) = δ l + 1 ∂ R e L U ( z l ) ∂ z l (3) = δ l + 1 { 1 z l > 0 0 z l <= 0 (2) = { δ l + 1 z l > 0 0 z l <= 0

LeakyReLU

​ ReLU在取值小于零部分没有梯度,LeakyReLU在取值小于0部分给一个很小的梯度

前向过程

LeakyReLU(z)={zαzz>0z<=0,α=0.1(3) (3) L e a k y R e L U ( z ) = { z z > 0 α z z <= 0 , α = 0.1

后向过程

同Relu可知损失函数L关于关于第l层的偏导为:

δl={δl+1αδl+1zl>0zl<=0,α=0.1(4) (4) δ l = { δ l + 1 z l > 0 α δ l + 1 z l <= 0 , α = 0.1

PReLU

​ 参数化ReLU,形式同LeakyRelu,不过 α α 不是固定的常量而是根据数据学习到的。

论文地址:https://arxiv.org/pdf/1502.01852.pdf

前向过程

PReLU(z)={zαzz>0z<=0,αz(5) (5) P R e L U ( z ) = { z z > 0 α z z <= 0 , α 是 与 z 相 同 形 状 的 变 量

后向过程

a) 同LeakyRelu可知损失函数L关于关于第l层的偏导为:

δl={δl+1αδl+1zl>0zl<=0,α(6) (6) δ l = { δ l + 1 z l > 0 α δ l + 1 z l <= 0 , α 是 需 要 学 习 的 参 数

b) 损失函数L关于关于参数 α α 的偏导为:

Lα=Lzl+1zl+1α=δl+1PReLU(zl)α=δl+1{0zlzl>0zl<=0={0δl+1zlzl>0zl<=0(4)(5)(6)(7) (4) ∂ L ∂ α = ∂ L ∂ z l + 1 ∂ z l + 1 ∂ α (5) = δ l + 1 ∂ P R e L U ( z l ) ∂ α (6) = δ l + 1 { 0 z l > 0 z l z l <= 0 (7) = { 0 z l > 0 δ l + 1 z l z l <= 0

ELU

​ 指数化ReLU,在取值小于0的部分使用指数

论文地址: https://arxiv.org/pdf/1511.07289.pdf

前向过程

ELU(z)={zα(exp(z)1)z>0z<=0,α=0.1(8) (8) E L U ( z ) = { z z > 0 α ( exp ⁡ ( z ) − 1 ) z <= 0 , α = 0.1

后向过程

同LeakyRelu可知损失函数L关于关于第l层的偏导为:

δl={δl+1αδl+1exp(zl)zl>0zl<=0(9) (9) δ l = { δ l + 1 z l > 0 α δ l + 1 exp ⁡ ( z l ) z l <= 0

SELU

​ 缩放指数型线性单元, 就是对ELU加上一个缩放因子 λ λ

论文地址: https://arxiv.org/pdf/1706.02515.pdf

前向过程

RELU(z)=λ{zα(exp(z)1)z>0z<=0(10) (10) R E L U ( z ) = λ { z z > 0 α ( exp ⁡ ( z ) − 1 ) z <= 0

​ 其中 λ1.0507,α1.673 λ ≈ 1.0507 , α ≈ 1.673 (论文中有大段证明)

后向过程

同ELU可知损失函数L关于关于第l层的偏导为:

δl=λ{δl+1αδl+1exp(zl)zl>0zl<=0(11) (11) δ l = λ { δ l + 1 z l > 0 α δ l + 1 exp ⁡ ( z l ) z l <= 0

你可能感兴趣的:(numpy构建神经网络)