Post content
Рассказывали мне тут про редкие вопросы с интервью, с которыми мало кто справляется, вспомнил, что и сам на такой натыкался в прошлом, поделюсь с вами. В целом есть идея изредка выносить что-то подобное с тегом #interview_questions, дайте знать, если полезно. Вопрос: мы решаем задачу классификации и до софтмакса получаем вектор логитов, скажем [0.81, 3, 10, 15, 90]. В операции софтмакса есть возведение экспоненты в степень, то есть в данном случае нужно будет посчитать e^90. Это очевидно приведет к переполнению любого используемого типа, а в некоторых имплементациях получим значение inf -> 1.0 после софтмакса. Что делать в этом случае? Ответ: До софтмакса нужно вычесть максимум из логитов, то есть в данном примере 90. Операция вычитания числа из всех элементов вектора не поменяет результат софтмакса (можете проделать ее на бумажке и убедиться) или просто прикинуть в уме, что e^max(logit) сократится из-за того, что он присутствует и в числителе, и в знаменателе. Экспоненту же от большого отрицательного числа посчитать можно, значение будет близко к 0.