#1 Нейронные сети для начинающих. Решение задачи классификации Ирисов Фишера
На хабре было множество публикаций по данной теме, но все они говорят о разных вещах. Решил собрать всё в одну кучку и рассказать людям.
Это первая статья серии введения в нейронные сети, «Нейронные сети для начинающих». Здесь и далее мы постараемся разобраться с таким понятием — как нейронные сети, что они вообще из себя представляют и как с ними «подружиться», на практике решая простые задачи.
О чём будем говорить:
- Нейронные сети. Что это такое и какие они бывают?
- Виды нейронных сетей и конструкция нейронных сетей.
- Где они применяются?
- Перцептрон.
- Классификация. Что это такое и почему это важно?
- Функции активации (ФА).
- Зачем они нужны?
- Виды ФА.
- Как обучить нейронную сеть?
- Цели и задачи обучения.
- Обучение с учителем и без.
- Понятие ошибки.
- Задача минимизации ошибки.
- Градиентный спуск.
- Как вычислить градиент?
- Пресловутые «Ирисы Фишера».
- Постановка задачи.
- Softmax ()+ Relu ()
- Ура! Пишем код (Наконец-то).
Что такое нейронные сети?
Нейро́нная сеть — математическая модель, а также её программное или аппаратное воплощение, построенная по принципу организации и функционирования биологических нейронных сетей — сетей нервных клеток живого организма (в частности, мозга).
▍ Виды нейронных сетей:
Есть десятки видов нейросетей, которые отличаются архитектурой, особенностями функционирования и сферами применения. При этом чаще других встречаются сети трёх видов.
Нейронные сети прямого распространения (Feed forward neural networks, FFNN). Прямолинейный вид нейросетей, при котором соседние узлы слоя не связаны, а передача информации осуществляется напрямую от входного слоя к выходному. FFNN имеют малую функциональность, поэтому часто используются в комбинации с сетями других видов.
Свёрточные нейронные сети (Convolutional neural network, CNN). Состоят из слоёв пяти типов:
- входного,
- свёртывающего,
- объединяющего,
- подключённого,
- выходного.
Каждый слой выполняет определённую задачу: например, обобщает или соединяет данные.
Свёрточные нейросети применяются для классификации изображений, распознавания объектов, прогнозирования, обработки естественного языка и других задач.
Рекуррентные нейронные сети (Recurrent neural network, RNN). Используют направленную последовательность связи между узлами. В RNN результат вычислений на каждом этапе используется в качестве исходных данных для следующего. Благодаря этому, рекуррентные нейронные сети могут обрабатывать серии событий во времени или последовательности для получения результата вычислений.
RNN применяют для языкового моделирования и генерации текстов, машинного перевода, распознавания речи и других задач.
▍ Типы задач, которые решают нейронные сети
Выделяют несколько базовых типов задач, для решения которых могут использоваться нейросети.
- Классификация. Для распознавания лиц, эмоций, типов объектов: например, квадратов, кругов, треугольников. Также для распознавания образов, то есть выбора конкретного объекта из предложенного множества: например, выбор квадрата среди треугольников.
- Регрессия. Для определения возраста по фотографии, составления прогноза биржевых курсов, оценки стоимости имущества и других задач, требующих получения в результате обработки конкретного числа.
- Прогнозирования временных рядов. Для составления долгосрочных прогнозов на основе динамического временного ряда значений. Например, нейросети применяются для предсказания цен, физических явлений, объёма потребления и других показателей. По сути, даже работу автопилота Tesla можно отнести к процессу прогнозирования временных рядов.
- Кластеризация. Для изучения и сортировки большого объёма неразмеченных данных в условиях, когда неизвестно количество классов на выходе, то есть для объединения данных по признакам. Например, кластеризация применяется для выявления классов картинок и сегментации клиентов.
- Генерация. Для автоматизированного создания контента или его трансформации. Генерация с помощью нейросетей применяется для создания уникальных текстов, аудиофайлов, видео, раскрашивания чёрно-белых фильмов и даже изменения окружающей среды на фото.
Как выглядит простая нейронная сеть?
Выяснив, как же она выглядит, мы перед тем, как разобрать её строение: что, зачем и почему — разберёмся, где же они применяются и что с помощью них можно сделать. Вот примерный список областей, где решение такого рода задач имеет практическое значение уже сейчас:
- Экономика и бизнес.
- Медицина и здравоохранение.
- Авионика.
- Связь.
- Интернет.
- Автоматизация производства.
- Политологические и социологические исследования.
- Безопасность, охранные системы.
- Ввод и обработка информации.
- Геологоразведка.
- Компьютерные и настольные игры.
- И т.д.
Теперь разберём подробнее самую простую модель искусственного нейрона — перцептрон:Согласно общему определению перцептро́н или персептрон — математическая или компьютерная модель восприятия информации мозгом, предложенная Фрэнком Розенблаттом в 1958 году и впервые реализованная в виде электронной машины «Марк-1» в 1960 году. Перцептрон стал одной из первых моделей нейросетей, а «Марк-1» — первым в мире нейрокомпьютером.
Вы уже могли видеть подобные иллюстрации на просторах интернета:
Но что же это всё означает?
Давайте по порядку:
Х1, Х2, Х3, …, Хn — входные классы, данные, которые мы подаём на вход нашей сети. Т.е. здесь у нас идут те данные, которые пришли к нам от клиента или же от нашего сервиса, который каким-то образом собирает/парсит данные, далее эти данные умножаются на случайные веса (стандартное обозначение W1, …, Wn) и суммируются с так называемым нейроном смещения или bias нейрон в «Сумматоре» (из названия следует, что данные, Хn * Wn , суммируются друг с другом). Далее результат Σ (Хn * Wn * b) подаётся в функцию активации, о которой поговорим далее.
Данные метаморфозы проиллюстрированы на следующем слайде:
▍ Задача классификации
Проговорив в общих чертах строение «базовой нейронной сети», плавно перейдём к рассмотрению задачи классификации — основной задачи нейронных сетей.Итак, из определения следует, что классификация — это задача, при которой по некоторому объекту — исходные данные, нужно предсказать, к какому
классу объектов он принадлежит.
Примитивно эту задачу можно проиллюстрировать следующим образом:
Мы с вами, с лёгкостью можем понять, что ответ будет следующий:
Но, а что на это скажет компьютер?
Для него это лишь набор пикселей/байтов, который ему ни о чём не говорит. По-простому — это 0 и 1. Подробнее про это, можете почитать здесь.
Для того, чтобы компьютер понял, что происходит внутри предложенных ему данных, мы должны «объяснить» ему всё и дать какой-то алгоритм, т.е. написать программу.
▍ Функции активации — ФА
Но это будет не просто программа, помимо базового кода, нам необходимо ввести так называемую математическую модель или же функцию активации, что же это такое?
Функция активации определяет выходное значение нейрона в зависимости от результата взвешенной суммы входов и порогового значения. Пример: