Обучение нейронной сети с ограниченными единицами

Мотивация:

Современный алгоритм распознавания объектов - это глубокая сверточная нейронная сеть, обученная с помощью обратного распространения, где основная проблема заключается в том, чтобы заставить сеть обосноваться в хороших локальных минимумах: http://books.nips.cc/papers/files/nips25/NIPS2012_0534.pdf

Можно записать количество спайков от мозга от нейронов, которые поддерживают распознавание объектов, и разумно утверждать, что нейронная сеть, которая приближает ответ этих нейронов, находится в хороших локальных минимумах. http://www.sciencedirect.com/science/article/pii/S089662731200092X

Если вы должны были ограничить подмножество единиц в нейронной сети для воспроизведения определенных значений для определенных входных данных (например, счетчик пиков, записанных нейронами в ответ на эти изображения), а затем уменьшить ошибку с помощью градиентного спуска с ограничением, это может быть в состоянии заставить сеть обосноваться в хороших локальных минимумах.

Точный вопрос:

Каков наиболее эффективный в вычислительном отношении способ изменения весов нейронной сети в направлении, которое максимизирует снижение погрешности, учитывая, что некоторые нейроны в сети должны иметь определенные заранее определенные значения?

Прогресс на данный момент:

Это, кажется, очень сложная проблема множителя Лагранжа, и после некоторой работы над ней и поиска существующей литературы по этой теме, мне стало интересно, слышал ли кто-нибудь о подобной работе.

1 ответ

Решение

Ваша лучшая ставка - Дивергенция Кульбака-Либлера (КЛ). Это позволяет вам установить значение, к которому вы хотите, чтобы ваши нейроны были близки. В питоне это

def _binary_KL_divergence(p, p_hat):
    """
    Computes the a real, KL divergence of two binomial distributions with
    probabilities p  and p_hat respectively.
    """
    return (p * np.log(p / p_hat)) + ((1 - p) * np.log((1 - p) / (1 - p_hat)))                  

где p является ограниченным значением, и p_hat среднее значение активации (или значение нейрона) ваших образцов. Это так же просто, как добавить термин к целевой функции. Итак, если алгоритм минимизирует квадратную ошибку ||H(X) - y||^2новая форма будет ||H(X) - y||^2 + KL_divergence_term,

Как часть функции стоимости, она штрафует средние активации, которые расходятся от p выше или ниже (рисунок 1). То, как вес обновляется, зависит от частичной дифференциации новой целевой функции.

введите описание изображения здесь

                     (Figure 1 : KL-Divergence Cost when `p = 0.2)

Фактически, я зародил эту идею в разреженных авто-кодировщиках, где больше деталей можно увидеть в лекционных заметках по разреженным авто-кодировщикам.

Удачи!

Другие вопросы по тегам