Машинное обучение и нейронные сети прочно вошли в нашу жизнь, применяясь в голосовых помощниках, социальных сетях, автомобилях и системах перевода, таких как Google Translate. Несмотря на повсеместное распространение, многие считают эти технологии чем-то сложным и недоступным. На самом деле, создание простейшей нейронной сети вполне осуществимо.
История искусственного интеллекта и ключевые прорывы
Концепция искусственного интеллекта появилась в 1956 году. Однако её реализация была ограничена вычислительными мощностями того времени. Значительный прорыв произошёл в 1996 году, когда программа Deep Blue (IBM) победила Гарри Каспарова в шахматах. Этот успех был обусловлен конечным числом возможных ходов в шахматах. Более значимым прорывом стало поражение чемпиона мира по го Ли Седоля программой AlphaGo (Google DeepMind) в 2016 году. Го имеет практически неограниченное количество вариантов, и AlphaGo победила, используя машинное обучение и формируя собственные стратегии.
Машинное и глубокое обучение
Машинное обучение — это процесс обучения нейронной сети. Аналогично AlphaGo, можно обучить программу различать 0 и 1, предоставляя ей примеры каждого числа. Сеть формирует «веса» для определения новых значений. Глубокое обучение — это подмножество машинного обучения, требующее больше ресурсов и данных. Оба метода используются для создания нейронных сетей, которые, после обучения, становятся искусственным интеллектом, способным решать задачи.
Нейронная сеть: задача классификации
Рассмотрим задачу классификации. Нейронная сеть может классифицировать объекты, например, распознавать цифры или определять марку автомобиля по его характеристикам. Входные сигналы (характеристики) обрабатываются сетью. Каждый нейрон умножает входные данные на веса (числа), суммирует результаты, добавляет число корреляции и сравнивает сумму с пороговым значением. Например, сумма > 0 может соответствовать Mercedes, а < 0 — BMW. Сеть обычно состоит из нескольких слоёв нейронов, каждый из которых решает подзадачу. Окончательное решение формируется на основе результатов работы всех слоёв.
Разработка нейронной сети на Python
Python — популярный язык для создания нейронных сетей благодаря наличию библиотек с математическими функциями. Мы используем Python и библиотеку NumPy. Процесс включает импорт NumPy, определение сигмоидной функции (sigmoid), описание входных и выходных данных. Функция transpose используется для преобразования данных. Для воспроизводимости результатов используется фиксация генератора случайных чисел.
sigmoid — сигмоидная функция активации. Для двухслойной сети (входной и выходной) используется матрица весов размером 3×1 (три столбца во входных данных и один — в выходных). Значения весов генерируются случайным образом.
Обучение нейронной сети
Обучение происходит в 10 циклах. Сеть предсказывает результат, сравнивает его с ожидаемым и корректирует веса, используя производную сигмоидной функции. Результат показывает, что сеть приближается к ожидаемым значениям. Увеличение числа циклов (например, до 100 000) повысит точность. Обучение позволяет сети различать входные данные, относя их к 0 или 1. В данном примере используется двухслойная сеть; реальные сети имеют больше слоёв.
Тестирование обученной нейронной сети
Созданная сеть может классифицировать новые данные, относя их к 0 или 1. Для неизвестных данных сеть выдаст промежуточный результат (например, 0.4).
Мы создали простейшую двухслойную нейронную сеть. На основе этого примера можно создавать более сложные сети.