← Вернуться к списку

Как можно многократно сэмплировать выходное распределение при отсечении фильтров с помощью обучения с подкреплением?

Краткое содержание

Я читал статью «Learning to Prune Filters in Convolutional Neural Networks», в которой речь идет об обрезке фильтров CNN с использованием обучения с подкреплением (policy gradient). В статье говорится, что входом для агента по обрезке (агентом является сверточная нейронная сеть) является двумерный массив формы (N_l, M_l), где N_l — количество фильтров, а M_l = m x h x w (m, l и h — размерности фильтра), а выходом является массив действий (каждый элемент равен 0 (ненужный фильтр) или 1 (необходимый)), и говорится, что для аппроксимации градиентов нам нужно выборочно получить выход M раз (используя алгоритм REINFORCE). Поскольку у меня один вход, как я могу многократно выборочно получать распределение выхода (без обновления параметров CNN)? Если я что-то упускаю, пожалуйста, укажите, где я ошибаюсь.

Полный текст

Как я могу многократно сэмплировать выходное распределение при обрезке фильтров с помощью обучения с подкреплением? Задать вопрос

Способен 5 лет, 8 месяцев назад Изменено сегодня Просмотрено 167 раз

Способен 5 лет, 8 месяцев назад

4 $\begingroup$ Я читал статью «Learning to Prune Filters in Convolutional Neural Networks», которая посвящена обрезке фильтров CNN с помощью обучения с подкреплением (policy gradient). В статье говорится, что входом для агента по обрезке (агент — это сверточная нейронная сеть) является двумерный массив формы $(N_l, M_l)$, где $N_l$ — количество фильтров, а $M_l = m \times h \times w$ (m, l и h — размерности фильтра), а выходом — массив действий (каждый элемент равен 0 (необязательный фильтр) или 1 (обязательный)), и говорится, что для аппроксимации градиентов нам нужно сэмплировать выход $M$ раз (используя алгоритм REINFORCE). Поскольку у меня один вход, как я могу многократно сэмплировать выходное распределение (без обновления параметров CNN)? Если я что-то упускаю, пожалуйста, скажите, где я неправен reinforcement-learning convolutional-neural-networks policy-gradients reinforce Share Improve this question Follow edited Apr 26, 2020 at 21:10 nbro 43.2k 14 14 gold badges 121 121 silver badges 222 222 bronze badges asked Apr 26, 2020 at 1:16 Habib-Allah 51 3 3 bronze badges $\endgroup$ Add a comment | 1 Answer 1 Sorted by: Reset to default Highest score (default) Date modified (newest first) Date created (oldest first) 0 $\begingroup$ Я не уверен, что вы имеете в виду под «одним входом». Входом для агента по обрезке всегда одно и то же — это сверточный слой $W$ размерности $m \times h \times w$. Этот слой берется из базовой модели, которая предобучена. Вход не меняется, он всегда один и тот же. Выходом агента по обрезке является массив вероятностей обрезки конкретного фильтра. Например, если у вас $3$ фильтра в слое, выходом агента по обрезке будет массив из $3$ элементов. Допустим, это \begin{equation} y = [0.1, 0.6, 0.7] \end{equation} Каждый из этих элементов представляет вероятность обрезки фильтра $i$ в слое $W$. Таким образом, $0.1$ — это вероятность обрезки фильтра $1$, $0.6$ — фильтра $2$, а $0.7$ — фильтра $3$. Допустим, вы сэмплируете это распределение $2$ раза и получаете: $[0, 1, 1], [0, 0, 1]$. Это означает, что вы создадите 2 разные модели из исходной базовой модели. Первая модель будет иметь обрезанные 2-й и 3-й фильтры в слое $W$, а вторая модель будет иметь обрезанный 3-й фильтр. Затем вы запускаете эти 2 новые модели на вашем обучающем и валидационном наборах, вычисляете целевую функцию $R$. Затем вы обновляете параметры $\theta$ вашего агента по обрезке на основе $R$. Исходные веса слоя $W$ остаются нетронутыми. Затем вы выполняете еще один проход модели по обрезке $\pi$ с обновленными параметрами $\theta$ (входом по-прежнему является исходный $W$). Вы получите еще один массив вероятностей, и вы будете повторять описанные выше шаги до тех пор, пока параметры $\theta$ не сойдутся. Когда они сойдутся, вы выполняете окончательную обрезку. Share Improve this answer Follow edited Apr 27, 2020 at 11:18 answered Apr 27, 2020 at 11:09 Brale 2,416 1 1 gold badge 8 8 silver badges 15 15 bronze badges $\endgroup$ 6 $\begingroup$ Спасибо за ответ! но как я могу получить эти два массива [0,1,1],[0,0,1]? чтобы сэмплировать, я бы обычно делал что-то вроде action=model.predict(W), если я сэмплирую еще раз, я получу тот же массив действий, не так ли? пожалуйста, скажите, что я упускаю. $\endgroup$ Habib-Allah – Habib-Allah 2020-04-27 12:55:48 +00:00 Commented Apr 27, 2020 at 12:55 $\begingroup$ Это не то, что означает сэмплирование, сэмплирование, переведенное в код (Python), выглядит примерно так: random.random() < prob. Это как подбрасывание монетки. Если случайное число ниже вероятности, это означает, что вы устанавливаете элемент массива в 0 (или 1, в зависимости от того, что вы хотите сделать). $\endgroup$ Brale – Brale 2020-04-27 13:11:44 +00:00 Commented Apr 27, 2020 at 13:11 $\begingroup$ В статье (Алгоритм 1) они говорят «sample the output distribution», а затем пишут Ai=π(θ,W). $\endgroup$