Гужва А.Г.
Использование нейронных сетей для решения обратной задачи Магнитотеллурического Зондирования
Обратная задача Магнитотеллурического
Зондирования
? ? ??• Обратная задача: восстановление реальных характеристик пород по наблюдаемым ЭМ полям
Задача Магнитотеллурического зондирования (МТЗ)• Обратная задача МТЗ ( -> ):
Ak = , ГкRNk, RMk
• Ak – заданный дискретный оператор прямой задачи
• = (1… Mk) – вектор характеристик МТ поля, измеренных на поверхности Земли
• = (1… Nk) – вектор макропараметров среды
• Гk – область допустимых значений • k – класс разрезов
Задача Магнитотеллурического зондирования (МТЗ)• Обратная задача МТЗ ( -> ):
Ak = , ГкRNk, RMk
• Система нелинейных уравнений относительно
• Неустойчива и некорректна– Вид уравнений
– Размерность данных
• Чудовищная размерность данных
Задача Магнитотеллурического зондирования (МТЗ)• Прямая задача МТЗ ( -> ):
Ak = , ГкRNk, RMk
• Устойчива и корректна• Считается на суперкомпьютерах
• Эталонная база решений прямой задачи:
– Задаем 1, считаем 1=Ak1, знаем (1, 1)
– …
– Задаем N, считаем N=AkN, знаем (N, N)
Задача Магнитотеллурического зондирования (МТЗ)• Приближенное решение обратной
задачи – * appr(1 … N, a1,…,aJ)
– ai – неопределенные коэффициенты
– appr – заданная функция некоторого вида
– Решение задачи нелинейной регрессии на эталонной базе решений прямой задачи
• Полученное решение есть приближенный обратный оператор задачи
Задача Магнитотеллурического зондирования (МТЗ), 2D
• 336 блоков ()• Электропроводность
• 10-4< <1 См/м
• 6552 входных признака ()
• 4 компоненты• Пространственная сетка – 126• Частотная сетка – 13
• 30000 эталонных примеров решения прямой задачи
• Интересующая область : до 5 км
5 км
10 км
17 км
30 км
0 км Воздух: =0
100 км.
• Решение задач нелинейной регрессии для каждого блока по-отдельности
• Итого: 336 задач нелинейной регрессии
Задача МТЗ. Пример распределения
Задача нелинейной регрессии
Дано:• Задан конечный обучающий набор
векторов 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, )при котором достигался бы минимум функционала ошибки:
E(, XTst) = xXTst(y*(x) - f(x, ))2
, xi XTrn
Нейронные сети. Многослойные персептроны• МСП - семейство
параметрических вектор-функций
• МСП с 1 скрытым слоем (f: RM → RP)
– () С1 – ограниченная монотонно возрастающая действительная функция
– и u – матрицы весов (N x (M + 1) и P x (N + 1))
– k = 1..P
– N – характеризует сложность конструкции
],0[],0[][*],[*],[,,,,1 1
kuivjxijvkiuvuNxfN
i
M
jk
Традиционный способ решения задачи нелинейной регрессии для
многослойных персептронов (обучение сети)
• Оптимизационная задача по подбору элементов матриц весов
• Решение методом наименьших квадратов путем минимизации функционала ошибки:
E(, XTrn) = xXTrn(y*(x) - f(x, ))2 → min
E(, XTst) используется для контроля останова процесса обучения нейронной сети
Например, используется градиентный спуск
Задача МТЗ.
• 1 большая обратная задача МТЗ– «В лоб» не решается
– Размерность входного вектора 6552
– Размерность выходного вектора 336
• 6780 небольших задач нелинейной регрессии
– Размерность входного вектора 1648
– Размерность выходного вектора 1
Задача МТЗ. Формально.
• Решение ~7000 задач нелинейной регрессии– Вид аппроксимирующей функции y(x, u, ):
где
u, – матрицы неопределенных коэффициентов
• Для всех задач нелинейной регрессии входной набор данных одинаков
– Размерность вектора входных данных x = 1648
• Выходные наборы данных уникальны– Размерность вектора выходных данных y = 1
],0[],0[][*],[*],[,,8
1
1648
1
kuivjxijvkiuvuxyi j
exp11
Задача МТЗ. Формально.
• 30000 примеров эталонной базы решений
• Решение задачи нелинейной регрессии (подбор u, )
– Минимизация функционала ошибки вида
где W = {u, } – условное обозначение матриц весов многослойного персептрона y(x, W)
Например, использование метода градиентного спуска
1,30000i
2ii yW,xyWE
CPU. Градиентный спуск
Минимизация функционала ошибки вида
Размерность W ~ 104
Градиентный спуск:
1. W=W0
2. W=W - *grad E(W), где ~10-1–10-3
3. goto 2
Распараллеливается на MPI
1,30000i
2ii yW,xyWE
CPU
• 6780 небольших задач нелинейной регрессии
– 5 AMD Athlon 64 x2 Dual 6000+ 3.0 GHz
– 1 ядро того же уровня
– Итого 11 ядер
• Вычисления во float-ах• Своя спец. библиотека• Итого - 2 месяца вычислений
– С перерывами на выходные
CUDA. Распараллеливание
• Нет– Убыстрение 1 вычисления y(x, u, ),
y/u, y/
• Да!– Параллельное вычисление
• y(x1, u, ), …, y(xN, u, )
– Параллельное решение нескольких задач нелинейной регрессии
• y(x, u1, 1), …, y(x, uM, M)
• y(x1, u1, 1), …, y(xN, uM, M)
CUDA. Реализация
• Функционал ошибки – E(W) = i=1,N (y(xi,W) - yi)2
• grad E(W) = 2 * i=1,N (y(xi,W) - yi) * y/W(xi)
• Одновременное решение нескольких задач нелинейной регрессии
– grad E1(W1) = 2 * i=1,N (y(xi,W1) - yi) * y/W|
1(xi)
……… ……… ……….
– grad Ek(Wk) = 2 * i=1,N (y(xi,Wk) - yi) * y/W|k
(xi)
CUDA. Реализация
• Использование CUBLAS для вычисления значений функции (cublasSgemm)
………… ………
• Аналогично с производными
],0[],0[][*],[*],[,, 1
8
11
1648
1111111 kuivjxijvkiuvuxy
i j
],0[],0[][*],[*],[,,8
1
1648
1
kuivjxijvkiuvuxy bi
bj
abbbba
CUDA. Реализация • Эффект за счет резкого уменьшения числа операций работы с памятью
– Необходимость переноса больших объемов данных между узлами
– CUDA: наличие shared memory
• Основное время при проектировании
– Расположение данных в памяти
• Код спроектирован с нуля• Вычисления во float-ах• Вид аппроксимационной функции
Результаты
N CPU / GPU Программа / железо
Число сетей
Итераций обучения 1 сети за минуту
1 GPU CUDA, (Tesla C2050) new
256 3120
2 GPU CUDA, (Tesla C2050) 256 2580
3 GPU CUDA, (GTX 285) 256 2580
4 GPU CUDA, (GTX 260) 256 1818
5 GPU CUDA, (Geforce 8600M GT)
64 144
6 CPU Своя нейросетевая библиотека
1 35
7 CPU Neuroshell 2 1 21
8 CPU Matlab 2008a 1 7• CPU: AMD Athlon 64 x2 Dual 6000+ 3.0 GHz
• В GPU-реализации не используется Zero copy memory
GPU
• 6780 небольших задач нелинейной регрессии
– 1 Tesla C2050
– 256 параллельно решаемых задач нелинейной регрессии
– Итого: ~13 часов
– На разогнанном GTX 580 ~ 6 часов (ориентировочно)
«Грабли». Учитывать при проектировании• Доступные ресурсы для ядра
– Регистры, shared memory, потоки
• RTFM: Zero copy, pinned memory, …
– А также прочие полезные «фичи»
• Bottleneck для этой задачи– Пропускная способность
внутренней шины данных (~100 GB/s)
«Грабли». Раскрытие циклов//// Ядро с циклом__global__ void kernel(int N){ ... for (int i = 0; i < N; i++)
//// Цикл ...
//// Тело цикла ... }
//// Этот код быстрее!template<int N> __global__ void kernel(){ ... for (int i = 0; i < N; i++) //// Цикл ...
//// Тело цикла ...
}• N – заранее известно
• N может принимать огр. число значений
«Грабли». Использование CUDA Primitives• CUDA parallel primitives
– Reduction
– Scan
– И т.д.
• В виде отдельных процедур– CUDPP
• Внедрить в собственное ядро!
«Грабли». Если глючит, то…
• nvidia-smi• cuda-memcheck• Проверять cudaGetLastError();• В код повставлять cudaThreadSynchronize();
• Выделение shared памяти__global__ void kernel(){ __shared__ float klmn[100]; //// в klmn – не нули!!!!!!
...}
«Грабли». Если глючит, то…
• Воспроизводимость глюка– Запуск процесса в цикле
– Каждый раз сравнение результатов, в т.ч. промежуточных массивов данных
• Компилятор nvcc• RTFM, форумы, коллеги
«Грабли». Если глючит, то…
• Если ничего не помогло, то…
Распараллеливание
• Вычисление функции y(x, a)• Варианты действий:
– Распараллеливание y(x, a)
– Одновременно y(x1, a), …, y(xN, a)
– Одновременно y(x, a1), …, y(x, aM)
– Одновременно y(x1, a1), …, y(xN, aM)
Спасибо за внимание!
Top Related