Зачем использовать softmax вместо стандартной нормализации?

В выходном слое нейронной сети обычно используется функция softmax для аппроксимации распределения вероятностей:

введите описание изображения здесь

Это дорого для вычисления из-за экспонент. Почему бы просто не выполнить Z-преобразование, чтобы все выходы были положительными, а затем нормализовать, просто разделив все выходы на сумму всех выходов?


person Tom    schedule 19.06.2013    source источник
comment
Вычисление функции не является дорогостоящим из-за экспонент, а потому, что вам нужно вычислять каждый qj. Возведение в степень дешево по сравнению с общим объемом необходимых вычислений.   -  person Seppo Enarvi    schedule 21.09.2016
comment
О каком преобразовании Z идет речь? Значение термина «обработка сигналов» здесь не подходит, и замена значений их z-оценкой дает отрицательный результат, если входные данные ниже среднего.   -  person David Cian    schedule 03.06.2020
comment
См. Также: Stats.SE   -  person Martin Thoma    schedule 08.06.2020


Ответы (10)


У Softmax есть один приятный атрибут по сравнению со стандартной нормализацией.

Он реагирует на слабую стимуляцию (представьте размытое изображение) вашей нейронной сети довольно равномерным распределением и на высокую стимуляцию (например, большие числа, представьте четкое изображение) с вероятностями, близкими к 0 и 1.

В то время как стандартная нормализация не заботит, пока пропорции одинаковы.

Посмотрите, что происходит, когда soft max имеет в 10 раз больший вход, то есть ваша нейронная сеть получила четкое изображение и активировалось множество нейронов.

>>> softmax([1,2])              # blurry image of a ferret
[0.26894142,      0.73105858])  #     it is a cat perhaps !?
>>> softmax([10,20])            # crisp image of a cat
[0.0000453978687, 0.999954602]) #     it is definitely a CAT !

А потом сравните со стандартной нормализацией

>>> std_norm([1,2])                      # blurry image of a ferret
[0.3333333333333333, 0.6666666666666666] #     it is a cat perhaps !?
>>> std_norm([10,20])                    # crisp image of a cat
[0.3333333333333333, 0.6666666666666666] #     it is a cat perhaps !?
person Piotr Czapla    schedule 19.07.2017
comment
Не уверен, почему этот ответ получил наибольшее количество голосов. Почему [1,2] соответствует размытому изображению, а [10,20] соответствует более резкому изображению? Это просто вопрос масштабирования, и оба случая по сути одинаковы. Во всяком случае, похоже, что это поддерживает стандартную нормализацию, которая правильно считает два случая эквивалентными. - person user118967; 05.06.2019
comment
Когда значения уже гарантированно находятся в [0, 1], есть ли еще какое-то преимущество использования softmax вместо простого деления на сумму? - person Martin Thoma; 08.06.2020
comment
@MartinThoma значения были произвольными, просто чтобы помочь проследить математику, если ваша сеть имеет некоторую нормализацию (например, пакетную норму) и выходные значения в [0,1], тогда с помощью softmax вы все равно можете определить, когда ваши выходы возбуждаются. Рассмотрим [0,001, 0,002] (0,49975, 0,50025) против [0,5, 1,0] (0,37, 0,62) - person Piotr Czapla; 28.07.2020
comment
@ user118967, Хороший вопрос, есть ряд причин, по которым сеть должна выводить большие числа, когда более уверенно. Я постараюсь найти простой ответ позже. А пока подумайте, как фильтры свертки + повторное обнаружение функции манифеста с большими активациями, как максимальное объединение помогает сохранить максимальную активацию, и, что наиболее важно, SGD + кросс-энтропийная потеря (softmax) учит сеть выводить большую активацию, когда это более надежно (как softmax поощряет это). - person Piotr Czapla; 28.07.2020
comment
Но разве четкое изображение не наберет [1,20]? - person Herbert; 04.11.2020
comment
@herbert, в зависимости от картинки, цифры составлены. Вы видели это: smartcdn.prod.postmedia.digital/canoe/wp-content/uploads/2020/ - person Piotr Czapla; 31.03.2021

У меня был этот вопрос несколько месяцев. Похоже, мы просто угадали softmax как функцию вывода, а затем интерпретировали ввод softmax как логарифмические вероятности. Как вы сказали, почему бы просто не нормализовать все результаты, разделив их на их сумму? Я нашел ответ в книге по глубокому обучению Гудфеллоу, Бенжио и Курвиль (2016) в разделе 6.2.2.

Скажем, наш последний скрытый слой дает нам z в качестве активации. Тогда softmax определяется как

Очень краткое объяснение

Эксперимент в функции softmax грубо сокращает журнал потерь кросс-энтропии, в результате чего потери становятся примерно линейными по z_i. Это приводит к примерно постоянному градиенту, когда модель ошибочна, что позволяет ей быстро исправляться. Таким образом, неправильный насыщенный softmax не вызывает исчезающего градиента.

Краткое объяснение

Самый популярный метод обучения нейронной сети - это оценка максимального правдоподобия. Мы оцениваем параметры theta таким образом, чтобы максимизировать вероятность обучающих данных (размера m). Поскольку вероятность всего набора обучающих данных является продуктом вероятностей каждой выборки, проще максимизировать логарифмическую вероятность набора данных и, следовательно, сумму логарифмической вероятности каждой проиндексированной выборки. автор: k:

Теперь мы сосредоточимся только на softmax здесь с уже заданным z, поэтому мы можем заменить

где i - правильный класс k-го образца. Теперь мы видим, что когда мы логарифмируем softmax, чтобы вычислить логарифмическую вероятность выборки, мы получаем:

, что для больших различий в z примерно приближается к

Сначала мы видим здесь линейную составляющую z_i. Во-вторых, мы можем изучить поведение max (z) для двух случаев:

  1. Если модель верна, то max (z) будет z_i. Таким образом, логарифмическая асимптота правдоподобия равна нулю (то есть вероятность равна 1) с растущей разницей между z_i и другими записями в z.
  2. Если модель неверна, то max (z) будет другим z_j> z_i. Таким образом, добавление z_i не отменяет полностью -z_j, и логарифмическая вероятность составляет примерно (z_i - z_j). Это ясно говорит модели, что делать для увеличения логарифмической вероятности: увеличивать z_i и уменьшать z_j.

Мы видим, что в общей логарифмической вероятности будут преобладать выборки, модель которых неверна. Кроме того, даже если модель действительно неверна, что приводит к насыщенному softmax, функция потерь не насыщается. Он примерно линейен по z_j, что означает, что у нас примерно постоянный градиент. Это позволяет модели быстро исправляться. Обратите внимание, что это не относится, например, к среднеквадратической ошибке.

Длинное объяснение

Если softmax по-прежнему кажется вам произвольным выбором, вы можете взглянуть на обоснование использования сигмоида в логистической регрессии:

Почему сигмоидальная функция вместо чего-либо еще?

Softmax - это обобщение сигмоида для мультиклассовых задач, обоснованное аналогичным образом.

person Kilian Batzner    schedule 11.12.2017
comment
Привет, не могли бы вы объяснить это утверждение и как вы смогли приблизиться? , что для больших различий в z примерно приближается к - person London guy; 14.02.2020
comment
@Londonguy. Пусть M = max (z_j), тогда z_i - log∑exp (z_j) = z_i - log∑exp (M + z_j - M) = z_i - log∑ (exp (M) * exp (z_j - M)) = z_i - M + log∑exp (z_j - M). Когда есть большие различия в z, мы можем аппроксимировать exp (z_j - M) ≈ 0 для z_j ≠ M. Итак, z_i - M + log∑exp (z_j - M) ≈ z_i - M + log (exp (M - M) ) = z_i - M - person amirassov; 03.01.2021

Я нашел здесь очень хорошее объяснение: CS231n: сверточные нейронные сети для визуального распознавания.

