Basi c вопросы о подборе формулы с градиентным спуском или генетическим c алгоритмом - PullRequest
0 голосов
/ 26 апреля 2020

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

Что мне делать, если я хочу определить правильные параметры? Единственное, что у меня есть, это формула f (x1, x2, ..), экспериментальная кривая, с которой я сравниваю свои результаты, и некоторое представление о том, как должны выглядеть параметры (x1 + - dx1, x2 + - dx2, .. ).

Что я использую, чтобы минимизировать остаток? Я знаю, что Multifitting использует алгоритм Левенберга – Марквардта , и я читал о том, что это возможно при geneti c алгоритме или стохастике c градиентный спуск (хотя, насколько я понимаю, они чаще используются для задач с нейронными сетями). У меня возникли проблемы с определением того, что и как мне кодировать: функция вычисляется за пару минут, поэтому алгоритм genti c может быть не идеальным, и я признаю, что мне не удается понять Я знаю, что SCG будет реализован в Python.

Что бы вы предложили мне использовать в моем более простом случае? Если есть и другие алгоритмы, которые должны быть реализованы здесь, кроме алгоритма, использующего модуль GA, есть ли ясное объяснение их masi c? Я задаю этот вопрос в нужном месте? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Я согласен с замечаниями, сделанными sbjartmar, но я подозреваю, что есть более простое объяснение разницы и пути к исправлению подгонки, которую вы получаете. Я должен сказать, что я не знаком с программным обеспечением Multifitting, но подозреваю, что оно делает что-то, чем вы не должны и тоже должны пытаться:

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

Один хороший способ преодолеть это состоит в том, чтобы поместился в пространство журнала . То есть, пусть ваша модель вычислит log(Intensity) и передаст данные для log(Intensity).

Это не зависит от метода, используемого для решения проблемы, - это переделывает проблему, которую нужно решить. Geneti c Алгоритмы могут быть полезны здесь, но если Левенберг-Марквардт (который будет намного быстрее) работает так же хорошо, как вы показываете, это, вероятно, достаточно хорошо, или, по крайней мере, стоит продолжать работать. ГА обычно лучше убедиться, что решение не застряло в «локальном минимуме». До сих пор нет никаких доказательств того, что это происходит (но это всегда что-то иметь в виду). Я думаю, что метод SGD, на который вы указываете, нацелен на решение другого класса проблем.

0 голосов
/ 02 мая 2020

Я не знаком с GA или с использованием SGD ни в чем, кроме нейронных сетей. Но, похоже, когда значения reflected energy на оси Y go ниже 10^-4, фитинг испытывает трудности с выполнением своей работы. Просто пара идей:

  1. Глядя на то, что происходит при градиенте при значениях для y < 10^-4. Исчезает ли он, когда функция погружается? Он возвращает странные значения?
  2. Проверка lmfit и scipy's оптимизаторов и установщиков, если вы еще этого не сделали.
  3. Проверка, возвращает ли ваша функция значения NaN, когда функция падает или уменьшается до малых значений y.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...