🌀 光滑化(Smoothing):通过求取不可导函数的可导近似来解决此问题。将argmax替换为softmax(软最大值)是一个可行的方案。这样可以将argmax的输出转换为softargmax,使输出结果更接近真实的最大值。 🔄 Gumbel Softmax:在离散情形下,Gumbel Max和Gumbel Softmax提供了有效的解决方案。Gumbel Softmax通过引入退火参...
🛠️ 例如,可以通过调整学习率、添加正则化项或者采用更复杂的网络结构来改善训练效果。此外,还可以尝试使用其他可微分的近似方法,如Gumbel-Softmax,来替代传统的argmax操作。📈 在实际应用中,克服argmax的不可导性仍然是一个挑战。需要不断地探索和实验,以找到最适合特定问题的解决方案。0 0 发表评论 发表 作...
而Straight-Through Gumbel Estimator就像是一个“聪明的助手”,它不仅能帮你选出最优选项,还能告诉你为什么选这个,让你的学习更加高效。 此图展示了Straight-Through Gumbel Estimator如何解决argmax不可导问题。通过引入Gumbel噪声和可导近似,使得原本不可导的argmax操作变得可导,从而支持梯度反向传播和模型优化。 关键词...
1. max 函数的光滑化 max(x,y)的向量空间如图所示,是有一条不可导的线的存在的,将max函数光滑化...
在实际应用中,跳过argmax操作(通过stop gradient operation)是一个简便的解决办法。例如,通过设置`quantize = input + (quantize - input).detach()`,可以避免在梯度回传过程中argmax操作对梯度的影响。然而,这种解决方法仅在特定场景下有效,并非全面解决方案。为了解决argmax不可导性问题,可以采用...
使用Gumbel-Softmax:Gumbel-Softmax可以通过加入噪声来消除argmax不可导性。使用连续变量:使用连续变量...
因为取值不能发生变化。argmax是不可导的,因为argmax(x1,x2)的取值是0ifx1>x2,1ifx2>x1,并且只要x1和x2不相等,那么对x1和x2进行一个很微小的变化,argmax的值是不发生变化的。argmax是一种函数,是对函数求参数(集合)的函数。
通过argmax进行采样 2. 反向传播 反向传播就要对p求导了。显然这个式子里面有argmax这个部分是无法求导的,∴此时采用softmax,用可导的softmax代替一下这里的argmax函数,问题完全解决。 这个式子中,τ 是温度参数,参数τ越小,越接近one_hot向量。此时就能对p求导了。
可以对argmax/argmin 这种不可导的操作直接忽视,也就是锁定: classArgMax(torch.autograd.Function): @staticmethod defforward(ctx,input): idx=torch.argmax(input,1) output=torch.zeros_like(input) output.scatter_(1,idx,1) returnoutput @staticmethod...
看了一下回答,发现了一些解法。总结来看,就是把argmax用一个可导的形式来代替,这样就可以了。在所有的回答中,我发现了两个回答比较好,特总结如此: 图1 上述回答的核心思想是:利用softmax的梯度来模拟argmax的梯度,但是有个小问题是,c这一项也应该需要detach,不然的话,还是梯度还是会回流到argmax,可能还是不对...