Пользовательская функция потерь pytorch при минимизации угла между векторами

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

criterion = nn.CosineSimilarity() 
loss = torch.mean(torch.abs(criterion(actual_vectors,predicted_vectors)))

#back-propagation on the above *loss* will try cos(angle) = 0. But I want angle between the vectors to be 0 or cos(angle) = 1.

loss = 1 - loss

#To me, the above does not seem right. Isn't back-propagation on the above 'loss' similar to minimizing the negative of 'loss' from line 2?
#Does '1' have no role to play here when back-propagation is applied?

loss.backward()
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
1 820
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Теоретически это имеет смысл. Цель обратного распространения — минимизировать потери. Если потеря равна 1 - cos(A) (где A — разница углов между двумя), то это эквивалентно утверждению, что цель состоит в том, чтобы максимизировать cos(A), что, в свою очередь, эквивалентно минимизации угла между двумя векторами.

Простым примером может быть цель минимизации X^2 + 4. Ответ на эту задачу оптимизации такой же, как и ответ на цель максимизации -(X^2 + 4). Приклеивание минуса ко всему уравнению и замена min на max сделают утверждения эквивалентными. Итак, если у вас есть функция, которую вы хотите МАКСИМИЗИРОВАТЬ, а ваша модель оптимизации может только МИНИМИЗИРОВАТЬ, тогда просто поставьте знак минус на свою функцию и на этом закончите.

Еще один вопрос, который вы можете задать: «Что важного в 1? Могли бы мы просто сказать loss = -loss», и ответ … это зависит. Теоретически да, это эквивалентно, и единица не играет роли в обратном распространении (поскольку она исчезает с производной). Однако, как только мы начнем говорить о реальной оптимизации с числовыми ошибками и сложными оптимизаторами/правилами обновления, константа 1 может сыграть свою роль.

Еще одна причина иметь 1 заключается в том, что ваш убыток четко определен между 0 и 1, что является хорошим свойством.

Так что да, минимизация потерь 1 - cos(A) из-за обратного распространения эквивалентна минимизации угла между векторами.

Это полезно! Кроме того, «еще один вопрос, который вы могли бы задать, — «что важно в 1?» — это еще один вопрос, который я действительно имел в виду. Спасибо за ваше мнение по этому поводу.

Ajay A 24.12.2020 21:50

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

A Kareem 24.12.2020 22:14

Привет @A Карим, конечно. Подождет один или два дня, чтобы услышать, если таковые имеются, от других, и обязательно приму ответ.

Ajay A 24.12.2020 22:21

Другие вопросы по теме