Главная страница
Навигация по странице:

  • Лабораторная работа № 2

  • Классификация объектов

  • Лабораторная работа № 3

  • Построение автокодировщиков

  • Лабораторная работа № 4

  • 2. ОГРАНИЧЕННЫЕ МАШИНЫ БОЛЬЦМАНА

  • Лаба. 2021 Лабораторный практикум по НТ. Технологии


    Скачать 6.22 Mb.
    НазваниеТехнологии
    Дата24.04.2023
    Размер6.22 Mb.
    Формат файлаpdf
    Имя файла2021 Лабораторный практикум по НТ.pdf
    ТипПрактикум
    #1084536
    страница2 из 4
    1   2   3   4

    Листинг 2. Прогнозирование временного ряда
    Попробуйте изменять значения параметров сети Nnet, заданные в ли- стинге 2, изучая их влияние на качество прогнозирования. Будет несложно заметить, как меняется качество прогноза непосредственно на результиру- ющем графике (рис. 7).

    13
    Здесь результирующий график построен с использованием функции
    ggplot(), которая предоставляет гораздо больше возможностей по сравне- нию с функцией plot(). Для качественной визуализации результатов любых исследований знание возможностей, которые предоставляют эти функции, и приобретение навыков их применения чрезвычайно полезно. Достаточно просто и кратко необходимые сведения об этих функция изложены в 5 и 6 разделах веб-ресурса [5].
    На графике рис. 5 прогноз, сделанный сетью представлен тонкой жел- той кривой поверх синего графика временного ряда а10. Можно заметить, что его начало сдвинуто на 12 месяцев.
    Рис. 7. График числа рецептов а10 (синий) и предсказанный сетью (желтый)
    Можно воспользоваться функцией plotnet() из библиотеки
    NeuralNetTools и отобразить архитектуру обученной сети Nnet (рис. 8). Си- наптические связи с положительными весами выделены на рис. 8 красным цветом, а с отрицательными – синим.
    Рис. 7. Архитектура сети Nnet

    14
    Лабораторная работа № 2
    Составить прогноз для заданного временного ряда с использованием библиотеки nnet. Отчет должен содержать подготовку данных для обучения сети. Обоснование выбранной архитектуры. Структурную схему обученной сети без указания весов. Варианты заданий приведены в табл. 3, где указаны названия временных рядов, которые доступны из библиотеки fpp2 [8].
    Таблица 3
    Варианты задания
    Вариант
    Временной ряд
    0
    auscafe
    1
    austourists
    2
    calls
    3
    debitcards
    4
    departures (resshort)
    5
    elecequip
    6
    qauselec
    7
    qcement
    8
    qgas
    9
    departures (visshort)
    Графики прогнозируемого и спрогнозированного временного ряда по- строить с использованием функции ggplot().
    Классификация объектов
    Задача классификации очень часто встречается на практике.
    Если рас- познаются только два класса, то в выходном слое персептрона находится только один нейрон, который обладает двумя реакциями. Если классов больше двух, то для каждой группы устанавливается свой нейрон.
    Рассмотрим основные приемы часто используемые при анализе дан- ных для множественной классификации. Проще всего их продемонстри- ровать на классическом примере классификации сортов ирисов.
    Набор iris
    [4], который включает 150 измерений параметров длины и ширины чашели- стика (sepal) и лепестка (petal) трех сортов ирисов Фишера: щетинистого
    (Setosa), виргинского (Virginica) и разноцветного (Versicolor), по 50 измере- ний для каждого сорта.
    Функция summary(), запущенная в консоли RStudio, позволяет ознако- миться с основными параметрами этого набора данных iris:

    15
    Отсюда видно, что имеется четыре входных параметра (Sepal.Length,
    Sepal.Width, Petal.Length, Petal.Width) и три категории сорта (species) ири- сов. Исходя из этого, можно предложить архитектуру персептрона, изобра- женную на рис. 8, где в скрытом слое условно изображено 6 нейронов.
    Рис. 8. Архитектураперсептрона для классификации данных iris
    При подготовке наборов данных (data set) весь набор делят на две ча- сти – обучающий или тренировочный набор (train set) и проверочный или тестовый набор (test set). Часто соотношение составляет 70-75% и 30-25%.
    Несмотря на то, что набор данных iris состоит всего из 150 векторов, сде- лаем такое разбиение. Важно здесь то, что нужно разбить весь набор на две части так, чтобы в любой из них представители из каждой категории или класса были в равных долях. В листинге 3, решающем задачу классифика- ции данных на основе модели nnet, это разбиение выполняется в строке 14, где в samp формируется по 35 случайных номеров векторов из каждой кате- гории для обучающего набора.
    Обратите внимание на интересный прием, который используется для формирования тестового набора. Если в обучающий набор
    train.set включа- ются все векторы с номерами из samp (строка 17), то в тестовый набор
    test.set – все остальные векторы и это записывается следующим образом
    data.iris[-samp,] (строка 18).
    В листинге 3 использовано всего 2 нейрона в скрытом слое size = 2 и, как мы увидим их вполне достаточно для решения этой простой задачи.
    Кроме наборов входных train.set и выходных targets[samp,] обучающих век- торов и значения size, которые всегда необходимо формировать, задан только один параметр maxit, определенный по умолчанию. Его значение по умолчанию равно maxit = 100, а мы задали значение maxit = 500.

    16
    Листинг 3. Классификация набора iris
    Поскольку, по умолчанию параметр trace = TRUE, визуальное отсле- живание процесса обучения сети включено и мы увидим следующее:
    > net.iris <- nnet(train.set,targets[samp,], size = 2, maxit = 500)
    # weights: 19 initial value 78.686545 iter 10 value 43.022535 iter 20 value 25.951476 iter 30 value 24.543711 iter 40 value 24.161124
    iter 50 value 23.892634 iter 60 value 22.477187 iter 70 value 22.342019 iter 80 value 22.106268 iter 90 value 21.860257 iter 100 value 21.258000 iter 110 value 20.159820 iter 120 value 19.850850 iter 130 value 19.684387 iter 140 value 19.446336 iter 150 value 19.419291 final value 19.418854 converged

    17
    Мы видим, что сформированная функцией nnet() сеть net.iris включает
    19 обучаемых весов (объясните почему) и ошибка обучения или потери уменьшаются в процессе итераций. В итоге, для сходимости процесса обу- чения в нашем случае потребовалось 150 итераций. Таким образом, следует уяснить, что сеть закончит обучение либо выполнив число итераций, задан- ное параметром maxit,либо достигнув заданной точности (параметрами ab-
    stol и reltol).
    Для оценки качества классификации удобно использовать провероч- ную матрицу, которая показывает, как сеть справилась с задачей. Для по- строения такой матрицы можно использовать две функции table() и
    max.col(), а в качестве параметров то, что требовалось получить на выходе сети и то, что она получила. В нашем случае результат выполнения кода строки 28 будет следующим:
    > table(max.col(targets[-samp,]), max.col(net.pred))
    1 2 3 1 14 0 1 2 0 15 0 3 0 0 15
    Номера строк и столбцов соответствуют трем классам, на которые сеть должна разбить входные векторы. Очевидно, поскольку в тестовом наборе мы оставили по 15 векторов каждого класса, идеальным результатом является диагональная матрица с элементами 15, 15, 15. Полученный ре- зультат говорит о том, что сеть выдала только одно неверное предсказание, отнеся вектор первого класса к третьему. Попробуйте устранить этот недо- чет и поделитесь полученным результатом.
    Лабораторная работа № 3
    Для выполнения лабораторной работы воспользуемся данными до- ступными на ресурсе http://archive.ics.uci.edu/ml/datasets/Vertebral+Column.
    Загрузите архив vertebral_column_data.zip и выберите из этого архива файл
    column_3C.dat.
    Файл содержит результаты рентгенологического исследования 310 пациентов. Каждый пациент представлен в наборе данных шестью парамет- рами, определяемыми формой и ориентацией таза и поясничного отдела по- звоночника в следующем порядке: угол падения таза, наклон таза, угол по- ясничного лордоза, наклон крестца, радиус таза и степень спондилолистеза.
    Для обозначений классов используется следующее соглашение: DH (грыжа диска), спондилолистез (SL) и нормальный (NO).
    Подготовить набор данных используя файл column_3C.dat. Построить и обучить сеть для классификации диагноза пациентов. Отчет должен

    18 содержать подготовку данных для обучения сети. Обоснование выбранной архитектуры. Проверочную матрицу для оценки качества классификации.
    Построение автокодировщиков
    Автокодировщики представляют интересный тип нейронных сетей, задачей которых является максимально возможное сжатие входного вектора и его воссоздание из этого сжатого представления. В связи с этим, характер- ной особенностью автокодировщиков является совпадение количества нейронов на входном и выходном слое.
    Сама по себе способность сжимать данные используется редко, однако автокодировщики можно использовать для предобучения, например, когда стоит задача классификации, а разме- ченных пар слишком мало, либо когда просто надо научиться различать по- лезные свойства входного сигнала.
    Рассмотрим пример построения, обучения и проверки автокодиров- щика для букв латинского алфавита в стилизации art1_letters.pat из набора данных snnsData библиотеки RSSNS. Для построения используем модель персептрона neuralnet с числом входов и выходов 35 и числом нейронов в скрытом слое hidden = 10. Число входов и выходов сети определяется дли- ной вектора представления букв 7х5 = 35, а число нейронов скрытого слоя определялось в процессе обучения.
    Листинг 4. Автокодировщик букв латинского алфавита art1_letters.pat
    Подготовка обучающей выборки в данном случае не составляет труда, так как входной и выходной наборы совпадают и взяты

    19 непосредственно из библиотеки (строка 4 – 6, листинг 4). Для визуа- лизации алфавита использована функция print.alphabet(), ее содержа- ние раскрыто в листинге 5.
    Обратите особое внимание на способ формирования формул для входов и выходов автокодировщика. Поскольку их размерность равна
    35, то вручную записывать такие последовательности трудоемко. По- этому удобно воспользоваться функциями конкатенации paste0() и
    as.formula() (строка 9 – 11, листинг 4), результатом использования ко- торых получена необходимая формула. Для проверки правильности формирования формулы посмотрим содержимое переменной form:
    > form in1 + in2 + in3 + in4 + in5 + in6 + in7 + in8 + in9 + in10 + in11 + in12 + in13 + in14 + in15 + in16 + in17 + in18 + in19 + in20 + in21 + in22 + in23 + in24 + in25 + in26 + in27 + in28 + in29 + in30 + in31 + in32 + in33 + in34 + in35

    in1 + in2 + in3 + in4 + in5 + in6 + in7 + in8 + in9 + in10 + in11 + in12 + in13 + in14 + in15 + in16 + in17 + in18 + in19 + in20 + in21 + in22 + in23 + in24 + in25 + in26 + in27 + in28 + in29 + in30 + in31 + in32 + in33 + in34 + in35
    Как видим, сначала сформированы имена выходов, объединен- ные знаком «+», а затем, после знака «», имена входов. Правда, здесь они совпадают.
    Следует отметить, что функция neuralnet() позволяет подбирать оптимальные значения для более, чем десятка параметров. Здесь мы задаем только два: число нейронов в скрытом слое hidden = 10 и до- статочно низкий порог функции ошибки threshold = 0.0006.
    Обученный автокодировщик тестируем на том же входном наборе, на котором обучали с помощью функции predict().
    Листинг 5. Функция визуализации алфавита
    Для визуализации результатов обучения удобно использовать описанную выше функцию print.alphabet(). На рис. 9 приведен резуль- тат работы обученной сети в сравнении с обучающей выборкой.

    20
    Рис. 9. Обучающая выборка и восстановленный алфавит при сжатии 3.5
    В скрытом слое было использовано 10 нейронов, поэтому коэффици- ент сжатия входного вектора равен 35/10 = 3.5. Попробуйте менять пара- метры сети (hidden и threshold) с тем, чтобы получить качественное восста- новление для других коэффициентов сжатия.
    Лабораторная работа № 4
    Построить автокодировщик для заданной обучающей выборки. Отчет должен содержать подготовку данных для обучения сети. Формирование формул для входа и выхода. Визуализацию обучающей выборки и восста- новленного образца. Структурную схему обученной сети без указания ве- сов. Варианты заданий приведены в табл. 4, где указаны названия файлов с обучающей выборкой, которые доступны из библиотеки RSNNS [4].
    Таблица 4
    Варианты задания
    Вариант
    Обучающая выборка
    Четная цифра
    snnsData$letters_auto.pat
    Нечетная цифра
    snnsData$artmap_test.pat
    Оценку максимально возможного сжатия производить визуально. Ви- зуализировать обучающие выборки можно с использованием функции ли- стинга 5, выполняя вызовы print.alphabet(snnsData$letters_auto.pat,14) и
    print.alphabet(snnsData$artmap_test.pat,8)

    21
    2. ОГРАНИЧЕННЫЕ МАШИНЫ БОЛЬЦМАНА
    Ограниченные машины Больцмана (r
    estricted Boltzmann machine -
    RBM)
    являются особым видом генеративных стохастических нейронных се- тей, которые обучаются методом градиентного спуска с контрастивной ди- вергенцией [12]. На практике RBM используются для снижения размерности данных, классификации и выделения признаков. Большой практический ин- терес представляют также сети глубокого доверия (deep belief network -
    DBN), которые строятся путем специального каскадирования RBM.
    Изучение моделей RBM и DBN построим на базе функций библиотеки
    Timo Matzen из [13].
    Функции RBM() и StackRBM() позволяют изучать соответствующие модели, а функции ReconstructRBM() и PredictRBM() предоставляют воз- можность визуализировать реконструированные векторы и оценить каче- ство классификации.
    Листинг 6. Функция подготовки изображений
    Часто в качестве обучающего набора используются изображения. Ко- гда подобные наборы формируются самостоятельно, удобно иметь автома- тизированное средство для подобной подготовительной работы. В качестве подобного средства предлагается функция подготовки изображений

    22
    image_conversion(), представленная в листинге 6. Функция обрабатывает все изображения размещенные в некотором директории, выполняя следующие действия: приводит размеры изображения к заданным (width х height), пре- образует в черно-белое, представляет как вектор и формирует результирую- щую матрицу всех изображений. Возвращаемая матрица имеет размеры – число строк равно числу обработанных изображений, число столбцов равно произведению width х height.
    Для использования функции image_conversion() необходимо предва- рительно заполнить выделенный директорий файлами с изображениями.
    Данная функция построена на базе возможностей предоставляемых библио- теками EBImage и pbapply. На рис. 10 приведен результат использования этой функции (первый ряд – приведение к размеру 28х28, второй ряд – пе- ревод в черно-белое изображение).
    Рис. 10. Преобразование изображений
    Рассмотрим варианты использования функций библиотеки RBM для понижения размерности обучающей выборки изображений. В качестве обу- чающей выборки загрузим изображения котят из веб-ресурса
    https://ru.wallpaper.mob.org/ и разместим их в рабочем директории в папке
    Cats (пример части загруженных изображений на рис. 10). Указанный ре- сурс является свободно распространяемым и может быть использован для загрузки изображений различных категорий.
    Библиотека RBM предоставляет как функцию RBM(), моделирующую отдельно взятую ограниченную машину Больцмана, так и функцию
    StackRBM(), позволяющую формировать стек из этих машин. В листинге 7 приведен пример использования обеих функций RBM() и StackRBM().
    После загрузки необходимых библиотек с помощью описанной выше функции image_conversion() формируется обучающая выборка изображе- ний размером 28х28 пикселей. Для ограниченной машины Больцмана зада- ется скрытый слой из 196 нейронов и устанавливается 400 итераций (эпох) обучения.
    Чтобы обеспечить наглядное сравнение результатов обучения отдель- ной ограниченной машины Больцмана и стека из этих машин вводится па- раметр mflow = c(2,10) задающий печать двух строк по 10 изображений.

    23
    Для стека ограниченных машин Больцмана задается три скрытых слоя с числом нейронов 392, 196 и 98. В качестве дополнительных параметров задается мини-батч размером 10, а также скорость обучения и коэффици- енты lambda и momentum.
    Листинг 7. Обучение ограниченных машин Больцмана
    Для того, чтобы обеспечить вывод в цикле произвольного числа ре- конструированных изображений оригинальная функция ReconstructRBM(), представленная в листинге 8, была частично изменена и обозначена Re-
    sultRBM() (листинг 9).
    Листинг 8. Оригинальная функция печати реконструированных изображений

    24
    Измененные части в оригинальной и измененной версии функции вы- делены желтым цветом.
    Листинг 9. Измененная функция печати реконструированных изображений
    Результат работы сети mod, моделирующей ограниченную машину
    Больцмана и modCat, моделирующей стек ограниченных машин, приведены на рис. 11.
    Рис. 11. Результат работы нейронной сети mod и modCat
    Функция DBN() обучает сеть глубокого доверия, начиная с предвари- тельно обученного стека неконтролируемых RBM, используя функцию
    StackRBM(), а затем добавляется контролируемый выходной слой. Резуль- тирующая сеть DBN настраивается по контролируемому критерию с ис- пользованием обратного распространения. Качество обучения позволяет оценить функция PredictDBN().
    Рассмотрим использование сети глубокого доверия для классифика- ции образов на примере функции DBN(). В качестве обучающей и тестовой выборки возьмем классический набор MNIST (листинг 10).
    Листинг 10. Классификация MNIST сетью глубокого доверия

    25
    При вызове функции DBN() использовано много входных параметров, определяющих особенности обучения модели modDBN. Для предваритель- ного тренинга (предобучения со скоростью 0.1) задано 150 эпох для каж- дого уровня RBM. Обучение на основе градиентного спуска определено на
    10000 эпохах со скоростью 0.5. Размер батча установлен равным 10. Пара- метр verbose = TRUE разрешает визуализацию процесса обучения – печать значения потерь (cost) на каждой эпохе.
    Для оценки результата классификации сетью глубокого доверия ис- пользована функция PredictDBN(), которая показывает достаточно не- плохую точность 0.916:
    Следует пояснить, почему при использовании функции PredictDBN() указан параметр layers = 4, хотя сеть modDBN включает три слоя nodes =
    c(500, 300, 150). Это сделано с учетом добавления контролируемого выход- ного слоя.
    1   2   3   4


    написать администратору сайта