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