Нейронные сети. Многоагентные системы. Оптимизационные задачи. Гужва А.Г. План • Нейронные сети: теория • Нейронные сети: практика • Многоагентные системы • Пример План • Нейронные сети: теория – Нейрон (нервная клетка) – Искусственный нейрон – Многослойный персептрон – Задача нелинейной регрессии • Нейронные сети: практика • Многоагентные системы • Пример Нейрон (нервная клетка) • Состоит из: – Сомы – Аксона – Дендритов • Мозг человека: – ~1010 нейронов – ~1013 связей • Время реакции нейрона ~ 10-3 с. Объединение нейронов • • • • Нейроны (100 мкм) Локальные контуры Отделы ЦНС Искусственный нейрон 1 X1 w0 … XN w1 Σ Y () wN Нейрон преобразует входные сигналы: Y = (1 * w0 + X1 * w1 + … + XN * wN) Математическая модель нейрона (формализм) • Y = f(X) (XW) • Входной вектор – X = {1, X1, …, XN} X … • Веса нейрона Y Σ W – W = {w0, w1, …, wN} • Передаточная функция () – Скалярная – Дифференцируемая, ограниченная – Монотонно возрастающая Примеры передаточных функций 1 1 y tanh x 0.5 y 1 1 e x 0 -3 0 1 -3 3 -1 0 -3 0 3 y e x 1 2 0.5 0 0 -1 0 3 -3 x, x 1 y 1, x 1 1, x 1 0 3 Архитектура нейронных сетей. Многослойные персептроны Выходной слой нейронов Входной сигнал Входной слой нейронов Выходной сигнал Скрытые слои нейронов Многослойные персептроны (примеры архитектур) Многослойные Автоассоциативная память Однослойные Рекуррентные С обходными связями Многослойные персептроны (формализм) • Семейство параметрических вектор-функций • МСП с 1 скрытым слоем (f: RM → RP) f x, , N , u, v u[i, k ] * v[ j, i] * x[ j ] v[0, i] u[0, k ] N k i 1 M j 1 – () С1 – ограниченная монотонно возрастающая действительная функция – и u – матрицы весов (N x (M + 1) и P x (N + 1)) – k = 1..P – N – характеризует сложность конструкции Задача нелинейной регрессии Дано: • Задан конечный обучающий набор векторов X = {x1…xn}, xi RM, i = 1..n • Имеется зависимость y = y*(x), y*: RM → RP, для которой известны yi = y*(xi) для xi X • Задано разбиение X на тренировочный набор данных XTrn и тестовый набор данных XTst • Задан вид семейства нелинейных параметрических функций M переменных y = f(x, ) Задача нелинейной регрессии Требуется: • Аппроксимация y* с помощью f(x, ) • Найти решение системы уравнений по y*(x1) = f(x1, ) … y*(xm) = f(xm, ) , xi XTrn при котором достигался бы минимум функционала ошибки: E(, XTst) = xXTst(y*(x) - f(x, ))2 Задача нелинейной регрессии Многослойные персептроны • Универсальный аппроксиматор – МСП с 1 скрытым слоем достаточно, для равномерной аппроксимации с точностью для любого обучающего множества, представленного точками и желаемыми откликами • Чувствительность к размерности данных Традиционный способ решения задачи нелинейной регрессии для многослойных персептронов (обучение сети) • Оптимизационная задача по подбору элементов матриц весов • Решение методом наименьших квадратов путем минимизации функционала ошибки: E(, XTrn) = xXTrn(y*(x) - f(x, ))2 → min E(, XTst) используется для контроля останова процесса обучения нейронной сети Задача нелинейной регрессии Входной сигнал Выходной сигнал • Подстроить параметры МСП так, чтобы в ответ на определенные входные сигналы на выходе были бы определенные выходные сигналы План • Нейронные сети: теория • Нейронные сети: практика – Решаемые классы задач – Задача восстановления распределения электропроводности • Многоагентные системы • Пример Решаемые классы задач • Классификация • Кластеризация • Регрессия \ Прогнозирование • Data-driven methods – Все необходимые законы, описывающие поведение объекта, содержатся в данных – «Мусор» на входе -> мусор на выходе Классификация и распознавание образов. • Отнесение объекта к одному из заданных классов на основании его характеристик • Примеры: – Диагнозы в медицине – Распознавание речи – Распознавание лиц – Детектирование взрывчатых веществ – Выдача кредитов “Да” Классификация и распознавание образов. • Объект может быть отнесен к нескольким классам в разной степени • «Не знаю» Кластеризация (Карты Кохонена) • Разбиение объектов на группы (кластеры) по принципу схожести их характеристик • Человек: «8 групп точек» • Машина: «500 точек» Кластеризация (Карты Кохонена) • Иерархическая кластеризация • Пример: – Перепись населения Задачи прогнозирования. Задачи регрессии • Предсказание космической погоды • База наблюдений за Солнцем 1.5 млн. км (ACE) • Параметры межпланетного магнитного поля • Скорость солнечного ветра • Другие параметры Методы исследования земной коры • Обратная задача: восстановление реальных характеристик пород по наблюдаемым полям Задача Магнитотеллурического зондирования (МТЗ) • Прямая задача МТЗ ( -> ): Ak = , ГкRNk, RMk • Ak – заданный дискретный оператор прямой задачи • = (1… Mk) – вектор характеристик МТ поля, измеренных на поверхности Земли • = (1… Nk) – вектор макропараметров среды • Гk – область допустимых значений • k – класс разрезов Задача Магнитотеллурического зондирования (МТЗ) • Обратная задача МТЗ ( -> ): = Ak-1, ГкRNk, RMk • Система нелинейных уравнений относительно • Неустойчива и некорректна – Вид уравнений – Размерность данных • Чудовищная размерность данных Задача Магнитотеллурического зондирования (МТЗ) • Решаем прямую задачу для разных геоэлектрических разрезов – Задаем 1, считаем 1=Ak1, знаем (1, 1) –… – Задаем N, считаем N=AkN, знаем (N, N) • Обучаем нейронную сеть (обратная задача): – Подаем на вход 1, требуем на выходе 1 –… – Подаем на вход N, требуем на выходе N Задача Магнитотеллурического зондирования (МТЗ), 2D 0 км 5 км 10 км 17 км Воздух: =0 • 336 блоков () • Электропроводность • 10-4< <1 См/м • 6552 входных признака () • 4 компоненты • Пространственная сетка – 126 • Частотная сетка – 13 • 30000 эталонных примеров решения прямой задачи 30 км 100 км. • Интересующая область : до 5 км • Решение задач нелинейной регрессии, связывающих параметры среды для каждого блока, с помощью многослойных персептронов Задача МТЗ. Пример распределения Задача МТЗ. • 1 большая обратная задача МТЗ – Размерность входного вектора 6552 – Размерность выходного вектора 336 • 6780 небольших задач нелинейной регрессии – Размерность входного вектора 1648 – Размерность выходного вектора 1 Задача МТЗ. Формально. • 4 комплекта по 1680 наборов данных – Обучающий набор - 30000 примеров (xi, yi) – Размерность вектора входных данных - 1648 – Размерность вектора желаемых откликов - 1 – Решение задачи нелинейной регрессии 8 1648 y x, u , v u[i, k ] * v[ j , i ] * x[ j ] v[0, i ] u[0, k ] i 1 j 1 – Минимизация функционала ошибки вида EW i1,N yx i , W yi 2 • W = {u, v} – условное обозначение матрицы весов многослойного персептрона y(x, u, v) Поиск минимума функции. Градиентный спуск. 1. E=E(W)=E(w1…wN) – функция ошибки 2. W=W0 3. Считаем градиент функции в точке W • grad E(W)=(E/w1, …, E/wN) 4. W=W - *grad E(W), где ~10-1–10-3 5. goto 2 Проблема: последовательный процесс, который попадает в локальные минимумы Градиентный спуск Локальные минимумы • Попадание в локальные минимумы – В точке локального экстремума grad E = 0 – При приближении к локальному экстремуму |grad E| падает Градиентный спуск • Задача регрессии – Обучающий набор данных (xi, yi), i=1..N – Аппроксимирующая функция y(x,W), где W={u,v} 8 1648 y x, u , v u[i, k ] * v[ j , i ] * x[ j ] v[0, i ] u[0, k ] i 1 j 1 – Функция ошибки E(W) = i=1,N (y(xi,W) - yi)2 • grad E(W) = 2 * i=1,N (y(xi,W)-yi) * y/W(xi) Параллельно Размерность w ~ 104 Параллельно N = 30000 • Проблема: локальные минимумы Проблема попадания в локальные минимумы • grad E(W) = 2 * i=1,N (y(xi,W)-yi) * y/W(xi) – Проблема локальных минимумов • Сделать N/10 итераций (т.е. 3000) – Случайно выбрать rnd из 1..N-10 – grad E(W) = 2 * i=rnd,rnd+9 (y(xi,W)-yi) * y/W(xi) – W=W - *grad E(W) Эффективная реализация • Распараллеливание градиентного спуска (группы по 10 точек) • Градиентный спуск для большого числа функций (1680) • Раскрытие циклов • Использование CUBLAS для вычисления значений функции (cublasSgemm) 8 1648 y x, u , v u[i, k ] * v[ j , i ] * x[ j ] v[0, i ] u[0, k ] i 1 j 1 Результаты N CPU / GPU Программа, система Число сетей Итераций обучения 1 сети за минуту 1 GPU CUDA, (GTX 285) 256 2580 2 GPU CUDA, (GTX 260) 256 1818 3 GPU CUDA, (Geforce 8600M GT) 64 144 4 CPU Своя МСП-библиотека 1 35 5 CPU Neuroshell 2 1 21 6 CPU Matlab 2008a 1 7 • Железо: AMD Athlon 64 x2 Dual 6000+ 3.0 GHz • Основное ограничение: bandwidth внутренней шины данных GPU Другие работы с использованием CUDA 1. Правильная постановка задачи – «Мусор» на входе -> «мусор» на выходе 2. Как расположить данные в памяти 3. Правильный подбор весов нейронной сети (градиентный спуск) 4. … 5. PROFIT План • Нейронные сети: теория • Нейронные сети: практика • Многоагентные системы – Задача оптимизации – Многоагентные системы – Генетическое программирование • Пример Задача оптимизации • Общая постановка задачи: – Найти min F(X), X RN, X U, где U – множество допустимых значений • Сложности: – Большая размерность X – «Нехорошая» F(X) – Комбинаторные задачи кратчайший путь Задача оптимизации • Локально-оценочные методы – Метод вилки – Adaptive Simulated Annealing • Градиентные методы – Градиентный спуск • Переборные методы – Полный перебор – Монте-Карло • Многоагентные системы – Генетические алгоритмы Многоагентные системы • Исследование множества допустимых решений с помощью пробных точек • Итерационный процесс. Для каждой пробной точки X: – Оценить значение f(X) – Чем меньше значение, тем в большей мере остальные пробные точки на следующей итерации приблизятся к данной Многоагентные системы • Не менее 100 пробных точек • Несколько комплектов точек • Целевая функция F может меняться в процессе поиска решения • Невысокая точность решения – Использование градиентного спуска Многоагентные системы • Генетические алгоритмы (GA) John Holland (1975) – Биологическая эволюция – Генетическое программирование • Ant Colony Optimization (ACO) Marco Dorigo (1992) – Колония муравьев • Particle Swarm Optimization (PSO) J. Kennedy, R. Eberhart (1995) – Стаи птиц, косяки рыб Многоагентные системы и CUDA • Многократное вычисление значений целевой функции F • Большое число многоагентных систем Генетическое программирование (ГП) • John Koza (1992) • Множество допустимых решений U – Множество всевозможных программ, составленных из заданного набора операций и переменных (операндов) • Целевая функция F(X), где X U – То, насколько пригодна та или иная программа X для решения некоторой задачи – Чем F(X) меньше, тем лучше Искусственный муравей • Карта NxN клеток, в некоторых клетках - еда • Муравей может – Повернуться налево – Повернуться направо – Пойти вперед – Съесть еду на клетке – IF_FOOD_AHEAD • Задача: построить алгоритм действий муравья ГП. Представление программы в виде дерева • Возможные операции: – «Выполнить» дерево – Перегенерировать поддерево – Поменять операнд \ оператор – Обменяться поддеревьями + 1 TIME * 2 IF > 3 + 4 10 1 + 2 + (time > 10) ? 3 : 4 2 4 3 (2 + 3) * 4 ГП. Эволюция 1. Сгенерировать N случайных программ {X} 2. Для каждой программы X {X} вычислить F(X) 3. Сгенерировать новый набор программ {Y} 1. (9%) Либо выбрать программу из {X}, случайно перегенерировать ее поддерево, добавить в {Y} 2. (90%) Либо выбрать две программы из {X}, обменяться случайно выбранными поддеревьями, добавить в {Y} 3. (1%) Либо добавить случайно сгенерированную программу в {Y} * 4. {X} = {Y} + 5. goto 2 2 4 3 ГП. Выбор программ. • Вероятность выбора программы X в качестве «родителя» тем выше, чем ниже F(X) • Повышение вероятности «размножения» «хороших» программ • Аналог мутаций (п. 3.1) • Аналог полового скрещивания (п. 3.2) • «Родила царица в ночь…» (п. 3.3) Задача нелинейной регрессии • Решение задачи нелинейной регрессии – Обучающий набор: N пар (xi, yi) – Заданы операторы +, -, *, /, sin, cos, exp, … – Построить аналитическую аппроксимирующую функцию y(x), используя заданные операторы, x и случайные числа • Целевая функция F(y) – F(y) = i=1,N (y(xi) - yi)2 y=sin(arccos(exp(x))) ? ГП. CUDA. Представление программы в виде RPN * • Инфиксная нотация + – 4 * (2 + 3) 2 4 3 • Обратная польская нотация (RPN) –23+4* • Стековая машина – Если на вход подан операнд – положить в стек – Если на вход подана операция – вытащить ряд значений из стека, посчитать, результат операции положить в стек Стековая машина • Исходное выражение: 2 3 + 4 * Символ Что делаем? Стек: • 23+4* push 2 2 • 23+4* push 3 32 • 23+4* pop 3, pop 2 2+3=5, push 5 5 • 23+4* push 4 45 • 23+4* pop 4, pop 5 4*5=20, push 20 • Конец. Ответ – 20 20 CUDA. Псевдокод kernel-а стековой машины float stack[8]; // 8 bytes for stack sp = 0; // initialize stack pointer GP_pc = baseAddress[i] ; // load base address of prog i while (instructionArray[GP_pc] != RETURN) { switch (instructionArray[GP_pc]) { case OPERAND: stack[sp++] = data; break; // push data on stack case ADD: stack[sp-2] = stack[sp-1] + stack[sp-2]; sp--; break; case MUL: stack[sp-2] = stack[sp-1] * stack[sp-2]; sp--; break; ... } GP_pc++; } Robilliard, D., Marion-Poty, V., Fonplut, C. Genetic programming on graphics processing units. // Genet Program Evolvable Mach (2009), 10:447-441 А что с SIMD? • Нити находящиеся на одном SM должны выполнять одну программу X, но для разных входных точек (xi, yi) • Нити разных SM выполняют разные программы X ГП и CUDA 1. Сгенерировать начальный набор программ 2. Перевести программы в RPN 3. Для каждой оценить целевую функцию • Выполняется на CUDA 4. Сгенерировать новый набор программ на основе оценок целевой функции 5. Goto 2 План • Нейронные сети: теория • Нейронные сети: практика • Многоагентные системы • Пример Аппроксимация растровой картинки • Подсмотрено у Roger Alsing (2008) – http://rogeralsing.com/2008/12/11/genetic-programming-mona-lisa-source-code-and-binaries/ • Задача – Аппроксимировать изображение набором полупрозрачных многоугольников Аппроксимация растровой картинки • К. Малевич «Черный супрематический квадрат» Аппроксимация растровой картинки • Да Винчи «Мона Лиза» ? Задача оптимизации • Найти min F(X), X RN, X U, где U – множество допустимых значений • Множество допустимых решений U: – Наборы полупрозрачных многоугольников, лежащих в прямоугольнике (0, 0) – (w, h) • Целевая функция F(X): – Сумма квадратов разностей R, G и B исходной картинки и предлагаемого решения, суммируем по всем пикселям F(X) Насколько похоже Как это работает? (Roger Alsing) • Каждую итерацию можно следующее: – Добавить многоугольник к набору – Удалить многоугольник из набора – Сдвинуть многоугольник – Сдвинуть точку многоугольника – Добавить точку в многоугольник – Удалить точку из многоугольника – Изменить цвет • Проверить, стало ли лучше Как это работает? • Исходная картинка Примеры работы • 250 многоугольников • В среднем 9 точек на многоугольник Примеры работы CUDA • Растеризация многоугольника • Растеризация нескольких многоугольников CUDA • «Распилить» картинку на части – 24 части – 150х150 пикселей CUDA • Использование многоагентных систем – Независимая растеризация большого числа наборов многоугольников • Много уровней параллелизма • Как эффективно оценить степень похожести двух растровых картинки? • А нужно ли растеризовать многоугольники? – Цель – оценить степень похожести набора многоугольников на исходную картинку Можно и так