🔴 Сложный ⏱️ 50 минут

Десятичный и натуральный логарифм

📋 Содержание урока

Десятичный и натуральный логарифм 🔟

Открой исходники любой библиотеки машинного обучения — PyTorch, TensorFlow, scikit-learn — и найди там функцию потерь для классификации. Ты увидишь torch.log, np.log, tf.math.log. Ни в одной из них нет десятки в основании. А теперь открой техническую документацию на усилитель, шкалу кислотности воды или график сейсмической активности — и там везде будет десятичный логарифм, честные «порядки величины». Два разных мира, два разных основания, и почти никогда они не пересекаются.

В предыдущих уроках мы разобрали, что логарифм $\log_a b$ можно построить по любому основанию $a > 0$, $a \neq 1$. Оснований бесконечно много: можно взять $\log_3$, $\log_{7{,}5}$, $\log_{\pi}$ — математика не возражает. Но в реальной жизни, в учебниках, в калькуляторах и в коде выжили ровно два основания: десятка и число $e$. У них даже есть собственные сокращённые обозначения — $\lg$ и $\ln$ — которых не удостоилось больше ни одно основание. Это не случайность и не традиция ради традиции: за каждым из них стоит конкретная причина, из-за которой именно оно оказалось удобнее всех остальных.

Здесь есть и практическая ловушка, на которой спотыкаются даже опытные разработчики. В математической записи $\log x$ без индекса чаще всего означает десятичный логарифм, в англоязычной литературе по информатике — иногда двоичный, а в коде np.log(x) — это натуральный логарифм, $\ln x$. Перепутал — и твоя функция потерь занижена ровно в $2{,}303$ раза, модель вроде бы обучается, метрики вроде бы считаются, а числа в логах не сходятся ни с одной статьёй. Отладить такое сложно именно потому, что ничего не падает.

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

🎯 Ты узнаешь:

  • Что такое $\lg x$ и $\ln x$, откуда взялись именно эти два основания и почему они победили остальные
  • Как работает формула перехода к новому основанию и почему $\ln x = \dfrac{\lg x}{\lg e} = \lg x \cdot \ln 10$
  • Что такое характеристика и мантисса десятичного логарифма и как по ним считать количество цифр в числе вроде $2^{1000}$
  • Как пользоваться приближёнными значениями $\lg 2 \approx 0{,}301$ и $\ln 10 \approx 2{,}303$ без калькулятора
  • Почему в ML логарифм натуральный (log-loss, кросс-энтропия, log-likelihood), а в технике — десятичный (децибелы, pH, log-scale)

История: откуда это взялось? 📜

Первым был Джон Непер — шотландский барон, богослов и математик-любитель, который в 1614 году опубликовал «Mirifici Logarithmorum Canonis Descriptio». Его логарифмы, вопреки распространённому мифу, не были ни десятичными, ни натуральными: Непер строил таблицы для тригонометрических задач навигации, и его «логарифм» был устроен так, что $\text{Nap}\log(10^7) = 0$, а значения убывали с ростом аргумента. Основание, если его вытащить из конструкции, оказывалось примерно $(1 - 10^{-7})^{10^7} \approx 1/e$ — то есть Непер вплотную подошёл к числу $e$, даже не подозревая о его существовании. Он решал инженерную задачу: превратить умножение шестизначных чисел в сложение, чтобы астроном не тратил на одно вычисление половину рабочего дня.

Идею десятичного основания принёс Генри Бриггс, профессор геометрии из Лондона. В 1615 году он приехал к Неперу в Эдинбург, и они вдвоём пришли к выводу, что таблицы будут в разы удобнее, если положить $\log 1 = 0$ и $\log 10 = 1$. Логика проста и до сих пор актуальна: мы считаем в десятичной позиционной системе, и при таком основании перенос запятой на разряд меняет логарифм ровно на единицу. В 1624 году Бриггс выпустил «Arithmetica Logarithmica» — таблицы десятичных логарифмов чисел от 1 до 20 000 и от 90 000 до 100 000 с точностью до четырнадцати знаков после запятой, посчитанные вручную. Пропуск в середине позже закрыли голландец Адриан Влакк и другие. Так десятичный логарифм получил имя «бригсова» и на три с половиной века стал главным вычислительным инструментом человечества — вплоть до логарифмической линейки, на которой считали траектории «Аполлонов».

Натуральный логарифм появился с другой стороны — из задач о площадях и о непрерывном росте. В 1640-х Грегуар де Сен-Венсан и Альфонс Антонио де Сараса заметили: площадь под гиперболой $y = 1/x$ обладает ровно логарифмическим свойством — площадь от $1$ до $ab$ равна сумме площадей от $1$ до $a$ и от $1$ до $b$. Так возник «гиперболический логарифм», у которого основание получалось само собой, без всякого произвола — то самое число $e \approx 2{,}718$, с которым мы познакомились в уроке 112. Окончательный вид всему этому придал Леонард Эйлер: в «Introductio in analysin infinitorum» (1748) он ввёл обозначение $e$, показал связь $e^x$ и логарифма и, по сути, объяснил, почему это основание — «естественное».

А дальше история разошлась на два рукава, и оба живы сегодня. Десятичный логарифм ушёл в измерительные шкалы: децибелы (Bell Labs, 1920-е), водородный показатель pH (Сёрен Сёренсен, 1909), шкала Рихтера (1935), звёздные величины. Натуральный логарифм ушёл в теорию: там, где что-то растёт или затухает непрерывно, где встречается $e^x$, где считаются вероятности. Когда в 1948 году Клод Шеннон определил энтропию, он выбрал двоичный логарифм и получил биты — но в машинном обучении, где под капотом везде экспоненты softmax и сигмоиды, победил $\ln$. Так что np.log в твоём коде — прямой потомок гиперболы Сен-Венсана, а шкала громкости в наушниках — потомок таблиц Бриггса.


Два основания, которые победили

Интуиция: основание — это «размер шага»

Представь, что логарифм — это способ измерять числа не линейкой, а шагами умножения. Вопрос «чему равен $\log_a x$» на человеческом языке звучит так: «сколько раз надо умножить единицу на $a$, чтобы дойти до $x$». Основание — это размер одного шага.

Если взять шаг $a = 10$, то каждый шаг — это «в десять раз больше». Один шаг — от 1 к 10, два шага — к 100, три — к 1000. Такой шаг идеально ложится на нашу систему записи чисел: количество шагов почти буквально равно количеству нулей. Поэтому $\lg$ отвечает на вопрос «какого порядка это число».

Если взять шаг $a = e \approx 2{,}718$, шкала выглядит странно — 1, 2,718, 7,389, 20,09... Никакой красоты в записи. Зато у этого основания есть другое свойство: $e$ — это результат непрерывного роста на 100% за единицу времени (урок 112). Всё, что растёт или затухает само по себе — вклад с непрерывной капитализацией, радиоактивный распад, остывание кофе, экспоненциальное сглаживание метрик, — описывается через $e^x$. А логарифм по основанию $e$ «снимает» эту экспоненту начисто, без лишних множителей: $\ln(e^x) = x$. Если бы ты взял десятичный логарифм от $e^x$, вылез бы паразитный коэффициент: $\lg(e^x) = x \lg e = 0{,}4343x$.

Вот вся суть выбора в одной фразе: десятка удобна для записи чисел, а $e$ удобно для описания процессов.

Определение: Логарифм по основанию $10$ называется десятичным и обозначается $\lg x$:

$$\lg x = \log_{10} x, \qquad x > 0$$

Логарифм по основанию $e$ (где $e = 2{,}718281828\ldots$) называется натуральным и обозначается $\ln x$:

$$\ln x = \log_e x, \qquad x > 0$$

Обозначение $\ln$ — это сокращение от латинского logarithmus naturalis, «натуральный логарифм». Обозначение $\lg$ — от logarithmus decimalis, но исторически прижилось просто как «log с десяткой».

Все свойства из урока 117 работают для них без изменений — это обычные логарифмы, просто с зафиксированным основанием:

  • $\lg(MN) = \lg M + \lg N$ и $\ln(MN) = \ln M + \ln N$
  • $\lg\dfrac{M}{N} = \lg M - \lg N$ и $\ln\dfrac{M}{N} = \ln M - \ln N$
  • $\lg(M^n) = n\lg M$ и $\ln(M^n) = n\ln M$
  • $\lg 1 = 0$, $\ln 1 = 0$
  • $\lg 10 = 1$, $\ln e = 1$
  • $10^{\lg x} = x$, $e^{\ln x} = x$ (для $x > 0$)

Последняя пара — основное логарифмическое тождество для наших двух оснований. Именно она превращает $\lg$ и $\ln$ в рабочие инструменты: любое положительное число можно записать как $10$ или $e$ в какой-то степени.

Опорные значения, которые стоит знать наизусть:

