Десятичный и натуральный логарифм 🔟
Открой исходники любой библиотеки машинного обучения — 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}$), результат станет нулём, и вся оптимизация превратится в деление нуля на ноль. Логарифмируем — и произведение становится суммой:
Для того же примера это $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
💪 Начать тренировку