Math 硬乙状结肠是如何定义的

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开发深网。有一个激活“硬乙状结肠”。它的数学定义是什么

我知道什么是乙状结肠。有人在Quora上问了类似的问题:


但是我在任何地方都找不到精确的数学定义?

因为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后端具有相同的数学模型,尽管是手工实现的。您应该对此添加一些参考和/或解释。