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=∂L∂zl δ l = ∂ L ∂ z l
则损失函数L关于关于第l层的偏导如下:
δl=∂L∂zl+1∂zl+1∂zl=δl+1∂ReLU(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∂α=∂L∂zl+1∂zl+1∂α=δl+1∂PReLU(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