Функция softmax, также известная как softargmax [1] : 184 или нормализованная экспоненциальная функция , [2] : 198, преобразует вектор из K действительных чисел в распределение вероятностей K возможных результатов. Это обобщение логистической функции на несколько измерений, используемое в полиномиальной логистической регрессии . Функция softmax часто используется в качестве последней функции активации нейронной сети для нормализации выходных данных сети к распределению вероятностей по предсказанным выходным классам на основе аксиомы выбора Люса .
Функция softmax принимает на вход вектор z из K действительных чисел и нормализует его в распределение вероятностей , состоящее из K вероятностей, пропорциональных экспонентам входных чисел. То есть до применения softmax некоторые компоненты вектора могут быть отрицательными или превышать единицу; и сумма может не равна 1; но после применения softmax каждый компонент окажется в интервале , а сумма компонентов составит 1, так что их можно интерпретировать как вероятности. Более того, более крупные входные компоненты будут соответствовать большим вероятностям.
Для вектора действительных чисел стандартная (единичная) функция softmax , где , определяется по формуле
Другими словами, softmax применяет стандартную экспоненциальную функцию к каждому элементу входного вектора и нормализует эти значения путем деления на сумму всех этих экспонент. Нормализация гарантирует, что сумма компонентов выходного вектора равна 1. Термин «softmax» происходит от усиливающего воздействия экспоненты на любые максимумы входного вектора. Например, стандартное softmax равно приблизительно , что означает присвоение почти всего общего веса единицы результата положению максимального элемента вектора (из 8).
В общем, вместо e можно использовать другое основание b > 0 . Если 0 < b < 1 , меньшие входные компоненты приведут к увеличению выходных вероятностей, а уменьшение значения b создаст распределения вероятностей, которые более сконцентрированы вокруг позиций наименьших входных значений. И наоборот, как указано выше, если b > 1, более крупные входные компоненты приведут к увеличению выходных вероятностей, а увеличение значения b создаст распределения вероятностей, которые более сконцентрированы вокруг позиций наибольших входных значений. Написание или [a] (для реального β ) [b] дает выражения: [c]
Обратная величина β иногда называется температурой , , с . Более высокая температура приводит к более равномерному распределению выходного сигнала (т. е. с более высокой энтропией и «более случайным»), тогда как более низкая температура приводит к более резкому распределению выходного сигнала с доминированием одного значения.
В некоторых полях база фиксирована, что соответствует фиксированному масштабу [d] , тогда как в других параметр β варьируется.
Название «softmax» вводит в заблуждение. Эта функция не является гладким максимумом (то есть плавным приближением к функции максимума ), а скорее плавным приближением к функции arg max : функции, значение которой является индексом наибольшего элемента вектора. Фактически, термин «softmax» также используется для обозначения тесно связанной функции LogSumExp , которая представляет собой плавный максимум. По этой причине некоторые предпочитают более точный термин «softargmax», но термин «softmax» является общепринятым в машинном обучении. [3] [4] В этом разделе используется термин «softargmax», чтобы подчеркнуть эту интерпретацию.
Формально, вместо того, чтобы рассматривать arg max как функцию с категориальным выходом (соответствующим индексу), рассмотрим функцию arg max с горячим представлением вывода (при условии, что существует уникальный максимальный аргумент):
где выходная координата тогда и только тогда, когда является arg max , что означает уникальное максимальное значение . Например, в этой кодировке поскольку третий аргумент является максимальным.
Это можно обобщить до нескольких значений arg max (несколько равных являются максимальными), разделив 1 между всеми максимальными аргументами; формально 1/k , где k — количество аргументов, предполагающих максимум. Например, поскольку второй и третий аргумент являются максимальными. В случае, если все аргументы равны, это просто Точки z с несколькими значениями arg max являются особыми точками (или особенностями и образуют сингулярное множество) – это точки, в которых arg max является разрывным (с скачком разрыва ) – в то время как точки с одиночный arg max известен как неособые или регулярные точки.
Благодаря последнему выражению, приведенному во введении, softargmax теперь является плавной аппроксимацией arg max: при , softargmax сходится к arg max. Существуют различные понятия сходимости функции; softargmax сходится к arg max поточечно , что означает для каждого фиксированного входа z как . Однако softargmax не сходится равномерно к arg max, что интуитивно означает, что разные точки сходятся с разной скоростью и могут сходиться сколь угодно медленно. Фактически, softargmax непрерывен, но arg max не является непрерывным в сингулярном множестве, где две координаты равны, в то время как равномерный предел непрерывных функций непрерывен. Причина, по которой он не может сходиться равномерно, заключается в том, что для входных данных, где две координаты почти равны (и одна из них является максимальной), arg max является индексом одной или другой, поэтому небольшое изменение входных данных приводит к большому изменению выходных данных. Например, но и для всех входов: чем ближе точки к множеству сингулярностей , тем медленнее они сходятся. Однако softargmax компактно сходится на неособом множестве.
И наоборот, при , softargmax сходится к arg min таким же образом, где здесь сингулярный набор представляет собой точки с двумя значениями arg min . На языке тропического анализа softmax — это деформация или «квантование» arg max и arg min, соответствующая использованию логарифмического полукольца вместо полукольца max-plus (соответственно min-plus semiring ) и восстановлению arg max или arg min. arg min путем принятия предела называется «тропикализация» или «деквантование».
Также возможно, что для любого фиксированного β , если один входной сигнал намного больше остальных по отношению к температуре, выходной сигнал примерно равен arg max. Например, разница в 10 велика по сравнению с температурой в 1:
В теории вероятностей выходные данные функции softargmax можно использовать для представления категориального распределения , то есть распределения вероятностей по K различным возможным результатам.
В статистической механике функция softargmax известна как распределение Больцмана (или распределение Гиббса ): [5] : 7 набор индексов — это микросостояния системы; входные данные — это энергии этого состояния; знаменатель известен как статистическая сумма , часто обозначаемая Z ; а фактор β называется холодностью (или термодинамической бета , или обратной температурой ).
Функция softmax используется в различных методах мультиклассовой классификации , таких как полиномиальная логистическая регрессия (также известная как регрессия softmax) [2] : 206–209 [1], многоклассовый линейный дискриминантный анализ , наивные классификаторы Байеса и искусственные нейронные сети . [6] В частности, в полиномиальной логистической регрессии и линейном дискриминантном анализе входными данными для функции является результат K различных линейных функций , а прогнозируемая вероятность для j -го класса с учетом выборочного вектора x и весового вектора w равна:
Это можно рассматривать как композицию K линейных функций и функции softmax (где обозначает скалярное произведение и ). Эта операция эквивалентна применению линейного оператора, определенного к векторам , преобразуя таким образом исходные, вероятно, многомерные входные данные в векторы в K -мерном пространстве .
Стандартная функция softmax часто используется на последнем уровне классификатора на основе нейронной сети. Такие сети обычно обучаются в режиме логарифмических потерь (или перекрестной энтропии ), что дает нелинейный вариант полиномиальной логистической регрессии.
Поскольку функция сопоставляет вектор и конкретный индекс с реальным значением, производная должна учитывать индекс:
Это выражение симметрично относительно индексов и поэтому может быть также выражено как
Здесь для простоты используется дельта Кронекера (см. производную сигмовидной функции , выражаемую через саму функцию).
Чтобы добиться стабильных численных вычислений производной, часто из входного вектора вычитают константу. Теоретически это не меняет ни выход, ни производную. Но он более стабилен, поскольку может явно контролировать наибольшее значение, вычисленное в каждом показателе степени.
Если функция масштабируется с параметром , то эти выражения необходимо умножить на .
См. полиномиальный логит для вероятностной модели, которая использует функцию активации softmax.
В области обучения с подкреплением можно использовать функцию softmax для преобразования значений в вероятности действий. Обычно используемая функция: [7]
где значение действия соответствует ожидаемому вознаграждению за выполнение действия a и называется параметром температуры (имеется в виду статистическая механика ). При высоких температурах ( ) все действия имеют почти одинаковую вероятность, и чем ниже температура, тем больше ожидаемое вознаграждение влияет на вероятность. При низкой температуре ( ) вероятность действия с наибольшим ожидаемым вознаграждением стремится к 1.
В приложениях нейронных сетей число K возможных результатов часто велико, например, в случае моделей нейронного языка , которые предсказывают наиболее вероятный результат на основе словаря, который может содержать миллионы возможных слов. [8] Это может сделать вычисления для слоя softmax (т.е. умножение матриц для определения , с последующим применением самой функции softmax) с вычислительной точки зрения. [8] [9] Более того, метод обратного распространения ошибки градиентного спуска для обучения такой нейронной сети включает вычисление softmax для каждого обучающего примера, и количество обучающих примеров также может стать большим. Вычислительные усилия для softmax стали основным ограничивающим фактором в разработке более крупных моделей нейронного языка, побуждая использовать различные средства для сокращения времени обучения. [8] [9]
Подходы, которые реорганизуют слой softmax для более эффективного расчета, включают иерархический softmax и дифференцированный softmax . [8] Иерархический softmax (представленный Морином и Бенджио в 2005 году) использует бинарную древовидную структуру, где результаты (словарные слова) являются листьями, а промежуточные узлы представляют собой соответствующим образом выбранные «классы» результатов, образующие скрытые переменные . [9] [10] Желаемая вероятность (значение softmax) листа (результата) затем может быть рассчитана как произведение вероятностей всех узлов на пути от корня до этого листа. [9] В идеале, когда дерево сбалансировано, это уменьшит вычислительную сложность с до . [10] На практике результаты зависят от выбора хорошей стратегии кластеризации результатов по классам. [9] [10] Для этого в моделях Google word2vec (представленных в 2013 году) для достижения масштабируемости использовалось дерево Хаффмана . [8]
Второй тип средств основан на аппроксимации softmax (во время обучения) с помощью модифицированных функций потерь, которые позволяют избежать расчета полного коэффициента нормализации. [8] К ним относятся методы, которые ограничивают сумму нормализации выборкой результатов (например, выборка по значимости, целевая выборка). [8] [9]
Геометрически функция softmax отображает векторное пространство на границу стандартного -simplex , сокращая размерность на единицу (диапазон представляет собой -мерный симплекс в -мерном пространстве) из-за линейного ограничения , согласно которому вся выходная сумма равна 1, что означает, что она лежит на гиперплоскости .
Вдоль главной диагонали softmax — это просто равномерное распределение выходных данных : равные баллы дают равные вероятности.
В более общем смысле, softmax инвариантен при переводе на одно и то же значение в каждой координате: добавление к входным данным дает , потому что он умножает каждый показатель степени на один и тот же коэффициент (потому что ), поэтому отношения не меняются:
Геометрически softmax является постоянным вдоль диагоналей: это измерение, которое исключается и соответствует тому, что выходные данные softmax не зависят от перевода входных оценок (выбор 0 баллов). Можно нормализовать входные оценки, предположив, что сумма равна нулю (вычесть среднее значение: где ), а затем softmax переводит гиперплоскость точек, сумма которых равна нулю, в открытый симплекс положительных значений, сумма которых равна 1 , аналогично тому, как показатель степени принимает значения от 0 до 1 и положителен.
Напротив, softmax не инвариантен при масштабировании. Например, но
Стандартная логистическая функция — это частный случай одномерной оси в двумерном пространстве, скажем, оси x в плоскости (x, y) . Одна переменная имеет фиксированное значение 0 (скажем ), поэтому и другая переменная может меняться, обозначая ее , то есть стандартную логистическую функцию и ее дополнение (то есть их сумма равна 1). Альтернативно одномерные входные данные могут быть выражены в виде линии с выходными данными и
Функция softmax также является градиентом функции LogSumExp , плавным максимумом :
где функция LogSumExp определяется как .
Функция softmax использовалась в статистической механике как распределение Больцмана в основополагающей статье Больцмана (1868 г.), [11] формализованной и популяризированной во влиятельном учебнике Гиббса (1902 г.). [12]
Использование softmax в теории принятия решений приписывают Люсу (1959) , [13] : 1 , который использовал аксиому независимости нерелевантных альтернатив в теории рационального выбора , чтобы вывести softmax в аксиоме выбора Люса для относительных предпочтений.
В машинном обучении термин «софтмакс» приписан Джону С. Брайдлу в двух статьях на конференциях 1989 года: Bridle (1990a): [13] : 1 и Bridle (1990b): [3]
Нас интересуют нелинейные сети с прямой связью (многослойные перцептроны или MLP) с несколькими выходами. Мы хотим рассматривать выходные данные сети как вероятности альтернатив ( например, классов шаблонов), обусловленные входными данными. Мы ищем подходящие выходные нелинейности и подходящие критерии для адаптации параметров сети ( например, весов). Мы объясняем две модификации: оценку вероятности, которая является альтернативой минимизации квадратичной ошибки, и нормализованное экспоненциальное ( softmax ) многовходное обобщение логистической нелинейности. [14] : 227
Для любого входа все выходные данные должны быть положительными, а их сумма должна равняться единице. ...
Учитывая набор неограниченных значений, мы можем обеспечить оба условия, используя нормализованное экспоненциальное преобразование:
Это преобразование можно рассматривать как многовходовое обобщение логистики, действующее на всем выходном уровне. Он сохраняет ранговый порядок входных значений и является дифференцируемым обобщением операции выбора максимального значения по принципу «победитель получает все». По этой причине мы называем его softmax . [15] : 213
Если мы возьмем входные данные [1, 2, 3, 4, 1, 2, 3] , softmax будет [0,024, 0,064, 0,175, 0,475, 0,024, 0,064, 0,175] . Выходные данные имеют большую часть своего веса там, где в исходном вводе была цифра «4». Обычно эта функция используется для того, чтобы выделить самые большие значения и подавить значения, которые значительно ниже максимального значения. Но обратите внимание: softmax не является масштабно-инвариантным, поэтому, если входные данные были [0,1, 0,2, 0,3, 0,4, 0,1, 0,2, 0,3] (что в сумме дает 1,6), softmax будет [0,125, 0,138, 0,153, 0,169, 0,125, 0,138, 0,153] . Это показывает, что для значений от 0 до 1 softmax фактически преуменьшает значение максимального значения (обратите внимание, что 0,169 не только меньше 0,475, но также меньше начальной пропорции 0,4/1,6=0,25 ).
Вычисление этого примера с использованием кода Python :
>>> импортируйте numpy как np >>> a = [ 1.0 , 2.0 , 3.0 , 4.0 , 1.0 , 2.0 , 3.0 ] >>> np . ехр ( а ) / НП . sum ( np . exp ( a )) массив ([0,02364054, 0,06426166, 0,1746813, 0,474833, 0,02364054, 0,06426166, 0,1746813])
Вот пример кода Джулии :
Юля> А = [ 1.0 , 2.0 , 3.0 , 4.0 , 1.0 , 2.0 , 3.0 ]; # точка с запятой для подавления интерактивного вывода Юля> опыт . ( A ) ./ sum ( exp , A ) 7-элементный массив{Float64,1}: 0,0236405 0,0642617 0,174681 0,474833 0,0236405 0,0642617 0,174681
Вот пример кода R :
> z <- c ( 1.0 , 2.0 , 3.0 , 4.0 , 1.0 , 2.0 , 3.0 ) > softmax <- exp ( z ) / sum ( exp ( z )) > softmax [1] 0,02364054 0,06426166 0,17468130 0,47483300 0,02364 054 0,06426166 0,17468130
Вот пример кода Эликсира : [16]
iex> t = Nx . тензор ([[ 1 , 2 ], [ 3 , 4 ]]) iex> Nx . делить ( Nx . exp ( t ), Nx . сумма ( Nx . exp ( t ))) #Nx.Tensor< f64[2][2] [ [0.03205860328008499, 0.08714431874203257], [0.23688281808991013, 0.6439142598879722] ] >
Вот пример кода Raku :
> мой @z = [ 1.0 , 2.0 , 3.0 , 4.0 , 1.0 , 2.0 , 3.0 ];> скажи @z . карта: { exp ( $_ )/ sum ( @z . map: { exp ( $_ )})}( 0.023640543021591385 0.06426165851049616 0.17468129859572226 0.4748329997443803 0.023640543021591385 0.06426165851049616 0 .17468129859572226 )
Функция softmax генерирует вероятностные прогнозы, плотно распределенные по ее поддержке. Другие функции, такие как sparsemax или α-entmax, можно использовать, когда желательны прогнозы с разреженной вероятностью. [17]