Характеристика основных методик построения и расчета нейронных сетей

Трудности алгоритма обучения персептрона. Методика вычисления выходов слоя Кохонена до применения активационной функции. Нейрочип – программируемое устройство, которое имеет операционные узлы для выполнения операций, свойственных нейронным сетям.

Рубрика Программирование, компьютеры и кибернетика
Вид курс лекций
Язык русский
Дата добавления 17.01.2022
Размер файла 2,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Сравнение. Единственный возбужденный в слое распознавания нейрон возвращает единицу обратно в слой сравнения в виде своего выходного сигнала rj. Эта единственная единица может быть визуально представлена в виде «веерного» выхода, подающегося через отдельную связь с весом ti1 на каждый нейрон в слое сравнения, обеспечивая каждый нейрон сигналом рj, равным величине tj1 (нулю или единице) (рис. 29).

Рис. 29. Путь сигнала отдельного возбужденного нейрона в слое распознавания

Алгоритмы инициализации и обучения построены таким образом, что каждый весовой вектор Тj имеет двоичные значения весов; кроме того, каждый весовой вектор Вj представляет собой масштабированную версию соответствующего вектора Тj. Это означает, что все компоненты Р (вектора возбуждения слоя сравнения) также являются двоичными величинами.

Так как вектор R не является больше нулевым, сигнал G1 устанавливается в нуль. Таким образом, в соответствии с правилом двух третей, возбудиться могут только нейроны, получающие на входе одновременно единицы от входного вектора Х и вектора Р.

Другими словами, обратная связь от распознающего слоя действует таким образом, чтобы установить компоненты С в нуль в случае, если входной вектор не соответствует входному образу, т.е. если Х и Р не имеют совпадающих компонент.

Если имеются существенные различия между Х и Р (малое количество совпадающих компонент векторов), несколько нейронов на фазе сравнения будут возбуждаться и С будет содержать много нулей, в то время как Х содержит единицы. Это означает, что возвращенный вектор Р не является искомым, и возбужденные нейроны в слое распознавания должны быть заторможены. Это торможение производится блоком сброса (рис. 28), который сравнивает входной вектор Х и вектор С и вырабатывает сигнал сброса, если степень сходства этих векторов меньше некоторого уровня. Влияние сигнала сброса заключается в установке выхода возбужденного нейрона в нуль, отключая его на время текущей классификации.

Блок сброса сравнивает вектор С и входной вектор X, вырабатывая сигнал сброса, когда их сходство S ниже порога сходства. Вычисление этого сходства упрощается тем обстоятельством, что оба вектора являются двоичными (все элементы либо 0, либо 1). Следующая процедура проводит требуемое вычисление сходства:

1. Вычислить D - количество единиц в векторе X.

2. Вычислить N - количество единиц в векторе С. Затем вычислить сходство S следующим образом:

S-N/D.

Например, примем, что

Х=1 011101 D=5

С=0 011101 N=4

S = N/D=0.8

S может изменяться от 1 (наилучшее соответствие) до О (наихудшее соответствие).

Заметим, что правило двух третей делает С логическим произведением входного вектора Х и вектора Р. Однако Р равен Тj, весовому вектору выигравшего соревнование нейрона. Таким образом, D может быть определено как количество единиц в логическом произведении векторов Тj и X.

Поиск. Если не выработан сигнал сброса, сходство является адекватным, и процесс классификации завершается. В противном случае другие запомненные образы должны быть исследованы с целью поиска лучшего соответствия. При этом торможение возбужденного нейрона в распознающем слое приводит к установке всех компонент вектора R в О, G1 устанавливается в 1 и входной вектор Х опять прикладывается в качестве С. В результате другой нейрон выигрывает соревнование в слое распознавания и другой запомненный образ Р возвращается в слой сравнения. Если Р не соответствует X, возбужденный нейрон в слое распознавания снова тормозится. Этот процесс повторяется до тех пор, пока не встретится одно из двух событий:

1. Найден запомненный образ, сходство которого с вектором Х выше уровня параметра сходства, т.е. S > р. Если это происходит, проводится обучающий цикл, в процессе которого модифицируются веса векторов Тj и Вj, связанных с возбужденным нейроном в слое распознавания (успешный поиск).

2. Все запомненные образы проверены, определено, что они не соответствуют входному вектору, и все нейроны слоя распознавания заторможены. В этом случае предварительно не распределенный нейрон в распознающем слое выделяется этому образу и его весовые векторы Вj и Тj устанавливаются соответствующими новому входному образу (неуспешный поиск).

Обучение. Обучение представляет собой процесс, в котором набор входных векторов подается последовательно на вход сети и веса сети изменяются при этом таким образом, чтобы сходные векторы активизировали соответствующие нейроны. Заметим, что это - неуправляемое обучение, нет учителя и нет целевого вектора, определяющего требуемый ответ.

Различают два вида обучения: медленное и быстрое. При медленном обучении входной вектор предъявляется настолько кратковременно, что веса сети не имеют достаточного времени для достижения своих асимптотических значений в результате одного предъявления. В этом случае значения весов будут определяться скорее статистическими характеристиками входных векторов, чем характеристиками какого-то одного входного вектора. Динамика сети в процессе медленного обучения описывается дифференциальными уравнениями.

Быстрое обучение является специальным случаем медленного обучения, когда входной вектор прикладывается на достаточно длительный промежуток времени, чтобы позволить весам приблизиться к их окончательным значениям. В этом случае процесс обучения описывается только алгебраическими выражениями. Кроме того, компоненты весовых векторов Т. принимают двоичные значения, в отличие от непрерывного диапазона значений, требуемого в случае быстрого обучения. Рассмотренный далее обучающий алгоритм используется как в случае успешного, так и в случае неуспешного поиска.

Пусть вектор весов Вj (связанный с возбужденным нейроном j распознающего слоя) равен нормализованной величине вектора С. Эти веса вычисляются следующим образом:

