Понятие обучения простой нейронной сети

Добавлено 5 января 2020 в 15:31
Нейронные сети перцептрон для начинающих  (содержание)

В данной статье мы рассмотрим некоторые важные аспекты обучения нейронных сетей, а затем обсудим концепцию переобучения.

Новички в нейронных сетях? Начните с этой статьи или для получения дополнительной информации просмотрите остальные статьи из этой серии в меню с содержанием серии в начале статьи.

А если вы всерьез заинтересовались темой машинного обучения, также рекомендую обратить внимание на факультет искусственного интеллекта образовательного портала GeekBrains.

Обучающие данные перцептрона

Целью обучения является предоставление данных, которые позволяют нейронной сети сходиться на надежных математических связях между входом и выходом. В предыдущей статье математическая связь была простой: если компонент x точки в трехмерном пространстве меньше нуля, выходной результат равен нулю (например, это означает, что эта точка данных «недействительна» и не требует дальнейшего анализа); если компонент x равен или больше нуля, выходной сигнал равен единице (что указывает на «действительную» точку данных).

В таких случаях, когда известны математические связи, вы можете создавать обучающие данные в программе для работы с электронными таблицами. Я использовал Excel:

Рисунок 1 Обучающие данные в Excel
Рисунок 1 – Обучающие данные в Excel

Компоненты x, y и z были созданы функцией RANDBETWEEN(). На скриншоте, показанном выше, все случайные значения представляют собой целые числа от –10 до +10. В другой части обучающего набора я использую формулу RANDBETWEEN(–10, 10)/10, чтобы получить нецелые компоненты x, y и z в интервале [–1, +1].

Рисунок 2 Обучающие данные в Excel в диапазоне [-1, +1]
Рисунок 2 – Обучающие данные в Excel в диапазоне [–1, +1]

Просто чтобы было понятно: генерирование обучающих данных в электронной таблице – это отличный способ экспериментировать с нейронными сетями, а экспериментирование – очень важная часть знакомства и, в конечном итоге, умения разработки и реализации нейронных сетей. Однако в реальных приложениях вы обычно не можете создавать обучающие данные таким образом потому, что весь смысл использования нейронной сети состоит в том, чтобы создать алгоритм, который вы еще не знаете и не можете легко определить или выяснить.

В следующих подразделах обсуждаются некоторые вещи, которые следует иметь в виду при создании обучающего набора.

Обеспечение обилия обучающих данных

Нейронная сеть не учится через понимание и критическое мышление. Это чисто математическая система, и она очень постепенно приближается к сложным связям вход-выход. Таким образом, большие объемы данных помогают нейросети продолжать уточнять свои веса и тем самым достигать большей конечной эффективности.

Диверсификация данных

Важно включить в обучающие данные разнообразие. Мы хотим, чтобы перцептрон аппроксимировал истинную, обобщенную взаимосвязь между входом и выходом, а не ложную или слишком упрощенную взаимосвязь, которая существует между входными и выходными значениями недостаточно разнообразного обучающего набора.

Представьте, что вы никогда раньше не видели дерево и не представляете, как оно выглядит. Ваш друг пытается помочь вам, показывая вам тысячи фотографий деревьев. К сожалению, он живет в сосновом лесу и фотографирует только сосны. Изучив фотографии, вы можете легко посмотреть на сосну, а также, вероятно, на пихту или ель и сказать: «Это дерево». Однако, что бы вы сказали, если бы увидели дуб или клен, или вишню, или пальму? Вероятно, это не лучшая аналогия, которую я когда-либо придумал, но я думаю, что она дает общее представление о том, что происходит с нейронной сетью, когда вы обучаете ее данными, которые не отражают разнообразие реальной задачи обработки.

Соответствие обучающих данных рабочим данным

Обучающие данные должны представлять данные, которые нейросеть будет пытаться классифицировать. В конце концов, цель обучения состоит в том, чтобы дать возможность сети эффективно обрабатывать некоторую информацию из реальной жизни. Например, что касается простой системы классификации, которую мы изучали, я мог бы знать, что мои реальные входные данные будут оставаться в пределах интервала (–5, +5), возможно, потому что три компонента входного вектора – это на самом деле аналоговые напряжения, передаваемые операционным усилителем с питанием ±5 В. Если бы это было так, я бы подготовил обучающий набор, который включает в себя множество целых и нецелых значений в диапазоне от –5 до +5.

Перетасовка

В предыдущей статье мы видели, что обучающий набор может обрабатываться несколько раз, при этом каждый полный проход через набор называется одной эпохой. Однако рекомендуется после каждой эпохи перетасовывать выборки в обучающем наборе, чтобы порядок представления выборок не оказывал на нейросеть негативного влияния. Возможно, я бы реализовал эту функцию в программном обеспечении нейронных сетей, но вы также можете продублировать обучающий набор в электронной таблице и затем случайным образом изменить порядок выборок в дублированных наборах.

Переобучение

Нейронные сети могут реагировать на чрезвычайно сложные связи между входом и выходом, и, следовательно, сеть может задействовать детали связи между входом и выходом, которые являются специфическими для обучающего набора и не имеют отношения к реальной задаче классификации. Это называется переобучением (или перетренировкой).

Следующая диаграмма эффективно иллюстрирует концепцию переобучения.

Рисунок 3 Переобучение нейросети
Рисунок 3 – Переобучение нейросети

Красные и синие точки представляют обучающие выборки, которые классифицирует нейронная сеть. Черная линия представляет собой хорошую стратегию классификации: она следует общему шаблону, который отделяет красный от синего, и, следовательно, она, вероятно, приведет к самой низкой ошибке в реальных данных. Зеленая линия – это переобученная стратегия классификации. Она слишком хорошо следует обучающим данным; в своей попытке идеально классифицировать обучающие выборки, она создала связь вход-выход, которая является менее обобщенной и, следовательно, менее подходящей для реальных данных.

Другой способ визуализации перетренировки представлен на следующих графиках.

Рисунок 4 Недостаточно обученная нейросеть
Рисунок 4 – Недостаточно обученная нейросеть
Рисунок 5 Хорошо обученная нейросеть
Рисунок 5 – Хорошо обученная нейросеть
Рисунок 6 Переобученная нейросеть
Рисунок 6 – Переобученная нейросеть

В этом случае мы думаем о нейронной сети как о системе, которая генерирует математическую функцию, которая служит аппроксимацией связи между входом и выходом, выявленной обучающими выборками. Понятно, что недообучение недопустимо, так как функция не позволяет точно аппроксимировать тренд в обучающих данных, но и переобучение также проблематично, потому что тренд искажается из-за чрезмерного внимания к деталям в обучающем наборе.

Заключение

Я надеюсь, теперь у вас есть более четкое представление о том, как выполнить обучение нейронной сети. В следующей статье мы продолжим наше обсуждение обучения, но рассмотрим этот вопрос с более теоретической точки зрения.

Теги

GeekBrainsИскусственный интеллект, ИИ / Artificial Intelligence, AIМашинное обучение / Machine LearningНейросеть / Нейронная сетьПереобучение / ПеретренировкаПеретасовка / ПеремешиваниеПерцептрон / Perceptron

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.