Демонстрация работы формулы softmax с разной температурой
Шпаргалка демонстрирует работу формулы softmax с разной температурой (`τ`).
Возьмем простой набор "оценок" (логитов) для трех классов и посмотрим, как меняются вероятности при изменении температуры.
Пример наглядно показывает, как параметр температуры τ позволяет контролировать "уверенность" или "случайность" выбора в функции softmax.
argmax (сокращение от "arguments of the maximum", аргументы максимума) — это математическая операция, которая находит аргумент (то есть входное значение или индекс), при котором функция или набор значений достигает своего максимума.
Проще говоря:
max находит само максимальное значение.
argmax находит позицию (индекс) или входное значение, где это максимальное значение находится.
Примеры:
Набор чисел: Пусть у нас есть массив чисел: A = [10, 50, 20, 40]
max(A) вернет 50 (само максимальное значение).
argmax(A) вернет 1 (индекс элемента 50, если считать с 0: 10 - индекс 0, 50 - индекс 1, 20 - индекс 2, 40 - индекс 3).Функция: Пусть есть функция f(x) = -(x - 2)^2 + 10. Эта парабола имеет вершину в точке x=2, где значение функции равно 10.
Максимальное значение функции max(f(x)) равно 10.
argmax(f(x)) равен 2 (значение x, при котором функция f(x) максимальна).
В контексте классификации с помощью нейронных сетей и функции softmax:
Модель на выходе обычно выдает "логиты" (оценки) для каждого класса.
Функция softmax преобразует эти логиты в вероятности (числа от 0 до 1, сумма которых равна 1).
Чтобы принять окончательное решение о том, к какому классу относится входной объект, мы обычно выбираем класс с наибольшей вероятностью.
Операция argmax, примененная к массиву вероятностей softmax, вернет индекс класса, у которого самая высокая вероятность.
Пример с Softmax:
Логиты: [3.0, 1.0, 0.2]
Вероятности после softmax (при T=1): [0.839, 0.114, 0.047] (примерно)
Применяем argmax к вероятностям [0.839, 0.114, 0.047].
Результат argmax: 0 (потому что максимальное значение 0.839 находится на позиции с индексом 0). Это означает, что модель выбирает первый класс.
При очень низкой температуре (τ → 0) функция softmax приближается к argmax по исходным логитам, так как почти вся вероятность концентрируется на элементе с максимальным логитом.
Семействo функций и операций, связанных с поиском максимальных/минимальных значений
Max (Максимум): Находит и возвращает самое большое значение из набора чисел или значений функции. Пример: max([10, 50, 20, 40]) вернет 50.
Назначение: Просто найти пиковое значение.Min (Минимум): Находит и возвращает самое маленькое значение из набора чисел или значений функции. Пример: min([10, 50, 20, 40]) вернет 10.
Назначение: Найти наименьшее значение, часто используется в функциях потерь (мы хотим минимизировать ошибку).Argmax (Аргумент максимума): Находит и возвращает индекс (позицию) или входное значение (аргумент), при котором достигается максимальное значение. Не само значение, а его "адрес". Пример: argmax([10, 50, 20, 40]) вернет 1 (индекс элемента 50, если считать с 0). Назначение: Узнать, какой элемент является максимальным. В классификации — узнать индекс класса с наибольшей вероятностью/оценкой.
Argmin (Аргумент минимума): Находит и возвращает индекс (позицию) или входное значение (аргумент), при котором достигается минимальное значение. Пример: argmin([10, 50, 20, 40]) вернет 0 (индекс элемента 10). Назначение: Узнать, какой элемент является минимальным. Например, найти параметр, минимизирующий функцию потерь.
Softmax: Преобразует вектор действительных чисел (логитов) в вектор вероятностей. Каждое выходное значение находится в диапазоне (0, 1), и их сумма равна 1. Большие входные значения получают большие вероятности. Это "мягкая", дифференцируемая версия argmax. Пример: softmax([3.0, 1.0, 0.2]) вернет примерно [0.839, 0.114, 0.047]. Назначение: Получение вероятностного распределения по классам в задачах классификации, используется в механизмах внимания, при генерации текста для выбора следующего слова. Ключевое свойство — дифференцируемость, что позволяет использовать ее в градиентных методах обучения.
LogSoftmax: Применяет логарифм к результату softmax. То есть log(softmax(x)). Пример: log_softmax([3.0, 1.0, 0.2]) вернет примерно [-0.175, -2.175, -3.05]. Назначение: Часто используется в связке с функциями потерь, такими как NLLLoss (Negative Log Likelihood Loss). Вычисление log_softmax напрямую часто более численно стабильно, чем вычисление softmax, а затем взятие логарифма, особенно когда вероятности близки к 0. log(softmax(x)) = x - log(sum(exp(x))) — это позволяет избежать вычисления exp(x), которое может привести к очень большим или очень маленьким числам.
Hardmax: Неформальный термин для операции, которая строго преобразует вектор в "one-hot" вектор, где элемент, соответствующий максимальному значению исходного вектора, становится 1, а все остальные — 0. По сути, это представление результата argmax в виде вектора. Пример: "Hardmax" от [3.0, 1.0, 0.2] будет [1, 0, 0]. Назначение: Теоретическое сравнение с softmax. softmax — это гладкая аппроксимация "hardmax". "Hardmax" не дифференцируема в точках, где есть несколько одинаковых максимумов, и ее градиент равен нулю почти везде, что делает ее непригодной для обучения с помощью градиентного спуска.
max/min и argmax/argmin дают точные, но "жесткие" ответы, в то время как
softmax предоставляет "мягкую", вероятностную и дифференцируемую альтернативу argmax.
Ссылка на блокнот 👉 https://colab.research.google.com/github/hypo69/1001-python-...
Удачи!




Лига программистов
2.1K постов11.9K подписчиков
Правила сообщества
- Будьте взаимовежливы, аргументируйте критику
- Приветствуются любые посты по тематике программирования
- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества