selu激活函数和自归一化网络(SNN)

最近出现了一个新的激活函数:缩放指数线性单元(scaled exponential linear units,selu),根据该激活函数得到的网络具有自归一化功能。

首先给出文章地址:https://arxiv.org/pdf/1706.02515.pdf

然后大概讲一下这个激活函数的作用(个人理解,也有可能有误)。
一般在深度学习中,在每层添加批处理能够使得网络收敛的更快,同时在效果上也有提升。
这篇文章就在思考,能不能够提出一种激活函数,经过该激活函数后使得样本分布自动归一化到0均值和单位方差,在这篇文章中,作者给出了长达97的证明,证明了在满足以下两个条件的情况下,使用该激活函数后使得样本分布满足零均值和单位方差:
1 按照给定的参数对权重初始化:对于正态分布的初始化,初始化参数为0均值,方差为sqrt(1/n),n是输入的通道个数,在tensorflow里面提供的比较好的实现:
tf.initializers.variance_scaling_initializer(factor=1.0,model=’FAN_IN’)
也可以自己直接指定,详细的参数介绍可以看看下面的网站:http://www.cnblogs.com/denny402/p/6932956.html
2 按照给定的参数对样本计算激活函数:
这里写图片描述
其中lamada:1.0507009873554804934193349852946
alpha:1.6732632423543772848170429916717
这两个值是在文章中进行证明后得到的,如果需要得到归一化后得到指定均值和方差的lamada和alpha,文章中也给出了相应的计算公式。

下面给出tensorflow中实现的selu激活函数:

def selu(x):
  with ops.name_scope('elu') as scope:
    alpha = 1.6732632423543772848170429916717
    scale = 1.0507009873554804934193349852946
    return scale*tf.where(x>0.0,x,alpha*tf.nn.elu(x))

你可能感兴趣的:(深度学习(deep,learning))