практикум. Лабораторный практикум. Практикум санктпетербург 2021 2 Задание по практикуму
Скачать 2.07 Mb.
|
Ф.В. Филиппов НЕЙРОСЕТЕВЫЕ ТЕХНОЛОГИИ ЛАБОРАТОРНЫЙ ПРАКТИКУМ САНКТ-ПЕТЕРБУРГ 2021 2 Задание по практикуму Ниже приведены необходимые методические материалы для выпол- нения лабораторных работ, а также задания для практики. Главная цель состоит в приобретении навыков использования биб- лиотечных функций для реализации основных архитектур нейронных се- тей, позволяющих решать определенные практические задачи. Из представленных ниже заданий необходимо выполнить 4 лабора- торные работы и три практических задания. Отчет по каждой выпол- ненной работе оценивается в СДО определенным количеством баллов (максимум 10). Конкретные лабораторные работы и задания для практики выбира- ются студентом самостоятельно (одно ограничение – тема лабораторной и практической работы не должны совпадать). 3 СОДЕРЖАНИЕ ВВЕДЕНИЕ .................................................................................................................................... 4 ЛАБОРАТОРНЫЕ РАБОТЫ ................................................................................................... 5 1. ПЕРСЕПТРОНЫ ................................................................................................................... 5 Аппроксимация функций .................................................................................................... 6 Лабораторная работа № 1 ................................................................................................ 9 Прогнозирование временных рядов ................................................................................. 10 Лабораторная работа № 2 .............................................................................................. 14 Классификация объектов ................................................................................................... 14 Лабораторная работа № 3 .............................................................................................. 17 Построение автокодировщиков ........................................................................................ 18 Лабораторная работа № 4 .............................................................................................. 21 2. ОГРАНИЧЕННЫЕ МАШИНЫ БОЛЬЦМАНА ............................................................... 22 Лабораторная работа № 5 .............................................................................................. 26 3. СЕТИ КОХОНЕНА ............................................................................................................. 27 Лабораторная работа № 6 .............................................................................................. 28 4. СВЕРТОЧНЫЕ СЕТИ ......................................................................................................... 29 Лабораторная работа № 7 .............................................................................................. 32 5. ВАРИАЦИОННЫЕ АВТОКОДИРОВЩИКИ .................................................................. 34 Лабораторная работа № 8 .............................................................................................. 38 6. РЕКУРРЕНТНЫЕ СЕТИ НА БАЗЕ LSTM ....................................................................... 39 Лабораторная работа № 9 .............................................................................................. 42 ЗАДАНИЯ ДЛЯ ПРАКТИКИ ................................................................................................. 43 Задание № 1: Моделирование логической функции ....................................................... 43 Задание № 2: Классификация входных данных .............................................................. 43 Задание № 3: Построение карты Кохонена ..................................................................... 44 Задание № 4: Распознавание и классификация объектов ............................................... 45 Задание № 5: Сжатие данных ............................................................................................ 46 Задание № 6: Составление прогноза ................................................................................ 46 Задание № 7: Классификация объектов ........................................................................... 47 Задание № 8: Распознавание изображений ...................................................................... 48 Задание № 9: Классификация изображений .................................................................... 49 Задание № 10: Прогнозирование аварий сетевого оборудования ................................. 50 ЗАКЛЮЧЕНИЕ ........................................................................................................................... 50 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ .................................................................. 51 4 ВВЕДЕНИЕ Для решения широкого круга задач, когда не удается найти алгорит- мического решения используются нейронные сети. Способность нейрон- ных сетей обучаться позволяет переложить сложности поиска решения на их плечи. Успех качественного обучения нейронных сетей зависит от мно- гих факторов, но главными из них являются два – формирование хорошей обучающей выборки и выбор модели сети адекватной для конкретной за- дачи. Если подбор и подготовка данных для обучения является общей про- цедурой, зависящей от целей обучения, то выбор надлежащей архитектуры сети, во многом зависит от характера решаемой задачи. За период от начала практического использования нейронных сетей до настоящего времени сложились обоснованные предпочтения выбора конкретной архитектуры для задач определенного класса. Тем не менее процесс создания и апробирования новых моделей продолжается. Создано большое число библиотек, позволяющих легко экспериментировать и находить наилучшие решения. Лабораторный практикум предназначен для получения навыков ра- боты с моделями нейронных сетей при решении широкого класса задач. Его со- держимое будет предельно понятно, если предварительно ознакомиться с одноименным учебным пособием [1]. Практикум содержит лабораторные работы и задания для самостоятельной практики. Изучение относительно простых архитектур нейронных сетей осно- вано на использовании классических моделей персептронов, ограниченных машин Больцмана и сетей Кохонена. Все эти модели реализованы в виде функций, которые позволяют варьировать большое число параметров, не- обходимых для их адаптации к решаемой задачи и получения адекватных результатов. Для построения более сложных архитектур с различным числом и назначением слоев, а также с введением специфических модулей, типа LSTM, здесь используется библиотека keras. При выполнении лабораторных работ рекомендуется детально изу- чить листинги, предваряющие задание, и выполнить их в среде RStudio. Задания для самостоятельной практики взяты из веб-ресурсов, с которыми возможно следует познакомиться. Выполнение этих заданий носит харак- тер небольшого исследования. Поскольку предлагаемые здесь примеры и задания используют язык программирования R, полезно также получить некоторые навыки его ис- пользования, например, изучив базовые структуры и функции из [2]. Для тех, кто знаком с языком Python, предлагается выполнять представленные здесь задания в среде Colab [3]. 5 ЛАБОРАТОРНЫЕ РАБОТЫ 1. ПЕРСЕПТРОНЫ Главной особенностью моделей нейронных сетей, объединенных под названием персептрон, являются полносвязные слои. В них нейрон преды- дущего слоя связан со всеми нейронами следующего слоя. В среде RStudio используется три модели персептрона, реализованные в виде функций nnet(), neuralnet() и mlp() [4]. Каждая из этих функций имеет много пара- метров, большинству из которых присвоены значения по умолчанию: nnet(x, y, weights, size, Wts, mask, linout = FALSE, entropy = FALSE, softmax = FALSE, censored = FALSE, skip = FALSE, rang = 0.7, decay = 0, maxit = 100, Hess = FALSE, trace = TRUE, MaxNWts = 1000, abstol = 1.0e-4, reltol = 1.0e-8) neuralnet(formula, data, hidden = 1, threshold = 0.01, stepmax = 1e+05, rep = 1, startweights = NULL, learningrate.limit = NULL, learningrate=NULL, learningrate.factor = list(minus = 0.5, plus = 1.2), lifesign = «none», lifesign.step = 1000, algorithm = «rprop+», err.fct = «sse», act.fct = «logistic», linear.output = TRUE, exclude = NULL, constant.weights = NULL, likelihood = FALSE) mlp(x, y, size = c(5), maxit = 100, initFunc = «Randomize_Weights», initFuncParams = c(-0.3, 0.3), learnFunc = «Std_Backpropagation», learnFuncParams = c(0.2, 0), updateFunc = «Topological_Order», updateFuncParams = c(0), hiddenActFunc = «Act_Logistic», shufflePatterns = T, linOut = FALSE, inputsTest = NULL, targetsTest = NULL, pruneFunc = NULL, pruneFuncParams = NULL) Обилие параметров предоставляет широкие возможности по настройке или, как часто говорят, по подгонке выбранной модели для оп- тимального решения задачи. Известно, что персептроны удобно применять в решении практиче- ских задач, связанных с классификацией и аппроксимацией (или регресси- ей): сеть с одним скрытым слоем, содержащим N нейронов со ступенча- той функцией активации, способна осуществить произвольную клас- сификацию Nd точек d-мерного пространства (то есть классифици- ровать Nd примеров); одного скрытого слоя нейронов с сигмоидной функцией активации достаточно для аппроксимации любой функции со сколь угодно вы- сокой точностью. Рассмотрим примеры использования различных моделей персептро- нов для решения различных задач. 6 Аппроксимация функций Рассмотрим простой пример аппроксимации функции y = 2cos x + 8 на отрезке [0, 8]. В листинге 1 приведен код для решения этой задачи с ис- пользованием модели neuralnet(). Сначала формируется фрейм данных learn для обучения сети (строка 6). Затем загружается библиотека neuralnet и формируется сеть netcos. В функции neuralnet() мы определяем минимальное число парамет- ров: задаем формулу y x, определяем число нейронов в скрытом слое hid- den = 4 и указываем имя фрейма learn с набором данных для обучения. Остальные параметры заданы по умолчанию (строка 10). Запуск функции на исполнение осуществляет обучение сети netcos. Листинг 1. Аппроксимация функции y = 2cos x + 8 7 Для проверки работы обученной сети создаем фрейм test (строка 16) с тестовыми данными. Функция predict() вычисляет реакцию обученной сети netcos в переменной yp. На рис. 1 приведен график моделируемой функции y, представленной 50 зелеными точками, и функции yp, сформи- рованной сетью и представленной на графике 5000 черных точек. График демонстрирует полное совпадение функций. Рис. 1. Моделируемая и результирующая функция С помощью функции plot(netcos) получаем архитектуру полученной сети (рис. 2). Полную информацию о построенной сети можно получить с помощью функции print(netcos). Рис. 2. Архитектура сети netcos 8 Интересно посмотреть аналитическое представление функции реали- зованной сетью netcos для исходной моделируемой функции. Для этого представим функции, реализуемые нейронами скрытого слоя (строка 24 – 27, листинг 1) и построим их графики (рис.3). Рис. 3. Функции, реализуемые нейронами скрытого слоя Функцию y, реализованную сетью netcos, получаем из этих функций следующим образом (округляем значения весов до сотых долей): Постройте график y (строка 39, листинг 1) и убедитесь в том, что на отрезке [0, 8] эта функция практически тождественна исходной функции y = 2cos x + 8. Обратите внимание на использование в листинге функций set.seed(), которые задают начальную фазу генератора случайных чисел. Их необхо- димо использовать для повторной воспроизводимости полученных резуль- татов. Из многочисленного числа параметров для решения задач приведен- ного ниже задания достаточно будет правильно сформировать обучающие и проверочные данные, подобрать структуру сети и число повторений (эпох) обучения. Данные для обучения и тестирования должны быть сформированы в виде фреймов. Для правильного подбора структуры необходимо подобрать число скрытых слоев и число нейронов каждого скрытого слоя. В ряде заданий будет достаточно одного скрытого слоя, как в примере листинга 1. При необходимости использования двух слоев параметр hidden нужно опреде- лять как двухкомпонентный вектор, например, hidden = c(6,2) определяет два скрытых слоя с 6 нейронами в первом и 2 нейронами во втором слое. 9 Число эпох обучения задается параметром rep, который по умолча- нию имеет значение 1. Обычно, когда сеть не может достигнуть заданной точности за одну эпоху, выдается предупреждение «Algorithm did not converge in 1 of 1 repetition(s) within the stepmax». Лабораторная работа № 1 Работа состоит из двух заданий, необходимо выполнить оба задания. Задание 1. Смоделировать заданную функцию на отрезке [0, 8] с ис- пользованием библиотеки neuralnet. Отчет должен содержать подготовку данных для обучения сети. Обоснование выбранной архитектуры. Струк- турную схему обученной сети с указанием весов. Графики моделируемой и смоделированной функций. Варианты заданий приведены в табл.1 (номер варианта определяется последней цифрой номера зачетки). Таблица 1 Варианты задания Вариант Моделируемая функция 0 y = cos x / (sin 2x + 2) 1 y = sin x(arctg 0.5x) + cos x 2 y = 0.5 sin x + cos 2x + √ 3 y = cos x + x – sin 2x 4 y = 4 arctg x + sin x 5 y = sin x / (cos 2x + 2) 6 y = sin x + x – cos 2x 7 y = 0.4 cos x + sin 3x + √ 8 y = 0.5 cos x + 1.5 arctg 0.2x + √ 9 y = sin 0.3x 2 + √ Задание 2. Подобрать структуру hidden и порог функции ошибки threshold для точной аппроксимации заданных последовательностей им- пульсов. Отчет по работе должен содержать структурную схему обученной сети без указания весов. Графики аппроксимируемой и полученной после- довательности для нескольких приближений параметров hidden и threshold. Варианты заданий приведены в табл.2. Таблица 2 Варианты задания Вариант Последовательность импульсов Четная цифра x = seq(from = -9.5, to = 10, by = 0.5) y = rep(c(1,1,1,1,1,0,0,0,0,0), 4) Нечетная цифра x = seq(from = 0, to = 3.15, by = 0.05) y = rep(c(1,1,1,1,0,0,0,0), 8) 10 Графики должны быть в виде наложения полученной последователь- ности на аппроксимируемую. Пример построения графиков приведен на рис. 4. Для получения нескольких графиков в одном окне используйте ко- манду типа par(mfrow = c(3, 2)), которая указывает, что окно делится на 3 части по горизонтали и на две по вертикали, где будет размещено 6 графи- ков. Рис. 4. Пример построения графиков Для изображения нескольких кривых на одном графике используется две функции plot() и lines(). Функция plot() для первого графика, а функции lines() для последующих. Например, на рис. 4 для построения желтых кри- вых использован plot(x, y, type = ‘l’, col = “yellow”, lwd = 9), а для наложе- ния черных lines(x, y1). Прогнозирование временных рядов В большинстве случаев основой для прогнозирования служат ретро- спективные данные в виде временных рядов. В Data Mining существует специальное понятие временного ряда (Time-Series). Анализ временных рядов от анализа случайных выборок отличается предположением о рав- ных промежутках времени между наблюдениями и наличием хронологи- ческого порядка. Привязка наблюдений ко времени играет здесь ключевую роль, тогда как при анализе случайной выборки она не имеет никакого значения. 11 Рис. 5. Временной ряд а10 Возьмем в качестве примера временного ряда данные a10 из библио- теки fpp2 [8]. Файл a10 включает данные о количестве выписанных ежеме- сячных рецептов на фармацевтические продукты, подпадающие под код A10, согласно данным Австралийской комиссии по страхованию здоровья. Данные представлены за период с июля 1991 по июнь 2008 год. Характер изменения значений этого временного ряда представлен на рис. 5. Задача состоит в том, чтобы путем анализа временного ряда опреде- лить тенденции динамики его изменения на основе ретроспективных зна- чений. Обучающая выборка строится на основе разбиения данных на рав- ные периоды, для каждого из которых правильным значением на выходе устанавливается первое следующее за ним значение. На практике строится матрица наблюдений с числом столбцов, равным длине периода наблюде- ния плюс единица. На рис. 6 представлено подобное разбиение для временного ряда а10. Периодом наблюдения является 12 месяцев, поэтому входной вектор X обучающей выборки имеет размерность 12, а выходной вектор Y являет- ся одноразмерным. На рис. 6 показано построение первых пяти обучаю- щих наборов. Первый набор представляет из себя 13 первых элементов ряда а10, где 12 элементов образуют входной вектор, а 13-ый элемент выходной вектор. Второй набор образован из тринадцати элементов ряда а10, начи- ная со второго элемента и также разбит на 12+1 и так далее. Например, пя- тый набор сформирован из 13 элементов ряда а10, начиная с пятого эле- мента и разбит на 12+1. Рис. 6. Заполнение матрицы наблюдений Решение задачи прогнозирования представлено в листинге 2. Рас- смотрим его особенности. Сначала загружаются необходимые библиотеки fpp2 и nnet, данные а10 считываются в переменную scripts и подсчитывается их число n. Далее готовится матрица наблюдений LearnSeq с числом столбцов 13 и строк n – 12. Матрица заполняется данными в соответствии с рассмот- ренным выше способом (строка 12, листинг 2). В качестве модели персептрона будем использовать функцию nnet(). Следует отметить, что эта функция допускает наличие только одного 12 скрытого слоя, поэтому параметр size может задавать число нейронов только в одном слое. Перед заданием параметров и запуском на обучение сети не забываем зафиксировать начальную фазу генератора случайных чисел set.seed(55). Выбираем число нейронов size = 60, разрешаем в качестве функции активации выходного нейрона линейную функцию linout = TRUE. Для пер- воначальных случайных весов выбираем значение rang = 0.1 и задаем мак- симальное число итераций maxit = 300. Интересно, как правильно осу- ществлять выбор параметров нейронной сети, значения которых, заданные по умолчанию, явно не подойдут. Прежде всего следует понимать какие параметры могут повлиять на работу сети для конкретной задачи. В дан- ном случае решается задача прогнозирования временного ряда, поэтому параметр decay = 0 можно оставить без внимания, так как шумы отсут- ствуют. Главными в этом случае являются size, rang и maxit. Два первых проще всего находить подбором, а число итераций чем больше, тем лучше. При обучении сети, когда по умолчанию включен параметр trace = TRUE, можно увидеть реальное число необходимых эпох. |