Выражение Значение Почему
$\lg 1$ $0$ $10^0 = 1$
$\lg 10$ $1$ $10^1 = 10$
$\lg 100$ $2$ $10^2 = 100$
$\lg 0{,}1$ $-1$ $10^{-1} = 0{,}1$
$\lg 0{,}001$ $-3$ $10^{-3} = 0{,}001$
$\ln 1$ $0$ $e^0 = 1$
$\ln e$ $1$ $e^1 = e$
$\ln e^5$ $5$ $\ln(e^n) = n$
$\ln \dfrac{1}{e}$ $-1$ $e^{-1} = 1/e$

Примеры с разбором

Пример 1 (простой): вычисли $\lg 10000 + \ln e^3 - \lg 0{,}01$

Решение:

Разберём по шагам, каждое слагаемое отдельно.

Шаг 1. $\lg 10000$. Спрашиваем себя: в какую степень возвести 10, чтобы получить 10000? Считаем нули: $10000 = 10^4$, значит $\lg 10000 = 4$.

Шаг 2. $\ln e^3$. По свойству $\ln(e^n) = n$ сразу получаем $3$.

Шаг 3. $\lg 0{,}01$. Здесь $0{,}01 = \dfrac{1}{100} = 10^{-2}$, значит $\lg 0{,}01 = -2$.

Шаг 4. Собираем: $4 + 3 - (-2) = 4 + 3 + 2 = 9$.

Ответ: $9$


Пример 2 (средний): вычисли $\lg 5 + \lg 20$

Решение:

Ни $\lg 5$, ни $\lg 20$ по отдельности не являются «красивыми» числами: $\lg 5 \approx 0{,}699$, $\lg 20 \approx 1{,}301$. Считать их по отдельности — тупик. Но сумма логарифмов — это логарифм произведения.

Шаг 1. Применим свойство произведения:

$$\lg 5 + \lg 20 = \lg(5 \cdot 20) = \lg 100$$

Шаг 2. $100 = 10^2$, значит $\lg 100 = 2$.

Проверим наш ответ: $0{,}69897 + 1{,}30103 = 2{,}00000$ ✅ — сходится.

Ответ: $2$

📌 Общий приём: если в выражении с $\lg$ встречаются числа вида 2, 5, 4, 25, 20, 50 — почти наверняка их надо перемножить и собрать степень десятки.


Пример 3 (сложный): упрости $\dfrac{\ln 81}{\ln 3} + \lg 8 + \lg 125$

Решение:

Шаг 1. Разберёмся с дробью. $81 = 3^4$, поэтому $\ln 81 = \ln(3^4) = 4\ln 3$. Тогда

$$\frac{\ln 81}{\ln 3} = \frac{4\ln 3}{\ln 3} = 4$$

Обрати внимание: $\ln 3$ сократился, и нам ни разу не понадобилось знать его численное значение. Это типичная ситуация — натуральный логарифм часто выступает «промежуточной валютой», которая по дороге сокращается.

Шаг 2. Теперь $\lg 8 + \lg 125 = \lg(8 \cdot 125) = \lg 1000 = 3$.

Шаг 3. Складываем: $4 + 3 = 7$.

Ответ: $7$


Почему это важно

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

В коде это правило работает буквально. Если ты считаешь метрику, которая должна сравниваться со значениями из научной статьи по ML, — это $\ln$ (np.log). Если строишь график «ось X в порядках величины» — это $\lg$ (np.log10). Смешал — получишь численно другой результат при формально верной формуле.


Формула перехода к новому основанию

Интуиция: пересчёт из одних единиц в другие

Представь, что ты измеряешь одно и то же расстояние в километрах и в милях. Само расстояние не меняется — меняется только число, и связаны эти числа постоянным коэффициентом. С логарифмами ровно так же: $\lg x$ и $\ln x$ описывают одно и то же число $x$, просто «в разных единицах», и связаны они постоянным множителем.

Проверим эту мысль на конкретных числах. Возьмём $x = 100$: $\lg 100 = 2$, а $\ln 100 \approx 4{,}605$. Отношение: $4{,}605 / 2 = 2{,}303$. Возьмём $x = 1000$: $\lg 1000 = 3$, $\ln 1000 \approx 6{,}908$, отношение $6{,}908/3 = 2{,}303$. То же самое число! Это не совпадение — коэффициент один и тот же для любого $x$, и он равен $\ln 10$.

Определение (формула перехода к новому основанию): для любых допустимых оснований $a, c$ ($a, c > 0$, $a \neq 1$, $c \neq 1$) и любого $b > 0$

$$\log_a b = \frac{\log_c b}{\log_c a}$$

Мы доказывали это в уроке 117: если $\log_a b = x$, то $a^x = b$; логарифмируем обе части по основанию $c$, получаем $x \log_c a = \log_c b$, откуда и следует формула. Сейчас нас интересуют её частные случаи для наших двух оснований.

Мост между $\lg$ и $\ln$. Подставим $a = e$, $c = 10$:

$$\ln x = \frac{\lg x}{\lg e}$$

и симметрично, при $a = 10$, $c = e$:

$$\lg x = \frac{\ln x}{\ln 10}$$

Два числа, которые здесь появились, — это «курс обмена» между шкалами:

$$\lg e \approx 0{,}434294, \qquad \ln 10 \approx 2{,}302585$$

Они взаимно обратны: $\lg e \cdot \ln 10 = 1$, то есть $\dfrac{1}{2{,}302585} = 0{,}434294$. Это частный случай общего следствия $\log_a b \cdot \log_b a = 1$.

Отсюда сразу два самых практичных вида формулы:

$$\boxed{\ \ln x = \lg x \cdot \ln 10 \approx 2{,}303 \cdot \lg x\ }$$$$\boxed{\ \lg x = \ln x \cdot \lg e \approx 0{,}4343 \cdot \ln x\ }$$

Коэффициент $\lg e \approx 0{,}4343$ в старых учебниках и справочниках называли модулем перехода и обозначали буквой $M$. В таблицах Бриггса и в описаниях логарифмической линейки он встречается постоянно: инженеру нужно было уметь быстро прыгать между «естественной» физикой и «десятичными» таблицами.

Ещё три полезных частных случая:

  • $\log_a b = \dfrac{1}{\log_b a}$ — переворот основания и аргумента
  • $\log_2 x = \dfrac{\lg x}{\lg 2} = \dfrac{\ln x}{\ln 2}$ — двоичный логарифм через любой доступный (пригодится для энтропии в битах)
  • $\log_{a^n} b = \dfrac{1}{n}\log_a b$ — степень в основании выносится с переворотом

Примеры с разбором

Пример 4 (простой): вырази $\log_2 7$ через десятичные логарифмы и оцени численно

Решение:

Шаг 1. По формуле перехода с $c = 10$:

$$\log_2 7 = \frac{\lg 7}{\lg 2}$$

Шаг 2. Подставим табличные значения $\lg 7 \approx 0{,}8451$ и $\lg 2 \approx 0{,}3010$:

$$\log_2 7 \approx \frac{0{,}8451}{0{,}3010} \approx 2{,}807$$

Проверим наш ответ: $2^2 = 4$, $2^3 = 8$, значит $\log_2 7$ обязан лежать между 2 и 3, причём ближе к 3, потому что 7 ближе к 8, чем к 4. Значение $2{,}807$ выглядит правдоподобно ✅

Ответ: $\log_2 7 = \dfrac{\lg 7}{\lg 2} \approx 2{,}807$


Пример 5 (средний): найди $\ln 5$, зная, что $\lg 5 \approx 0{,}699$

Решение:

Шаг 1. Используем мост $\ln x = \lg x \cdot \ln 10$:

$$\ln 5 = \lg 5 \cdot \ln 10 \approx 0{,}699 \cdot 2{,}303$$

Шаг 2. Перемножим: $0{,}699 \cdot 2{,}303 \approx 1{,}6098$.

Шаг 3. Точное значение $\ln 5 = 1{,}609438\ldots$ — расхождение в четвёртом знаке возникло только из-за округления $\lg 5$ до трёх знаков. Это нормальная точность для оценок «в уме».

Ответ: $\ln 5 \approx 1{,}61$

📌 Проверка на здравый смысл: $e^{1{,}61}$ должно быть около 5. Действительно, $e \approx 2{,}72$, $e^2 \approx 7{,}39$, и 5 лежит между ними — значит показатель между 1 и 2. ✅


Пример 6 (сложный): докажи тождество $\ln x = \dfrac{\lg x}{\lg e}$ и покажи, что оно эквивалентно записи $\ln x = \lg x \cdot \ln 10$

Решение:

Шаг 1. Обозначим $t = \ln x$. По определению натурального логарифма это значит

$$e^t = x$$

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

$$\lg(e^t) = \lg x$$

Шаг 3. Слева применим свойство логарифма степени: $\lg(e^t) = t \lg e$. Получаем

$$t \lg e = \lg x$$

Шаг 4. Число $\lg e \approx 0{,}4343 \neq 0$, поэтому на него можно разделить:

$$t = \frac{\lg x}{\lg e}, \qquad \text{то есть} \qquad \ln x = \frac{\lg x}{\lg e}$$

Шаг 5. Теперь покажем эквивалентность второй записи. Из следствия $\log_a b \cdot \log_b a = 1$ при $a = 10$, $b = e$ имеем $\lg e \cdot \ln 10 = 1$, откуда $\dfrac{1}{\lg e} = \ln 10$. Подставляем:

$$\ln x = \lg x \cdot \frac{1}{\lg e} = \lg x \cdot \ln 10$$

Шаг 6. Численная проверка на $x = 1000$: $\lg 1000 = 3$, $3 \cdot 2{,}302585 = 6{,}907755$, а $\ln 1000 = 6{,}907755\ldots$ ✅

Ответ: тождество доказано; делить на $\lg e \approx 0{,}4343$ и умножать на $\ln 10 \approx 2{,}303$ — это одно и то же действие.


Почему это важно

Формула перехода — это универсальный переходник. Инженерный калькулятор и почти любой язык программирования дают только две кнопки: log (это $\ln$) и log10. Если тебе нужен $\log_2$, $\log_5$ или $\log_{1{,}05}$ — ты обязан пересчитать через формулу перехода. Именно так устроена, например, функция math.log(x, base) в Python: внутри она честно делит один логарифм на другой.

В ML это встречается постоянно. Энтропия в теории информации считается в битах — это $\log_2$. Кросс-энтропия в PyTorch считается в натах — это $\ln$. Чтобы сравнить перплексию языковой модели из статьи (часто в битах на символ) со значением из своих логов (в натах), нужно поделить на $\ln 2 \approx 0{,}693$ — тот же самый переход между основаниями. Половина «непонятных расхождений» между статьёй и собственным экспериментом объясняется именно этим множителем.


Порядок числа: десятичный логарифм как «счётчик разрядов»

Интуиция: логарифм считает нули

Посмотри на простую закономерность:

$x$ $\lg x$ Цифр в целой части
$1$ $0$ 1
$10$ $1$ 2
$100$ $2$ 3
$1000$ $3$ 4
$10^{9}$ $9$ 10

Для круглых чисел всё очевидно: $\lg x$ — это количество нулей. А что с «некруглыми»? Возьмём $x = 456$. Число зажато между $100$ и $1000$:

$$100 < 456 < 1000 \ \Longrightarrow\ \lg 100 < \lg 456 < \lg 1000 \ \Longrightarrow\ 2 < \lg 456 < 3$$

(Переход от неравенства для чисел к неравенству для логарифмов законен, потому что $\lg$ — возрастающая функция: большему числу соответствует больший логарифм. Подробно свойства логарифмической функции разберём в уроке 119, а пока достаточно того, что мы уже знаем про показательную функцию из урока 113.)

Значит $\lg 456 = 2 + \text{что-то от 0 до 1}$. Точное значение $\lg 456 \approx 2{,}659$. И вот главное наблюдение: целая часть десятичного логарифма говорит, сколько разрядов в числе, а дробная — какие именно там цифры.

Эти две части настолько важны, что у них есть собственные имена.

Определение: Пусть $x > 0$. Представим $\lg x$ в виде суммы целого числа $k$ и дробной части $m$, где $0 \leqslant m < 1$:

$$\lg x = k + m$$

Целое число $k = [\lg x]$ называется характеристикой десятичного логарифма, а число $m = \{\lg x\}$ — его мантиссой.

Ключевое свойство, ради которого всё это придумывали:

  • Характеристика отвечает за положение десятичной запятой (порядок числа)
  • Мантисса зависит только от последовательности значащих цифр и не меняется при переносе запятой

Убедимся: $\lg 4{,}56 \approx 0{,}659$, $\lg 45{,}6 \approx 1{,}659$, $\lg 456 \approx 2{,}659$, $\lg 4560 \approx 3{,}659$. Мантисса одна и та же — $0{,}659$! Меняется только характеристика. Именно поэтому в таблицах Бриггса печатали только мантиссы: одна строка «456 → 65896» обслуживала сразу и 4,56, и 456, и 4 560 000. Экономия бумаги в бесконечное число раз.

Формула порядка. Если $x \geqslant 1$ и характеристика $\lg x$ равна $k$, то

$$10^k \leqslant x < 10^{k+1}$$

то есть в целой части числа $x$ ровно $k + 1$ цифра.

Осторожно с числами меньше единицы. Для $x < 1$ логарифм отрицателен, и характеристика — это по-прежнему целая часть в смысле «наибольшее целое, не превосходящее», а мантисса остаётся неотрицательной. Например, $\lg 0{,}00456 \approx -2{,}341$. Записываем это как

$$-2{,}341 = -3 + 0{,}659$$

Характеристика равна $-3$ (а не $-2$!), мантисса — те же самые $0{,}659$. В старых учебниках для этого была специальная запись $\overline{3},659$ с чертой над отрицательной характеристикой — черта означала, что минус относится только к целой части.

Примеры с разбором

Пример 7 (простой): сколько цифр в числе $2^{100}$?

Решение:

Считать $2^{100}$ напрямую бессмысленно — это число длиной в три десятка знаков. Зато его логарифм считается в одну строчку.

Шаг 1. Возьмём десятичный логарифм и вынесем показатель:

$$\lg\left(2^{100}\right) = 100 \cdot \lg 2$$

Шаг 2. Подставим $\lg 2 \approx 0{,}30103$:

$$100 \cdot 0{,}30103 = 30{,}103$$

Шаг 3. Характеристика равна $30$, значит

$$10^{30} \leqslant 2^{100} < 10^{31}$$

Число $10^{30}$ — это единица с тридцатью нулями, в ней 31 цифра. Значит и в $2^{100}$ тоже 31 цифра.

Проверим наш ответ: $2^{100} = 1\,267\,650\,600\,228\,229\,401\,496\,703\,205\,376$ — пересчитай разряды, их ровно 31 ✅

Ответ: 31 цифра.


Пример 8 (средний): найди характеристику и мантиссу числа $\lg 0{,}0072$, если $\lg 7{,}2 \approx 0{,}857$

Решение:

Шаг 1. Представим число в стандартном виде (значащая часть от 1 до 10, умноженная на степень десятки):

$$0{,}0072 = 7{,}2 \cdot 10^{-3}$$

Шаг 2. Логарифм произведения:

$$\lg 0{,}0072 = \lg 7{,}2 + \lg 10^{-3} = 0{,}857 + (-3) = -2{,}143$$

Шаг 3. Теперь аккуратно вытащим характеристику. Нужно наибольшее целое, не превосходящее $-2{,}143$. Это $-3$ (потому что $-3 \leqslant -2{,}143 < -2$). Мантисса тогда

$$m = -2{,}143 - (-3) = 0{,}857$$

Шаг 4. Сверимся с интуицией: мантисса совпала с $\lg 7{,}2$ — ровно как и должно быть, ведь последовательность значащих цифр «7, 2» у чисел $0{,}0072$ и $7{,}2$ одинакова.

Ответ: характеристика $= -3$, мантисса $\approx 0{,}857$; $\lg 0{,}0072 \approx -2{,}143$

⚠️ Самая частая ошибка здесь — сказать «характеристика $-2$, мантисса $-0{,}143$». Мантисса по определению неотрицательна, отрицательной она быть не может.


Пример 9 (сложный): с какой цифры начинается число $2^{64}$?

Решение:

Тут работает именно мантисса — та часть, которую характеристика не видит.

Шаг 1. Считаем логарифм:

$$\lg\left(2^{64}\right) = 64 \cdot 0{,}30103 = 19{,}2659$$

Шаг 2. Разделяем на характеристику и мантиссу: $k = 19$, $m = 0{,}2659$.

Шаг 3. Значит

$$2^{64} = 10^{19{,}2659} = 10^{19} \cdot 10^{0{,}2659}$$

Множитель $10^{19}$ отвечает только за положение запятой. Первые цифры прячутся в $10^{0{,}2659}$.

Шаг 4. Оценим $10^{0{,}2659}$. Мы знаем опорные точки: $\lg 1 = 0$, $\lg 2 \approx 0{,}301$. Наша мантисса $0{,}2659$ меньше $0{,}301$, значит $10^{0{,}2659} < 2$, но заметно больше 1. Уточним: $\lg 1{,}8 \approx 0{,}2553$, $\lg 1{,}9 \approx 0{,}2788$. Наше значение $0{,}2659$ лежит между ними, ближе к $1{,}8$. Получаем $10^{0{,}2659} \approx 1{,}845$.

Шаг 5. Итого $2^{64} \approx 1{,}845 \cdot 10^{19}$ — число из 20 цифр, начинающееся на 1 (а точнее, на «18»).

Проверим наш ответ: $2^{64} = 18\,446\,744\,073\,709\,551\,616$. Первые цифры — 18, всего 20 разрядов ✅

Ответ: число $2^{64}$ начинается с цифры 1 (первые две цифры — 18), в нём 20 разрядов.


Пример 10 (сложный): сколько нулей идёт сразу после запятой в числе $0{,}5^{100}$?

Решение:

Шаг 1. $0{,}5 = \dfrac{1}{2} = 2^{-1}$, поэтому

$$\lg\left(0{,}5^{100}\right) = \lg\left(2^{-100}\right) = -100 \cdot 0{,}30103 = -30{,}103$$

Шаг 2. Характеристика: наибольшее целое, не превосходящее $-30{,}103$, — это $-31$. Мантисса: $-30{,}103 + 31 = 0{,}897$.

Шаг 3. Значит

$$0{,}5^{100} = 10^{-31} \cdot 10^{0{,}897}$$

Множитель $10^{0{,}897}$ лежит между 1 и 10 (точнее, около 7,9 — потому что $\lg 8 \approx 0{,}903$, а наша мантисса чуть меньше).

Шаг 4. Число вида $7{,}9 \cdot 10^{-31}$ записывается как $0{,}\underbrace{00\ldots0}_{30}789\ldots$ — первая значащая цифра стоит на 31-й позиции после запятой, а перед ней 30 нулей.

Проверим наш ответ: $0{,}5^{100} = 7{,}8886 \cdot 10^{-31}$ ✅

Ответ: 30 нулей сразу после запятой.


Почему это важно

Этот приём — «прологарифмировал, посмотрел на характеристику» — решает целый класс задач, которые в лоб не берутся вообще. Сколько цифр в числе $2^{1000}$? В факториале $100!$? Хватит ли 64-битного целого, чтобы хранить произведение? На какой позиции у вероятности появляется первая значащая цифра? Всё это — одна строчка с $\lg$.

В машинном обучении характеристика логарифма — это, по сути, ответ на вопрос «какого порядка величина». Когда ты смотришь на градиенты и видишь, что их логарифм уехал с $-3$ до $-12$, это не «числа стали чуть меньше» — это затухающий градиент, разница в девять порядков. Когда в конфиге пишут lr от $10^{-5}$ до $10^{-1}$ и перебирают его логарифмической сеткой (np.logspace), перебирают именно характеристику: между $10^{-5}$ и $10^{-4}$ модель меняется сильнее, чем между $0{,}09$ и $0{,}1$.

Есть и чисто инженерное применение: переполнение. Произведение тысячи вероятностей по 0,01 каждая — это $10^{-2000}$, что для типа float64 (нижняя граница около $10^{-308}$) просто ноль. Считать такое произведение напрямую нельзя. Поэтому вероятности всегда суммируют в логарифмах — и вместо $10^{-2000}$ получают вполне рабочее число $-4605$. Об этом подробнее в разделе про ML.


Приближённые значения: считаем логарифмы в уме

Интуиция: три числа вместо всей таблицы

Бриггс потратил годы, чтобы посчитать таблицу логарифмов. Тебе не нужна вся таблица — достаточно двух-трёх опорных значений, из которых собирается почти всё остальное. Секрет в том, что любое «удобное» число раскладывается на множители 2, 3, 5 и 10, а логарифм произведения — это сумма логарифмов.

Опорный набор (выучить):

Константа Значение Как запомнить
$\lg 2$ $\approx 0{,}30103$ «примерно 0,3»
$\lg 3$ $\approx 0{,}47712$ «почти 0,477, чуть меньше 0,5»
$\lg 5$ $\approx 0{,}69897$ $= 1 - \lg 2$
$\lg 7$ $\approx 0{,}84510$ «0,845»
$\ln 10$ $\approx 2{,}302585$ «2,303»
$\lg e$ $\approx 0{,}434294$ $= 1/\ln 10$
$\ln 2$ $\approx 0{,}693147$ «0,693», отсюда «правило 70»

Откуда берётся $\lg 2 \approx 0{,}3$? Из одного факта, который знает каждый программист: $2^{10} = 1024 \approx 1000 = 10^3$. Логарифмируем: $10\lg 2 \approx 3$, значит $\lg 2 \approx 0{,}3$. Небольшой избыток (1024 чуть больше 1000) как раз и даёт «хвост» $0{,}00103$. Именно поэтому килобайт — это 1024 байта, и именно поэтому $2^{10}$, $2^{20}$, $2^{30}$ так удобно соотносятся с тысячей, миллионом и миллиардом.

А $\lg 5$ вообще не надо запоминать отдельно: $5 = \dfrac{10}{2}$, поэтому

$$\lg 5 = \lg 10 - \lg 2 = 1 - 0{,}301 = 0{,}699$$

Из этих кирпичиков собирается почти любое число:

  • $\lg 4 = 2\lg 2 \approx 0{,}602$
  • $\lg 8 = 3\lg 2 \approx 0{,}903$
  • $\lg 6 = \lg 2 + \lg 3 \approx 0{,}778$
  • $\lg 9 = 2\lg 3 \approx 0{,}954$
  • $\lg 20 = \lg 2 + 1 \approx 1{,}301$
  • $\lg 0{,}25 = -2\lg 2 \approx -0{,}602$
  • $\lg 1{,}5 = \lg 3 - \lg 2 \approx 0{,}176$

Натуральные логарифмы получаются из десятичных умножением на $\ln 10 \approx 2{,}303$:

$$\ln 2 = \lg 2 \cdot \ln 10 \approx 0{,}30103 \cdot 2{,}302585 \approx 0{,}6931$$$$\ln 3 = \lg 3 \cdot \ln 10 \approx 0{,}47712 \cdot 2{,}302585 \approx 1{,}0986$$

Примеры с разбором

Пример 11 (простой): вычисли $\lg 40$, используя $\lg 2 \approx 0{,}301$

Решение:

Шаг 1. Разложим 40 на «известные» множители: $40 = 4 \cdot 10 = 2^2 \cdot 10$.

Шаг 2. Логарифм произведения:

$$\lg 40 = \lg(2^2) + \lg 10 = 2\lg 2 + 1$$

Шаг 3. Подставим: $2 \cdot 0{,}301 + 1 = 0{,}602 + 1 = 1{,}602$.

Проверим наш ответ: число 40 лежит между 10 и 100, значит логарифм между 1 и 2 ✅ Точное значение $\lg 40 = 1{,}60206$.

Ответ: $\lg 40 \approx 1{,}602$


Пример 12 (средний): вычисли $\lg 1{,}25$

Решение:

Число $1{,}25$ на первый взгляд не раскладывается на двойки и тройки. Но:

Шаг 1. Заметим, что $1{,}25 = \dfrac{5}{4} = \dfrac{10}{8}$.

Шаг 2. Возьмём вариант с десяткой — он даёт самую короткую выкладку:

$$\lg 1{,}25 = \lg\frac{10}{8} = \lg 10 - \lg 8 = 1 - 3\lg 2$$

Шаг 3. Подставим: $1 - 3 \cdot 0{,}30103 = 1 - 0{,}90309 = 0{,}09691$.

Проверим наш ответ: $1{,}25$ чуть больше единицы, значит логарифм должен быть маленьким положительным числом ✅ Точное значение $\lg 1{,}25 = 0{,}096910\ldots$ — совпало во всех знаках.

Ответ: $\lg 1{,}25 \approx 0{,}0969$


Пример 13 (сложный): что больше — $2^{300}$ или $3^{200}$?

Решение:

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

Шаг 1. Логарифмируем первое:

$$\lg\left(2^{300}\right) = 300 \cdot 0{,}30103 = 90{,}309$$

Шаг 2. Логарифмируем второе:

$$\lg\left(3^{200}\right) = 200 \cdot 0{,}47712 = 95{,}424$$

Шаг 3. Сравниваем: $95{,}424 > 90{,}309$, значит $3^{200} > 2^{300}$.

Шаг 4. Можно даже сказать, насколько именно: разность логарифмов $95{,}424 - 90{,}309 = 5{,}115$, то есть $3^{200}$ примерно в $10^{5{,}115} \approx 1{,}3 \cdot 10^{5}$ раз больше — в сто тридцать тысяч раз.

Проверка другим способом: возведём оба числа в степень $1/100$: сравниваем $2^3 = 8$ и $3^2 = 9$. Девять больше восьми, значит $3^{200}$ больше ✅ Два независимых метода дали один ответ.

Ответ: $3^{200} > 2^{300}$


Почему это важно

Умение прикинуть логарифм в уме — это навык «санитарной проверки» результата. Ты запускаешь обучение, видишь в логах loss: 6.91 на старте — и мгновенно понимаешь: это $\ln 1000$, то есть модель на тысяче классов предсказывает равномерно, ровно как случайная. Видишь loss: 2.30 — это $\ln 10$, случайное угадывание на десяти классах (привет, MNIST и CIFAR-10). Видишь 0.693 — это $\ln 2$, случайное угадывание в бинарной задаче.

Эти три числа — 0,693, 2,303, 6,908 — стоит помнить именно как «baseline случайной модели» для 2, 10 и 1000 классов. Если после часа обучения loss всё ещё держится около них — модель ничему не научилась, и дело не в гиперпараметрах, а в ошибке в коде.


Логарифмические шкалы: где живёт $\lg$

Интуиция: когда линейка не помещается

Человеческое восприятие устроено не линейно, а по-логарифмически. Разница между шёпотом и обычной речью ощущается примерно такой же, как между речью и криком, — хотя по физической мощности звука это разница в тысячи раз. То же с яркостью, с ценами, с весом. Психофизика называет это законом Вебера — Фехнера: ощущение растёт как логарифм раздражителя.

Отсюда и родились логарифмические шкалы. Их логика: если величина меняется на много порядков, измеряй не саму величину, а её десятичный логарифм. Тогда «в 10 раз» превращается в «+1», диапазон в миллиард раз укладывается в отрезок от 0 до 9, а график становится читаемым.

Децибелы. Уровень мощности сигнала:

$$L = 10 \lg \frac{P}{P_0} \ \text{[дБ]}$$

Увеличили мощность в 10 раз — прибавилось 10 дБ. В 100 раз — 20 дБ. Ровно на этом основана шкала громкости: шёпот 30 дБ, разговор 60 дБ, отбойный молоток 110 дБ. Между шёпотом и молотком не «в 3,7 раза», а в $10^8$ раз по мощности.

Водородный показатель pH. Кислотность раствора:

$$\text{pH} = -\lg\left[\text{H}^{+}\right]$$

где $[\text{H}^{+}]$ — концентрация ионов водорода в моль/л. Знак минус стоит потому, что концентрации очень малы (порядка $10^{-7}$), и без минуса шкала была бы отрицательной. pH нейтральной воды равен 7, потому что $[\text{H}^{+}] = 10^{-7}$. Лимонный сок с pH 2 кислее воды не «в 3,5 раза», а в $10^5 = 100\,000$ раз.

Шкала Рихтера, звёздные величины, октавы в музыке — тот же принцип. Каждая единица шкалы = фиксированное отношение, а не фиксированная разность.

Примеры с разбором

Пример 14 (простой): усилитель поднял мощность сигнала в 1000 раз. Сколько это децибел?

Решение:

Шаг 1. По формуле $L = 10\lg\dfrac{P}{P_0}$, где отношение $\dfrac{P}{P_0} = 1000$.

Шаг 2. $\lg 1000 = 3$.

Шаг 3. $L = 10 \cdot 3 = 30$ дБ.

Ответ: 30 дБ


Пример 15 (средний): у раствора pH $= 3{,}5$. Найди концентрацию ионов водорода

Решение:

Шаг 1. Из формулы $\text{pH} = -\lg[\text{H}^{+}]$ выразим концентрацию:

$$\lg[\text{H}^{+}] = -\text{pH} = -3{,}5 \ \Longrightarrow\ [\text{H}^{+}] = 10^{-3{,}5}$$

Шаг 2. Разложим показатель на целую и дробную части: $10^{-3{,}5} = 10^{-4} \cdot 10^{0{,}5}$.

Шаг 3. $10^{0{,}5} = \sqrt{10} \approx 3{,}162$.

Шаг 4. Итого $[\text{H}^{+}] \approx 3{,}16 \cdot 10^{-4}$ моль/л.

Проверим наш ответ: $\lg(3{,}16 \cdot 10^{-4}) = \lg 3{,}16 - 4 \approx 0{,}5 - 4 = -3{,}5$ ✅

Ответ: $[\text{H}^{+}] \approx 3{,}16 \cdot 10^{-4}$ моль/л


Пример 16 (сложный): на графике обучения ось Y логарифмическая (по основанию 10). Loss упал с деления «$10^{-1}$» до деления «$10^{-3}$», а на соседнем графике — с $0{,}5$ до $0{,}3$. Где прогресс больше?

Решение:

Шаг 1. Первый случай. По логарифмической шкале сдвиг составил

$$\lg 10^{-1} - \lg 10^{-3} = -1 - (-3) = 2$$

то есть две единицы шкалы. В обычных числах это уменьшение в $10^2 = 100$ раз.

Шаг 2. Второй случай. Разность значений $0{,}5 - 0{,}3 = 0{,}2$ выглядит скромно, но нас интересует отношение:

$$\frac{0{,}5}{0{,}3} \approx 1{,}67$$

По логарифмической шкале это

$$\lg 0{,}5 - \lg 0{,}3 = \lg\frac{0{,}5}{0{,}3} = \lg 1{,}67 \approx 0{,}22$$

Шаг 3. Сравниваем сдвиги: 2 против 0,22 — почти в девять раз больше в первом случае.

Шаг 4. Вывод: линейная разность обманывает. В первом случае разность самих значений всего $0{,}1 - 0{,}001 = 0{,}099$ — меньше, чем $0{,}2$ во втором! А относительное улучшение в 100 раз против 1,67 раза. Логарифмическая шкала показывает именно относительное улучшение, поэтому её и ставят на графики loss.

Ответ: в первом случае прогресс существенно больше — падение на 2 порядка против 0,22 порядка.


Почему это важно

Когда ты строишь график метрик через plt.yscale('log') — ты переходишь к десятичному логарифму. Это не косметика: на линейной шкале падение loss с 5 до 0,5 занимает весь график, а вся дальнейшая работа модели — с 0,5 до 0,001 — сплющивается в неразличимую полоску у оси. На логарифмической шкале обе фазы видны одинаково хорошо, потому что важна не разность, а отношение.

Тот же приём — np.logspace вместо np.linspace при подборе learning rate или коэффициента регуляризации. Перебирать $\lambda$ значениями 0,1; 0,2; 0,3 бессмысленно — все они «одного порядка». Перебирать $10^{-4}, 10^{-3}, 10^{-2}, 10^{-1}$ — осмысленно, потому что модель реагирует на порядок величины, а не на её линейное значение.


Почему в машинном обучении логарифм натуральный

Интуиция: логарифм должен «сниматься» начисто

В ML экспонента встречается на каждом шагу, и всегда — по основанию $e$. Сигмоида: $\sigma(z) = \dfrac{1}{1 + e^{-z}}$. Softmax: $p_i = \dfrac{e^{z_i}}{\sum_j e^{z_j}}$. Нормальное распределение: плотность содержит $e^{-(x-\mu)^2/2\sigma^2}$. Экспоненциальное сглаживание, затухание learning rate, распределение Пуассона — везде $e$.

Если основание везде $e$, то и логарифм разумно брать по основанию $e$: тогда $\ln$ и $\exp$ гасят друг друга без остатка. Возьми, например, log-softmax:

$$\ln p_i = \ln \frac{e^{z_i}}{\sum_j e^{z_j}} = z_i - \ln \sum_j e^{z_j}$$

Экспонента исчезла полностью, осталась разность двух простых величин — и именно поэтому log_softmax численно устойчивее, чем «сначала softmax, потом log». А если бы мы взяли $\lg$, то получили бы $\lg p_i = 0{,}4343 \cdot (z_i - \ln\sum_j e^{z_j})$ — тот же результат, но с болтающимся множителем $0{,}4343$, который никому не нужен и только мешает.

Log-loss (бинарная кросс-энтропия). Для одного объекта с истинной меткой $y \in \{0, 1\}$ и предсказанной вероятностью $p$:

$$\mathcal{L} = -\left[\, y \ln p + (1 - y)\ln(1 - p) \,\right]$$

Смысл прозрачный: если объект принадлежит классу 1 ($y = 1$), штраф равен $-\ln p$. Модель уверена и права ($p = 0{,}99$)? Штраф $-\ln 0{,}99 \approx 0{,}01$, почти ноль. Модель уверена и не права ($p = 0{,}001$)? Штраф $-\ln 0{,}001 \approx 6{,}91$ — огромный. Логарифм наказывает уверенную ошибку несоизмеримо сильнее, чем неуверенную, и это ровно то поведение, которое нам нужно.

Log-likelihood. Правдоподобие выборки — это произведение вероятностей всех объектов:

$$L = p_1 \cdot p_2 \cdot \ldots \cdot p_n$$

Для 10 000 объектов с типичной вероятностью 0,5 это $10^{-3010}$ — число, которое float64 просто не может хранить (нижняя граница около $10^{-308}$), результат станет нулём, и вся оптимизация превратится в деление нуля на ноль. Логарифмируем — и произведение становится суммой:

$$\ln L = \ln p_1 + \ln p_2 + \ldots + \ln p_n$$

Для того же примера это $10\,000 \cdot \ln 0{,}5 \approx -6931$ — совершенно нормальное число. Это то самое свойство «умножение → сложение», ради которого Непер и затевал логарифмы 400 лет назад, только теперь оно спасает не от усталости астронома, а от переполнения типа double.

Определение: Кросс-энтропия для задачи классификации на $K$ классов, усреднённая по $N$ объектам:

$$\mathcal{L} = -\frac{1}{N}\sum_{i=1}^{N}\sum_{k=1}^{K} y_{ik}\ln p_{ik}$$

где $y_{ik} = 1$, если объект $i$ принадлежит классу $k$, и $0$ иначе; $p_{ik}$ — предсказанная моделью вероятность.

Логарифмирование признаков. Отдельная история — предобработка данных. Доход, цена товара, число просмотров, размер города, время отклика сервера — все эти признаки имеют «тяжёлый правый хвост»: большинство значений маленькие, но встречаются экземпляры в тысячи раз больше. Модель, чувствительная к масштабу (линейная регрессия, KNN, нейросеть), будет смотреть только на выбросы. Логарифмирование сжимает хвост:

Было: 1, 10, 1000, 100 000. Стало ($\lg$): 0, 1, 3, 5.

Разброс в 100 000 раз превратился в разброс от 0 до 5. При этом порядок значений сохранён — логарифм монотонен, кто был больше, тот больше и остался. В коде это обычно np.log1p(x), то есть $\ln(1 + x)$ — прибавление единицы спасает от $\ln 0 = -\infty$ для нулевых значений.

Примеры с разбором

Пример 17 (простой): модель предсказала верному классу вероятность $p = 0{,}01$. Найди вклад этого объекта в log-loss

Решение:

Шаг 1. Вклад равен $-\ln p = -\ln 0{,}01$.

Шаг 2. Переведём через десятичный логарифм: $\lg 0{,}01 = -2$, значит

$$\ln 0{,}01 = \lg 0{,}01 \cdot \ln 10 = -2 \cdot 2{,}302585 = -4{,}60517$$

Шаг 3. Тогда $-\ln 0{,}01 \approx 4{,}605$.

Ответ: $\approx 4{,}61$

📌 Полезный ориентир: каждый «недостающий порядок» вероятности добавляет к log-loss ровно $\ln 10 \approx 2{,}303$.


Пример 18 (средний): на трёх объектах модель дала верным классам вероятности $0{,}9$; $0{,}5$; $0{,}1$. Найди среднюю кросс-энтропию

Решение:

Шаг 1. Считаем вклад каждого объекта как $-\ln p$:

$$-\ln 0{,}9 \approx 0{,}1054$$$$-\ln 0{,}5 = \ln 2 \approx 0{,}6931$$$$-\ln 0{,}1 = \ln 10 \approx 2{,}3026$$

Шаг 2. Суммируем: $0{,}1054 + 0{,}6931 + 2{,}3026 = 3{,}1011$.

Шаг 3. Делим на количество объектов:

$$\mathcal{L} = \frac{3{,}1011}{3} \approx 1{,}0337$$

Шаг 4. Обрати внимание, кто «съел» почти весь loss: объект с вероятностью 0,1 дал 2,30 из 3,10 — три четверти суммарного штрафа. Один плохо предсказанный объект перевешивает два хороших. Это фундаментальное свойство log-loss, и именно поэтому эта метрика так чувствительна к уверенным ошибкам.

Ответ: $\mathcal{L} \approx 1{,}034$


Пример 19 (сложный): разработчик по ошибке написал в функции потерь np.log10 вместо np.log. Как изменится значение loss и как это исправить, не переобучая модель?

Решение:

Шаг 1. Правильная формула для одного объекта: $\mathcal{L}_{\text{верно}} = -\ln p$. Написанная: $\mathcal{L}_{\text{код}} = -\lg p$.

Шаг 2. Связь между ними мы уже знаем:

$$\lg p = \frac{\ln p}{\ln 10} \ \Longrightarrow\ \mathcal{L}_{\text{код}} = \frac{\mathcal{L}_{\text{верно}}}{\ln 10}$$

Шаг 3. Значит выведенный loss занижен ровно в $\ln 10 \approx 2{,}303$ раза. Например, вместо честных $2{,}30$ (случайное угадывание на 10 классах) в логах будет красоваться $1{,}00$ — цифра, по которой легко решить, что модель «уже неплохо учится».

Шаг 4. Как исправить: поскольку множитель $\dfrac{1}{\ln 10}$ постоянный и положительный, само поведение обучения не изменилось. Умножение функции потерь на положительную константу не меняет, в какой точке она минимальна, — минимум остаётся ровно там же. Так что все залогированные значения можно просто умножить на $2{,}303$ постфактум:

$$\mathcal{L}_{\text{верно}} = \mathcal{L}_{\text{код}} \cdot \ln 10$$

Шаг 5. Единственный практический побочный эффект — эффективный масштаб шага обучения. Градиент тоже уменьшился в 2,303 раза, значит модель обучалась так, как будто learning rate был в 2,303 раза меньше заявленного. На сходимость это влияет, на корректность метрик после пересчёта — нет.

Ответ: loss занижен в $\ln 10 \approx 2{,}303$ раза; чтобы получить корректные значения, умножь залогированные числа на $2{,}303$; переобучать не обязательно, но стоит проверить, не был ли из-за этого фактически занижен learning rate.


Пример 20 (сложный): признак «выручка клиента» принимает значения 100, 5 000, 250 000 и 12 000 000 рублей. Прологарифмируй его и оцени, во сколько раз сжался разброс

Решение:

Шаг 1. Исходный разброс (отношение максимума к минимуму):

$$\frac{12\,000\,000}{100} = 120\,000 \ \text{раз}$$

Шаг 2. Возьмём десятичный логарифм каждого значения:

$$\lg 100 = 2$$$$\lg 5000 = \lg 5 + 3 \approx 0{,}699 + 3 = 3{,}699$$$$\lg 250\,000 = \lg 2{,}5 + 5 = (\lg 5 - \lg 2) + 5 \approx 0{,}398 + 5 = 5{,}398$$$$\lg 12\,000\,000 = \lg 1{,}2 + 7 \approx 0{,}079 + 7 = 7{,}079$$

Шаг 3. Новый набор: $2$; $3{,}70$; $5{,}40$; $7{,}08$. Разброс (уже как разность, потому что шкала логарифмическая): $7{,}08 - 2 = 5{,}08$ — чуть больше пяти порядков.

Шаг 4. Что это дало практически. До логарифмирования признак был в диапазоне ширины 12 миллионов, и любая модель, минимизирующая квадрат ошибки, смотрела бы почти исключительно на последнего клиента. После — все четыре значения лежат в отрезке $[2; 7{,}08]$, сравнимы по величине и вносят сопоставимый вклад.

Шаг 5. Проверка монотонности: 2 < 3,70 < 5,40 < 7,08 — порядок клиентов сохранён ✅ Логарифм — возрастающая функция, поэтому ранжирование логарифмирование не портит никогда.

Ответ: значения превращаются в $2$; $3{,}70$; $5{,}40$; $7{,}08$; отношение $120\,000$ раз становится разностью около 5,1 единицы шкалы.


Почему это важно

Разница между np.log и np.log10 — не педантизм, а источник реальных багов, которые не падают с ошибкой. Если ты сравниваешь свой log-loss с бенчмарком из статьи и видишь расхождение примерно в 2,3 раза — первое, что надо проверить, это основание логарифма. Если перплексия у тебя 7, а у авторов 20 — возможно, у них биты, а у тебя наты, и множитель $\ln 2 \approx 0{,}693$ всё объясняет.

Простое правило, которое стоит держать в голове:

  • В коде ML: np.log, torch.log, tf.math.log — это всегда $\ln$
  • Для десятичного нужен явный np.log10, для двоичного — np.log2
  • Функции потерь, правдоподобие, энтропия в натах — $\ln$
  • Оси графиков, порядки величин, шкалы измерений, сетки гиперпараметров — $\lg$
  • Энтропия в битах, глубина дерева решений, теория информации — $\log_2$

Практика: 30 заданий

Во всех заданиях, где нужны приближённые вычисления, используй опорные значения: $\lg 2 \approx 0{,}30103$, $\lg 3 \approx 0{,}47712$, $\lg 5 \approx 0{,}69897$, $\ln 10 \approx 2{,}302585$, $\ln 2 \approx 0{,}69315$, $\lg e \approx 0{,}43429$.

Базовые (задания 1-10)

Задание 1: Вычисли $\lg 100000$.


Задание 2: Вычисли $\lg 0{,}001$.


Задание 3: Вычисли $\ln e^7$.


Задание 4: Вычисли $\lg 4 + \lg 25$.


Задание 5: Вычисли $\ln \dfrac{e^5}{e^2}$.


Задание 6: Вычисли $10^{\lg 13}$ и $e^{\ln 0{,}4}$.


Задание 7: Найди характеристику $\lg 3746$ и определи, сколько цифр в этом числе.


Задание 8: Что выведут вызовы np.log(1), np.log10(1000) и np.log(np.e)?


Задание 9: В логах обучения видно loss: 2.303. Модель решает задачу классификации и пока предсказывает все классы равновероятно. Сколько классов в задаче?


Задание 10: Модель присвоила верному классу вероятность $p = 0{,}001$. Найди $-\lg p$ и $-\ln p$ и объясни, откуда берётся разница.


