Контекст:
Предположим, у нас есть простая 3-уровневая сеть прямой связи. Скрытый размер первого линейного слоя - 100000, W1[input_size, 100000]
, он явно слишком большой, и я хочу закрыть некоторые из выбранных нейронов.
Ожидаемые результаты
Например, после обрезки выбранных нейронов мы получаем меньшую сеть с первым линейным слоем размером 500, и эта меньшая сеть имеет способность предсказания, аналогичную большой.
Моя реализация:
Согласно некоторому критерию (некоторые метрики применяются для проверки весового сходства после каждого обновления обратного распространения), я выбрал некоторые индексы нейронов, которые я хочу отключить, например, [1,7,8 ...]
.
Я обнулел соответствующие веса W1
, установив W1[:, 1, 7, 8 ...] = 0
, где 0 - матрица. Это гарантирует, что никакая информация не будет передана через эти нейроны. Должен ли я также сделать что-то в отношении обратного распространения? Кроме обратного распространения что-нибудь еще, что я мог бы сделать?
Поскольку я использую pytorch
, было бы замечательно, если бы вы могли проиллюстрировать некоторые примеры pytorch
(другие фреймворки, такие как tensorflow
, Keras также хорошо).