Можно ли сделать нейронную сеть самостоятельно, если вы не учились программированию? Пошаговое руководство с описанием каждого этапа процесса.
Нейронные сети – уже привычная часть нашей реальности. И научиться созданию нейронной сети не так сложно, как может показаться на первый взгляд. Даже не понадобится получать диплом.
Что такое искусственная нейронная сеть?
Искусственной нейронной сетью (ANN — artificial neural network) называется математическая модель, которая строится по подобию нейронных сетей живых организмов. Однако ИНС значительно проще.
С точки зрения программирования это особая вычислительная архитектура, задача которой – обрабатывать множество процессоров, связанных между собой вычислительными путями.
Рукотворные нейросети обладают способностью к обучению и анализу больших сложных данных, неполной и зашумленной информации. Если сеть создается на базе всего одного компьютера, то скорость ее работы ниже, чем у программ, построенных на алгоритмах. Но при использовании нескольких компьютеров формируется параллельная вычислительная среда, благодаря чему быстродействие нейросети значительно возрастает. Это позволяет ИНС выигрывать у линейных прототипов – цифровых компьютеров, при обработке непрерывных крупных потоков сведений, например, для распознавания речи.
Нейросетям даже доступна генерация изображений по краткому описанию будущей картинки.
Как работает нейросеть?
Нейронная сеть действует по тому же принципу, что и человеческий мозг: в ней формируются связи между искусственными нейронами – обрабатывающими элементами. Нейроны моделируются в цифровом компьютере и организуются в несколько уровней.
С точки зрения математики задача искусственного нейрона – суммировать все сигналы, а затем применять к полученной взвешенной сумме простую нелинейную функцию. Она непрерывна по всей области и монотонно возрастает. Результат, который получается в итоге, направляется на один выход – аксон.
Схема искусственного цифрового нейрона тоже включает синапсы – однонаправленные нейронные связи, соединяющие с другими нейронами. Таким образом, сигнал, поданный одним, поступает на синапсы следующих.
Аналогично человеческому мозгу, в искусственной нейронной сети предугадать, как конкретно будут переданы сведения, невозможно.
Объединяясь между собой, искусственные нейроны формируют нейронную сеть. У каждого свое текущее состояние, как это происходит с клетками головного мозга животных, то есть нейроны могут возбуждаться и затормаживаться. Определяют состояние по взвешенной сумме входов .
«Включается» искусственный нейрон за счет разницы весов на входе и выходе. Активация происходит обычно с помощью сигмоидальной функции.
Можно еще почитать об этом в интернете, например, в статье про нейронные сети для начинающих, в ее части 1.
Как нейросеть учится?
Только что созданная нейросеть ничего «не знает» и похожа на мозг новорожденного ребенка, в котором еще не сформировались нейронные связи. Как и малышу, искусственной нейросети требуется обучаться, и такая способность у нее есть. Поэтому в качестве синонима выражения «нейронные сети» часто используется фраза «глубокое обучение». Еще один синоним – «искусственный интеллект».
Основных методик обучения две, и обе они основаны на многократном повторении одной и той же операции. Какую именно выбрать в конкретном случае, зависит от проблемы, для решения которой создается нейронная сеть.
Первый метод обучения – формирование самоорганизующейся сети (сети Кохонена – по имени создателя). Она способна обрабатывать большие массивы данных, умеет искать и находить закономерности в процессах, выявлять их взаимные связи. Применяются сети Кохонена, чтобы анализировать сведения, полученные во время различных экспериментов.
Вторая методика – сеть с обратным распространением ошибки. Ее обучают для решения конкретной задачи. Часто такие ИНС используют в ходе изучения процесса познания и при создании приложений, призванных решать определенные задачи.
Обучение строится в зависимости от того, контролируемая или неконтролируемая сеть. В первом случае нейроны получают исходные данные и входную информацию. Такими входными сведениями может быть список слов, которые, как правило, присутствуют в спам-сообщениях электронной почты. А исходной информацией – классификация, по которой сеть определяет письмо, относя его к спаму или не к спаму.
Где используются нейросети?
Сегодня нейронные сети для обработки информации применяют там, где требуется распознавать образы, анализировать данные, оптимизировать процесс обработки, принимать решения и строить прогнозы. Их применяют, чтобы «узнавать» и обрабатывать изображения, распознавать и синтезировать речь, преобразовывать ее в текст, создавать системы навигации и контроля для промышленных роботов и беспилотных машин.
В крупных финансовых организациях схема искусственного интеллекта
позволяет оценивать платежеспособность, рассчитывать скидки, проводить маркетинговый анализ, оценивать кредиты, выявлять мошеннические сделки. В аэропортах западных стран нейросети помогают обнаруживать преступников: используются в детекторах, с помощью которых выявляют взрывчатые вещества. В Чикаго в США такие сети применяют, чтобы искать среди полицейских коррупционеров.
История развития современных нейронных сетей?
Путь развития нейронных сетей начался в 1943 году, когда была опубликована работа о кибернетике, написанная Норбертом Винером в соавторстве с другими учеными. В статье высказывалась идея о том, что сложные биологические процессы можно представить в виде математических моделей.
В том же 1943-ем ученые У. МакКалок и У. Питтс ввели понятие «нейронная сеть» и дали ему определение в публикации, где шла речь о нервной активности и логическом исчислении идей. Предложенная модель впоследствии была названа «моделью МакКаллока-Питтса» и развита другим ученым – Клини.
Суть сводилась к тому, что нейронная сеть способна к выполнению любых логических операций и преобразований, которые генерируются в дискретных устройствах, обладающих конечной памятью. Таким образом создатели модели дали формулировку основным положениям работы головного мозга. Ученые создали 1-ую модель нейрона, который, по их мнению, является простейшим процессорным элементом. МакКаллок и Питтс предложили свой вариант конструкции такой сети, состоящей из таких элементов, чтобы она могла решать арифметические и логические задачи. Авторы предположили, что такую сеть можно научить распознаванию образов и обобщению полученных данных. Этот принцип действия моделей нейронов в искусственной сети актуален и сегодня.
В дальнейшем на основе этой модели создана теория логических сетей и конечных автоматов. Нейрофизиологи и психологи применяли модель, чтобы моделировать часть локальных процессов нервной деятельности живых существ.
Перечислим основных вехи развития нейронных сетей.
- 1949 год – появление первого алгоритма обучения НС (автор – Хебб).
- 1958 год – изобретение перцептона (Perceptron), способного распознавать образы и предсказывать погоду, выполнять другие операции. Первую искусственную нейронную сеть придумал психолог Френк Розенблат.
- 1960 год – разработка ADALINE, адаптивного линейного нейрона. В нем используются электрохимические клетки (мемисторы или резисторы памяти), позволяющие имитировать синапсы искусственного нейрона. Авторы, Бернард Уидроу и Тед Хофф предложили устройства с 3 контактами, в которых применялось гальваническое обратимое медное покрытие. Сейчас ADALINE входит в состав множества систем для обработки сигналов.
- 1961 год – разработка программы «Кора», способной искать разделяющее правило. Создатели – коллектив ученых во главе с М. М. Бонградом. В настоящее время с помощью этой программы распознают нефтеносные пласты.
- 1969 год – публикация ученым Минским доказательств ограниченности возможностей перцептона, что привело к падению интереса к нейронным сетям.
- 1974 год – изобретение алгоритма обратного распространения ошибки, позволившего обучать многослойные перцептоны. Авторы – А. И. Галушкин и Пол Дж. Вербос.
- 1975 год – создание японским ученым Фукушима Когнитрона – самоорганизующейся сети, которая может инвариантно распознавать образ, если предварительно запоминает все его состояния.
- 1982 год – создание сети Холфилда (по имени ученого-изобретателя) – нейронной сети с обратными связями, а также появление моделей Кохонена. Его сеть могла обучаться без учителя, визуализировать информацию и выполнять предварительный анализ данных.
- 1986 год – сразу несколько ученых переоткрыли и развили метод обратного распространения ошибки, что привело к всплеску интереса к нейронным сетям, способным обучаться. История сделала новый виток.
- 2006 год – предложено несколько процедур неконтролируемого обучения нейронных сетей, в которых применены алгоритмы глубокого обучения.
Нейронные сети, как и с чего начать?
Разберемся, как создать простейшую нейронную сеть на ПК и чему-нибудь ее научить. Для тренировки, чтобы создать свою нейросеть онлайн, обратимся к образовательному проекту Google — Teachable Machine. Здесь есть простые инструменты создания моделей машинного обучения нейронных сетей для неопытных чайников.
Кликнув по кнопке «начать», вы оказываетесь на странице, где предлагается выбрать входящие данные – загрузить файл с диска или компьютера. Выходными сведениями могут быть звуковой файл или появление Gif-файла (картинки). Нейросеть Teachable Machine можно научить, например, «говорить» какое-то слово, когда объект на экране совершает определенное действие.
Настройка обучения нейронной сети начинается с группировки примеров. Это могут быть готовые файлы либо живая запись на камеру в ноутбуке или ПК. Например, если нажать на кнопку «Train Green», сервис сделает несколько десятков снимков, таким образом находя закономерность. Набор снимков называется «датасет».
Затем выбирается действие нейросети, когда она распознает заданный образ – появление звука или картинки. Когда обучение завершено, Teachable Machine показывает, насколько сеть «уверена» в том, что верно распознает входные данные. Это отображается в коэффициенте уверенности.
Теперь посмотрим, как написать свою нейронную сеть.
Как создать новую нейронную сеть самому?
С чего начать, если вы вообще никогда не занимались программированием?
- Первым делом — установить на свой компьютер язык программирования. Лучше всего подойдет Python: его довольно легко освоить. Для Windows можно взять программу на официальном сайте, для macOS – воспользоваться терминалом (Therminal). Достаточно Python7 или старшей версии.
Также понадобится открытая библиотека Google — TensorFlow, специально предназначенная для начинающих разработчиков нейросетей.
- Второй шаг – установить виртуальное окружение. Для этого – открыть командную строку (терминал) и ввести команды:
pip unstall –upgrade virtualevn;
virtualevn –system-site-paskage Название проекта;
source Название/bin/activate/
Это необходимо для установки инструмента, запускающего программы в окружении. Можно будет скачивать в папку «Название» приложения и библиотеки.
- Третий шаг – установка TensorFlow с помощью ввода команды «pip install tensorflow». Библиотека загрузится в корневую папку С:// или в Macintosh HD/Users/Имя_пользователя/, в зависимости от ОС. Для проверки успешности установки нужно ввести
python
import tensorflow as tf
hello = tf.constant(‘Hello, TensorFlow’)
sess = tf.Session()
print(sess.run(hello))
На экране должна появиться фраза «Hello, Tensorflow».
- Четвертый шаг – добавление классификатора, чтобы машинное обучение смогло понять, к какой группе относится объект: растение – цветок. Скачивается классификатор на Github, где нужно найти страницу «Tensorflow for poets» и кликнуть по плашке «Clone or download», после чего распаковать скачанный архив и запустить программу.
- Пятый шаг – добавление набора входных данных. Выбрав по несколько фотографий для нескольких цветов, их рассортировывают по папкам, каждой из которых дают название. Затем распаковывают архивы в папку классификатора (/tf_fales).
Переобучение модели
Теперь необходимо научить нейронную сеть, как выглядит тот или иной цветок. Для этого открывают командую строку и вводят команду для перехода в папку с классификатором.
- В Windows: cd C://Название/
- macOS: cd Название
Для запуска процесса обучения вводят набор команд
python scripts/retrain.py —output_graph=tf_files/retrained_graph.pb —output_labels=tf_files/retrained_labels.txt —image_dir=tf_files/flower_photos
В результате происходит настройка. Запускается процесс. Создается новый файл, чтобы определять, что на фото. Формируется новый файл с пометками (ромашки, васильки и так далее). Обозначается путь к папке, где лежат изображения.
Программа прогоняет входные фото через нейросеть, создавая bottleneck – файлы текстового типа, в которых содержатся данные о картинках. Спустя несколько десятков минут процесс завершается. Иерархические нейронные сети могут распознать на любых картинках цветы, фото которых удалось прогнать через ПК.
Тестирование нейросети
Чтобы проверить, насколько хорошо ИНС научилась распознавать изображения цветов, открывают в папке scripts текстового редактора файл label_image.py и меняют цифры в строчках:
input_height = 299
input_width = 299
input_mean = 0
input_std = 255
input_layer = «Mul»
Теперь можно выбрать любую картинку со цветком и поместить в папку сети с новым названием image.jpg. Потом написать команду
python scripts/label_image.py —image image.jpg
После проверки на экране появится результат в процентах. Он указывает вероятность того, что на картинке, например, именно ромашка.
Генерация фото и видео в нейронной сети
Теперь, когда вы знаете, как написать и обучить новую нейросеть самому, можно учить ее распознаванию лого или фотографий известных бизнесменов.
Чтобы создать для распознавания лого нейросеть или видео, понадобится сделать свой датасет. Картинки можно набрать в сети онлайн, в Google. А специальное расширение для Chrome поможет сохранить все изображения на странице.
Для каждого лого или фото предпринимателя потребуется своя папка с соответствующим названием, например, \tf_files\flower_photos\zuckerberg\. Лучше собрать больше изображений: это поможет нейросети быстрее распознавать.
Чтобы переобучить ее и запустить, вводят в командную строку:
python scripts/retrain.py —output_graph=tf_files/retrained_graph.pb —output_labels=tf_files/retrained_labels.txt —image_dir=tf_files/flower_photos
python scripts/label_image.py —image image.jpg
Повысить скорость обучения помогает использование сервера с GPU (видеокартой). Создать и обучить нейросеть там можно аналогичным образом. Python скачивается командой
sudo apt-get install python3-pip python3-dev
TensorFlow устанавливается с помощью команды:
pip3 install tensorflow-gpu
Затем нужно скачать классификатор и наборы входных данных, только на сервер сразу. Для переобучения модели используются команды:
python3 scripts/retrain.py —output_graph=tf_files/retrained_graph.pb —output_labels=tf_files/retrained_labels.txt —image_dir=tf_files/flower_photos
Для тестирования:
python scripts/label_image.py —image image.jpg
Этот короткий курс по созданию нейросетей подойдет и для чайников. В дальнейшем можно научиться, как создать сложные сети. При желании — пройти обучение в колледже или вузе и получить диплом по нейронным сетям.