在theano中采用huber loss的梯度
taking the gradient of huber loss in theano
我有两个函数应该会产生相同的结果:f1(x,theta)=f2(x,theta)
。
给定输入 x
,我需要找到使该等式尽可能成立的参数 theta
。
最初我在考虑使用平方损失和最小化 (f1(x,theta)-f2(x,theta))^2
并通过 SGD 求解。
不过,我正在考虑让损失更精确,并使用差异的 huber(或绝对损失)。
Huber loss是一个分段函数(即最初是二次函数,然后变成线性函数)。
如何在 theano 中获取 huber 损失的梯度?
可以在 theano 中找到一个非常简单的 huber 损失实现 here
这是一个代码片段
import theano.tensor as T
delta = 0.1
def huber(target, output):
d = target - output
a = .5 * d**2
b = delta * (abs(d) - delta / 2.)
l = T.switch(abs(d) <= delta, a, b)
return l.sum()
函数 huber
将 return 损失的符号表示,然后您可以将其插入 theano.tensor.grad
以获得梯度并使用它来最小化 SGD
我有两个函数应该会产生相同的结果:f1(x,theta)=f2(x,theta)
。
给定输入 x
,我需要找到使该等式尽可能成立的参数 theta
。
最初我在考虑使用平方损失和最小化 (f1(x,theta)-f2(x,theta))^2
并通过 SGD 求解。
不过,我正在考虑让损失更精确,并使用差异的 huber(或绝对损失)。 Huber loss是一个分段函数(即最初是二次函数,然后变成线性函数)。
如何在 theano 中获取 huber 损失的梯度?
可以在 theano 中找到一个非常简单的 huber 损失实现 here
这是一个代码片段
import theano.tensor as T
delta = 0.1
def huber(target, output):
d = target - output
a = .5 * d**2
b = delta * (abs(d) - delta / 2.)
l = T.switch(abs(d) <= delta, a, b)
return l.sum()
函数 huber
将 return 损失的符号表示,然后您可以将其插入 theano.tensor.grad
以获得梯度并使用它来最小化 SGD