常用的激活(激励)函数——深度学习笔记(建议收藏)

常用的激活(激励)函数——深度学习笔记(建议收藏) 1
bottom_diff[i]=top_diff[i]*((bottom_data[i]>0)+negative_slope*(bottom_data[i]<=0));
这句话就是说间断点的求导按左导数来计算 。 也就是默认情况下(negative_slope=0),RELU的间断点处的导数认为是0 。
3.5LeakyReLU函数(P-ReLU) 1
2
3
4
5
6
7
8
9
10
11
12
13
frommatplotlibimportpyplotasplt
importnumpyasnp
fig=plt.figure()
x=np.arange(-10,10,0.025)
a=0.2
plt.plot(x,x*np.clip((x>=0),a,1))
plt.title("y=LeakyRelu(x)")
plt.show()
frommatplotlibimportpyplotasplt
plt.plot(x,np.clip((x>=0),a,1),"o")
plt.title("y=LeakyRelu'(x)")
plt.show()
人们为了解决DeadReLUProblem , 提出了将ReLU的前半段设为ax而非0 , 通常a=0.01 , 另外一种直观的想法是基于参数的方法 , 即ParmetricReLU:f(x)=max(ax,x) , 其中a可由方向传播算法学出来 。 理论上来说 , LeakyReLU有ReLU的所有优点 , 外加不会有DeadReLU问题 , 但是在实际操作当中 , 并没有完全证明LeakyReLU总是好于ReLU 。
LeakyReLU主要是为了避免梯度小时 , 当神经元处于非激活状态时 , 允许一个非0的梯度存在 , 这样不会出现梯度消失 , 收敛速度快 。 他的优缺点根ReLU类似 。
3.6ELU函数(ExponentialLinearUnit)融合了Sigmoid和ReLU , 左侧具有软饱和性 , 右侧无饱和性 。
右侧线性部分使得ELU讷讷狗狗缓解梯度消失 , 而左侧软饱能够让ELU对输入变化或噪声更鲁棒 。 因为函数指数项所以计算难度会增加 。
函数及导数的图像如下图所示:
3.7Maxout函数这个函数可以参考论文《maxoutnetworks》 , Maxout是深度学习网络中的一层网络 , 就像池化层 , 卷积层一样 , 我们可以把maxout看成是网络的激活函数层 , 我们假设网络某一层的输入特征向量为:X=(x1,x2,....xd) , 也就是我们输入的d个神经元 , 则maxout隐藏层中神经元的计算公式如下:
它用于RELU的优点而且没有死区 , 但是它的参数数量却增加了一倍 。
因此 , Maxout继承了ReLU的优点 , 同时又没有“一不小心就挂了”的担忧 。 但相比ReLU , 因为有2次线性映射运算 , 因此计算量也会翻倍 。
【常用的激活(激励)函数——深度学习笔记(建议收藏)】我们可以这样理解 , 本来传统的MLP算法在第i层到第i+1层 , 参数只有一组 , 然而现在我们不这么干了 , 我们在这一层同时训练n组的w,b参数 , 然后选择激活值Z最大的作为下一层神经元的激活值 , 这个max(Z)函数即充当了激活函数 。
3.8ReLU6函数ReLU在x>0的区域使用x进行线性激活 , 有可能造成激活后的值太大 , 影响模型的稳定性 , 为抵消ReLU激活函数的线性增长部分 , 可以使用ReLU6函数 。
ReLU6激活函数和导函数分别如下:
1
2
3
4
5
6
7
8
9
10
11
12
frommatplotlibimportpyplotasplt
importnumpyasnp
fig=plt.figure()
x=np.arange(-10,10,0.025)
plt.plot(x,np.clip(x,0,6))
plt.title("y=relu6(x)=min(max(x,0),6)")
plt.show()
frommatplotlibimportpyplotasplt
plt.plot(x,(x>0)&(x<6),"o")
plt.title("y=relu6'(x)")
plt.show()
3.9Softmax函数提起softmax函数 , 我们首先理清全连接层到损失层之间的计算 , 来看下面这幅图(侵删!):
现在知道softmax的输出向量的意思了 , 就是概率 , 该样本属于各个类的概率!
softmax函数 , 又称为归一化指数函数 。 它是二分类函数Sigmoid在多分类上的推广 , 目的是将多分类的结果以概率的形式展现出来 , 下图展示了softmax的计算方法:
首先 , 我们知道概率有两个性质:1 , 预测的概率为非负数‘2 , 各种预测结果概率之和等于1.
softmax就是将在负无穷到正无穷上的预测结果按照这两步转换为概率的 。
3.9.1将预测结果转化为非负数 。
下图是y=exp(x)的图像 , 我们可以知道指数函数的值域取值范围是零到正无穷 , softmax第一步就是将模型的预测结果转化到指数函数上 , 这样保证了概率的非负性 。
为了确保各个预测结果的概率之和等于1 , 我们只需要将转换后的结果进行归一化处理 。 方法就是将转化后的结果除以所有转化后结果之和 , 可以理解为转化后结果占总数的百分比 。 这样就得到了近似的概率 。
简单举个例子:
假如模型对一个三分类问题的预测结果为-3、1.5、2.7 。 我们要用softmax将模型结果转为概率 。 步骤如下:
1)将预测结果转化为非负数
y1=exp(x1)=exp(-3)=0.05
y2=exp(x2)=exp(1.5)=4.48
y3=exp(x3)=exp(2.7)=14.88
2)各种预测结果概率之和等于1
z1=y1/(y1+y2+y3)=0.05/(0.05+4.48+14.88)=0.0026
z2=y2/(y1+y2+y3)=4.48/(0.05+4.48+14.88)=0.2308
z3=y3/(y1+y2+y3)=14.88/(0.05+4.48+14.88)=0.7666
总结一下 , softmax如何将多分类输出转换为概率 , 可以分为两步:
1 , 分子:通过指数函数 , 将实数输出映射到零到正无穷2 , 分母:将所有结果相加 , 进行归一化下面是斯坦福大学CS224n课程中最softmax的解释:
1 , 首先尝试ReLU , 速度快 , 但是要注意训练的状态2 , 如果ReLU效果欠佳 , 尝试LeakyReLU或者Maxout等变种3 , 尝试tanh正切函数(以零为中心 , 零点处梯度为1)4 , Sigmoidtanh在RMM(LSTM注意力机制等)结构中有所应用 , 作为门控或者概率值5 , 在浅层神经网络中 , 如不超过四层 , 可选择使用多种激励函数 , 没有太大的影响深度学习中往往需要大量时间来处理大量数据 , 模型的收敛速度是尤为重要的 。 所以 , 总体上来讲 , 训练深度学习网络尽量使用zero-centered数据(可以经过数据预处理实现)和zero-centered输出 。 所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度 。
如果是使用ReLU , 那么一定要小心设置learningrate , 而且要注意 , 不要让网络出现很多“dead”神经元 , 如果这个问题不好解决 , 那么可以试试LeakyReLU,PReLU,或者Maxout 。
最好不要用Sigmoid函数 , 不过可以试试tanh , 不过可以预期它的效果会比不上ReLU和maxout 。
最后 , 咱给小编:
1.点赞+关注
2.点头像关注后多多评论 , 转发给有需要的朋友 。
谢谢!!


    推荐阅读