给定一个函数f(x)和\frac{\partial f(x)}{\partial x_i}=\frac{f^2(x1,...,x_i+\pi/2,...,x_n)-f^2(x1,...,x_i-\pi/2,...,x_n)}{f(x)}。当f(x)\to0,\frac{\partial f(x)}{\partial x_i}可以无限大。(f^2(x1,...,x_i+\pi/2,...,x_n)-f^2(x1,...,x_i-\pi/2,...,x_n)总是非零)
对于这种情况,我在梯度下降process...In中的处理经验很少,我的代码f(x)是连续域的,但为了模拟现实世界中的某些过程,f(x)被采样为离散的,并且返回在[0,1]上均匀分布的值。假设离散f(x)具有N标识值,在开始时有一组大小为M (M非常大)的训练集,\{x_i, f(x_i)=\frac{k_i}{N}\}_{i=1..M} (k_i \in 1, 2, ..., N)。
我发现,将1/f(x)设置为0.01这样的值时,f(x)=0很容易达到优化,但比理想的过程稍慢,而设置为更小的值(如0.00001 ),会使f(x)=0对过程产生很大影响,并且无法形成下降曲线。
将无穷大的值替换为一些大的但有限的值是正确的吗?还是有更好的方法来处理无限梯度问题?
提前感谢!
发布于 2019-03-30 10:21:19
将无穷大的值替换为一些大的但有限的值是正确的吗?
是。例如,交叉熵损失函数中的对数也会出现同样的问题,即当p_i \text{log}(p'_i)时p'_i \rightarrow 0。通过将\text{log}(x)替换为\hat{\text{log}}(x) = \text{log}(x+\epsilon)来代替一些小型\epsilon,可以避免这种情况。
类似地,您将分母中的f(x)更改为\hat{f}(x) = max(\epsilon, f(x))。
然而,我建议\hat{f}(x) = f(x) + \epsilon而不是一个截止阈值。这样,f(x_1) < f(x_2) < \epsilon中的差异就不会被忽略,不像最大截断。
https://datascience.stackexchange.com/questions/48255
复制相似问题