Как обрезать нейроны в нейронной сети - PullRequest
0 голосов
/ 27 апреля 2018

Контекст:

Предположим, у нас есть простая 3-уровневая сеть прямой связи. Скрытый размер первого линейного слоя - 100000, W1[input_size, 100000], он явно слишком большой, и я хочу закрыть некоторые из выбранных нейронов.

Ожидаемые результаты

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

Моя реализация:

Согласно некоторому критерию (некоторые метрики применяются для проверки весового сходства после каждого обновления обратного распространения), я выбрал некоторые индексы нейронов, которые я хочу отключить, например, [1,7,8 ...].

Я обнулел соответствующие веса W1, установив W1[:, 1, 7, 8 ...] = 0, где 0 - матрица. Это гарантирует, что никакая информация не будет передана через эти нейроны. Должен ли я также сделать что-то в отношении обратного распространения? Кроме обратного распространения что-нибудь еще, что я мог бы сделать?

Поскольку я использую pytorch, было бы замечательно, если бы вы могли проиллюстрировать некоторые примеры pytorch (другие фреймворки, такие как tensorflow, Keras также хорошо).

...