Skip to content

Commit

Permalink
feat: Describe ListMLELoss
Browse files Browse the repository at this point in the history
  • Loading branch information
Nikolay-Lysenko committed Jan 21, 2024
1 parent 557eafd commit cadcd79
Showing 1 changed file with 23 additions and 10 deletions.
33 changes: 23 additions & 10 deletions notes/all_notes_without_sorting.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -4198,11 +4198,11 @@
"\n",
"#### Введение\n",
"\n",
"Выборка для обучения ранжирующей модели может быть составлена не только из независимых друг от друга объектов (как это в иделае должно быть в задачах регрессии и классификации). Порой естественным образом объекты разбиваются на группы, внутри которых объекты зависимы, а ранжирование нужно только в пределах каждой из групп. Например, если пользователь листает ленту в социальной сети и какие-то элементы пропускает, а на какие-то кликает, то группой можно считать один заход пользователя в ленту, а отранжировать элементы хочется так, чтобы кликнутые элементы были сверху.\n",
"Выборка для обучения ранжирующей модели может быть составлена не только из независимых друг от друга объектов (как это в идеале должно быть в задачах регрессии и классификации). Порой естественным образом объекты разбиваются на группы, внутри которых объекты зависимы, а ранжирование нужно только в пределах каждой из групп. Например, если пользователь листает ленту в социальной сети и какие-то элементы пропускает, а на какие-то кликает, то группой можно считать один заход пользователя в ленту, а отранжировать элементы хочется так, чтобы кликнутые элементы были сверху.\n",
"\n",
"Если функция потерь для задачи ранжирования зависит от порядка всех объектов группы, она называется посписочной или погрупповой. В противовес им существуют поточечные функции потерь (то есть функции потерь для регрессии или классификации) и попарные функции потерь (то есть функции потерь, вычисляемые на некоторых парах объектов из одной и той же группы).\n",
"\n",
"Далее все формулы будут приводиться для одной группы размера $\\vert g \\vert$, целевая переменная на $i$-м объекте которой будет обозначаться как $y_i$, а предсказание модели, по убыванию которых делается ранжирование, — как $s_i$.\n",
"Далее все формулы будут приводиться для одной группы размера $\\vert g \\vert$, целевая переменная на $i$-м объекте которой будет обозначаться как $y_i$, а предсказание модели — как $s_i$. На всякий случай напомним, что по убыванию этих предсказаний и делается ранжирование.\n",
"\n",
"#### Модификации поточечных функций потерь\n",
"\n",
Expand All @@ -4220,8 +4220,7 @@
"$$\\hat{y}_i = \\mathrm{softmax}(s)_i = \\frac{e^{s_i}}{\\sum_{j=1}^{\\vert g \\vert} e^{s_j}}.$$\n",
"\n",
"Вне зависимости от выбранного способа далее $\\hat{y}_i$ подставляются в формулу логарифмической функции потерь:\n",
"$$\\mathrm{LogLoss}(y, \\hat{y}) = - \\frac{1}{c} \\sum_{i=1}^{\\vert g \\vert} \\left( y_i \\log \\hat{y}_i + (1 - y_i) \\log (1 - \\hat{y}_i) \\right),$$\n",
"где $c = \\sum_{i=1}^{\\vert g \\vert} y_i$ — нормировочная константа, нужная, чтобы значения функции потерь на разных группах можно было усреднять.\n",
"$$\\mathrm{LogLoss}(y, \\hat{y}) = - \\frac{1}{\\vert g \\vert} \\sum_{i=1}^{\\vert g \\vert} \\left( y_i \\log \\hat{y}_i + (1 - y_i) \\log (1 - \\hat{y}_i) \\right).$$\n",
"\n",
"По-хорошему, обе этих модификации логарифмической функции потерь могли бы называться QueryLogLoss, но в документации CatBoost'а первую называют QueryCrossEntropy, а вторую — QuerySoftmax.\n",
"\n",
Expand All @@ -4235,17 +4234,31 @@
"\n",
"Позиция $i$-го объекта в группе является разрывной функцией от вектора $s$, и при помощи данной идеи она может быть аппроксимирована так:\n",
"$$\\mathrm{ApproxRank}(s)_i = 1 + \\sum_{j \\ne i} \\frac{1}{1 + \\exp\\left(\\frac{-(s_j - s_i)}{t}\\right)}.$$\n",
"Далее для краткости введём обозначение $\\pi(s)_i = \\mathrm{ApproxRank}(s)_i$, то есть $\\pi$ — отображение из вектора предсказаний в вектор приближённых позиций.\n",
"\n",
"Для тех матрик качества, где вся разрывность возникает только из-за позиции, этого достаточно для определения функций потерь. Так, имеем:\n",
"$$\\mathrm{ApproxNDCG}(y, s) = \\frac{1}{\\mathrm{IDCG}(y)} \\sum_{i=1}^{\\vert g \\vert} \\frac{f(y_i)}{\\log_2(1 + \\mathrm{ApproxRank}(s)_i)},$$\n",
"$$\\mathrm{ApproxMARR}(y, s) = \\frac{1}{\\sum_{i=1}^{\\vert g \\vert} y_i} \\sum_{i=1}^{\\vert g \\vert} \\frac{1}{\\mathrm{ApproxRank}(s)_i)} y_i,$$\n",
"где последняя функция потерь предполагает бинарные целевые переменные, а MARR расшифровывается как Mean Average Reciprocal Rank: отличие от MRR в том, что берутся ранги всех объектов положительного класса, а не только одного, отранжированного выше остальных. Множитель $\\frac{1}{\\sum_{i=1}^{\\vert g \\vert} y_i}$ как раз и отвечает за усреднение по ним.\n",
"$$\\mathrm{ApproxNDCG}(y, s) = - \\frac{1}{\\mathrm{IDCG}(y)} \\sum_{i=1}^{\\vert g \\vert} \\frac{f(y_i)}{\\log_2(1 + \\pi(s)_i)},$$\n",
"$$\\mathrm{ApproxMARR}(y, s) = - \\frac{1}{\\sum_{i=1}^{\\vert g \\vert} y_i} \\sum_{i=1}^{\\vert g \\vert} \\frac{1}{\\pi(s)_i} y_i,$$\n",
"где последняя функция потерь предполагает бинарные целевые переменные, а MARR расшифровывается как Mean Average Reciprocal Rank: отличие от MRR в том, что берутся ранги всех объектов положительного класса, а не только одного, отранжированного выше остальных. Множитель $\\frac{1}{\\sum_{i=1}^{\\vert g \\vert} y_i}$ как раз и отвечает за усреднение по ним. А ещё в обеих формулах у правой части изменён знак, потому что NDCG и MARR надо максимизировать, а функции потерь — минимизировать.\n",
"\n",
"Однако в метриках наподобие MAP разрывность также возникает из-за отсечения по какому-либо порогу. Эту разрывность тоже можно апроксимировать логистической функцией со своей температурой $\\tau$. Итого имеем:\n",
"$$\\mathrm{ApproxMAP}(y, s) = \\frac{1}{\\sum_{i=1}^{\\vert g \\vert} y_i} \\sum_{i=1}^{\\vert g \\vert} \\left(\\frac{y_i}{\\mathrm{ApproxRank}(s)_i} + \\sum_{j \\ne i} \\frac{y_i y_j}{\\mathrm{ApproxRank}(s)_i} \\frac{1}{1 + \\exp(-\\tau (\\mathrm{ApproxRank}(s)_i - \\mathrm{ApproxRank}(s)_j) )}\\right).$$\n",
"Интерпретация тут такая. Сначала, как и ранее, идёт множитель, отвечаюший за усреднение по объектам положительного класса. При суммировании по объектам ненулевой вклад внесут только объекты положительного класса, потому что $i$-е слагаемое кратно $y_i$. Если $y_i = 1$, то в выражении под суммой первый член показывает вклад $i$-го объекта в ту точность, которая возникает при проведении границы между классами после позиции $i$-го объекта, а второй член равен вкладу в эту точность тех объектов положительного класса, которые отранжированы выше $i$-го.\n",
"$$\\mathrm{ApproxMAP}(y, s) = - \\frac{1}{\\sum_{i=1}^{\\vert g \\vert} y_i} \\sum_{i=1}^{\\vert g \\vert} \\left(\\frac{y_i}{\\pi(s)_i} + \\sum_{j \\ne i} \\frac{y_i y_j}{\\pi(s)_i} \\frac{1}{1 + \\exp\\left(-\\tau (\\pi(s)_i - \\pi(s)_j)\\right)}\\right).$$\n",
"Интерпретация тут такая. Сначала, как и ранее, идёт множитель, отвечающий за усреднение по объектам положительного класса. При суммировании по объектам ненулевой вклад внесут только объекты положительного класса, потому что $i$-е слагаемое кратно $y_i$. Если $y_i = 1$, то в выражении под суммой первый член показывает вклад $i$-го объекта в ту точность, которая возникает при проведении границы между классами после позиции $i$-го объекта, а второй член равен вкладу в эту точность тех объектов положительного класса, которые отранжированы выше $i$-го.\n",
"\n",
"Какая бы метрика ни приближалась, недостаток этого подхода в том, что чем ниже температура (то есть чем точнее логистическая функция приближает индикаторную функцию), тем больше становится область, в которой градиент логистической функции неинформативен. Таким образом, есть компромисс между несоответствием функции потерь метрике и возможностью успешной оптимизации."
"Какая бы метрика ни приближалась, недостаток этого подхода в том, что чем ниже температура (то есть чем точнее логистическая функция приближает индикаторную функцию), тем больше становится область, в которой градиент логистической функции неинформативен. Таким образом, есть компромисс между несоответствием функции потерь метрике и возможностью успешной оптимизации.\n",
"\n",
"#### Отрицательные прологарифмированные правдоподобия\n",
"\n",
"Как известно, логарифмическая функция потерь с точностью до константы является логарифмом правдоподобия обучающей выборки относительно распределения, задаваемого предсказанными вероятностями. В задаче ранжирования тоже бывают функции потерь, являющиеся прологарифмированным правдоподобием: на этот раз — идеального ранжирования относительно некого распределения, параметризованного вектором предсказаний $s$. Более того, в отличие от логарифмической функции потерь эти функции потерь работают не только с бинарными целевыми переменными.\n",
"\n",
"Если ранее в этой заметке индексация объектов была произвольной, теперь под $i$-м объектом будем иметь в виду объект, занимающий $i$-ю позицию в идеальном ранжировании. Если у нескольких объектов одинаковые целевые переменные, позиции между ними распределяются случайно. Более того, некоторые программные реализации даже [не фиксируют](https://www.tensorflow.org/ranking/api_docs/python/tfr/keras/losses/ListMLELoss) зерно случайности, так что значение функции потерь может меняться при неизменных входах.\n",
"\n",
"В качестве правдоподобия можно взять вероятность идеального ранжирования при сэмплировании из распределения Плакетта-Льюса:\n",
"$$\\mathbb{P}(y \\vert s) = \\prod_{i=1}^{\\vert g \\vert} \\mathrm{softmax}(s)_i = \\prod_{i=1}^{\\vert g \\vert} \\frac{\\exp(s_i)}{\\sum_{j=i}^{\\vert g \\vert} \\exp(s_j)}.$$\n",
"Из этой формулы можно увидеть интерпретацию распределения Плакетта-Льюса. На каждую текущую позицию ставится объект, просэмплированный из категориального распределения над ещё не выбранными объектами группы, где вероятности задаются применением софтмакса к тем компонентам вектора $s$, которые соответствуют этим объектам.\n",
"\n",
"Функция потерь под названием ListMLELoss в таком случае принимает вид:\n",
"$$\\mathrm{ListMLELoss}(y, s) = -\\log \\mathbb{P}(y \\vert s).$$"
]
}
],
Expand Down

0 comments on commit cadcd79

Please sign in to comment.