Ограниченная машина Больцмана для вещественных данных - гауссовские линейные единицы (glu) -

Я хочу, чтобы моя ограниченная машина Больцмана узнала новое представление достоверных данных (см.: Hinton - 2010 - Практическое руководство по обучению RBM). Я борюсь с реализацией гауссовских линейных единиц.

С гауссовскими линейными единицами в видимом слое энергия меняется на E(v,h)= ∑ (v-a)²/2σ - ∑ bh - ∑v/σ h w. Теперь я не знаю, как изменить алгоритм обучения контрастирующей дивергенции. Видимые единицы больше не будут отбираться, поскольку они являются линейными. Я использую математическое ожидание (средняя активация) p(v_i=1|h)= a +∑hw + N(0,1) как свое состояние. Ассоциации не имеют значения (pos: data*p(h=1|v)' neg: p(v=1|h)*p(h=1|v)'). Но это только приводит к случайному шуму, когда я хочу восстановить данные. Коэффициент ошибок перестанет улучшаться примерно на 50%.

Наконец, я хочу использовать гауссовские линейные единицы в обоих слоях. Как я получу состояния скрытых единиц? Я предлагаю использовать активацию среднего поля p(h_i=1|v)= b +∑vw + N(0,1), но я не уверен.

Ответ 2

Я работаю над аналогичным проектом, реализующим RBM с С++ и mexfunction. я нашел из работы профессора Хинтона (в Matlab), что бинарная активация для видимых единиц использует симоидную функцию.     т.е.: vs = sigmoid (bsxfun (@plus, hs * obj.W2 ', obj.b)); Но при реализации гауссовских видимых единиц RBM вам просто нужно пробовать видимые единицы, не используя симоид.     т.е.: vs = bsxfun (@plus, h0 * obj.W2 ', obj.b); или лучше взглянуть на реализацию профессора Хинтона (см.: http://www.cs.toronto.edu/~hinton/code/rbmhidlinear.m)