На первый взгляд алгоритм softmax кажется простой нелинейной (мы распространяем данные экспоненциально) нормализацией. Однако это еще не все.

В частности, есть несколько разных представлений (та же ссылка, что и выше):

  1. Теория информации - с точки зрения теории информации функцию softmax можно рассматривать как попытку минимизировать перекрестную энтропию между предсказаниями и истиной.

  2. Вероятностный взгляд - с этой точки зрения мы фактически смотрим на логарифмические вероятности, поэтому, когда мы выполняем возведение в степень, мы получаем необработанные вероятности. В этом случае уравнение softmax находит MLE (оценка максимального правдоподобия)

Таким образом, даже если уравнение softmax кажется произвольным, это НЕ. На самом деле это довольно принципиальный способ нормализации классификаций для минимизации перекрестной энтропии / отрицательного правдоподобия между предсказаниями и истиной.

person Brett    schedule 09.06.2015
comment
Чтобы добавить к предыдущим комментариям, производная функции softmax - это просто softmax (1-softmax) - person Rouzbeh; 13.10.2016
comment
Я понимаю причины использования потери кросс-энтропии, но как это связано с softmax? Вы сказали, что функцию softmax можно рассматривать как попытку минимизировать перекрестную энтропию между предсказаниями и истиной. Предположим, я бы использовал стандартную / линейную нормализацию, но все же использовал бы потерю кросс-энтропии. Тогда я бы также попытался минимизировать кросс-энтропию. Итак, как softmax связан с кросс-энтропией , кроме численных преимуществ? - person Kilian Batzner; 19.01.2017
comment
Что касается вероятностного взгляда: что побуждает рассматривать логарифмические вероятности? Рассуждения, кажется, немного похожи на то, что мы используем e ^ x в softmax, потому что мы интерпретируем x как логарифмические вероятности. По тем же причинам мы могли бы сказать, что мы используем e ^ e ^ e ^ x в softmax, потому что мы интерпретируем x как логарифмически логарифмические вероятности (здесь, конечно, преувеличивая). Я получаю численные преимущества softmax, но какова теоретическая мотивация его использования? - person Kilian Batzner; 19.01.2017
comment
@KilianBatzner Если выход нейрона представляет собой логарифмическую вероятность, то суммирование выходных данных многих нейронов является умножением их вероятностей. Это обычно полезно, чем сумма вероятностей. - person alltom; 27.07.2017
comment
@KilianBatzner Если ваши функции происходят из разных гауссовских кластеров (по кластеру для каждого класса), вы можете получить идеальный классификатор (логистическая регрессия). Есть некоторые дополнительные условия, но, по сути, вы можете обосновать / вывести softmax и logits с предположением, что вы хотите разделить гауссовские кластеры. - person maxy; 12.05.2019

Значения q_i являются неограниченными оценками, иногда интерпретируемыми как логарифмическая вероятность. Согласно этой интерпретации, чтобы восстановить необработанные значения вероятности, вы должны возвести их в степень.

Одна из причин, по которой статистические алгоритмы часто используют функции потерь логарифма правдоподобия, заключается в том, что они более численно стабильны: произведение вероятностей может быть представлено в виде очень маленького числа с плавающей запятой. Используя функцию потерь логарифма правдоподобия, произведение вероятностей становится суммой.

Другая причина заключается в том, что логарифмическая вероятность возникает естественным образом при выводе оценок для случайных величин, которые, как предполагается, выводятся из многомерных гауссовских распределений. См., Например, оценку максимального правдоподобия (ML) и то, как она связана с методом наименьших квадратов.

person nojka_kruva    schedule 27.04.2014
comment
q_i неявно представляют логарифмическую вероятность. мы явно предполагаем, что они это делают, только когда мы используем softmax. - person Tom; 10.06.2015

