Случайные эволюционные стратегии в машинном обучении |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-03-01 11:06 алгоритмы машинного обучения, генетические алгоритмы, реализация нейронной сети Нейронные сети учатся совсем не так как люди. Оптимизация нейронной сети — на самом деле градиентный спуск по некоторой функции потерь , где переменными являются веса слоёв . Это очень мощный подход к подстройке системы, который применяется также в физике, экономике и многих других областях. На данный момент предложено немало конкретных методов градиентного спуска, но все они предполагают, что градиент хорошо себя ведёт: нет обрывов, где он скачкообразно возрастает, или плато, где он обращается в ноль. С первой проблемой можно разобраться при помощи gradient clipping, но вторая заставляет тщательно подумать. Кусочно-линейную или дискретную функцию нетривиально ограничить более приятной функцией
Как поступать в таких ситуациях? Под катом много формул и гифок. Около пяти лет назад начали появляться статьи, исследующие другой подход к обучению: вместо сглаживания целевой функции, давайте в таких случаях приближённо считать градиент. Определённым образом сэмплируя значения , можно предположить, куда следует двигаться, даже если в текущей точке производная ровно ноль. Не то чтобы подходы с сэмплированием были особо новы — Монте-Карло уже много времени дружит с нейронными сетями — но недавно были получены новые интересные результаты. За основу этой статьи были взяты записи в блоге Ferenc Husz?r. Random Evolution Strategy (ES) Начнём с самого простого подхода, который вновь обрёл популярность после статьи OpenAI в 2017. Замечу, что у эволюционных стратегий не слишком удачное имя, связанное с развитием этого семейства алгоритмов. С генетическими алгоритмами ES связаны очень отдалённо — лишь случайным изменением параметров. Гораздо продуктивнее думать о ES, как о методе оценки градиента при помощи сэмплирования. Мы сэмплируем из нормального распределения несколько векторов пертурбаций , берём матожидание от получившихся значений целевой функции, и считаем, что
Идея довольно проста. При стандартном градиентном спуске мы на каждом шаге смотрим наклон поверхности, на которой находимся, и двигаемся в сторону наибольшего уклона. В ES мы «обстреливаем» близлежащую окрестность точками, куда мы можем предположительно двинуться, и перемещаемся в сторону, куда попало больше всего точек с наибольшей разницей высот (причём, чем дальше точка, тем больший ей придаётся вес).
Умножим обе стороны на :
Отбросим и возьмём матожидание от обоих сторон:
Но нормальное распределение симметрично: , , :
Поделим на и получим исходное утверждение.
Что часто невозможно для обычного SGD. Градиентный спуск автоматически находит самый устойчивый минимум на середине плато и «туннелирует» сквозь резкий пик.
Какие же недостатки?
Вариации ES Дополнительное положительное качество эволюционных стратегий — что они лишь подсказывают нам, как считать производную, а не заставляют переписывать алгоритм обратного распространения ошибки начисто. Всё, что можно применить к backprop-SGD, можно применить и к ES: импульс Нестерова, Adam-подобные алгоритмы, batch normalization. Есть несколько специфичных дополнительных приёмов, но пока что нужно больше исследований, при каких обстоятельствах они работают:
См. также эту статью, дополнительно размышляющую о разнице поведения ES и TRPO в ландшафтах параметров разного типа, эту статью, более подробно описывающую взаимоотношения между ES и SGD, эту статью, доказывающее внеземное происхождение египетских пирамид, и эту статью, сравнивающую ES от OpenAI с более старой классической ES. Variational optimisation (VO) Хм, но почему ни слова не сказано про изменение во время обучения? Было бы логично уменьшать его, ведь чем дольше идёт обучение, тем ближе мы к желаемому результату, следовательно нужно больше обращать внимание на локальный ландшафт . Вот только как именно менять среднеквадратичное отклонение? Не хочется изобретать какую-то хитрую схему…
Где — вариационный функционал, глобальный минимум которого совпадает с глобальным минимумом . Заметьте, что теперь минимизация идёт не по исходным параметрам , а по параметрам распределения, из которого мы семплировали эти параметры — . Кроме того, обратите внимание, что даже если была недифференцируема, дифференцируема, если дифференцируемо распределение , и производную можно выразить как:
Если — распределение Гаусса с фиксированной дисперсией, из этой формулы легко получить формулу для ES. Но что если не фиксирована? Тогда на каждый вес в у нас получается два параметра в : центр и среднеквадратичное отклонение соответствующей гауссианы. Размерность задачи увеличивается вдвое! Проще всего показать на одномерном примере. Вот вид сверху на получившийся после преобразования ландшафт для функции из предыдущей секции:
Какие преимущества даёт введение вариационной оптимизации? Оказывается, из-за того что в ES был фиксированный , его формула могла вести нас в сторону субоптимальных минимумов: чем больше , тем менее на ландшафте сглаженной функции заметны глубокие, но узкие минимумы. Так как в VO перменный, у нас есть хотя бы шанс попасть в настоящий глобальный минимум. Недостатки очевидны: даже в самом простом случае размерность задачи увеличивается вдвое, что уж говорить про случай, когда мы хотим иметь по на каждое направление. Градиенты становятся ещё более нестабильными. Вспомните график выше со «стенкой» посередине. VO ощущает её ещё меньше: (бывшая стенка — это маленькая штучка снизу посередине) Хоть сходимость в глобальный минимум не гарантирована даже для простых случаев, у нас больше шансов попасть хоть куда-нибудь при неидеальной инициализации: Или даже выбраться из участка плохой пространственной инициализации: Заключение Статья в OpenAI принесла в вариационную оптимизацию трюк с общим seed'ом генераторов случайных чисел различных нод. Но пока что (кажется?) нет статей, в которых оценивается реальное ускорение от него. Сдаётся мне, в ближайшем будущем, мы их увидим. Если они будут обнадёживающи, и если ES и VO будут распространены на обучение с учителем, быть может, нас ждёт смена парадигмы в машинном обучении. Источник: habrahabr.ru Комментарии: |
|