LogSumExp трюк | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Разработчик чат-ботов и приложений для виртуальных ассистентов
-15%
PHP Developer. Professional Алгоритмы и структуры данных Scala-разработчик PHP Developer. Basic C# Developer. Professional
-23%
C# ASP.NET Core разработчик Python Developer. Basic Python Developer. Professional Cloud Solution Architecture Специализация iOS
-25%
HTML/CSS Android Developer. Professional React.js Developer Unity Game Developer. Professional NoSQL Java Developer. Professional Highload Architect C++ Developer. Basic Web-разработчик на Python Unity Game Developer. Basic Интенсив «Оптимизация в Java» Супер-практикум по использованию и настройке GIT Symfony Framework Java Developer. Basic Супер-интенсив "Tarantool"
Инфраструктура
MongoDB
-30%
Разработчик чат-ботов и приложений для виртуальных ассистентов
-15%
Administrator Linux. Professional
-26%
Network engineer Administrator Linux. Advanced Специализация Administrator Linux
-25%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-27%
NoSQL Инфраструктурная платформа на основе Kubernetes Highload Architect Мониторинг и логирование: Zabbix, Prometheus, ELK Супер-практикум по использованию и настройке GIT Administrator Linux.Basic Экспресс-курс «IaC Ansible» Экспресс-курс по управлению миграциями (DBVC) Экспресс-курс "Версионирование и командная работа с помощью Git" Network engineer. Basic Основы Windows Server
Корпоративные курсы
Безопасность веб-приложений MongoDB
-30%
Разработчик чат-ботов и приложений для виртуальных ассистентов
-15%
Agile Project Manager Руководитель поддержки пользователей в IT
-10%
Промышленный ML на больших данных Cloud Solution Architecture Внедрение и работа в DevSecOps Spark Developer Reverse-Engineering IT-Recruiter Machine Learning. Professional Интенсив «Оптимизация в Java» Супер-практикум по использованию и настройке GIT Экcпресс-курс «ELK» Enterprise Architect Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» Экспресс-курс «Введение в непрерывную поставку на базе Docker» Вебинар CERTIPORT
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

LogSumExp трюк

DS_Deep_8.08_site.png

Очень часто в задачах машинного обучения у нас следующая задача. Дан массив чисел: Снимок экрана 2018-08-01 в 16.11.16.pngНадо посчитать величину: Снимок экрана 2018-08-01 в 16.11.40.pngНеобходимость подсчёта такого выражения возникает например в EM-алгоритме на E-шаге, когда мы считаем апостериорное распределение на скрытые переменные. А числа Снимок экрана 2018-08-01 в 16.11.16.pngпредставляют логарифм от плотности вероятности и являются большими по модулю отрицательными значениями.

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

Например:

import numpy as np

a = np.array([-1000, -2000, -2000])
print(np.log(np.sum(np.exp(a))))
>>> -inf

Существует достаточно простой и элегантный способ обойти эту проблему

Обозначим Снимок экрана 2018-08-01 в 16.14.59.pngи запишем искомое выражение:Снимок экрана 2018-08-01 в 16.15.29.pngЗаметим, что в правой части под знаком логарифма уже никак не может стоять ноль, так как по крайней мере одно слагаемое суммы равно 1, и мы можем корректно посчитать данное выражение.

Данная функция реализована, например в пакете scipy:

import numpy as np
from scipy.misc import logsumexp

a = np.array([-1000, -2000, -2000])
b = a.max()
print(b  + np.log(np.sum(np.exp(a - b)))
>>> -1000

print(logsumexp(a))
>>> -1000

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

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
1 комментарий
Комментарий удален
Для комментирования необходимо авторизоваться
🔥 Выгодные предложения
Подборка курсов, которые можно приобрести по выгодной цене только до конца июля!