Прежде чем я дам вам свой ответ, давайте немного подумаем о причинах, лежащих в основе автокодировщика (AE):
Цель автокодировщика состоит в том, чтобы неконтролируемым образом узнать что-то о базовой структуре входных данных. . Как AE достигает этой цели? Если ему удается восстановить входной сигнал из выходного сигнала (который обычно имеет меньшую размерность), это означает, что он не потерял информацию и ему удалось эффективно изучить более компактное представление.
В большинстве примеров предполагается, для простоты, что и входной, и выходной сигнал находятся в диапазоне [0..1]. Следовательно, одна и та же нелинейность (sigmf
) применяется как для получения выходного сигнала, так и для восстановления входных данных из выходов.
Что-то вроде
output = sigmf( W*input + b ); % compute output signal
reconstruct = sigmf( W'*output + b_prime ); % notice the different constant b_prime
Затем этап обучения AE пытается минимизировать ошибку обучения || output - reconstruct ||
.
Однако кто сказал, что нелинейность реконструкции должна быть идентична той, которая используется для вычисления выходных данных?
В вашем случае предположение, что входные значения находятся в диапазоне [0..1], не выполняется. Таким образом, кажется, что для реконструкции необходимо использовать другую нелинейность. Вы должны выбрать тот, который соответствует фактическому диапазону ваших входных данных.
Если, например, ваш входной диапазон находится в (0..inf), вы можете рассмотреть возможность использования exp
или ().^2
в качестве нелинейности реконструкции. Вы можете использовать многочлены различной степени log
или любую другую функцию, которая, по вашему мнению, может соответствовать размеру ваших входных данных.
Отказ от ответственности: я никогда не сталкивался с таким случаем и не встречал такого типа решения в литературе. Однако я считаю, что это имеет смысл и, по крайней мере, стоит попробовать.
person
Shai
schedule
14.07.2014
sigmf
на что-то другое, например,log
, может быть? - person Shai   schedule 14.07.2014