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手写数字识别
本文目录
本文介绍常见的激活函数的前向过程及反向传播过程
依赖知识
a) 熟悉全连接层、损失函数的反向传播
b) 熟悉ReLU、LeakyReLU、PReLU、ELU、SELU
ReLU
整流线性单元Rectified Linear Unit
前向过程
ReLU(z)={z0z>0z<=0(1)
后向过程
a) 我们将激活函数也看做一层, 设第
l
层输出为
zl
, 经过激活函数后的输出为
zl+1
b) 记损失函数L关于第
l
层的输出
zl
的偏导为
δl=∂L∂zl
则损失函数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)
LeakyReLU
ReLU在取值小于零部分没有梯度,LeakyReLU在取值小于0部分给一个很小的梯度
前向过程
LeakyReLU(z)={zαzz>0z<=0,α=0.1(3)
后向过程
同Relu可知损失函数L关于关于第l层的偏导为:
δl={δl+1αδl+1zl>0zl<=0,α=0.1(4)
PReLU
参数化ReLU,形式同LeakyRelu,不过
α
不是固定的常量而是根据数据学习到的。
论文地址:https://arxiv.org/pdf/1502.01852.pdf
前向过程
PReLU(z)={zαzz>0z<=0,α是与z相同形状的变量(5)
后向过程
a) 同LeakyRelu可知损失函数L关于关于第l层的偏导为:
δl={δl+1αδl+1zl>0zl<=0,α是需要学习的参数(6)
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)
ELU
指数化ReLU,在取值小于0的部分使用指数
论文地址: https://arxiv.org/pdf/1511.07289.pdf
前向过程
ELU(z)={zα(exp(z)−1)z>0z<=0,α=0.1(8)
后向过程
同LeakyRelu可知损失函数L关于关于第l层的偏导为:
δl={δl+1αδl+1exp(zl)zl>0zl<=0(9)
SELU
缩放指数型线性单元, 就是对ELU加上一个缩放因子
λ
论文地址: https://arxiv.org/pdf/1706.02515.pdf
前向过程
RELU(z)=λ{zα(exp(z)−1)z>0z<=0(10)
其中
λ≈1.0507,α≈1.673
(论文中有大段证明)
后向过程
同ELU可知损失函数L关于关于第l层的偏导为:
δl=λ{δl+1αδl+1exp(zl)zl>0zl<=0(11)