Ограниченная машина Больцмана для вещественных данных - гауссовские линейные единицы (глю) -
Я хочу, чтобы моя машина с ограниченным доступом Больцмана выучила новое представление реальных данных (см.: Хинтон - 2010 - Практическое руководство по обучению УОР). Я борюсь с реализацией гауссовых линейных единиц.
При гауссовых линейных единицах в видимом слое энергия изменяется на E(v,h)= ∑ (v-a)²/2σ - ∑ bh - ∑v/σ h w
, Теперь я не знаю, как изменить алгоритм обучения контрастной дивергенции. Видимые единицы больше не будут отбираться, поскольку они линейны. Я использую ожидание (скупая активация) p(v_i=1|h)= a +∑hw + N(0,1)
как их состояние. Ассоциации остаются без изменений (поз: data*p(h=1|v)'
нег: p(v=1|h)*p(h=1|v)'
). Но это только приводит к случайному шуму, когда я хочу восстановить данные. Уровень ошибок перестанет улучшаться примерно на 50%.
Наконец, я хочу использовать гауссовы линейные единицы в обоих слоях. Как я тогда получу состояния скрытых юнитов? Я предлагаю с помощью активации среднего поля p(h_i=1|v)= b +∑vw + N(0,1)
но я не уверен.
2 ответа
Вы можете взглянуть на гауссовский RBM, который предоставил сам Хинтон. Найдите его здесь. http://www.cs.toronto.edu/~hinton/code/rbmhidlinear.m
Я работал над аналогичным проектом, реализующим RBM с ме-функцией C++ и matlab. Я нашел из реализации профессора Хинтона (в Matlab), что двоичная активация для видимых единиц использует функцию simoid. то есть: vs = сигмоид (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)