Средние (задания 11-20)

Задание 11: Вычисли $\lg 80$, зная $\lg 2 \approx 0{,}30103$.


Задание 12: Вычисли $\lg 0{,}4$.


Задание 13: Вырази $\ln 6$ через $\lg 2$ и $\lg 3$ и вычисли приближённо.


Задание 14: Реши уравнение $\lg x = 2 - \lg 5$.


Задание 15: Реши уравнение $\ln x = 3\ln 2 - \ln 4$.


Задание 16: Сколько цифр в числе $3^{100}$?


Задание 17: Энтропия равномерного распределения на 100 классах — это $\log_2 100$ бит. Найди это значение и переведи его в наты ($\ln 100$).


Задание 18: Мощность сигнала после усилителя выросла в 4 раза. На сколько децибел вырос уровень?


Задание 19: У раствора pH $= 5{,}4$. Найди концентрацию ионов водорода и определи, во сколько раз этот раствор кислее нейтральной воды (pH $= 7$).


Задание 20: Найди характеристику и мантиссу числа $\lg 0{,}0345$, если $\lg 3{,}45 \approx 0{,}5378$.


Продвинутые (задания 21-30)

Задание 21: Докажи, что $\lg e \cdot \ln 10 = 1$, и вычисли $\lg e$, зная $\ln 10 \approx 2{,}302585$.


Задание 22: Сколько цифр в числе $5^{200}$?


Задание 23: Сколько нулей стоит после запятой перед первой значащей цифрой в числе $0{,}2^{50}$?


Задание 24: Реши уравнение $\lg^2 x - 3\lg x + 2 = 0$.


Задание 25: Что больше — $2^{1000}$ или $10^{300}$?


Задание 26: Реши уравнение $\ln x = \lg x$.


Задание 27: Модель обработала 5000 независимых объектов и каждому верному классу присвоила вероятность $0{,}8$. Найди логарифмическое правдоподобие $\ln L$ и оцени порядок самого $L$. Что произойдёт, если считать $L$ напрямую в типе float64?


Задание 28: Языковая модель показывает кросс-энтропию $4{,}5$ ната на токен. Найди перплексию и переведи кросс-энтропию в биты.


Задание 29: Ты подбираешь learning rate на сетке np.logspace(-5, -1, 5). Какие это значения и во сколько раз соседние отличаются? Что изменится, если взять np.logspace(-5, -1, 9)?


Задание 30: Докажи, что $\lg 2$ — иррациональное число.


Частые ошибки

Ошибка 1: считать, что log в коде — это десятичный логарифм

Неправильно: увидеть в формуле $\log$ и написать np.log10, или наоборот — взять np.log там, где в статье имелся в виду $\lg$.

Правильно: в NumPy, PyTorch, TensorFlow, math (Python), C, Java функция log — это натуральный логарифм, $\ln$. Десятичный — только явным log10, двоичный — log2. В математической литературе на русском $\log$ без индекса обычно означает $\lg$, а в англоязычных статьях по ML — почти всегда $\ln$.

💡 Почему важно: ошибка не вызывает падения программы. Loss просто занижается ровно в $\ln 10 \approx 2{,}303$ раза, метрики перестают сходиться с бенчмарками, а эффективный learning rate оказывается в те же 2,3 раза меньше заявленного. Такой баг живёт в проекте месяцами.


Ошибка 2: путать направление формулы перехода

Неправильно: написать $\ln x = \dfrac{\lg x}{\ln 10}$ или $\lg x = \ln x \cdot \ln 10$ — то есть умножить там, где надо делить.

Правильно: натуральный логарифм всегда больше десятичного по модулю (потому что основание $e < 10$, шаг мельче, шагов больше). Значит:

$$\ln x = \lg x \cdot 2{,}303 \quad (\text{умножаем, число растёт})$$$$\lg x = \ln x \cdot 0{,}4343 \quad (\text{умножаем на }< 1,\ \text{число убывает})$$

💡 Почему важно: есть надёжный способ никогда не путаться — проверить на $x = 10$. Там $\lg 10 = 1$, а $\ln 10 = 2{,}303$. Подставь своё направление формулы: если получилось $2{,}303 = 1 \cdot 2{,}303$ — всё верно; если $2{,}303 = 1 \cdot 0{,}4343$ — направление перепутано.


Ошибка 3: неверно находить характеристику отрицательного логарифма

Неправильно: для $\lg 0{,}0345 \approx -1{,}4622$ сказать «характеристика $-1$, мантисса $-0{,}4622$».

Правильно: характеристика — это наибольшее целое, не превосходящее логарифм, то есть $-2$; мантисса — всегда неотрицательна, $m = -1{,}4622 + 2 = 0{,}5378$.

💡 Почему важно: от характеристики зависит порядок числа, а мантисса — то, что читается из таблицы. Ошибка на единицу в характеристике сдвигает ответ ровно в 10 раз. В задачах на количество цифр или нулей это моментально даёт неверный результат.


Ошибка 4: путать «количество цифр» и «значение логарифма»

Неправильно: посчитать $\lg\left(2^{100}\right) = 30{,}1$ и написать «в числе 30 цифр».

Правильно: количество цифр равно $[\lg N] + 1 = 30 + 1 = 31$. Формула про «плюс один» не украшение: у числа 100 логарифм равен 2, а цифр три.

💡 Почему важно: это классическая ошибка на единицу, из-за которой «правильное решение» получает неверный ответ. Проверяй себя на маленьком примере: $\lg 10 = 1$, цифр в числе 10 — две. Значит «+1» на месте.


Ошибка 5: думать, что маленькая разница по логарифмической шкале — это маленькая разница по величине

Неправильно: «pH упал с 7 до 5,4 — почти ничего не изменилось» или «loss на графике сдвинулся с $10^{-1}$ до $10^{-3}$, это всего два деления».

Правильно: на логарифмической шкале единица — это отношение, а не разность. Изменение pH на 1,6 — это концентрация в $10^{1{,}6} \approx 40$ раз больше. Два деления по $\lg$ — это в 100 раз.

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


Ошибка 6: перемножать вероятности вместо суммирования логарифмов

Неправильно: считать правдоподобие как np.prod(probs) для нескольких тысяч объектов.

Правильно: считать np.sum(np.log(probs)). Произведение тысяч чисел меньше единицы улетает ниже $10^{-308}$ и превращается в машинный ноль, а сумма логарифмов остаётся обычным числом порядка сотен или тысяч.

💡 Почему важно: underflow не выдаёт предупреждения — просто получается ноль, потом log(0) = -inf, потом nan в градиентах, и обучение молча ломается. Это то самое свойство «умножение превращается в сложение», ради которого логарифмы и придумали 400 лет назад.


Главное запомнить

Десятичный логарифм $\lg x = \log_{10} x$ отвечает на вопрос «какого порядка число»: его целая часть считает разряды, поэтому он живёт в измерительных шкалах и на осях графиков.

Натуральный логарифм $\ln x = \log_e x$, где $e \approx 2{,}718$, обратен экспоненте $e^x$: $\ln(e^x) = x$ без всяких коэффициентов. Поэтому он живёт везде, где есть непрерывный рост, вероятности и функции потерь.

Формула перехода: $\log_a b = \dfrac{\log_c b}{\log_c a}$. Именно она позволяет посчитать любой логарифм двумя кнопками калькулятора.

Мост между двумя основаниями: $\ln x = \lg x \cdot \ln 10 \approx 2{,}303\,\lg x$ и $\lg x = \ln x \cdot \lg e \approx 0{,}4343\,\ln x$. Множители взаимно обратны: $\lg e \cdot \ln 10 = 1$.

Характеристика $k = [\lg x]$ отвечает за положение запятой, мантисса $m = \{\lg x\}$ (всегда от 0 до 1) — за значащие цифры. Перенос запятой меняет только характеристику.

Количество цифр в натуральном числе $N$ равно $[\lg N] + 1$. Не забывай про «+1».

Опорные значения: $\lg 2 \approx 0{,}301$, $\lg 3 \approx 0{,}477$, $\lg 5 = 1 - \lg 2 \approx 0{,}699$, $\ln 2 \approx 0{,}693$, $\ln 10 \approx 2{,}303$, $\lg e \approx 0{,}434$.

Baseline случайной модели: loss $\approx 0{,}693$ — две категории, $\approx 2{,}303$ — десять, $\approx 6{,}908$ — тысяча. Если loss завис на этих числах, модель ничему не научилась.

В коде np.log — это $\ln$, np.log10 — это $\lg$, np.log2 — это $\log_2$. Ошибка в основании множит результат на константу и не вызывает никакой ошибки выполнения.

Логарифм спасает от переполнения: произведение вероятностей заменяем суммой логарифмов, признак с тяжёлым хвостом сжимаем через np.log1p. Монотонность сохраняется, поэтому порядок значений не портится.


Связь с другими темами курса

