【发布时间】:2019-01-14 22:18:14
【问题描述】:
我需要一个对我的张量进行四舍五入的激活函数。
函数 round() 的导数(梯度)为 0(或在 tensorflow 中为 None),这使得它无法用作激活函数。
我正在寻找一个强制类似舍入行为的函数,以便我的模型的结果不只是近似一个数字。 (因为我的标签是整数)
我知道公式:tanh ○ sigmoid 用于强制 {-1, 0, 1} 数字仅流经模型,所以是否有一些可导出的函数组合来模拟舍入行为?
【问题讨论】:
-
@PMende 舍入本质上是 non-differntiable。完全不同意 OP 可以以某种方式编写一个有意义的函数来做到这一点。他/她最好的机会是对结果进行四舍五入,然后使用某种
MSE/Huber Loss函数 -
舍入函数不可微分。可微函数尤其是连续的,如果绘制舍入函数,您会发现它是不连续的。
-
@PMende 嗯? ReLU 指定 0 处的导数(它只是不可微分的点)为0。这不是数学 - 这是习惯。 round 没有这种方法可以做到这一点(处处为零是你能做的最好的),如果你考虑一下/知道介绍性微积分,那就很清楚了。
-
@modesitt 如果您考虑一下,并理解高级微积分和分布的概念,那么很明显存在导数。将分布用作函数在简单的应用程序中不起作用,但如果这确实是所需的行为,则可以创建近似值。
-
@modesitt round 的导数是 Dirac 梳,频率为 1,相位为 0.5。每个狄拉克三角函数都可以看作是高斯变得无限薄和无限高的极限。如果您想要舍入行为以及此类函数的梯度,您可以为您的归一化高斯选择一些适当的方差。请注意,我并不是说这会在计算上高效,但如果它真的是某人想要的,它是可行的。
标签: python tensorflow neural-network derivative activation-function