b ij = (Lci/(L-l+ ck),

где ck - i-я компонента выходного вектора слоя сравнения; j - номер выигравшего нейрона в слое распознавания; b ij - вес связи, соединяющей нейрон i в слое сравнения с нейроном j в слое распознавания; L - константа > 1 (обычно 2).

Сумма в знаменателе представляет собой количество единиц на выходе слоя сравнения. Эта величина может быть рассмотрена как «размер» этого вектора. В такой интерпретации «большие» векторы С производят более маленькие величины весов, чем «маленькие» вектора С. Это свойство самомасштабирования делает возможным разделение двух векторов в случае, когда один вектор является поднабором другого; т.е. когда набор единичных компонент одного вектора составляет подмножество единичных компонент другого.

Компоненты вектора весов Тj, связанного с новым запомненным вектором, изменяются таким образом, что они становятся равны соответствующим двоичным величинам вектора С:

tij=ci для всех i,

где tij является весом связи между выигравшим нейроном j в слое распознавания и нейроном i в слое сравнения.

Рис. 30. Процесс обучения APT

На рис. 30 показан типичный сеанс обучения сети APT. Буквы показаны состоящими из маленьких квадратов, каждая буква размерностью 8х8. Каждый квадрат в левой части представляет компоненту вектора Х с единичным значением, не показанные квадраты являются компонентами с нулевыми значениями. Буквы справа представляют запомненные образы, каждый является набором величин компонент вектора Тj.

Вначале на вход системы подается буква С. Так как отсутствуют запомненные образы, фаза поиска заканчивается неуспешно; новый нейрон выделяется в слое распознавания, и веса Тj устанавливаются равными соответствующим компонентам входного вектора, при этом веса В. представляют масштабированную версию входного вектора.

Далее предъявляется буква В. Она также вызывает неуспешное окончание фазы поиска и распределение нового нейрона. Аналогичный процесс повторяется для буквы Е. Затем слабо искаженная версия буквы Е подается на вход сети. Она достаточно точно соответствует запомненной букве Е, чтобы выдержать проверку на сходство, поэтому используется для обучения сети. Отсутствующий пиксель в нижней ножке буквы Е устанавливает в 0 соответствующую компоненту вектора С, заставляя обучающий алгоритм установить этот вес запомненного образа в нуль, тем самым воспроизводя искажения в запомненном образе. Дополнительный изолированный квадрат не изменяет запомненного образа, так как не соответствует единице в запомненном образе.

Четвертым символом является буква Е с двумя различными искажениями. Она не соответствует ранее запомненному образу (S меньше чем р), поэтому для ее запоминания выделяется новый нейрон.

Этот пример иллюстрирует важность выбора корректного значения критерия сходства. Если значение критерия слишком велико, большинство образов не будут подтверждать сходство с ранее запомненными, и сеть будет выделять новый нейрон для каждого из них. Это приводит к плохому обобщению в сети, в результате даже незначительные изменения одного образа будут создавать отдельные новые категории.

Количество категорий увеличивается, все доступные нейроны распределяются, и способность системы к восприятию новых данных теряется.

Наоборот, если критерий сходства слишком мал, сильно различающиеся образы будут группироваться вместе, искажая запомненный образ до тех пор, пока в результате не получится очень малое сходство с одним из них.

К сожалению, отсутствует теоретическое обоснование выбора критерия сходства, в каждом конкретном случае необходимо решить, какая степень сходства должна быть принята для отнесения образов к одной категории.

11. Нейрокомпьютер. Основные направления реализации нейросетей. Оценка производительности нейрокомпьютеров

Нейрокомпьютером называется совокупность аппаратных и программных средств для реализации нейронных сетей.

Реализации нейросетей делятся на две основные группы:

- аппаратная реализация - реализация нейронной сети на базе нейрочипа, нейроускорителя или нейрокомпьютера.

- программная реализация - реализация НС на обычных ЭВМ.

Аппаратная реализация имеет повышенную производительность - так как производительность реализации нейронных сетей напрямую зависит от способности к параллелизму, специализированное оборудование позволит получить большую скорость вычислений, чем на последовательных ЭВМ.

Программная реализация, хоть и медленнее аппаратной реализации на вычислительных системах схожего уровня, позволяет:

- не тратиться на новую аппаратуру

- не обучаться особенностям программирования на спецпроцессорах

- в случае смены структуры сети не потребуется снова тратиться на специализированные аппаратные решения.

Аппаратная реализация также делится на два типа:

- цифровая - реализация с помощью обычных цифровых микросхем

- аналоговая - реализация на аналоговой элементной базе, в которой используются простые физические законы для реализации преобразований

- гибридная - комбинация цифровых и аналоговых элементов.

Так как нейрокомпьютеры обладают большим количеством параметров (числом и типом нейронов, количеством связей, точностью и т.д.), общепринятой мерой производительности считается CPS (connections per second - соединения в секунду). Под соединением подразумевается умножение входа нейрона на вес связи и прибавка получившегося числа к сумме.

Помимо CPS, также используется мера CUPS (connections upgrading per second - количество измененных весов в секунду). Для увеличения производительности необходимо озаботиться скоростью операций умножения, возможностью их распараллеливания, а также скоростью доступа к памяти.

Приобретением специализированных нейропроцессоров стоит озаботиться лишь при серьезных объемах обрабатываемой информации. В ином случае вычислительной мощности современных ЭВМ окажется более чем достаточно.

Программная реализация нейросетей на примере модели процессорного элемента NeuralWorks.

Рис. 31

Модель процессорного элемента, разработанная NeuralWorks, является универсальной, благодаря чему можно создавать различные типы нейросетей используя одни и те же структуры данных. Благодаря этому для смены структуры сети нужно изменить небольшую часть программы, что уменьшает вероятность ошибок. Помимо этого, архитектура процессорного элемента упрощает распараллеливание.

Для каждого слоя могут быть настроены следующие параметры:

Активационная функция

Выходная функция

Метод подсчета суммы

Масштаб, смещение и границы

Правило обучения

Данный процессорный элемент работает по следующему алгоритму:

Вычисление взвешенной суммы - вычисляется сумма связей между слоями, умноженной на их веса. Помимо суммы, есть возможность использовать другие функции - произведение, вычисление минимума/максимума и т.д.

Активационная (передаточная) функция - к полученной на первом шаге сумме применяется одна из встроенных активационных функций, к примеру, сигмоидальная, линейная и пр. Помимо этого, к значению выхода могут применяться различные модификации, к примеру, случайные помехи, зависящие от установленного параметра температуры.

Масштабирование и ограничение - полученный результат может быть домножен на установленный коэффициент, а также могут быть установлены верхняя и нижняя граница.

Соревнование (выходная функция) - на данном шаге определяется метод соревнования. Соревнование может происходить на одном или обоих уровнях: сначала определяется, какой элемент будет активен (будет обеспечивать выходной сигнал); затем, какой будет участвовать в обучении или процессе адаптации. К примеру, с помощью этого можно организовать функцию WTA.

Архитектура нейрочипа NeuroMatrix NM6403.

К нейрочипу предъявляются следующие требования:

- нейрочип - это программируемое устройство, которое имеет в своем составе специализированные операционные узлы, предназначенные для эффективного выполнения операций, свойственных нейронным сетям.

- нейрочип должен обеспечивать вычисление наибольшего количества выходов нейронов за такт.

- нейрочип должен обеспечивать выполнение операций над числами произвольной разрядности.

- нейрочип должен иметь поддержку параллельной работы произвольного количества операционных узлов

- любая команда, кроме работ с массивами данных, должна выполняться за один такт

- нейрочип должен обладать развитой системой команд, реализующих основные операторы современных языков высокого уровня.

Нейрочип NeuroMatrix NM6403 предназначен для реализации нейросетей, имеющих следующие функциональные характеристики:

а) Каждый слой нейросети выполняет следующую функцию:

нейронный алгоритм персептрон

б) Смещения, весы связей, входы и выходы нейронов задаются в прямом и дополнительном коде и могут иметь произвольную разрядность.

в) Количество нейронов, слоев и сигналов в каждом слое может быть произвольным.

г) Между входами и выходами нейронов допускаются любые соединения.

В основе архитектуры стоят операционные узлы, способные производить вычисления для чисел произвольной разрядности. Они организованы таким образом, чтобы вычисление взвешенных входов и их суммирование выполнялось параллельно.

Рис. 32

В начале в матрицу весов побитово заносятся веса. В ходе этого операционный узел разбивается на PxR подматриц - где P - количество нейронов, а R - количество входов в рассматриваемом фрагменте сети. Разрядность подматриц зависит от разрядности весов и входов.

На выходе подматрицы формируется результат операции:

На данном этапе важно, чтобы значения нейронов не превышали максимально возможную разрядность, чтобы сигналы переноса не могли повлиять на другие нейроны.

Рис. 33

Ядром архитектуры является структура, схожая с матричным умножителем. Матрица состоит из 64х64 ячеек, каждая из которых содержит триггер и несколько логических элементов. На подматрицы матрица делится с помощью двух регистров.

Для ускорения загрузки весов в матрицу используется вспомогательна «теневая матрица». Веса в теневую матрицу могут заноситься параллельно выполнению вычислений с основной матрицей, а после передаются из теневой в основную за один такт.

Для защиты от переполнения используют функции насыщения, которые позволяют уменьшить разрядность результатов.

Многопроцессорные системы на основе нейрочипа NM6403

Основными архитектурными особенностями нейрочипа для построения различных параллельных систем являются наличие двух высокоскоростных двунаправленных байтовых коммуникационных портов, аппаратно совместимых с портами сигнального процессора TMS320C40 и поддержка доступа к совместно используемой памяти. Путем объединения нейрочипов различными способами можно добиться реализации большого числа высокопроизводительных параллельных систем разнообразной конфигурации. На рис. 34 приведены примеры построения вычислительных сетей на базе нейрочипа.

Рис. 34. Примеры построения вычислительных сетей на базе нейрочипа: а) двунаправленный конвейер (для операций над матрицами, эмуляции нейросетей прямого распространения и других конвейеризированных вычислений), б) структура типа двумерной решетки (для операций над матрицами и эмуляции нейросетей прямого распространения), в) двунаправленное кольцо (для эмуляции различных нейросетей, в том числе с обратными связями и многослойных)

Кроме вышеперечисленных возможностей можно также создавать вычислительные сети практически любой конфигурации с использованием сигнального процессора TMS320C40 в качестве коммутирующего элемента.

Примеры такого подхода можно увидеть на рис. 35:

Рис. 35. Примеры построения вычислительных сетей на базе нейрочипа и TMS320C4x в качестве коммутирующего элемента: а) структура типа дерева (для эмуляции многослойных нейросетей, а также для задач распознавания образа), б) структура типа трехмерной решетки (для эмуляции трехмерных нейросетей, а также для задач распознавания образа)

Используемый интерфейс с памятью определяет 3 основные группы архитектур систем на основе нейрочипа (см. рис. 36):

Рис. 37. Сети с совместно используемой/распределенной памятью: а) aрхитектура с совместно используемой памятью, б) архитектура с распределенной памятью, в) смешанная архитектура

Архитектура с совместно используемой памятью - глобальная память доступна нескольким нейрочипам. Архитектура с распределенной памятью - каждый нейрочип имеет свою локальную память, а взаимодействие нейрочипов осуществляется через коммуникационные порты. Смешанная архитектура - каждый нейрочип имеет свою локальную память, а также возможность доступа к глобальной памяти вместе с другими нейрочипами.

При объединении небольшого количества нейрочипов в систему можно использовать архитектуру с совместно используемой глобальной памятью, но если число используемых нейрочипов большое, затраты на доступ в глобальную память становятся слишком велики, поэтому рекомендуется архитектура с распределенной памятью.

Нейропроцессор NM6403 благодаря своей универсальности может применяться как базовый элемент для нейроускорителей персональных компьютеров и нейрокомпьютерных параллельных вычислительных систем, аппаратной поддержки операций над матрицами любой размерности, а также в процессорах цифровой обработки сигналов. Возможность работы с данными переменной разрядности, обеспечивает способность нейропроцессора увеличивать производительность с уменьшением разрядности операндов, что позволяет находить оптимальное соотношениею

12. Основные функциональные возможности программ моделирования НС

Формирование (создание) нейронной сети

Для решения разных практических задач требуются различные модели нейронных сетей. Модель нейронной сети определяется моделями нейронов и структурой связей сети.

В зависимости от структуры связей можно выделить несколько групп нейронных сетей:

- Многослойные нейронные сети.

Нейроны в таких сетях делятся на группы с общим входным сигналом - слои. Различают несколько типов связей между слоями с номерами m и (m+s):

последовательные, если s=1,

прямые, если s>1,

обратные, если s<0.

Связи между нейронами одного слоя называют латеральными (боковыми).

- Полносвязные нейронные сети. Каждый нейрон в полносвязных сетях связан со всеми остальными. На каждом такте функционирования сети на входы нейронов подается вешний входной сигнал и выходы нейронов предыдущего такта.

- Нейронные сети с локальными связями. Нейроны в таких сетях располагаются в узлах прямоугольной решетки. Каждый нейрон связан с небольшим числом (4 или 8) своих топологических соседей.

- Неструктурированные нейронные сети. К этой группе относятся все модели нейронных сетей, которые нельзя отнести ни к одной из предыдущих групп.

Модели нейронов, которые используются в нейронных сетях, чрезвычайно разнообразны. В простейшем случае нейрон состоит из умножителей (синапсов), сумматора и нелинейного преобразователя. Нейрон выполняет скалярную функцию векторного аргумента - взвешенное суммирование компонент вектора входного сигнала и нелинейное преобразование результата суммирования. Такой нейрон называется нейроном первого порядка. Нейроны более высоких порядков осуществляют перемножение двумерных матриц и многомерных тензоров.

В моделях нейронов используется множество различных вариантов нелинейных преобразователей. Функция, реализуемая нелинейным преобразователем, называется функцией активации или передаточной функцией нейрона. Наиболее часто используются сигмоидальные, кусочно-линейные и жесткие пороговые функции активации.

Если в сети все нейроны имеют одинаковые функции активации, то сеть называется однородной (гомогенной). В неоднородных (гетерогенных) сетях нейроны имеют различные функции активации.

Для построения нейронной сети, ориентированной на решение конкретной задачи, используются процедуры формирования (или создания) нейронных сетей. Эти процедуры обеспечивают ввод указанных характеристик моделей нейронов и структур нейронных сетей. Как правило, в каждой отдельной программе реализована лишь часть из описанных моделей нейронов и нейронных сетей.

Каждая группа моделей нейронных сетей может быть использована для решения лишь некоторого ограниченного класса практических задач. Так многослойные и полносвязные нейронные сети с сигмоидальными передаточными функциями используются для распознавания образов и адаптивного управления; нейронные сети с локальными связями - для обработки изображений и некоторых других частных задач. Для решения задач линейной алгебры используются многослойные сети с особыми передаточными функциями.

Лишь для небольшого числа моделей нейронных сетей существует строгое математическое обоснование возможности их применения для решения конкретных практических задач. В наибольшей степени теоретически проработаны двухслойные нейронные сети с сигмоидальными передаточными функциями. На основе теоремы Колмогорова-Арнольда доказано, что такие сети могут реализовывать любые отображения входного сигнала в выходной. К построению многопараметрических отображений сводится большинство задач распознавания, управления, идентификации и т.д.

Обучение нейронной сети

Для того чтобы нейронная сеть приобрела способность решать конкретную задачу, то есть на каждый входной сигнал выдавать необходимый выходной сигнал, необходимо провести настройку параметров сети. Настройка производится по обучающей выборке, которая состоит из пар (<вход>, <желаемый выход>) - обучающих примеров.

В зависимости от решаемой задачи в обучающей выборке используются те или иные типы данных и различные размерности входных/выходных сигналов. Входные данные примеров обучающей выборки - изображения, таблицы чисел, распределения. Типы входных данных - бинарные (0 и 1), биполярные (-1 и 1) числа, целые или действительные числа из некоторого диапазона. Выходные сигналы сети - вектора целых или действительных чисел. Для решения практических задач часто требуются обучающие выборки большого объема. Из-за жестко ограниченного объема оперативной памяти компьютера разместить в ней большие обучающие выборки невозможно. Поэтому выборка делится на страницы - группы примеров. В каждый момент времени лишь одна страница примеров располагается в памяти компьютера, остальные - на жестком диске. Страницы последовательно загружаются в память компьютера. Обучение сети происходит по всей совокупности страниц примеров, по всей обучающей выборке.

В настоящее время отсутствует универсальная методика построения обучающих выборок. Набор обучающих примеров формируется по усмотрению пользователя программы моделирования нейронных сетей индивидуально для каждой конкретной решаемой задачи.

Если в необученную нейронную сеть ввести входной сигнал одного из примеров обучающей выборки, то выходной сигнал сети будет существенно отличаться от желаемого выходного сигнала, определенного в обучающей выборке. Функция ошибки численно определяет сходство всех текущих выходных сигналов сети и соответствующих желаемых выходных сигналов обучающей выборки. Наиболее распространенной функцией ошибки является среднеквадратичное отклонение. Однако предложены и другие функции ошибки.

Цель обучения - минимизировать функцию ошибки, то есть найти такие значения параметров сети, при которых текущие выходные сигналы сети минимально отличаются от соответствующих желаемых выходных сигналов, заданных обучающей выборкой.

Для обучения нейронных сетей могут быть использованы различные алгоритмы. Можно выделить две большие группы алгоритмов - градиентные и стохастические. Градиентные алгоритмы обучения сетей основаны на вычислении частных производных функции ошибки по параметрам сети. Среди градиентных различают алгоритмы первого и второго порядков. В стохастических алгоритмах поиск минимума функции ошибки ведется случайным образом.

При обучении сетей, как правило, используется один из двух следующих критериев останова:

- останов при достижении некоторого малого значения функции ошибки,

- останов в случае успешного решения всех примеров обучающей выборки.

Перед обучением выполняется инициализация нейронной сети, то есть присваивание параметрам сети некоторых начальных значений. Как правило, эти начальные значения - некоторые малые случайные числа.

Для формирования обучающих выборок, инициализации и обучения в программах моделирования нейронных сетей используются специальные процедуры. Возможность использования многостраничного обучения является очень важной при решении практических задач с помощью нейронных сетей, моделируемых на обычных компьютерах.

Обучение - это итерационная процедура, которая при реализации на обычных компьютерах, требует значительного времени. Алгоритмы обучения существенно различаются по скорости сходимости. Одной из самых важных характеристик программ для моделирования нейронных сетей является скорость сходимости алгоритма (или алгоритмов) обучения, которые реализованы в программе.

Имитация функционирования (тестирование) обученной нейронной сети

Для проверки навыков, приобретенных сетью в процессе обучения, используется имитация функционирования сети. В сеть вводится некоторый сигнал, который, как правило, не совпадает ни с одним из входных сигналов примеров обучающей выборки. Далее анализируется получившийся выходной сигнал сети. Тестирование обученной сети может проводиться на одиночных входных сигналах, либо на контрольной выборке, которая имеет структуру, аналогичную обучающей выборке, и также состоит из пар (<вход>, <желаемый выход>). Как правило, обучающая и контрольная выборки не пересекаются. Контрольная выборка строится пользователем индивидуально для каждой решаемой задачи.

Для имитации функционирования в подавляющем большинстве программ моделирования нейронных сетей реализованы специальные процедуры.

13. Реализация нейронных сетей на ПЛИС

Программируемые логические интегральные схемы (ПЛИС) представляют собой матричные логические структуры, хорошо адаптированные для построения распараллеленных систем обработки и, в частности, цифровых нейронных сетей высокой производительности.

Компания Xilinx выпускает семь серий ПЛИС двух типов:

FPGA - Field Programmable Gate Array

CPLD - Complex Programmable Logic Device.

Каждая серия содержит от одного до нескольких семейств, в свою очередь состоящих из ряда кристаллов различной ёмкости, быстродействия, типов корпуса.

Основные особенности ПЛИС Xilinx (2011):

значительный объём ресурсов - до 10 млн. системных вентилей на кристалл

высокая производительность с системными частотами до 400МГц

технологические нормы - до 90 нм на девяти слоях металла

высокая гибкость архитектуры с множеством системных особенностей: внутреннее распределённое и блочное ОЗУ, логика ускоренного переноса, внутренние буфера с третьим состоянием и т. д.

возможность инициализации и верификации через JTAG

возможность программирования непосредственно в системе

широкая номенклатура кристаллов по типу исполнения

конкурентоспособная стоимость

низкое энергопотребление

короткий цикл проектирования и быстрое время компиляции

развитые и недорогие средства проектирования

возможность перевода проектов в заказные схемы Xilinx

наличие встроенных умножителей 18х18

наличие встроенных блоков DSP-48

наличие встроенных блоков процессоров PowerPC-405

Преимущества FPGA-чипов для реализации нейроустройств.

Высокое быстродействие и постоянный его рост.

ПЛИС Xilinx на одном кристалле позволяют построить достаточно большое число умножителей, работающих одновременно на достаточно высокой частоте. Значительное количество внешних выводов ПЛИС, развитая структура межсоединений, повышенная скорость обмена между кристаллами в совокупности позволяют создать на основе ПЛИС законченный, достаточно регулярный фрагмент нейронной сети, а затем, осуществляя каскадирование ПЛИС, строить нейронные сети произвольной конфигурации и сложности.

Возможность реализации сложных параллельных алгоритмов.

Данная технология изначально предполагает реализацию на одном кристалле множества блоков с интенсивным обменом информацией между ними. В то время как реализация параллельной обработки данных на процессорах общего назначения или цифровых сигнальных процессорах требует значительных усилий для построения мультимикропроцессорных систем, то в FPGA-системе разработчик не сталкивается с жесткими архитектурными ограничениями и может эффективно реализовать параллельные алгоритмы.

Возможность перепрограммирования в системе.

За счет гибкой реконфигурации ПЛИС, в одни и те же кристаллы, возможна загрузка совершенно конфигураций нейронных сетей, а имея развитую библиотеку фрагментов сетей (различных типов нейронов , функций активации и т.д.) на одной и той же программно-аппаратной платформе можно быстро и эффективно решать разнообразные задачи.

Совместимость при переносе алгоритмов на уровне языков описания аппаратуры.

Так как реализация большого проекта с помощью FPGA вручную практически невозможна, то разработаны фирменные средства, автоматически реализующие устройство по его описанию. При этом используются стандартизированные языки описания аппаратуры (VHDL, AHDL, Verilog и др.). Эти языки не зависят от конкретной используемой FPGA-микросхемы, поэтому высока переносимость разработок. В этой области дела обстоят гораздо лучше, чем у процессоров общего назначения и цифровых сигнальных процессорах, где программа, реализующая любой алгоритм должна учитывать особенности конкретной аппаратуры.

Возможность реализации стандартного интерфейса.

Любые FPGA-чипы имеют в своем составе блоки ввода/вывода, которые могут быть настроены под различные стандарты электрического соединения входов микросхем. Выходные значения могут настраиваться на уровни ТТЛ, КМОП, шины PCI и многие другие, что позволяет избежать дополнительного оборудования при встраивании FPGA-схемы в систему.

Наличие библиотек мегафункций, описывающих сложные алгоритмы.

Вместе с фирменной САПР FPGA-систем поставляются макробиблиотеки стандартных элементов. Причем эти библиотеки содержат готовые сложные блоки (такие как блок быстрого преобразования Фурье).

Малое время создания нейросистем

По этому параметру FPGA-нейросистемы превосходят все заказные чипы и приближаются к системам на существующих процессорах общего назначения и цифровых сигнальных процессорах. Это является очень важным, так как на фоне постоянного роста производительности процессоров специфические аппаратные решения должны показывать преимущество в скорости работы. При традиционной разработке нейросистемы на заказных интегральных схемах результат работы может оказаться уже морально устаревшим.

14. Конструирование нейронных сетей

1.Постановка проблемы.

2.Представление информации.

3.Определение НС.

4.Обучение НС.

5.Тестирование.

На этапе «Определение НС» необходимо спроектировать структуру сети, адекватную поставленной задаче. Это предполагает выбор количества слоев сети и нейронов в каждом слое, а также определение необходимых связей между слоями.

Предварительный подбор архитектуры сети

Количество нейронов во входном слое определяется размерностью входного вектора x, а количество нейронов в выходном слое - размерностью выходного вектора d.

Серьезной проблемой является подбор количества скрытых слоев и числа нейронов в каждом из них. Теоретическое решение этой задачи в смысле условия достаточности было предложено математиками, занимающимися аппроксимацией функций нескольких переменных. ИНС выступает в роли аппроксиматора обучающих данных (x,d). В процессе обучения подбираются его функциональные коэффициенты. На этапе функционирования при фиксированных значениях весов производится расчет значения аппроксимирующей функции при заданном входном векторе.

Из теоремы Колмогорова для случая многовходовой функции следует, что если ограничиться непрерывной функцией, трансформирующей N-мерное множество входных данных x в M-мерный выходной вектор d, то можно доказать, что аппроксимация такого типа осуществима при использовании сети с одним скрытым слоем. При N входных нейронах будет достаточно использовать для реализации этой функции скрытый слой с (2N+1) нейронами. В случае дискретного преобразования x в y одного скрытого слоя уже недостаточно и необходимо создание еще одного слоя нейронов. Это означает, что независимо от вида многовходовой аппроксимирующей функции максимальное количество скрытых слоев, достаточных для аппроксимации заданного преобразования, не превышает двух.

Приведенный выше результат, следующий из теоремы Колмогорова, носит теоретический характер и определяет максимальное количество слоев и число нейронов в отдельных слоях, достаточных для аппроксимации заданного преобразования. Теорема не уточняет ни вид нелинейных функций, ни методы обучения сети.

Подбор оптимальной архитектуры сети

Способность к обобщению

Одно из важнейших свойств нейронной сети - это способность к обобщению полученных знаний. Сеть, натренированная на некотором множестве обучающих выборок, генерирует ожидаемые результаты при подаче на ее вход данных, относящихся к тому же множеству, но не участвовавших непосредственно в процессе обучения. Множество данных, на котором считается истинным некоторое правило R, разбито на подмножества L и G, при этом в составе L, в свою очередь, можно выделить определенное подмножество контрольных данных V, используемых для верификации степени обучения сети. Обучение проводится на данных, составляющих подмножество L. Способность отображения сетью элементов L может считаться показателем степени накопления обучающих данных, тогда как способность распознавания данных, входящих в множество G и не использованных для обучения, характеризует ее возможности обобщения знаний.

Феномен обобщения возникает вследствие большого количества комбинаций входных данных, которые могут кодироваться в сети с N входами. Если для обучения сети используются p из общего числа 2N входных выборок, то оставшиеся незадействованными (2N - p) допустимых комбинаций характеризуют потенциально возможный уровень обобщения знаний.

Подбор весов сети в процессе обучения имеет целью найти такую комбинацию их значений, которая наилучшим образом воспроизводила бы последовательность ожидаемых обучающих пар (xi, di). При этом наблюдается тесная связь между количеством весов сети (числом степеней свободы) и количеством обучающих выборок. Для обретения способности обобщать информацию сеть должна тренироваться на избыточном множестве данных, поскольку тогда веса будут адаптироваться не к уникальным выборкам, а к их статистически усредненным совокупностям. Для усиления способности к обобщению необходимо не только оптимизировать структуру сети в направлении ее минимизации, но и оперировать достаточно большим объемом обучающих данных.

Таким образом, истинная цель обучения состоит в таком подборе архитектуры и параметров, которые обеспечат минимальную погрешность распознавания тестового подмножества данных, не участвовавших в обучении (погрешность обобщения).

На погрешность обобщения оказывает влияние отношение количества обучающих выборок к количеству весов сети. Небольшой объем обучающего множества при фиксированном количестве весов вызывает хорошую адаптацию сети к его элементам, однако не усиливает способности к обобщению, так как в процессе обучения наблюдается относительное превышение числа подбираемых параметров (весов) над количеством пар фактических и ожидаемых выходных сигналов сети. Считается, что высокие показатели обобщения достигаются в случае, когда количество обучающих выборок в несколько раз превышает количество весов в сети.

На способность сети к обобщению влияет также длительность обучения. Численные эксперименты показали, что погрешность обучения при увеличении количества итераций монотонно уменьшается, тогда как погрешность обобщения снижается только до определенного момента, после чего начинает расти («переобучение сети»). Такая ситуация имеет место при использовании сети с чрезмерным (по сравнению с необходимым) количеством весов.

Методы редукции сети.

На практике подбор количества скрытых нейронов может выполняться путем тренинга сетей с последующим выбором той из них, которая содержит наименьшее количество скрытых нейронов при допустимой погрешности обучения.

Существует несколько алгоритмов сокращения или редукции сети:

С учетом чувствительности целевой функции. Удаляются веса с наименее заметным влиянием на целевую функцию, и процесс обучения продолжается на редуцированной сети.

Использование штрафных функций. В целевую функцию вводятся компоненты, штрафующие за неэффективную структуру сети, например, элементы, усиливающие малые значения амплитуды весов.

Существует и другой подход оптимизации структуры сети: обучение при минимальном количестве нейронов в скрытом слое и последовательное добавление нейронов для достижения требуемого уровня обучения сети ( методы наращивания или конструктивные алгоритмы).

Методы редукции сети с учетом чувствительности.

Редукция сети производится для уменьшения количества скрытых нейронов межнейронных связей. Поскольку каждый нейрон представляет гиперплоскость, разделяющую множество данных на кластеры, редукция сети упрощает такое разделение и усиливает способность к обобщению.

Простейшим критерием редукции считается учет величины весов. Веса, которые значительно меньше средних весов, оказывают незначительное влияние на общий уровень выходного сигнала связанного с ними нейрона. Поэтому их можно отсечь без существенного вреда для его функционирования.

Решение по выбору окончательной сети может быть только после полного обучения различных вариантов ее структуры. Но при этом нет гарантии, что выбор оптимален. Поскольку сети могут отличаться различной чувствительностью к подбору начальных значений весов и параметров сети (параметров обучения). Поэтому для оптимизации сети используют алгоритмы отсечения связей или исключения нейронов в процессе обучения или его завершению.

Однако в некоторых случаях малые значения весов не обязательно оказывают наименьшее воздействие на поведение нейрона. В таких ситуациях их отсечение может привести к серьезным изменениям в работе сети. Поэтому лучшим критерием следует признать учет чувствительности сети к вариациям весов. Без серьезных последствий для сети из нее могут быть исключены только те веса, чувствительность к изменениям которых оказывается минимальной.

Не рекомендуется отсекать веса в процессе обучения, поскольку низкая чувствительность сети к конкретному весу может быть связана с его текущим значением либо с неудачно выбранной начальной точкой. Рекомендуется отсекать веса по завершению процесса обучения, когда все нейроны обретут свои постоянные характеристики.

Одним из лучших способов регуляризации сети считается метод, предложенный ЛеКуном. Он называется OBD (Оptimal Brain Damage).

В качестве меры значимости веса wij в этом методе используется показатель Sij, называемый коэффициентом асимметрии.

Отсечение весов с наименьшими значениями показателя Sij не вызовет существенных изменений в процессе функционирования сети. Процедуру OBD редукции сети можно описать в следующем виде:

Полное предварительное обучение сети выбранной структуры с использованием любого алгоритма.

Расчет коэффициентов ассиметрии Sij, характеризующих значимость каждой синаптической связи для сети в целом.

Сортировка весов в порядке убывания приписанных им параметров Sij и отсечение тех из них, которые имеют наименьшие значения.

Возврат к п.1 для обучения сети с редуцированной структурой вплоть до исключения всех весов, оказывающих наименьшее влияние на величину целевой функции.

Метод OBD считается одним из лучших способов редукции сети среди методов учета чувствительности. Его применение обеспечивает достижение сетью высокого уровня обобщения.

Дальнейшим развитием метода OBD считается метод OBS (Optimal Brain Surgeon).

Отличия от метода OBD:

Другое определение коэффициента асимметрии.

Коррекция весов после отсечения наименее важного веса без повторного обучения сети.

В методе OBS всякий раз отсекается только один вес, тогда как при использовании OBD можно на каждом шаге отсекать произвольное количество весов.

Вычислительная сложность метода OBS выше.

Процедура OBS:

Обучение нейронной сети предварительно отобранной структуры вплоть до отыскания минимума целевой функции.

Расчет коэффициентов симметрии и выбор веса wi, имеющего наименьшее значение этого показателя. Если изменение целевой функции в результате отсечения этого веса существенно, то вес отсекается и выполняется переход на п.3, в противном случае отсечение завершается.

Коррекция значений весов, оставшихся в сети после отсечения i-го веса с последующим возвратом к п.2. Процесс продолжается вплоть до отсечения всех мало значащих весов.

Методы редукции сети с использованием штрафных функций

Суть метода штрафных функций - целевая функция модифицируется таким образом, чтобы в процессе обучения значения весов минимизировались автоматически вплоть до достижения определенного порога, при пересечении которого значения соответствующих весов приравниваются к нулю.

Другой способ минимизации сети основан на такой модификации целевой функции, которая позволяет исключать скрытые нейроны, в наименьшей степени изменяющие свою активность в процессе обучения. При этом учитывается, что если выходной сигнал какого-либо нейрона при любых обучающих выборках остается неизменным, то его можно исключить из сети.

Общие недостатки методов редукции:

Отсутствует методика определения числа нейронов скрытых слоев, которое является избыточным, поэтому перед началом работы алгоритма нужно угадать это число.

В процессе работы алгоритма сеть содержит избыточное число нейронов, поэтому обучение идет медленно.

Методы наращивания (конструктивные алгоритмы)

Предшественником конструктивных алгоритмов можно считать методику обучения многослойных сетей, включающую в себя следующие шаги:

выбор начального числа нейронов в скрытых слоях;

инициализация сети, то есть присваивание синаптическим весам и смещениям сети случайных значений из заданного диапазона;

обучение сети по заданной выборке;

завершение в случае успешного обучения; если сеть обучить не удалось, то число нейронов увеличивается, и повторяются шаги со второго по четвертый.

В конструктивных алгоритмах число нейронов в скрытых слоях также изначально мало и постепенно увеличивается. В отличие от описанной выше методики, в конструктивных алгоритмах сохраняются навыки, приобретенные сетью до увеличения числа нейронов.

Конструктивные алгоритмы различаются правилами задания значений параметров в новых, добавленных в сеть, нейронах:

значения параметров - случайные числа из заданного диапазона;

значения синаптических весов нового нейрона определяются путем «расщепления» одного из старых нейронов.

Первое правило не требует значительных вычислений, но обладает следующими недостатками:

1.Увеличение функции ошибки после добавления каждого нейрона.

2. В результате случайного задания значений параметров новых нейронов может появиться избыточность в числе нейронов скрытого слоя.

Второй подход лишен этих недостатков. Суть «расщепления» заключается в выявлении нейронов, у которых при обучении вектора изменения весов имеют два преимущественных направления. В результате расщепления вместо одного «старого» нейрона оказывается два «новых» нейрона. Первый из этих нейронов имеет вектор весов, представляющий из себя сумму вектора весов исходного нейрона и векторов изменений весов одного из преимущественных направлений. Аналогично формируется и вектор весов второго «нового» нейрона.

Рис. 38. Вектор весов нейрона скрытого слоя и изменения, соответствующие отдельным обучающим примерам

Недостатком этого алгоритма является экспоненциальный рост времени вычислений при увеличении размерности сети.

Рассмотренные выше методы используются на этапе «Определение НС» для улучшения ее способности к обобщению за счет воздействия на архитектуру сети. Однако и после формирования стабильной и минимальной архитектуры сети возможно дальнейшее улучшение ее способностей за счет специальной подготовки множества обучающих выборок. Вопросы улучшения характеристик НС на этапе ее обучения рассмотрены ниже.

Подбор обучающих выборок

С точки зрения функционирования нейронная сеть может рассматриваться как векторный классификатор, определяющий принадлежность конкретного входного вектора x к определенной группе. Каждый слой нейронов при этом выполняет в составе сети собственную функцию. Нейроны первого скрытого слоя образуют гиперплоскости, разделяющие N-мерное пространство данных (N- количество входов сети) на области, содержащие данные, принадлежащие к одному и тому же классу. Нейроны выходного (либо второго, скрытого) слоя представляют множество данных, составляющих конкретный кластер. При ограниченном выборе обучающих данных из универсального множества их размещение относительно конкретных гиперплоскостей становится очень важным. Наилучшие результаты достигаются в случае, когда они располагаются с разных сторон границ гиперплоскостей, разделяющих пространство данных.

При подборе обучающих данных очень важна предварительная информация о количестве областей, по которым распределены эти данные. Пространственные границы областей задаются сегментами гиперплоскостей (при проекции на плоскость такие сегменты отображаются отрезками прямых). Оценка количества сегментов гиперплоскостей важна для определения объема множества обучающих выборок. Считается, что количество обучающих выборок должно быть пропорционально числу обучающих выборок.

Добавление шума в обучающие выборки

Для хорошо натренированной сети становится актуальной задача выработки у выходных сигналов нечувствительности к вариациям входных величин при условии, что эти вариации находятся в определенных допустимых границах, а сеть реализует монотонное отображение. Другими словами, аналогичные входные сигналы должны вызывать аналогичные реакции даже в случае, если они не входили в состав обучающего множества.

Подбор среднеквадратичного отклонения шума, при котором действительно можно повысить качество обобщения, представляет собой самостоятельную задачу. По результатам экспериментальных тестов, среднеквадратичное отклонение шума должно коррелировать с фактическим распределением разности между обучающими (незашумленными) выборками и тестовыми данными и составлять небольшой процент от нее.

Размещено на Allbest.ru

...

Подобные документы

  • Диагностический анализ изучения алгоритмов обучения нейронных сетей "с учителем". Сбор входных и выходных переменных для наблюдений и понятие пре/пост процессирования. Подготовка и обобщение многослойного персептрона, модель обратного распространения.

    курсовая работа [249,3 K], добавлен 22.06.2011

  • Понятие искусственного нейрона и искусственных нейронных сетей. Сущность процесса обучения нейронной сети и аппроксимации функции. Смысл алгоритма обучения с учителем. Построение и обучение нейронной сети для аппроксимации функции в среде Matlab.

    лабораторная работа [1,1 M], добавлен 05.10.2010

  • Понятие и свойства искусственных нейронных сетей, их функциональное сходство с человеческим мозгом, принцип их работы, области использования. Экспертная система и надежность нейронных сетей. Модель искусственного нейрона с активационной функцией.

    реферат [158,2 K], добавлен 16.03.2011

  • Простейшая сеть, состоящая из группы нейронов, образующих слой. Свойства нейрокомпьютеров (компьютеров на основе нейронных сетей), привлекательных с точки зрения их практического использования. Модели нейронных сетей. Персептрон и сеть Кохонена.

    реферат [162,9 K], добавлен 30.09.2013

  • Понятие, закономерности функционирования нейронных сетей, Обзор информационных технологий, программных средств для реализации соответствующих алгоритмов. Детальное описание особенностей выполнения демонстрационного примера, составление программного кода.

    курсовая работа [551,3 K], добавлен 09.04.2015

  • Первое систематическое изучение искусственных нейронных сетей. Описание элементарного перцептрона. Программная реализация модели распознавания графических образов на основе перцептрона. Интерфейс программы, основные окна. Составление алгоритма приложения.

    реферат [100,5 K], добавлен 18.01.2014

  • Общие сведения о принципах построения нейронных сетей. Искусственные нейронные системы. Математическая модель нейрона. Классификация нейронных сетей. Правила обучения Хэбба, Розенблатта и Видроу-Хоффа. Алгоритм обратного распространения ошибки.

    дипломная работа [814,6 K], добавлен 29.09.2014

  • Способы применения нейронных сетей для решения различных математических и логических задач. Принципы архитектуры их построения и цели работы программных комплексов. Основные достоинства и недостатки каждой из них. Пример рекуррентной сети Элмана.

    курсовая работа [377,4 K], добавлен 26.02.2015

  • Возможности программ моделирования нейронных сетей. Виды нейросетей: персептроны, сети Кохонена, сети радиальных базисных функций. Генетический алгоритм, его применение для оптимизации нейросетей. Система моделирования нейронных сетей Trajan 2.0.

    дипломная работа [2,3 M], добавлен 13.10.2015

  • Сущность, структура, алгоритм функционирования самообучающихся карт. Начальная инициализация и обучение карты. Сущность и задачи кластеризации. Создание нейронной сети со слоем Кохонена при помощи встроенной в среды Matlab. Отличия сети Кохонена от SOM.

    лабораторная работа [36,1 K], добавлен 05.10.2010

  • Построение векторной модели нейронной сети. Проектирование и разработка поискового механизма, реализующего поиск в полнотекстовой базе данных средствами нейронных сетей Кохонена с применением модифицированного алгоритма расширяющегося нейронного газа.

    курсовая работа [949,0 K], добавлен 18.07.2014

  • Описание технологического процесса напуска бумаги. Конструкция бумагоделательной машины. Обоснование применения нейронных сетей в управлении формованием бумажного полотна. Математическая модель нейрона. Моделирование двух структур нейронных сетей.

    курсовая работа [1,5 M], добавлен 15.10.2012

  • Анализ применения нейронных сетей для прогнозирования ситуации и принятия решений на фондовом рынке с помощью программного пакета моделирования нейронных сетей Trajan 3.0. Преобразование первичных данных, таблиц. Эргономическая оценка программы.

    дипломная работа [3,8 M], добавлен 27.06.2011

  • Способы применения технологий нейронных сетей в системах обнаружения вторжений. Экспертные системы обнаружения сетевых атак. Искусственные сети, генетические алгоритмы. Преимущества и недостатки систем обнаружения вторжений на основе нейронных сетей.

    контрольная работа [135,5 K], добавлен 30.11.2015

  • Рост активности в области теории и технической реализации искусственных нейронных сетей. Основные архитектуры нейронных сетей, их общие и функциональные свойства и наиболее распространенные алгоритмы обучения. Решение проблемы мертвых нейронов.

    реферат [347,6 K], добавлен 17.12.2011

  • Модели нейронных сетей и их реализации. Последовательный и параллельный методы резолюции как средства логического вывода. Зависимость между логическим следованием и логическим выводом. Применение технологии CUDA и реализация параллельного алгоритма.

    дипломная работа [1,5 M], добавлен 22.09.2016

  • Рассмотрение способов применения и основных понятий нейронных сетей. Проектирование функциональной структуры автоматизированной системы построения нейросети обратного распространения ошибки, ее классов и интерфейсов. Описание периода "бета тестирования".

    дипломная работа [3,0 M], добавлен 02.03.2010

  • Обзор программных продуктов для анализа изображений: ABBYY FineReader и OCR CuneiForm. Понятие и виды нейронных сетей. Алгоритм обучения персептрона. Результаты исследований и описание интерфейса программы. Расчет себестоимости программного обеспечения.

    дипломная работа [590,7 K], добавлен 17.08.2011

  • Программное обеспечение для получения исходных данных для обучения нейронных сетей и классификации товаров с их помощью. Алгоритм метода обратного распространения ошибки. Методика классификации товаров: составление алгоритма, программная реализация.

    дипломная работа [2,2 M], добавлен 07.06.2012

  • Искусственные нейронные сети как одна из широко известных и используемых моделей машинного обучения. Знакомство с особенностями разработки системы распознавания изображений на основе аппарата искусственных нейронных сетей. Анализ типов машинного обучения.

    дипломная работа [1,8 M], добавлен 08.02.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.