2016-05-13 11 views
1

У меня есть две функции, которые предположительно будут давать равные результаты: f1(x,theta)=f2(x,theta).принимая градиент потери хубера в anano

Учитывая вход x, мне нужно найти параметры theta, которые делают это равенство удержанием как можно лучше.

Первоначально я думал об использовании потерь в квадрате и минимизации (f1(x,theta)-f2(x,theta))^2 и решении через SGD.

Однако я думал о том, чтобы сделать потерю более точной и используя huber (или абсолютную потерю) разницы. Потеря Хубера является кусочной функцией (т.е. изначально она квадратична, а затем переходит в линейную функцию).

Как я могу взять градиент потери моего хупера в theano?

ответ

1

Довольно простая реализация потери 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 возвращает символическое представление потери, которые вы можете подключить в theano.tensor.grad, чтобы получить градиент и использовать его для минимизации с использованием SGD