kaipa: (Default)
kaipa ([personal profile] kaipa) wrote2014-12-19 03:21 am

Аппроксимация нейронными сетями

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

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

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

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

Исчерпывающий ответ на вопрос, какие функции может аппроскимировать нейронная сеть, дан в этой статье А.Н. Горбаня. Если очень грубо, то это не что иное, как обобщение известной теоремы Веерштрасса об аппроксимации непрерывной функции многочленами. Что такое нейронная сеть? "Нейрон получает на входе вектор сигналов x, вычисляет его скалярное произведение на вектор весов α и некоторую функцию одного переменного φ(x,α) [функцию активации]. Результат рассылается на входы других нейронов или передается на выход. Таким образом, нейронные сети вычисляют суперпозиции простых функций одного переменного и их линейных комбинаций." То есть вопрос переформулируется в вид, можно ли аппроксимировать произвольную непрерывную функцию суперпозицией и линейной комбинацией простых функций одного переменного. Ответ положительный (это следствие из более общего утверждения). Никаких специальных условий на функцию активации не накладывается.

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

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

Re: Остался не озвученным ответ...

[identity profile] ushastyi.livejournal.com 2014-12-19 08:02 am (UTC)(link)
Как же, а вот же "К сожалению, мой собеседник ни на один вопрос ответить не смог. Видимо, физикам достаточно знать что метод "работает", а как он работает -- это их мало волнует." Пока не знаю, возьмем ли на работу. Говорят, и похоже на то, что умный. Но в нашей области (программирование) -- практически чистый лист. Что и хорошо, и плохо.

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

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

Я тоже не совсем в теме, но ЦАГИ рядом, поэтому в воздухе идеи витают :) Как-то так, как мне кажется.

Теперь моя нейронная сеть завела меня куда-то :-)

[identity profile] o-iv.livejournal.com 2014-12-19 10:03 am (UTC)(link)
Я эту фразу прочитал но, почему-то, она у меня как именно результат собеседования не прошла в сознание.
А по поводу нейронных сетей - естественно, кормить сеть заведомо ошибочными результатами расчетов - не очень верный путь. Ее учить надо на результатах реальных продувок и реальных измеренных характеристиках. Тогда есть шанс получить полезный результат.
Про численные методы - да, они позволяют отбросить какие-то заведомо неживые схемы. С другой стороны, 99% выпускников технического вуза эти схемы отбросят тоже :-)
И из личного опыта в качестве заказчика CFD-расчета, полезность результата зависит почти полностью от того, кто делает расчет.
А общий вывод, который я вынес из: основная польза моделирования вот прямо сейчас - это картинки, которые можно показать начальнику/инвестору/публике и сказать: "видите, по результатам компьютерного моделирования разработанная нами фигня будет работать!" А не: "Мамой клянусь, все заработает!" :-)

Re: Теперь моя нейронная сеть завела меня куда-то :-)

[identity profile] ushastyi.livejournal.com 2014-12-19 12:39 pm (UTC)(link)
Это был не результат собеседования, а его процесс :)

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

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

Численные методы штука тонкая.

[identity profile] o-iv.livejournal.com 2014-12-19 12:59 pm (UTC)(link)
Я нарывался на задачи, где при определенных условиях, например, алгоритм сходится к одному и тому же результату с точностью до восьмого знака после запятой за одинаковые 8 итераций. Независимо от исходных данных и, что интересно, выдерживает замену некоторых +1 на -1 в ключевой формуле... Есть задачи, которые в цифре просто принципиально не могут сходиться. Есть задачи, которые сходятся, дают похожий на правду результат, но... ошибочный.
По поводу моего общения с CFD - вопрос не в уровне образования. Все участники процесса были людьми весьма известными в узких кругах. Понятно, что "мамой клянусь" не пройдет, но я знаю некоторое количество людей из уст которых это гарантия того, что действительно все заработает. Вот когда они начинают показывать красивые картинки, а не каракули на салфетках и случайных бумажках, это настораживает :-)

Re: Численные методы штука тонкая.

[identity profile] ushastyi.livejournal.com 2014-12-19 01:08 pm (UTC)(link)
Конечно тонкая. Поэтому надо понимать, когда и что применимо, и перепроверять с разных сторон. Но мы отошли от темы.

А что у Вас был за опыт с CFD, если не секрет?

> Вот когда они начинают показывать красивые картинки, а не каракули на салфетках и случайных бумажках, это настораживает :-)

Человека настораживает любое отклонение от стандартного паттерна -- это нормальная реакция :)

Не знаю, секрет или не очень :-)

[identity profile] o-iv.livejournal.com 2014-12-19 02:36 pm (UTC)(link)
Несколько лет назад пришлось позаниматься разработкой систем охлаждения для суперкомпьютеров. Наш рекорд плотности мощности так никто и не побил, кажется. Уже пять лет как.

Re: Не знаю, секрет или не очень :-)

[identity profile] ushastyi.livejournal.com 2014-12-19 02:40 pm (UTC)(link)
Ого. А где используется? Кроме Т-Платформ у нас кто-то делает суперкомьютеры?

А никто и не говорил, что это не...

[identity profile] o-iv.livejournal.com 2014-12-19 02:54 pm (UTC)(link)
... в Т-Платформах было :-)
А суперкомпьютеры работающие делают еще три организации с половиной организации, не считая HP и IBM.
Собственно, если пойти на http://top50.supercomputers.ru/?page=rating то они там все в правой колонке перечислены :-)

Re: А никто и не говорил, что это не...

[identity profile] ushastyi.livejournal.com 2014-12-19 10:00 pm (UTC)(link)
Но я попробовал угадать, и угадал :)

Из остальных про СКИФ я знал, но забыл, а вот про РСК технологии не слышал. Спасибо за ссылку.

А когда Вы говорите "наш рекорд" -- Вы кого "нас" имеете ввиду? Где работаете? :)

"наш рекорд" имею в виду ту команду...

[identity profile] o-iv.livejournal.com 2014-12-23 10:53 am (UTC)(link)
... которая разрабатывала блэйд систему для суперкомпьютера, которая тогда позволила получить рекордную "плотность производительности" на стандартную стойку. Ну и за одно получилась рекордная плотность мощности. Самое интересное, что эта система несколько раз апгрейдилась и наращивалась, и, кажется, до сих пор удерживает оба рекорда.
Я в той компании уже давно не работаю, но недавно виделся с одним из "хозяев" суперкомпьютера. Компьютер продолжает считать :-)