Рассматривается применение нейронных сетей с использованием Keras, которая представляет собой открытую нейросетевую библиотеку, написанную на языке Python. Данная библиотека нацелена на оперативную работу с сетями глубинного обучения, при этом спроектирована так, чтобы быть компактной, модульной и расширяемой
нейрон, нейронные сети, машинное обучение, Keras
м
Нейронные сети неразрывно связаны с термином «машинное обучение». Впервые определение этому термину дал Артур Самуэль – известный исследователь в области искусственного интеллекта, в 1959 году. По мнению Самуэля, машинное обучение – это процесс, в результате которого ЭВМ будут способны показать поведение, которое в них не было явно запрограммировано.
Технологии машинного обучения уже довольно длительное время применяются в различных сферах. Большое число интеллектуальных систем находит широкое применение в повседневной жизни: автоматические торговые системы, медицинская диагностика, голосовые помощники, техническая диагностика, системы, оценивающие кредитоспособность физических и юридических лиц и т. д.
Целью машинного обучения является научить интеллектуальную систему находить зависимость ответов от свойств объектов, которые являются входными данными, чтобы в дальнейшем использовать её для прогнозов, то есть научить систему решать задачи автоматизации принятия решений. Такие интеллектуальные системы строятся на основе нейронных сетей.
Любая нейронная сеть строится на основе нейронов. Под нейроном подразумевается математический объект (функция), имеющий несколько входов и один выход. Нейрон, имеющий два входа изображён на рисунке 1 [1].
Рисунок 1 – Модель нейрона с двумя входами и одним выходом
Из рисунка видно, что выходной сигнал нейрона
Функция активации
Нейроны, рассмотренные выше, связывают между собой, создавая нейронные сети. На рисунке 2 приведена простая нейронная сеть, состоящая из трёх нейронов [2].
Рисунок 2 – Нейронная сеть
Вводный слой образуют два входа
При описании нейронных сетей часто упоминается термин «обучение». Считается, что нейронная сеть обучена, если все веса и смещения её нейронов подобраны так, чтобы выходной нейрон выдавал сигнал, соответствующий входным данным. Например, входными данными сети на рисунке 2 могу быть рост и вес, а выходным сигналом пол (0 – женский пол, 1 – мужской пол). Если сеть верно обучена, то веса и смещения будут подобраны так, что мужскому полу будет соответствовать больший рост и вес, а женскому меньший.
Для оценки эффективности нейронной сети нужен некий критерий. В качестве такого критерия может использоваться среднеквадратическая ошибка, определяемая по формуле:
где: n – число рассматриваемых объектов (число человек, чей рост и вес были даны нейронной сети для обучения);
Если для обучения сети использовать данные только одного человека, его рост, вес и правильный пол, то выражение (2) примет вид:
Очевидно,
Соответственно, веса и смещения нужно подбирать так, чтобы минимизировать ошибку
где:
Из последних двух выражений видно, что если частная производная от ошибки по весу или смещению положительна, т.е. увеличение этого веса или смещения приведёт к увеличению ошибки, то вес или смещение будет уменьшено на величину частной производной, умноженной на оценку обучения и наоборот.
Таким образом, используя всё время новые данные для обучения или те же самые, подавая их на вход нейронной сети снова и снова, можно добиться того, что веса и смещения станут такими, что ошибка
Чтобы не тратить время на создание нейронных сетей с нуля можно воспользоваться доступными бесплатными библиотеками, например, Keras, которая представляет собой открытую нейросетевую библиотеку, написанную на языке Python. Данная библиотека нацелена на оперативную работу с сетями глубинного обучения, при этом спроектирована так, чтобы быть компактной, модульной и расширяемой.
Рассмотрим пример использования Keras для создания нейронной сети, предсказывающей риск заболевания диабетом, на основе анализа восьми параметров:
- число беременностей;
- концентрация глюкозы в плазме через 2 часа после введения в пероральном глюкозотолерантном тесте;
- диастолическое артериальное давление;
- толщина кожной складки в районе трицепса;
- концентрация инсулина в сыворотке крови;
- индекс массы тела;
- функция, описывающая генетическую предрасположенность к диабету;
- возраст.
Для обучения сети будет использоваться файл «prima-indians-diabetes.csv» в котором строка за строкой идут через запятую 9 параметров, восемь из которых рассмотрены выше. Последний девятый параметр может принимать значения или «1» или «0». Соответственно, единица означает наличие диабета, а ноль его отсутствие.
Рисунок 3 – Пример файла с данными для обучения нейронной сети
В листинге 1 приведён код, реализующий нейронную сеть. В строках с 1 по 4 подключаются необходимые библиотеки. В строке 6 происходит чтение файла с обучающими данными для сети и запись их в массив dataset. В строках 7 и 8 из массива dataset выделяются входные сигналы для сети (восемь параметров, описанных выше) и ответы, которые от сети ожидают (девятый параметр, описанный выше). В 9 строке происходит сортировка данных X и Y на те, что будут использоваться для обучения сети и те, что будут использоваться для её тестирования. При этом только 20 % данных для обучения будут использоваться для тестирования сети. В строках с 10 по 15 создаётся непосредственно нейронная сеть, состоящая из 5 слоёв. Вводный слой содержит 12 нейронов и 8 входов, в качестве функции активации у этих нейронов выбрана функция relu. Выходной слой содержит только один нейрон и сигмоиду в качестве функции активации. В 16 строчке происходит компиляция модели сети, после чего её можно обучать. Обучение выполняется в 17 строчке с помощью функции fit. При этом число проходов по всем обучаемым данным выбрано 1000. После того, как обучение будет закончено, параметры модели, её веса и смещения будут сохранены в файл «'weights.h5». Эти данные можно будет впоследствии загрузить и использовать созданную сеть для предсказания заболевания диабетом при других входных данных.
|
Листинг 1 – Код, демонстрирующий создание и обучение нейронной сети с помощью библиотеки Keras
Разобрав приведённый выше код и оценив его сложность, можно сделать вывод о том, что наличие в свободном доступе бесплатных библиотек, например, таких, как Keras, делает практическое применение нейронных сетей доступным для большого числа заинтересованных в этом специалистов, что будет способствовать все большему использованию подобных библиотек для решения актуальных технических задач.
1. Галушкин, А. И. Нейронные сети: основы теории / А.И. Галушкин. - Москва : Гор. линия-Телеком, 2012. - 496 с.
2. Омельяненко, Я. Эволюционные нейросети на языке Python : практи-ческое руководство / Я. Омельяненко ; пер. с англ. В. С. Яценкова. - Москва : ДМК Пресс, 2020. - 310 с.