Градиентный спуск огромная функция потери - PullRequest
0 голосов
/ 07 декабря 2018

Я сталкиваюсь с проблемой недвоичной классификации этой формы:

  • Ввод: 2-мерный вектор (x, y) с -1
  • Вывод: 4-мерный вектор (p_0, p_1, p_2, p_3), где 0

Программа, которую я использую для их классификации, хочет симулировать 4-кубитную квантовую цепь, это означает, что я начинаю с 16-мерного вектора с 1 в качестве первой записи, и0 в другом месте, а затем я применяю серию поворотов в форме матричных произведений.

Перефразируя это немного: я начинаю с указанного 16-мерного вектора, а затем умножаю его на матрицу 16x16, которая зависит отпервый компонент точки "x", который отображает новый 16-мерный вектор.Затем я умножаю этот новый вектор на другую матрицу, теперь в качестве параметра у меня используется «y».Я называю этот процесс «кодированием» данных.

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

Итак, после расчета каждого продукта я получаю новый 16-мерный вектор, который зависит от каждого упомянутого параметра, и мы будемвызовите a (x, y).

Отсюда я создаю целевую функцию f (x, y) = (p_0, p_1, p_2, p_3).Каждый из p_i будет суммой некоторых компонентов (x, y).

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

d (x, y)) может принимать только одно из четырех возможных значений:

  • (1,0,0,0) - дублируется как "0",
  • (0,1,0,0)обозначен как "1",
  • (0,0,1,0) обозначен как "2",
  • (0,0,0,1) обозначен как "3".

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

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

Чтобы достичь этих результатов, я запускаю программу «Градиентный спуск» 30 раз (эпох) со скоростью обучения 1.

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

Моя программа достигает максимальной точности ~ 40% (пробуя несколько различных наборов матриц) для 1000 тренировочных баллов и 1000 оценочных баллов.

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

Есть ли что-то, что я делаю совершенно неправильно, или просто эта структура недостаточно хороша для классификации?

Большое спасибо за любые отзывы.

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