Что было до этого урока. Всё началось с показательной функции $y = a^x$ (урок 111) и числа $e$ (урок 112) — без них натуральный логарифм невозможно даже определить. Определение логарифма как обратной операции к возведению в степень мы разобрали в уроке 116, а свойства — произведение, частное, степень, переход к новому основанию — в уроке 117. Сегодняшний урок был частным случаем: мы взяли всё это и зафиксировали два конкретных основания.

Что будет дальше. В уроке 119 мы построим график логарифмической функции $y = \log_a x$ и увидим, что $y = \lg x$ и $y = \ln x$ — это одна и та же кривая, растянутая по вертикали в $2{,}303$ раза (ровно тот множитель, который мы сегодня вывели). Уроки 120-121 — логарифмические уравнения и неравенства, где $\lg$ и $\ln$ станут рабочим инструментом. Урок 122 — логарифмирование и потенцирование, то есть техника «взять логарифм от обеих частей», которую мы сегодня применяли интуитивно. Урок 125 — задачи на рост и распад, где натуральный логарифм используется по прямому назначению: находить время по известному коэффициенту роста.

Позже, в уроке 138, ты увидишь производную логарифма — и там станет окончательно понятно, почему математики так любят именно натуральное основание: у $\ln x$ производная равна $1/x$, безо всяких констант, а у $\lg x$ вылезает тот самый множитель $\lg e$. Сегодня мы этот множитель уже встретили — просто с другой стороны.

Где применяется прямо сейчас.

  • Машинное обучение: log-loss, кросс-энтропия, log-likelihood, log-softmax, KL-дивергенция — всё на $\ln$
  • Инженерия данных: логарифмирование признаков с тяжёлым хвостом, np.log1p, логарифмическая сетка гиперпараметров
  • Визуализация: логарифмические оси на графиках метрик, plt.yscale('log')
  • Физика и химия: децибелы, pH, шкала Рихтера, звёздные величины, период полураспада
  • Информатика: сложность алгоритмов $O(\log n)$, глубина сбалансированного дерева, количество бит для кодирования
  • Финансы: логарифмическая доходность, сложный процент, «правило 70» для времени удвоения вклада

Интересные факты

🎲 Факт 1: у логарифмической линейки не было батареек и она летала в космос. Инструмент, основанный на десятичных логарифмах (складываешь длины — перемножаешь числа), был главным калькулятором инженеров с XVII века до 1970-х. Астронавты «Аполлона-13» брали с собой линейку Pickett N600-ES, и именно ею считали поправки к траектории после аварии. Точность — три значащие цифры, зато никакого «низкого заряда батареи».

🎲 Факт 2: значения $\lg 2$ и $\lg 3$ — иррациональные числа. Мы доказали это для $\lg 2$ в задании 30. Более того, $\lg n$ рационально лишь тогда, когда $n$ — целая степень десятки. Так что вся «красота» таблиц Бриггса держалась на приближениях, а не на точных значениях.

🎲 Факт 3: мантиссы логарифмов распределены неравномерно — это закон Бенфорда. В реальных наборах данных (счета, длины рек, численность городов, финансовые отчёты) первая значащая цифра оказывается единицей примерно в 30% случаев, а девяткой — всего в 4,6%. Причина ровно в логарифме: вероятность первой цифры $d$ равна $\lg\left(1 + \frac{1}{d}\right)$. Для $d = 1$ это $\lg 2 \approx 0{,}301$ — то самое число. На этом законе построены методы обнаружения фальсифицированной отчётности.

🎲 Факт 4: 2 в 10-й степени — причина, по которой килобайт равен 1024. Так как $\lg 2 \approx 0{,}30103$, то $10\lg 2 \approx 3{,}0103$, то есть $2^{10} \approx 10^{3}$ с погрешностью 2,4%. Именно эта случайная близость и позволила инженерам называть 1024 байта «килобайтом». Погрешность накапливается: $2^{80}$ отличается от $10^{24}$ уже на 21%, поэтому «терабайт» у производителя диска и у операционной системы — заметно разные числа.

🎲 Факт 5: правило 70 из финансов — это натуральный логарифм. Чтобы узнать, за сколько лет вклад удвоится при ставке $r$ процентов, делят 70 на $r$. Откуда 70? Из уравнения $e^{rt/100} = 2$, откуда $t = \dfrac{100\ln 2}{r} \approx \dfrac{69{,}3}{r}$. Число 69,3 округлили до 70, потому что оно удобнее делится. Тот же приём работает и для роста трафика, и для роста числа параметров моделей.


Лайфхаки и полезные трюки

🔥 Трюк 1: «$\lg 2 \approx 0{,}3$» выводится из $2^{10} = 1024$. Если забыл значение — вспомни, что $1024 \approx 1000$, прологарифмируй: $10\lg 2 \approx 3$, значит $\lg 2 \approx 0{,}3$. То же для $\lg 5$: не запоминай, а считай $1 - \lg 2 = 0{,}7$. Двух чисел — $\lg 2$ и $\lg 3$ — хватает, чтобы восстановить логарифмы всех чисел от 1 до 10, кроме 7.

🔥 Трюк 2: проверка направления перехода на числе 10. Забыл, умножать на 2,303 или делить? Подставь $x = 10$: должно получиться $\lg 10 = 1$ и $\ln 10 = 2{,}303$. Одна подстановка — и путаницы больше нет.

🔥 Трюк 3: количество цифр = характеристика + 1. Работает для любого натурального числа. Сколько цифр в $100!$? $\lg(100!) = \lg 1 + \lg 2 + \ldots + \lg 100 \approx 157{,}97$, значит 158 цифр. Никакого перемножения гигантских чисел.

🔥 Трюк 4: первые цифры числа прячутся в мантиссе. Хочешь узнать, с чего начинается $7^{100}$? Считай $100\lg 7 = 84{,}51$, бери мантиссу $0{,}51$ и вспоминай, что $\lg 3 \approx 0{,}477$, $\lg 3{,}2 \approx 0{,}505$. Значит число начинается с «32...» и имеет 85 цифр.

🔥 Трюк 5: узнавай знакомые константы в логах обучения. Числа 0,693; 1,099; 1,386; 2,303; 4,605; 6,908 — это $\ln 2$, $\ln 3$, $\ln 4$, $\ln 10$, $\ln 100$, $\ln 1000$. Если loss «залип» ровно на одном из них — модель предсказывает равномерно по соответствующему числу классов, то есть не учится вообще. Диагноз ставится за секунду, без единого графика.

🔥 Трюк 6: np.log1p вместо np.log(1 + x). Для признаков с нулями и для очень маленьких значений log1p и точнее (не теряет значащие цифры при $x \to 0$), и безопаснее (не даёт $-\infty$ при $x = 0$). Обратная операция — np.expm1. Правило: логарифмируешь деньги, счётчики, длительности — бери log1p.

🔥 Трюк 7: сравнивай огромные степени через логарифмы. Что больше — $7^{50}$ или $50^{7}$? Считай $50\lg 7 \approx 42{,}25$ против $7\lg 50 \approx 11{,}89$. Первое больше на 30 порядков. Приём универсальный: любое сравнение $a^b$ и $c^d$ сводится к сравнению $b\lg a$ и $d\lg c$.


Заключение

Ты только что разобрался с тем, что ставит в тупик очень многих: почему из бесконечного множества оснований в реальном мире используются ровно два, и как между ними ходить. Десятка — потому что мы так пишем числа, и её логарифм буквально считает разряды. Число $e$ — потому что так растут и затухают процессы, и его логарифм снимает экспоненту начисто, без коэффициентов. Между ними — один-единственный множитель $2{,}303$, и теперь ты знаешь, откуда он берётся и в какую сторону его применять.

Это не абстрактное знание. В следующий раз, когда увидишь в логах обучения loss: 2.303, ты не будешь гадать — ты сразу поймёшь, что модель предсказывает равномерно по десяти классам. Когда наткнёшься на расхождение с результатами из статьи ровно в 2,3 раза — сразу проверишь основание логарифма. Когда встретишь признак с диапазоном в миллион — прологарифмируешь его, не задумываясь. Это ровно тот тип понимания, который отличает человека, применяющего инструменты осознанно, от человека, копирующего формулы из чужого кода.

И заметь: приёмы, которые ты сегодня освоил, работают там, где обычная арифметика бессильна. Ты умеешь посчитать количество цифр в числе, которое не помещается ни в один тип данных. Умеешь узнать первую цифру степени, не вычисляя саму степень. Умеешь сравнить $2^{1000}$ и $10^{300}$ за десять секунд на бумаге. Четыреста лет назад за такое умение платили деньги и звали ко двору — сегодня это твой рабочий инструмент.

Дальше будет ещё интереснее. В уроке 119 мы построим график логарифмической функции и увидим всё, что сегодня считали, в виде одной кривой. А потом научимся решать уравнения и неравенства, где логарифм стоит уже не сбоку, а в самом центре задачи. Ты прошёл самую техническую часть логарифмической темы — дальше начинается самая красивая. Погнали! 🚀

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!