Мы рассматриваем проблему мультиклассовой классификации. То есть прогнозируемая переменная y может принимать одну из k категорий, где k > 2. В теории вероятностей это обычно моделируется полиномиальным распределением. Мультиномиальное распределение является членом экспоненциального семейного распределения. Мы можем восстановить вероятность P(k=?|x), используя свойства экспоненциальных семейных распределений, она совпадает с формулой softmax.

Если вы считаете, что проблема может быть смоделирована другим дистрибутивом, отличным от полиномиального, вы можете прийти к заключению, отличному от softmax.

Для получения дополнительной информации и формального вывода см. лекции CS229 (9.3 Регрессия Softmax) .

Кроме того, с softmax обычно используется полезный трюк: softmax (x) = softmax (x + c), softmax инвариантен к постоянным смещениям во входных данных.

введите описание изображения herse

person GabrielChu    schedule 12.06.2017
comment
Как он работает как функция активации, поскольку он возвращает одно и то же значение для «x» и «x + c»? - person Suresh Pokharel; 02.05.2020
comment
Строго говоря, softmax не является функцией активации. Функция активации - это поэлементная операция, когда тензор поэлементно выполняет нелинейную операцию для создания другого тензора. Но softmax - это векторная операция, она создает нормализованный вектор, между каждым элементом есть внутренние зависимости. - person GabrielChu; 03.05.2020

Выбор функции softmax кажется как-то произвольным, так как есть много других возможных нормализующих функций. Таким образом, неясно, почему потеря log-softmax будет работать лучше, чем другие альтернативы потерь.

Из «Исследования альтернатив Softmax, относящихся к семейству сферических потерь» https://arxiv.org/abs/1511.05042

Авторы исследовали некоторые другие функции, среди которых расширение Тейлора exp и так называемый сферический softmax, и обнаружили, что иногда они могут работать лучше, чем обычно softmax.

person Roman Kh    schedule 07.11.2017

Я думаю, что одна из причин может заключаться в том, чтобы иметь дело с отрицательными числами и делением на ноль, поскольку exp (x) всегда будет положительным и больше нуля.

Например, для a = [-2, -1, 1, 2] сумма будет равна 0, мы можем использовать softmax, чтобы избежать деления на ноль.

person torayeff    schedule 12.03.2018
comment
Обычно вы вычитаете минимум, а затем делите на максимум / сумму. В вашем случае это сделало бы [0, 1, 3, 4] делением. - person ubershmekel; 28.01.2019
comment
@ubershmekel Здесь возникает проблема, заключающаяся в том, что классу с наименьшей оценкой всегда будет присвоена вероятность 0. - person Alessandro Power; 28.02.2020

Предположим, мы изменили функцию softmax так, чтобы активации вывода задавались  введите описание изображения здесь

где c - положительная константа. Обратите внимание, что c=1 соответствует стандартной функции softmax. Но если мы используем другое значение c, мы получим другую функцию, которая, тем не менее, качественно очень похожа на softmax. В частности, покажите, что выходные активации образуют распределение вероятностей, как и для обычного softmax. Предположим, мы позволяем c становиться большим, то есть c→∞. Какое предельное значение для активации выходов a^L_j? После решения этой проблемы вам должно быть ясно, почему мы думаем о функции c=1 как о «смягченной» версии функции-максимума. Отсюда и возник термин «softmax». Вы можете следить за деталями из этого источника (уравнение 83).

person OmG    schedule 16.02.2017
comment
Для меня идея смягченной версии максимальной функции - лучший простой способ оправдать использование softmax. - person tashuhka; 12.05.2018

Добавляя к ответу Петра Чапла, чем больше входные значения, тем больше вероятность для максимального входа, для той же пропорции и по сравнению с другими входами:

введите здесь описание изображения

person negas    schedule 15.01.2019

Хотя это действительно несколько произвольных, softmax имеет такие желательные свойства, как:

  • быть легко дифференцируемым (df/dx = f*(1-f))
  • при использовании в качестве выходного уровня для задачи классификации входящие оценки интерпретируются как log-odds
person iacob    schedule 29.04.2021