Machine Learning

Если бы вы жили на 10-м этаже, вы бы поднимались по лестнице или пользовались лифтом? Цель в обоих случаях одна: вы хотите вернуться домой после долгого рабочего дня. 

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

Давайте возьмём другой пример.

Скажем, вам нужно добраться на работу. На машине это займёт 10 минут без пробок, а пешком — 50 минут.

Вы можете выбрать или поездку на машине, или прогулку пешком. Вы хотите попасть в тот же пункт назначения, но вы хотите сэкономить время. На работу вы ходите каждый рабочий день, а не один раз в жизни. В результате вам нужно регулярно принимать это решение.

Вы хотите иметь возможность добираться до работы быстрее, чтобы больше времени проводить с семьёй и друзьями, начать сторонний проект, почитать книгу, посмотреть лекции, которые давно хотели посмотреть. 

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

Примеры преимуществ использования логарифма

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

Скажем, ваша функция выглядит так:

Возьмём первую производную, получим следующее выражение:

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

Получим следующее выражение:

Как видите, оно стало довольно громоздким.

Первая производная логарифма той же функции значительно проще:

Вторая производная тоже проще:

Теперь, когда вы фактически используете логарифм, вам не нужно использовать ту же самую функцию. 

Вам не нужно следовать по одному и тому же маршруту при езде на автомобиле и прогулке пешком. У вас есть автомобильные дороги, отделённые от пешеходных. Но вам в общем-то всё равно. 

И дело не в том, что вы сильно заинтересованы во всех этих магазинчиках по пути. Вы уже перекусили дома и хотите попасть прямо на работу, следовательно для вас они не имеют значения. 

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

Вы берёте производную и функции, и логарифма и получаете минимизаторы функции потерь.

Математическое доказательство

Давайте докажем, что параметр, минимизирующий функцию, равен параметру, минимизирующему логарифм этой функции.

Предположим, что точка w* — это локальный минимум g(w) = log f(w), что означает, что для любого параметра w в близкой окрестности w* мы имеем g(w*)≤ g(w). Теперь, поскольку e,обычно также обозначаемая как exp, сохраняет монотонность, получим:

Другими словами, w* также является минимумом функции f, что мы и хотели доказать. 

Значит, когда мы применяем логарифм к любой функции, мы сохраняем минимум или максимум (то есть параметры, минимизирующие или максимизирующие функцию, но не фактическое значение функции). 

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

Как мы видели в примерах выше, это приводит к упрощению вычислений и повышению стабильности.

Если вам сложно это понять, давайте проиллюстрируем графиками.

Возьмём следующую функцию:

Часть её графика выглядит так:

Её логарифм:

Часть его графика выглядит так:

Как видите, в обоих случаях максимум функции находится в точке x = 0.3.

Да, мы не получаем ту же функцию, но у нас есть те же критические точки, помогающие минимизировать функцию потерь. 

Читайте также:


Перевод статьи Fatos Morina: Why Logarithms Are So Important In Machine Learning

Предыдущая статьяVar, Let, Const - в чем разница?
Следующая статьяМой любимый вопрос на собеседовании для веб-разработчиков: «Понимаете ли вы, что такое массивы?»