Крупномасштабное глубокое обучение
379
перечислить все конфигурации привратника (и вычислить для них выходы). Что-
бы справиться с этой проблемой, было предложено несколько подходов к обучению
комбинаторных привратников. В работе Bengio et al. (2013b) описаны эксперименты
с несколькими оценками градиента по вероятностям привратника, а в работах Bacon
et al. (2015) и Bengio et al. (2015a) использовалась техника обучения с подкреплени-
ем (градиент политики – policy gradient) для реализации разновидности условного
прореживания, применяемого к группам скрытых блоков, с целью реально снизить
вычислительную стоимость, не ухудшив качества аппроксимации.
Еще один вид динамической структуры – переключатель, когда скрытый блок мо-
жет получать входные данные от разных блоков в зависимости от контекста. Такую
динамическую маршрутизацию можно интерпретировать как механизм внимания
(Olshausen et al., 1993). Пока что эффективность жесткого переключателя в крупно-
масштабных приложениях не доказана. Вместо этого в современных системах приме-
няется взвешенное среднее многих возможных входов, что не позволяет реализовать
все потенциальные вычислительные преимущества динамической структуры. Совре-
менные механизмы внимания описаны в разделе 12.4.5.1.
Одно из главных препятствий на пути использования систем с динамической
структурой – снижение степени параллелизма из-за того, что выполнение идет по
разным ветвям для разных входов. Это означает, что лишь немногие операции сети
можно описать как умножение матриц или пакетную свертку на мини-пакете приме-
ров. Можно написать более специализированные подпрограммы, которые сворачи-
вают каждый пример с разными ядрами или умножают каждую строку матриц плана
на разное подмножество столбцов матрицы весов. К сожалению, такие подпрограм-
мы трудно реализовать эффективно. Реализации для CPU будут медленными из-за
отсутствия когерентности кэшей, а реализации для GPU – тоже медленными из-за
отсутствия объединенных транзакций доступа к памяти и необходимости сериали-
зовывать канаты, когда входящие в них потоки выполняют разные ветви програм-
мы. Иногда эти проблемы можно смягчить, разбив примеры на группы, для которых
выполнение идет по одной ветви, а затем обработав каждую группу одновременно.
Такая стратегия может оказаться приемлемой для минимизации времени обработки
фиксированного числа примеров в офлайновой конфигурации. Но в режиме реаль-
ного времени, когда примеры должны обрабатываться непрерывно, разбиение задачи
на части может привести к проблемам с балансированием нагрузки. Например, если
назначить одну машину для обработки первой ступени каскада, а другую – для об-
работки последней, то первая машина может оказаться перегруженной, а вторая – не-
догруженной. Аналогичные проблемы возникают, если разным машинам поручить
реализацию различных узлов нейронного решающего дерева.
Do'stlaringiz bilan baham: