Квантовые нейронные сети в процессах обучения и управления

Сравнительный анализ между классическими и квантовыми нейронами. Построение квантовой нейронной сети. Однослойный и многослойный персептроны. Алгоритм обратного распространения "Back Propagation". Робототехника как направление искусственного интеллекта.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид магистерская работа
Язык русский
Дата добавления 26.12.2012
Размер файла 1,7 M

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

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

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

Государственное образовательное учреждение Московской области

Международный университет природы, общества и человека «Дубна»

Магистерская работа

Тема Квантовые нейронные сети в процессах обучения и управления

Студента Афанасьева Ольга Александровна

Аннотация

Данная работа посвящена анализу квантовых нейронных сетей (КНС) и их практического применения.

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

Для осуществления целей изучена литература зарубежных авторов, рассмотрены примеры применения КНС в процессах управления.

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

Работа выполнена под научным руководством доктора физ.-мат. Наук, профессора С.В. Ульянова в Институте Системного Анализа и Управления Международного университета природы, общества и человека «Дубна».

Содержание

  • Введение
  • 1. Постановка задачи
    • 1.1 Цель
    • 1.2 Исходные данные
    • 1.3 Исследовательская составляющая
  • 2. Научная составляющая
    • 2.1 Архитектура Квантовых Нейронных Сетей
    • 2.2 Почему интересны Квантовые Нейронные Сети
    • 2.3 Квантовый нейрон
    • 2.4 Построение Квантовой Нейронной Сети
    • 2.5 Квантовые вычисления
    • 2.6 Модели КНС
    • 2.7 Квантовое состояние и его представление
  • 3. Обучение КНС
    • 3.1 Применение Квантовых Нейронных сетей. Смысл алгоритма обучения с учителем
    • 3.2 Однослойный и многослойный персептроны
      • 3.2.1 Однослойный персептрон. Обучение
      • 3.2.2 Многослойный персептрон. Обучение многослойного персептрона
    • 3.3 Алгоритм обратного распространения «Back Propagation»
    • 3.4 Генетический алгоритм. Классическая задача комивояжа
  • 4. Автоматическое управление объектами
    • 4.1 Объект управления
    • 4.2 Робототехника как направление Искусственного Интеллекта
      • 4.2.1 Общая блок-схема робота
      • 4.2.2 Концептуальная модель
    • 4.2 Эффективное управление квантовым спиновым регистром. Криптография и квантовая телепортация
  • 5. Практическая часть. Примеры Квантовых Нейронных сетей
    • 5.1 Перевернутый маятник
    • 5.2 Сжатие изображения
    • 5.3 Кодирование алфавита
  • 6 Инструментарий MATLAB NEURAL NETWORK TOOL. Сеть Кохонена
  • Заключение
  • Список литературы
  • Введение
  • Сегодня, как и сто лет назад, несомненно, что мозг работает более эффективно и принципиально другим образом, чем любая вычислительная машина, созданная человеком. Именно этот факт в течение стольких лет побуждает и направляет работы ученых всего мира по созданию и исследованию искусственных нейронных сетей.
  • Искусственный Нейронные сети (ИНС) имеют некоторые привлекательные особенности как например параллельность распределенной обработки, ошибкоустойчивость и способность обучаться и обобщать полученные знания. Под свойством обобщения понимается способность ИНС генерировать правильные выходы для входных сигналов, которые не были учтены в процессе обучения (тренировки). Эти два свойства делают ИНС системой переработки информации, которая решает сложные многомерные задачи, непосильные другим техникам. Тем не менее ИНС также сталкиваются со многими трудностями, в том числе это отсутствие правил для детерминированных оптимальных архитектур, ограниченная вместимость памяти, занимающая много времени на обучение и т.д. [3].
  • Искусственные Нейронные сети вошли в практику везде, где нужно решать задачи прогнозирования, классификации или управления. Такой впечатляющий успех определяется несколькими причинами:
  • 1. Богатые возможности. Нейронные сети - исключительно мощный метод моделирования, позволяющий воспроизводить чрезвычайно сложные зависимости. На протяжении многих лет линейное моделирование было основным методом моделирования в большинстве областей, поскольку для него хорошо разработаны процедуры оптимизации. В задачах, где линейная аппроксимация неудовлетворительна (а таких достаточно много), линейные модели работают плохо. Кроме того, нейронные сети справляются с "проклятием размерности", которое не позволяет моделировать линейные зависимости в случае большого числа переменных
  • 2. Простота в использовании. Нейронные сети учатся на примерах. Пользователь нейронной сети подбирает представительные данные, а затем запускает алгоритм обучения, который автоматически воспринимает структуру данных. При этом от пользователя, конечно, требуется какой-то набор эвристических знаний о том, как следует отбирать и подготавливать данные, выбирать нужную архитектуру сети и интерпретировать результаты, однако уровень знаний, необходимый для успешного применения нейронных сетей, гораздо скромнее, чем, например, при использовании традиционных методов статистики.
  • В сфере ИНС, некоторые первооткрыватели вводили квантовое вычисление в аналогичное обсуждение, такое как квантовое нейронное вычисление, поглощенная квантовая нейронная сеть, квантовая ассоциативная память и параллельное обучение. Они сконструировали фонд для дальнейшего изучения квантового вычисления в ИНС. В ходе этого появляется область искусственных нейронных сетей, основанных на квантовых теоретических понятиях и методах. Они называются Квантовые Нейронные Сети [3].
  • 1. Постановка задачи

1.1 Цель

Исследование и анализ Квантовых Нейронных Сетей, их практическое применение.

Направления работы исследования

· Выявить преимущества квантовых нейронных сетей перед классическими сетями.

· Рассмотреть примеры применения квантовых нейронных сетей в процессах интеллектуального управления.

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

· Моделирование сети кластеризации данных в MATLAB.

· Рассмотреть конкретный пример из робототехники (робот-манипулятор).

1.2 Исходные данные

· Девятитомник по квантовым вычислениям и квантовому программированию, издание Миланского университета, автор Ульянов С.В.

· Монография Нильсона, 2006 года.

· Сайт www.qcoptimizer.com.

1.3 Исследовательская составляющая

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

2. Научная составляющая

2.1 Архитектура Квантовых Нейронных Сетей

Квантовая нейронная сеть является новой областью и является комбинацией классических нейронных сетей и квантовых вычислений.

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

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

Таблица 1. Основные концепции квантовой механики и теории нейронных сетей

Классические нейронные сети

Квантовые нейронные сети

Состояние нейрона

Кубиты

Связь

Запутанность

Обучающее правило

Суперпозиция состояний запутанности

Поиск победителя

Интерференция как унитарное преобразование

Выходной Результат

Decoherence (измерение)

Не следует рассматривать пары концепций, находящихся в одной и той же строке таблицы, как аналогии - в действительности установление такой аналогии и является одной из главных задач теории квантовых нейронных сетей. К настоящему времени, квантовые представления были главным образом использованы для реализации классических вычислений. Понятие о квантовых вычислений было введено в 1982 году Ричардом Фейнманом, исследовавшим роль квантовых эффектов в будущих процессорах, элементы которых могут иметь атомные размеры. В 1985 году Дэвид Дойч сформулировал концепцию квантовых вычислений. Важно отметить, что эффективность использования нейронных сетей связана с массивной параллельной распределенной обработкой информации и нелинейностью преобразования векторов входов нейронами. С другой стороны, квантовые системы обладают гораздо более мощным квантовым параллелизмом, выражающимся принципом суперпозиции [1].

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

Копенгагенская интерпретация;

Фейнмановский формализм интегралов по траекториям;

Эвереттовская интерпретация множественных миров, и т.д.

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

2.2 Почему интересны Квантовые Нейронные Сети

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

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

Что можно ожидать от квантовых нейронных сетей? В настоящее время квантовые нейронные сети обладают следующими преимуществами:

- экспоненциальная емкость памяти;

- лучшие характеристики при меньшем числе скрытых нейронов;

- быстрое обучение;

-устранение катастрофического забывания благодаря отсутствию интерференции образов;

- решение линейно неразделимых проблем однослойной сетью;

- отсутствие соединений;

- высокая скорость обработки данных (1010 bits/s);

- миниатюрность (1011 нейронов/мм3);

- более высокая стабильность и надежность;

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

2.3 Квантовый нейрон

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

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

Активационная функция может быть различного вида. Наиболее широко используемые варианты приведены в таблице (табл. 2).

Таблица 2: Перечень функций активации нейронов

Название

Формула

Область значения

Пороговая

(0, 1)

Знаковая

(-1,1)

Сигмоидная

(0,1)

Полулинейная

(0, ?)

Линейная

(-?, ?)

Радиальная базисная

(0, 1)

Полулинейная с насыщением

(0, 1)

Линейная с насыщением

(-1,1)

Гиперболический тангенс

(-1,1)

Треугольная

(0, 1)

Определение Квантового Нейрона дается следующим образом:

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

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

Рис 1: Математическая модель нейрона

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

Например: Обучающий процесс квантового нейрона. = - оператор идентичности: .

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

Целая сеть может быть скомпонована от примитивных элементов, используя стандартные правила архитектур ИНС [3].

2.4 Построение Квантовой Нейронной Сети

Этот вопрос решается в два этапа: выбор типа (архитектуры) КНС, подбор весов (обучение) КНС.

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

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

На втором этапе нам следует "обучить" выбранную сеть, то есть подобрать такие значения ее весов, чтобы она работала нужным образом. Необученная КНС подобна ребенку - ее можно научить чему угодно. В используемых на практике нейронных сетях количество весов может составлять несколько десятков тысяч, поэтому обучение - действительно сложный процесс. Для многих архитектур разработаны специальные алгоритмы обучения, которые позволяют настроить веса КНС определенным образом. Наиболее популярный из этих алгоритмов - метод обратного распространения ошибки (Error Back Propagation), используемый, например, для обучения перцептрона.

2.5 Квантовые вычисления

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

До сих пор мы не видели качественного различия между использованием обычных битов и кубитов, но нечто странное происходит, если обучить атом светом, которого достаточно лишь для того, чтобы электрон проделал половину пути между уровнями возбуждения. Поскольку электроны не могут в действительности существовать в пространстве между этими уровнями, они существуют НА ОБОИХ уровнях одновременно. Это известно как “суперпозиция”.

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

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

Таблица 3: Главные понятие квантового вычисления

N

Главное понятие квантового вычисления:

1

2

3

4

5

6

Описание волновой функции из квантовой эволюции (развития)

Суперпозиция классических состояний (последовательность)

Запутанность

Интерференция

Измерение

Унитарные преобразования

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

Важное место занимает и выяснение наиболее эффективных сфер применения квантовых вычислительных систем.

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

Состояние квантового бита задается вектором в двухмерном комплексном векторном пространстве. Здесь вектор имеет две компоненты, и его проекции на базисы векторного пространства являются комплексными числами. Квантовый бит представляется (в обозначениях Дирака в виде кет-вектора) как или в векторном обозначении (бра-вектор). Если , то . Для целей квантового вычисления, базисные состояния |0> и |1> кодируют классические разрядные значения 0 и 1 соответственно. Однако в отличие от классических битов, кубиты могут быть в суперпозиции |0> и |1>, как например , где и - комплексные числа, для которых выполнено следующее условие: . Если или принимают нулевые значения, то определяет классическое, чистое состояние. В противном случае говорят, что находится в состоянии суперпозиции двух классических базисных состояний. Геометрически квантовый бит находится в непрерывном состоянии между и , пока не производятся измерения его состояния. В случае, когда система состоит из двух квантовых битов, она описывается как тензорное произведение. Например, в обозначениях Дирака двухквантовая бит система задается, как . Число возможных состояний комбинированной системы возрастает экспоненциально при добавлении квантового бита.

Это приводит к проблеме оценки квантовой корреляции, которая присутствует между квантовыми битами в составной системе [17, 21].

Экспоненциальный рост в числе состояний вместе со способностью подвергнуть полное пространство к преобразованиям (или унитарная динамичная эволюция системы, или проект измерения в подпространстве собственного вектора) обеспечивает фонд для квантового вычисления. Так как унитарные преобразования являются обратимыми, квантовые вычисления (кроме измерений) все будут обратимы, ограничивая их унитарными квантовыми преобразованиями. Это означает, что каждые квантовые ячейки (на один или много кубитов) осуществляют обратимое вычисление. Таким образом, учитывая выходную ячейку, необходимо однозначно определить, каков был вход. К счастью, есть классическая теория обратимого вычисления, которое говорит нам, что каждый классический алгоритм может быть сделан обратимым с приемлемым верхним, таким образом, это ограничение на квантовое вычисление не излагает серьезную проблему. Это - кое-что, что должно быть учтено, предлагая спецификацию для квантовых ворот, как бы то ни было [1].

2.6 Модели КНС

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

Квантовые нейронные сети могли бы реализовывать свое экспоненциальное преимущество в скорости, используя суперпозицию величин входов и выходов нейрона. Но другим преимуществом, которое могло бы быть получено, заключается в том, что, так как нейроны могут обрабатывать суперпозицию сигналов, то нейронная сеть могла бы в действительности иметь меньшее число нейронов в скрытом слое при обучении аппроксимации данной функции. Это бы позволило строить более простые сети с меньшим числом нейронов и, следовательно, улучшать стабильность и надежность их работы (т.е. для сети сократилось бы число возможностей потерять когерентность). Если все это принять во внимание, то не могла бы квантовая нейронная сеть быть вычислительно более мощной, чем обычная сеть? В настоящее время ответ кажется отрицательным, так как все квантовые модели используют конечное число кубитов для проведения своих вычислений, и это является ограничением [20].

2.7 Квантовое состояние и его представление

квантовый нейрон персептрон робототехника

Квантовое состояние и оператор квантового вычисления оба важны для понимания параллельности и пластичности в информации обработки систем.

В квантовом логическом кругообороте фундаментальные квантовые состояния - однобитовое вращение состояния Uи, показанное на Рис.2, и двухбитовый управляемый NOT состояния, показанное на Рис. 3. Первые состояния вращают входное квантовое состояние к этому по и. Последние состояния выполняют операцию XOR.

Рис. 2. Однобитовое состояние вращения

Рис. 3. Двухбитовое управления NOT состояния

Выделяем следующую комплекс-оценку представления Ур. (3) ограничительно соответствующую кубическому состоянию в Ур. (1).

(3)

Уравнение (3) дает возможность выразить следующие операции: состояние вращения и двухбитовый управляемый NOT состояния.

а) Операция состояния вращения

Состояние вращения - фаза перемещения состояний, которая преобразовывает фазу в кубическое состояние. Поскольку кубическое состояние представлено Ур. (3), состояние понимается как следующее отношение:

(4)

b) Операция двухбитовый управляемый NOT

Эта операция определяется входным параметром г следующим образом:

(5)

где г=1 соответствует вращению аннулирования, и г=0 - невращение. В случае г=0, фаза вероятности амплитуды квантового состояния |1> полностью изменена.

Однако наблюдаемая вероятность является инвариантной так, чтобы мы расценили этот случай как невращение [21].

3. Обучение КНС

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

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

Эмпирический тест, идея которого была предложена Аланом Тьюрингом в статье «Вычислительные машины и разум» (англ. Computing Machinery and Intelligence), опубликованной в 1950 году в философском журнале «Mind». Целью данного теста является определение возможности искусственного мышления близкого к человеческому.

Стандартная интерпретация этого теста звучит следующим образом: «Человек взаимодействует с одним компьютером и одним человеком. На основании ответов на вопросы он должен определить, с кем он разговаривает: с человеком или компьютерной программой. Задача компьютерной программы -- ввести человека в заблуждение, заставив сделать неверный выбор». Все участники теста не видят друг друга [17].

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

Определение процесса обучения подразумевает следующую последовательность событий:

· Нейронная сеть стимулируется окружающей средой.

· Нейронная сеть претерпевает изменения в своих свободных параметрах в результате возбуждение.

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

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

Все методы обучения могут быть классифицированы в две главных категории: контролируемые и неконтролируемые [3].

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

Таблица 4: Известные алгоритмы обучения:

Парадигма

Обучающее правило

Архитектура

Алгоритм обучения

Задача

С учителем

Коррекция ошибки

Однослойный и многослойный перцептрон

Алгоритмы обучения перцептрона

Обратное распространение

Adaline и Madaline

обучения перцептрона

Обратное распространение

Adaline и MadalineКлассификация образов

Аппроксимация функций

Предскащание, управление

Больцман

Рекуррентная

Алгоритм обучения Больцмана

Классификация образов

Хебб

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

Линейный дискриминантный анализ

Анализ данных

Классификация образов

Соревнование

Соревнование

Векторное квантование

Категоризация внутри класса Сжатие данных

Сеть ART

ARTMap

Классификация образов

Без учителя

Коррекция ошибки

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

Проекция Саммона

Категоризация внутри класса Анализ данных

Хебб

Прямого распространения или соревнование

Анализ главных компонентов

Анализ данных

Сжатие данных

Сеть Хопфилда

Обучение ассоциативной памяти

Ассоциативная память

Соревнование

Соревнование

Векторное квантование

Категоризация

Сжатие данных

SOM Кохонена

SOM Кохонена

Категоризация

Анализ данных

Сети ART

ART1, ART2

Категоризация

Смешанная

Коррекция ошибки и соревнование

Сеть RBF

Алгоритм обучения RBF

Классификация образов

Аппроксимация функций

Предсказание, управление

Обучить сеть - значит, сообщить ей, чего мы от нее добиваемся. Этот процесс очень похож на обучение ребенка алфавиту. Показав ребенку изображение буквы "А", мы спрашиваем его: "Какая это буква?" Если ответ неверен, мы сообщаем ребенку тот ответ, который мы хотели бы от него получить: "Это буква А". Ребенок запоминает этот пример вместе с верным ответом, то есть в его памяти происходят некоторые изменения в нужном направлении. Мы будем повторять процесс предъявления букв снова и снова до тех пор, когда все 33 буквы будут твердо запомнены. Такой процесс называют "обучение с учителем" (рис. 4.).

Рис. 4. Процесс "обучение с учителем".

При обучении сети мы действуем совершенно аналогично. У нас имеется некоторая база данных, содержащая примеры (набор рукописных изображений букв). Предъявляя изображение буквы "А" на вход КНС, мы получаем от нее некоторый ответ, не обязательно верный. Нам известен и верный (желаемый) ответ - в данном случае нам хотелось бы, чтобы на выходе КНС с меткой "А" уровень сигнала был максимален. Обычно в качестве желаемого выхода в задаче классификации берут набор (1, 0, 0, ...), где 1 стоит на выходе с меткой "А", а 0 - на всех остальных выходах. Вычисляя разность между желаемым ответом и реальным ответом сети, мы получаем 33 числа - вектор ошибки. Алгоритм обратного распространения ошибки - это набор формул, который позволяет по вектору ошибки вычислить требуемые поправки для весов нейронной сети. Одну и ту же букву (а также различные изображения одной и той же буквы) мы можем предъявлять нейронной сети много раз. В этом смысле обучение скорее напоминает повторение упражнений в спорте - тренировку.

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

Обучение сети разбивается на следующие этапы:

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

Определение элемента обучающей выборки: (<текущий вход>, <желаемый выход>). Текущие входы (x0, x1... xN-1), должны различаться для всех элементов обучающей выборки. При использовании многослойного персептрона в качестве классификатора желаемый выходной сигнал (d0, d1... dN-1) состоит из нулей за исключением одного единичного элемента, соответствующего классу, к которому принадлежит текущий входной сигнал.

Вычисление текущего выходного сигнала: текущий выходной сигнал определяется в соответствии с традиционной схемой функционирования многослойной нейронной сети.

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

,

где wij - вес от нейрона i или от элемента входного сигнала i к нейрону j в момент времени t, xi' - выход нейрона i или i-ый элемент входного сигнала, r - шаг обучения, gj - значение ошибки для нейрона j. Если нейрон с номером j принадлежит последнему слою, то

,

где dj - желаемый выход нейрона j, yj - текущий выход нейрона j. Если нейрон с номером j принадлежит одному из слоев с первого по предпоследний, то

,

где k пробегает все нейроны слоя с номером на единицу больше, чем у того, которому принадлежит нейрон j. Внешние смещения нейронов b настраиваются аналогичным образом [3].

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

3.1 Применение Квантовых Нейронных сетей. Смысл алгоритма обучения с учителем

Класс задач, которые можно решить с помощью КНС, определяется тем, как сеть работает и тем, как она обучается. При работе КНС принимает значения входных переменных и выдает значения выходных переменных. Таким образом, сеть можно применять в ситуации, когда у Вас имеется определенная известная информация, и Вы хотите из нее получить некоторую пока не известную информацию (Patterson, 1996; Fausett, 1994). Вот некоторые примеры таких задач:

· Распознавание образов и классификация

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

· Принятие решений и управление

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

· Кластеризация

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

· Прогнозирование

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

· Аппроксимация

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

· Сжатие данных и Ассоциативная память

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

Этапы решения задач:

- сбор данных для обучения;

- подготовка и нормализация данных;

- выбор топологии сети;

- экспериментальный подбор характеристик сети;

собственно обучение;

- проверка адекватности обучения;

- корректировка параметров, окончательное обучение;

- вербализация сети с целью дальнейшего использования.

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

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

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

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

3.2 Однослойный и многослойный персептроны

3.2.1 Однослойный персептрон. Обучение

Исторически первой искусственной нейронной сетью, способной к перцепции (восприятию) и формированию реакции на воспринятый стимул, явился Perceptron Розенблатта (F.Rosenblatt, 1957). Термин " Perceptron" происходит от латинского perceptio, что означает восприятие, познавание. Русским аналогом этого термина является "Персептрон". Его автором персептрон рассматривался не как конкретное техническое вычислительное устройство, а как модель работы мозга. Современные работы по искусственным нейронным сетям редко преследуют такую цель.

Простейший классический персептрон содержит элементы трех типов (рис. 5.).

Рис. 5. Элементарный персептрон Розенблатта

Однослойный персептрон характеризуется матрицей синаптических связей ||W|| от S- к A-элементам. Элемент матрицы отвечает связи, ведущей от i-го S-элемента (строки) к j-му A-элементу (столбцы). Эта матрица очень напоминает матрицы абсолютных частот и информативностей, формируемые в семантической информационной модели, основанной на системной теории информации.

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

Обучение классической нейронной сети состоит в подстройке весовых коэффициентов каждого нейрона.

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

Шаг 1: Начальные значения весов всех нейронов полагаются случайными.

Шаг 2: Сети предъявляется входной образ xa, в результате формируется выходной образ.

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

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

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

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

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

ь когда итерации сойдутся, т.е. вектор весов перестает изменяться;

ь когда полная просуммированная по всем векторам абсолютная ошибка станет меньше некоторого малого значения [10].

3.2.2 Многослойный персептрон. Обучение многослойного персептрона

Вероятно, эта архитектура сети используется сейчас наиболее часто. Она была предложена в работе Rumelhart, McClelland (1986) и подробно обсуждается почти во всех учебниках по нейронным сетям (см., например, Bishop, 1995). Каждый элемент сети строит взвешенную сумму своих входов с поправкой в виде слагаемого и затем пропускает эту величину активации через передаточную функцию, и таким образом получается выходное значение этого элемента. Элементы организованы в послойную топологию с прямой передачей сигнала. Такую сеть легко можно интерпретировать как модель вход-выход, в которой веса и пороговые значения (смещения) являются свободными параметрами модели. Такая сеть может моделировать функцию практически любой степени сложности, причем число слоев и число элементов в каждом слое определяют сложность функции. Определение числа промежуточных слоев и числа элементов в них является важным вопросом при конструировании многослойного персептрона (Haykin, 1994; Bishop, 1995).

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

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

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

