Math 硬乙状结肠是如何定义的
我正在使用keras开发深网。有一个激活“硬乙状结肠”。它的数学定义是什么 我知道什么是乙状结肠。有人在Quora上问了类似的问题:Math 硬乙状结肠是如何定义的,math,tensorflow,deep-learning,keras,theano,Math,Tensorflow,Deep Learning,Keras,Theano,我正在使用keras开发深网。有一个激活“硬乙状结肠”。它的数学定义是什么 我知道什么是乙状结肠。有人在Quora上问了类似的问题: 但是我在任何地方都找不到精确的数学定义?因为Keras同时支持Tensorflow和Theano,所以每个后端的具体实现可能会有所不同——我只介绍Theano。对于Theano后端,Keras使用T.nnet.hard\u sigmoid,这依次是: slope=tensor.constant(0.2,dtype=out\u dtype) 移位=张量常数(0.5,
但是我在任何地方都找不到精确的数学定义?因为Keras同时支持Tensorflow和Theano,所以每个后端的具体实现可能会有所不同——我只介绍Theano。对于Theano后端,Keras使用
T.nnet.hard\u sigmoid
,这依次是:
slope=tensor.constant(0.2,dtype=out\u dtype)
移位=张量常数(0.5,dtype=out\u dtype)
x=(x*斜率)+移位
x=张量剪辑(x,0,1)
i、 e.它是:
max(0,min(1,x*0.2+0.5))
作为参考,硬S形函数可以在不同的地方进行不同的定义。在Courbariaux等人2016[1]中,其定义为:
σ是“硬sigmoid”函数:σ(x)=clip((x+1)/2,0,1)=
最大值(0,最小值(1,(x+1)/2))
目的是提供一个概率值(因此将其限制在0
和1
之间),用于神经网络参数(例如权重、激活、梯度)的随机二值化。您可以使用硬sigmoid函数返回的概率p=σ(x)
将参数x
设置为+1
,使用p
概率,或-1
使用概率1-p
[1] -“二值化神经网络:训练深度神经网络,权重和激活限制为+1或-1”,Matthieu Courbariaux,Itay Hubara,Daniel Soudry,Ran El Yaniv,Yoshua Bengio,(于2016年2月9日提交,最新修订版,2016年3月17日(本版,v3))
clip((x + 1)/2, 0, 1)
用编码术语来说:
max(0, min(1, (x + 1)/2))
硬sigmoid通常是logistic sigmoid函数的分段线性近似。根据要保留的原始sigmoid的属性,可以使用不同的近似值
我个人喜欢将函数保持在零,即σ(0)=0.5
(移位)和σ(0)=0.25
(斜率)。这可以编码如下
def hard_sigmoid(x):
return np.maximum(0, np.minimum(1, (x + 2) / 4))
Keras的TensorFlow后端具有相同的数学模型,尽管是手工实现的。您应该对此添加一些参考和/或解释。