激活(Activation)层又叫神经元(Neuron)层,最主要的是激活函数的设置。
一般来说,这一层是元素级的运算符,从底部blob作为输入并产生一个相同大小的顶部blob:
- 输入:n * c * h * w
- 输出:n * c * h * w
ReLU / Rectified-Linear and Leaky-ReLU
- 层类型:ReLU
- 参数(ReLUParameter relu_param):
- 可选参数
- negative_slope [default 0]: 用来指定负斜率部分的因子
ν
。完整的函数表达式为:
y=max(0,x)+νmin(0,x)
。反向传播的公式为
∂E∂x=⎧⎩⎨⎪⎪⎪⎪⎪⎪ν∂E∂y∂E∂yifx≤0ifx>0
- negative_slope [default 0]: 用来指定负斜率部分的因子
ν
。完整的函数表达式为:
y=max(0,x)+νmin(0,x)
。反向传播的公式为
- 可选参数
示例(./models/bvlc_reference_caffenet/train_val.prototxt):
layer { name: "relu1" type: "ReLU" bottom: "conv1" top: "conv1" }
支持in-place计算,bottom输入和top输出可以相同避免内存消耗。
Sigmoid
- 层类型:Sigmoid
示例( ./models/bvlc_reference_caffenet/train_val.prototxt):
layer { name: "relu1" type: "ReLU" bottom: "conv1" top: "conv1" }
激活函数表达式为 y=(1+exp(−x))−1 ,由于收敛速度问题现在用的不多了。
TanH、AbsVal、BNLL
- 层类型:TanH、AbsVal、BNLL
示例:
layer { name: "layer" bottom: "in" top: "out" type: "TanH"#"AbsVal"、“BNLL”官网上BNLL没有加双引号,应该是有误 }
分别是双曲正切函数、绝对值、binomial normal log likelihood( f(x)=log(1+ex) )的简称。
Power
- 层类型:Power
- 参数 (PowerParameter power_param):
- 可选
- power [default 1]
- scale [default 1]
- shift [default 0]
- 可选
示例:
layer { name: "layer" bottom: "in" top: "out" type: "Power" power_param { power: 2 scale: 1 shift: 0 } }
幂运算函数为 f(x)=(shift+scale∗x)p 。
Caffe中的激活层还有很多,也有一些是加速的层。比如DropoutLayer现在是非常常用的一种网络层,只用在训练阶段,一般用在网络的全连接层中,可以减少网络的过拟合问题。
具体的使用再具体看./src/caffe/layers/下的文件吧。