Рис. 6. Двухслойный персептрон

Пример: Рассмотрим персептрон, т.е. систему с n входными каналами и выходным каналом y. Выход классического персептрона - это , where является функцией активации персептрона и - это веса настройки во время обучающего процесса. Алгоритм обучения персептрона работает следующим образом.

1. Веса инициализируются небольшими количествами.

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

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

Замечание. Вряд ли будет можно построить точный аналог нелинейной функции активации F, как и сигмовидной и другие функции общего пользования в нейронных сетях, возможно для квантового случая [10].

3.3 Алгоритм обратного распространения «Back Propagation»

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

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

В нейропарадигме "back propagation" чаще всего используются сигмоидальные передаточные функции, например

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

Функционирование многослойной сети выполняется в соответствии с формулами:

где s - выход сумматора, w - вес связи, y - выход нейрона, b - смещение, i - номер нейрона, N - число нейронов в слое, m - номер слоя, L - число слоев, f- функция активации.

Метод обратного распространения -- способ быстрого расчета градиента функции ошибки.

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

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

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

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

Рис. 7. Метод градиентного спуска при минимизации ошибки сети

3.4 Генетический алгоритм. Классическая задача комивояжа

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

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

Таблица 5: Мутации и скрещивание

001110101100001001

000110100001101001

а) Исходные генетические цепочки

0011101

.......01100001001

.......00001101001

0001101

б) Случайное образование области для последующего скрещивания

0011101

.......00001101001

.......01100001001

0001101

в) Обмен фрагментами кода

001110100001101001

000110101100001001

г) Цепочки после скрещивания

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

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

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

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

Рис. 8. Алгоритм вычислений

Рассмотрим достоинства и недостатки стандартных и генетических методов на примере классической задачи коммивояжера (TSP - travelling salesman problem). Суть задачи состоит в том, чтобы найти кратчайший замкнутый путь обхода нескольких городов, заданных своими координатами. Оказывается, что уже для 30 городов поиск оптимального пути представляет собой сложную задачу, побудившую развитие различных новых методов (в том числе нейросетей и генетических алгоритмов).


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

  • Понятие искусственного интеллекта. История развития систем искусственного интеллекта. Самообучение искусственного интеллекта. Квантовые компьютеры и нейрокомпьютеры. Основы нейроподобных сетей. Некоторые сведения о мозге. Реально ли компьютерное мышление.

    курсовая работа [220,1 K], добавлен 06.10.2008

  • Знакомство с задачей отслеживания нестационарного гармонического сигнала на основе нейронной сети. Анализ компьютерной модели нейронной сети на основе математических алгоритмов Мак-Каллока и Питтса. Характеристика способов создания линейной сети.

    контрольная работа [418,2 K], добавлен 17.05.2013

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

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

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

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

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

    дипломная работа [603,9 K], добавлен 14.10.2010

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

    дипломная работа [882,2 K], добавлен 23.06.2009

  • Особенности проектирования и модернизация корпоративной локальной вычислительной сети и способы повышения её работоспособности. Физическая структура сети и сетевое оборудование. Построение сети ГУ "Управление Пенсионного фонда РФ по г. Лабытнанги ЯНАО".

    дипломная работа [259,1 K], добавлен 11.11.2014

  • Характеристика сети, типы модулей сети SDH. Построение мультиплексного плана, определение уровня STM. Расчет длины участка регенерации. Особенности сети SDH-NGN. Схема организации связи в кольце SDH. Модернизация сети SDH на базе технологии SDH-NGN.

    курсовая работа [965,7 K], добавлен 11.12.2012

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

    курсовая работа [357,5 K], добавлен 17.04.2012

  • Wi-Fi - современная беспроводная технология передачи цифровых данных по радиоканалам. Телекоммуникационная сеть на основе технологии Wi-Fi. Выбор смежного узла для передачи информации по адресу. Пример логической нейронной сети, размещённой на узле.

    доклад [25,3 K], добавлен 09.11.2010

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