Содержание статьи
С учителем и без него: как обучаются нейросети
Результаты
У нейросетей другая логика работы. Им дают большой массив правильно решенных задач. В нашем примере — это, скажем, тысяча чертежей домов с уже прописанными площадями. После этого нейронной сети дают возможность самой решить подобную задачу. Она начинает угадывать, какой ответ от нее хотят получить. Отдельный алгоритм подсказывает ей, правильно она справилась с решением или нет. Со временем нейросеть учится угадывать все лучше и лучше, формирует некие связи внутри своей структуры, которые обеспечивают полезный результат.
Но ее легко получить путем увеличения количества нейронов. Давайте попробуем реализовать обучение с тремя нейронами в скрытом слое и одним выходным (выход ведь у нас только один). Чтобы все получилось, создадим массив X и Y, имеющий обучающие данные и саму нейронную сеть:
Последовательность нейрослоев часто применяют для более глубокого обучения нейронной сети и большей формализации имеющихся данных. Именно поэтому, чтобы получить итоговый выходной вектор, нужно проделать вышеописанную операцию пару раз подряд по направлению от одного слоя к другому. В результате для 1-го слоя входным вектором будет являться X, а для последующих входом будет выход предыдущего слоя. То есть нейронная сеть может выглядеть следующим образом:
Тренировочный набор данных для этого типа обучения важно разметить, то есть каждому примеру сопоставить результат, который модель должна получить. Для этого над входным датасетом следует предварительно поработать: учитель собирает его заранее, просматривает и размечает в понятном для обработки виде.
Только ленивый не слышал сегодня о существовании и разработке нейронных сетей и такой сфере, как машинное обучение. Для некоторых создание нейросети кажется чем-то очень запутанным, однако на самом деле они создаются не так уж и сложно. Как же их делают? Давайте попробуем самостоятельно создать нейросеть прямого распространения, которую еще называют многослойным перцептроном. В процессе работы будем использовать лишь циклы, массивы и условные операторы. Что означает этот набор данных? Только то, что нам подойдет любой язык программирования, поддерживающий вышеперечисленные возможности. Если же у языка есть библиотеки для векторных и матричных вычислений (вспоминаем NumPy в Python), то реализация с их помощью займет совсем немного времени. Но мы не ищем легких путей и воспользуемся C#, причем полученный код по своей сути будет почти аналогичным и для прочих языков программирования.
Обучение с подкреплением (reinforcement learning) используется в ситуациях, когда нужно обучить нейро сеть задаче с четкими результатами на выходе. Этот формат подготовки ИИ-моделей проходит через взаимодействие с окружающей средой и работает следующим образом: система получает на вход некоторые неразмеченные данные и обрабатывает их случайным образом, в ответ на что получает положительные или отрицательные отзывы, в зависимости от результатов работы. Для обучения с подкреплением не нужен полный контроль человека или заранее и полностью размеченный набор данных — важно сформулировать задачу и оценить те решения, которые предпримет система.
Вне зависимости от используемого принципа обучение нейросетей состоит из двух ключевых этапов. На первом происходит тренировка — нейронная сеть учится, выстраивает необходимые связи, регулирует веса узлов. Но как мы проверим, насколько эффективно она это делает? Как и в случае с обычными учениками, нейросеть должна пройти экзамен. Естественно, вопросы на этом экзамене должны отличаться от тех, которые были использованы при тренировке, чтобы исключить вариант, что сеть просто «запомнила» правильный ответ. Это и есть второй этап, который называется тестированием.
Под искусственной нейронной сетью (ИНС) понимают математическую модель (включая ее программное либо аппаратное воплощение), которая построена и работает по принципу функционирования биологических нейросетей — речь идет о нейронных сетях нервных клеток живых организмов.
Этапы обучения
Главной особенностью алгоритма является вычисление обновления веса, выполняемое с помощью знака градиента, который указывает направление корректировки. Градиент представляет собой вектор, показывающий направление наибольшего увеличения функции. Он используется для обновления параметров модели с целью уменьшения значения функции ошибки. Алгоритм упругого распространения позволяет адаптировать скорость обучения отдельно для каждого веса. Если знак градиента не меняется, он увеличивает скорость обучения, а если наоборот — уменьшает. Такая регулировка помогает алгоритму гибко перемещаться по весовым пространствам со сложной многомерной архитектурой, быстрее и надежнее находить оптимальные решения.
Только что мы рассмотрели архитектуру базовой нейросети. Глубокие нейронные сети (сети глубокого обучения) обычно имеют много скрытых слоев, состоящих из миллионов связанных между собой искусственных нейронов. Количество связей одного нейрона с другими называют весом. Вес является положительным, если данный узел возбуждает другой, или отрицательным, если, наоборот, происходит подавление узла. Узлы с большим весом оказывают более сильное влияние на другие. Веса нейросети настраиваются в процессе обучения. Они определяют, какие данные будут учитываться при получении итогового результата, и какой вклад внесет тот или иной узел на выводы.
При этом нередки ситуации, в которых модели необходима хотя бы частичная «разметка» данных для результативной работы. В этом случае потребуется частичное привлечение учителя: он заранее размечает часть данных самостоятельно , а остальные подаются модели в неразмеченном виде. Этот вариант не только повышает эффективность «тренировок» модели, но и значительно ускоряет их.
Данные поступают в нейросеть, обрабатываются формулами, после чего пользователю выдается результат. Самая главная сложность заключается в том, как найти такие уравнения и алгоритмы, благодаря которым результат работы нейросети будет максимально полезным. Машинное обучение как раз и заключается в выведении этих формул.
Все нейронные сети решают разные задачи, и поэтому тренировать их нужно тоже по-разному. В зависимости от будущего функционала, наличия ресурсов и времени выбирайте подходящий формат обучения — и спустя время получите наученную решению именно ваших задач ИИ-модель.
Для того чтобы обучение с подкреплением было результативно, важно пройти много предварительных тренировок. Долгий период развития навыков модели и необходимость большого количества примеров называют главными минусами этого формата. Если в будущей работе нейросеть столкнется с незнакомой ситуацией, то реакция будет непредсказуема.
Какую роль играет искусственный нейрон?
Прохождение игр — часто встречающаяся задача, которую решает обучение с подкреплением. Так, например, алгоритм Q-обучения (Q-learning) часто используется в играх — например, для тренировки агента прохождению знакомой всем «Змейки » . Другой пример — нейросетевая модель AlphaGo, которая обучена играть в го на уровне мировых чемпионов.
Но полученный вектор представляет собой неактивированное состояние (промежуточное, невыходное) всех нейронов, а для того, чтобы нам получить выходное значение, нужно каждое неактивированное значение подать на вход вышеупомянутой функции активации. Итогом ее применения и станет выходное значение слоя.
Один нейрон может превратить в одну точку входной вектор, но по условию мы желаем получить несколько точек, т. к. выходное Y способно иметь произвольную размерность, которая определяется лишь ситуацией (один выход для XOR, десять выходов, чтобы определить принадлежность к одному из десяти классов, и так далее). Каким же образом получить n точек? На деле все просто: для получения n выходных значений, надо задействовать не один нейрон, а n. В результате для каждого элемента выходного Y будет использовано n разных взвешенных сумм от X. В итоге мы придем к следующему соотношению:
Обучение с учителем используется для нейросетей , которые в дальнейшем будут решать задачи классификации: получать на входной слой большой объем данных и разделять информацию по заданным категориям. Этот механизм лежит в основе разных функций: модель может в будущем специализироваться и на генерации текста или продолжении предложений (нейронная сеть LSTM), и на идентификации и классификации картинок (сверточная нейронная сеть CNN). Кроме того, обучение с учителем позволяет модели успешно работать с прогнозами: оценивать динамику спроса на товар и менять цену и другие количественные характеристики для максимизации выручки или строить прогноз на бирже.
Машинное обучение (Machine Learning или сокращенно ML) — одно из самых сложных и перспективных направлений развития искусственного интеллекта (ИИ). Фактически оно представляет собой набор приемов, алгоритмов и методов, позволяющих ИИ учиться и решать задачи не в строгих рамках, заданных программой, а на базе постоянного совершенствования знаний и накопления опыта. Именно таким образом в течение жизни учимся и мы с вами.
При этом обучение с подкреплением рассчитано не только на успешное прохождение игр. Нейросети , подготовленные к самостоятельной работе таким способом, могут в дальнейшем управлять транспортом в качестве автопилота или выступать техподдержкой, получая положительную обратную связь за каждый верно решенный запрос.