Логарифм 🔢
Ты когда-нибудь замечал, что шкала громкости на смартфоне работает странно? Первые несколько делений почти неслышны, а последние — оглушительные. Или что звёздная величина в астрономии — это не линейная яркость, а что-то совсем другое? Или что в нейронной сети функция потерь cross-entropy почему-то использует log? Ответ на все три вопроса — логарифм.
Логарифм — одна из тех математических операций, которую школьники ненавидят, потому что её плохо объяснили. Это не страшная абстракция. Это инструмент для работы с экспоненциальным ростом — а именно там живут нейронные сети, информация, вероятности и деньги.
После этого урока ты будешь понимать логарифм так же интуитивно, как сложение. И когда увидишь np.log() в коде PyTorch — будешь точно знать, что там происходит.
Ты узнаешь:
🎯 Что такое логарифм и откуда он вообще берётся
🎯 Как читать выражения вида $\log_2 8$ и $\ln(0.5)$
🎯 Почему в ML почти везде стоит натуральный логарифм
🎯 Как логарифм связан со степенью, энтропией и обратным распространением ошибки
История: откуда взялся логарифм? 📜
XVII век, эпоха до калькуляторов. Астрономы и навигаторы были вынуждены вручную перемножать огромные числа — координаты планет, расстояния, углы. Одно умножение шестизначных чисел занимало часы и давало ошибки. Шотландский математик Джон Непер потратил 20 лет, чтобы решить эту проблему — и в 1614 году опубликовал таблицы логарифмов. Идея была гениальной: умножение превращается в сложение. $\log(a \cdot b) = \log a + \log b$ — вместо перемножения смотришь в таблицу, складываешь два числа, и готово.
Говорят, астроном Пьер-Симон Лаплас сказал, что логарифмы «удвоили жизнь астрономов» — настолько они сократили вычисления. Логарифмическая линейка, построенная на том же принципе, оставалась главным инструментом инженеров вплоть до 1970-х — именно на ней считали траектории ракет программы Apollo.
Сегодня логарифм решает другую задачу: работу с вероятностями. Когда модель предсказывает вероятность 0.0001, а ты хочешь посчитать потери — логарифм превращает крошечные числа в удобные отрицательные значения. Cross-entropy, информационная энтропия, KL-дивергенция — везде log. Непер придумал инструмент для навигации по звёздам, а он оказался нужен для навигации по пространству вероятностей.
Блок 1: Откуда берётся логарифм
Начнём с обратного вопроса
Ты знаешь, что такое степень:
$$2^3 = 8$$
Это значит: умножаем 2 на себя 3 раза, получаем 8. Всё просто.
Теперь переформулируем вопрос: “В какую степень нужно возвести 2, чтобы получить 8?”
Ответ: в третью. $2^{\,?} = 8$ → $? = 3$.
Этот вопрос — и есть логарифм. Логарифм — это операция, которая отвечает на вопрос “В какую степень нужно возвести основание, чтобы получить данное число?”
Записывается это так:
$$\log_2 8 = 3$$
Читается: “логарифм 8 по основанию 2 равен 3”.
Смысл: чтобы из числа 2 получить 8, нужно возвести его в степень 3.
Аналогия из программирования
Представь, что pow(a, n) возвращает $a^n$.
Логарифм — это обратная функция к pow:
pow(2, 3) = 8 // "2 в степени 3 = 8"
log2(8) = 3 // "в какую степень нужно возвести 2, чтобы получить 8?"
Если pow идёт слева направо (основание → показатель → результат), то log идёт справа налево (результат → основание → показатель).
Именно поэтому говорят, что логарифм и показательная функция — взаимно обратные.
Строгое определение
Определение: Логарифмом числа $b$ по основанию $a$ называется показатель степени, в которую нужно возвести $a$, чтобы получить $b$.
$$\log_a b = c \iff a^c = b$$
где $a > 0$, $a \neq 1$, $b > 0$.
Обозначения:
- $a$ — основание логарифма (что возводим в степень)
- $b$ — аргумент логарифма (что хотим получить)
- $c$ — значение логарифма (в какую степень нужно возвести)
Ограничения — и почему они важны:
- $a > 0$ и $a \neq 1$ — основание должно быть положительным и не равным единице. (Если $a = 1$, то $1^c = 1$ при любом $c$. Нельзя “дотянуться” до других чисел.)
- $b > 0$ — логарифм существует только от положительных чисел. Логарифм нуля и отрицательных чисел — не определён в вещественных числах. Это критично в ML: именно поэтому в функции потерь cross-entropy добавляют
epsilon, чтобы не взятьlog(0).
Блок 2: Первые примеры — считаем руками
Пример 1 (простой): Классика с двойкой
Вопрос: Чему равно $\log_2 16$?
Решение:
Вопрос звучит так: “В какую степень нужно возвести 2, чтобы получить 16?”
Шаг 1. Перепишем как уравнение со степенью:
$$2^c = 16$$
Шаг 2. Разберём 16 как степень двойки:
$$16 = 2 \cdot 2 \cdot 2 \cdot 2 = 2^4$$
Шаг 3. Значит:
$$2^c = 2^4 \implies c = 4$$
Ответ: $\log_2 16 = 4$
Проверка: $2^4 = 16$ ✅
Пример 2 (простой): Логарифм десятки
Вопрос: Чему равно $\log_{10} 1000$?
Решение:
“В какую степень нужно возвести 10, чтобы получить 1000?”
$$10^c = 1000$$
$$1000 = 10 \cdot 10 \cdot 10 = 10^3$$
$$c = 3$$
Ответ: $\log_{10} 1000 = 3$
Связь с жизнью: Децибелы акустики, шкала Рихтера, pH кислотности — всё это логарифмические шкалы по основанию 10. Разница в 1 единицу pH — это разница в 10 раз по концентрации ионов водорода.
Пример 3 (средний): Дробный логарифм
Вопрос: Чему равно $\log_3 \dfrac{1}{9}$?
Решение:
“В какую степень нужно возвести 3, чтобы получить 1⁄9?”
$$3^c = \frac{1}{9}$$
Шаг 1. Заметим, что $\dfrac{1}{9} = \dfrac{1}{3^2} = 3^{-2}$.
Это использует правило отрицательной степени: $a^{-n} = \dfrac{1}{a^n}$.
Шаг 2. Значит:
$$3^c = 3^{-2} \implies c = -2$$
Ответ: $\log_3 \dfrac{1}{9} = -2$
Что означает отрицательный логарифм? Это значит, что аргумент ($1⁄9$) меньше единицы. Когда основание больше 1, а аргумент меньше 1 — логарифм всегда отрицательный. В ML это важно: вероятности от 0 до 1, поэтому $\log p$ при $p \in (0, 1)$ — всегда отрицательное число. Именно поэтому в cross-entropy стоит минус: $-\log p$, чтобы получить положительное значение потерь.
Пример 4 (средний): Логарифм единицы
Вопрос: Чему равно $\log_5 1$?
Решение:
“В какую степень нужно возвести 5, чтобы получить 1?”
$$5^c = 1$$
Любое ненулевое число в нулевой степени равно 1: $a^0 = 1$.
$$5^0 = 1 \implies c = 0$$
Ответ: $\log_5 1 = 0$
📌 Это правило универсально: $\log_a 1 = 0$ для любого допустимого основания $a$.
Пример 5 (средний): Логарифм основания
Вопрос: Чему равно $\log_7 7$?
Решение:
“В какую степень нужно возвести 7, чтобы получить 7?”
$$7^c = 7 = 7^1 \implies c = 1$$
Ответ: $\log_7 7 = 1$
📌 Ещё одно универсальное правило: $\log_a a = 1$ для любого допустимого основания $a$.
Пример 6 (сложный): Нецелый ответ
Вопрос: Чему равно $\log_4 8$?
Решение:
“В какую степень нужно возвести 4, чтобы получить 8?”
$$4^c = 8$$
Шаг 1. Оба числа — степени двойки:
$$4 = 2^2, \quad 8 = 2^3$$
Шаг 2. Подставим:
$$(2^2)^c = 2^3$$
Шаг 3. По правилу степени степени: $(a^m)^n = a^{mn}$:
$$2^{2c} = 2^3$$
Шаг 4. Основания равны, значит, показатели равны:
$$2c = 3 \implies c = \frac{3}{2} = 1.5$$
Ответ: $\log_4 8 = 1.5$
Проверка: $4^{1.5} = 4^1 \cdot 4^{0.5} = 4 \cdot 2 = 8$ ✅
Вывод: Логарифм не обязан быть целым числом. Это обычное число, которое может быть дробным, иррациональным, отрицательным.
Блок 3: Специальные логарифмы — те, что нужны каждый день
Десятичный логарифм: $\lg$
Логарифм по основанию 10 встречается так часто, что для него есть специальное обозначение:
$$\lg x = \log_{10} x$$
Где используется:
- Шкала Рихтера (землетрясения): каждый шаг — в 10 раз сильнее
- Децибелы: $L = 10 \lg \dfrac{I}{I_0}$
- pH в химии: $\text{pH} = -\lg[\text{H}^+]$
Примеры:
$$\lg 100 = 2, \quad \lg 10\,000 = 4, \quad \lg 0.1 = -1$$
Натуральный логарифм: $\ln$
Это самый важный логарифм в математике и ML. Основание — число $e \approx 2.71828…$
$$\ln x = \log_e x$$
Почему именно $e$? Число $e$ — это основание, при котором производная показательной функции равна самой функции: $\dfrac{d}{dx} e^x = e^x$. Это делает $e^x$ и $\ln x$ математически “идеальными” для анализа. Никаких лишних коэффициентов в производных.
Примеры:
$$\ln e = 1, \quad \ln 1 = 0, \quad \ln e^5 = 5$$
В Python:
import numpy as np
np.log(np.e) # → 1.0 (натуральный логарифм, основание e)
np.log10(100) # → 2.0 (десятичный логарифм)
np.log2(8) # → 3.0 (двоичный логарифм)
np.log(0.5) # → -0.693... (отрицательный, т.к. 0.5 < 1)
Двоичный логарифм: $\log_2$
Логарифм по основанию 2 — язык информатики и теории информации:
$$\log_2 x$$
Примеры: $\log_2 1024 = 10$, $\log_2 256 = 8$.
В ML: количество бит информации, энтропия Шеннона:
$$H = -\sum_{i} p_i \log_2 p_i$$
Блок 4: Логарифм в ML/AI — зачем он там везде?
Это раздел, ради которого ты, возможно, и читаешь этот урок. Разберём три ключевых места, где логарифм незаменим.
4.1 Cross-Entropy Loss — функция потерь
Когда нейронная сеть классифицирует изображения (кот/собака/птица), она выдаёт вектор вероятностей. Например:
Предсказание: [кот: 0.7, собака: 0.2, птица: 0.1]
Правильный ответ: кот
Функция потерь cross-entropy измеряет, насколько плохо предсказание:
$$\mathcal{L} = -\log(p_{\text{correct}})$$
Здесь $p_{\text{correct}} = 0.7$ — вероятность правильного класса.
$$\mathcal{L} = -\log(0.7) = -(-0.357) = 0.357$$
Почему логарифм?
Вспомни, что $\log p$ при $p \in (0, 1)$ — отрицательное число. Минус перед ним делает потерю положительной.
Теперь посмотри, что происходит с разными предсказаниями:
| Вероятность правильного класса | $-\log(p)$ | Интерпретация |
|---|---|---|
| $p = 0.99$ | $\approx 0.01$ | Сеть почти права, потеря мала |
| $p = 0.5$ | $\approx 0.693$ | Сомнение, потеря средняя |
| $p = 0.1$ | $\approx 2.303$ | Сеть ошибается, потеря большая |
| $p = 0.01$ | $\approx 4.605$ | Грубая ошибка, потеря огромная |
Логарифм наказывает за уверенные неправильные ответы экспоненциально больше. Это правильное поведение: лучше быть неуверенным, чем уверенно ошибаться.
import numpy as np
def cross_entropy_loss(y_pred, y_true):
# y_pred: вектор вероятностей [0.7, 0.2, 0.1]
# y_true: индекс правильного класса (0 = кот)
return -np.log(y_pred[y_true] + 1e-9) # 1e-9 защита от log(0)
loss = cross_entropy_loss([0.7, 0.2, 0.1], 0)
print(f"Loss: {loss:.4f}") # 0.3567
4.2 Энтропия Шеннона — мера неопределённости
Представь, что у тебя есть датасет с метками. Насколько “смешанный” датасет? Насколько много информации в одном примере?
Для набора с вероятностями $p_1, p_2, \ldots, p_n$:
$$H = -\sum_{i=1}^{n} p_i \log_2 p_i$$
Пример: Монета честная ($p(\text{орёл}) = 0.5$, $p(\text{решка}) = 0.5$):
$$H = -0.5 \cdot \log_2 0.5 - 0.5 \cdot \log_2 0.5 = -0.5 \cdot (-1) - 0.5 \cdot (-1) = 1 \text{ бит}$$
1 бит — значит каждый бросок несёт ровно 1 бит информации. Логично!
Пример: Монета нечестная ($p(\text{орёл}) = 0.99$, $p(\text{решка}) = 0.01$):
$$H = -0.99 \cdot \log_2 0.99 - 0.01 \cdot \log_2 0.01 \approx 0.014 + 0.066 = 0.08 \text{ бит}$$
Почти никакой информации — исход почти всегда известен заранее.
В деревьях решений (Decision Tree, Random Forest) именно энтропия определяет, по какому признаку делать разбиение.
4.3 Log-вероятности в языковых моделях
GPT и другие языковые модели работают с вероятностями слов. Но вероятности очень маленькие — например, $p = 10^{-50}$. Умножать такие числа нельзя: числовое переполнение (underflow).
Поэтому все расчёты ведутся в логарифмическом пространстве:
$$\log(p_1 \cdot p_2 \cdot p_3) = \log p_1 + \log p_2 + \log p_3$$
Вместо умножения крошечных чисел — сложение нормальных отрицательных чисел. Это не приближение, это точное равенство (свойство логарифма, которое разберём в следующем уроке).
# Вероятность фразы "The cat sat" в языковой модели
p1 = 0.05 # P("The")
p2 = 0.002 # P("cat" | "The")
p3 = 0.001 # P("sat" | "The cat")
# Прямое умножение — маленькие числа, риск underflow
prob = p1 * p2 * p3 # 1e-7 — ещё терпимо, но для длинных текстов...
# В log-пространстве — надёжно
log_prob = np.log(p1) + np.log(p2) + np.log(p3)
print(f"log_prob = {log_prob:.4f}") # -16.118
Практика: 30 заданий
Базовые (задания 1–10)
Задание 1: Вычисли $\log_2 32$.
Задание 2: Вычисли $\log_3 81$.
Задание 3: Вычисли $\log_{10} 10\,000$.
Задание 4: Вычисли $\log_5 125$.
Задание 5: Вычисли $\log_2 1$.
Задание 6: Вычисли $\log_9 9$.
Задание 7: Вычисли $\log_4 \dfrac{1}{4}$.
Задание 8: Вычисли $\log_2 \dfrac{1}{8}$.
Задание 9: Вычисли $\ln e^7$.
Задание 10: Чему равно $\log_6 6^{100}$?
Средние (задания 11–20)
Задание 11: Вычисли $\log_8 2$.
Задание 12: Вычисли $\log_9 27$.
Задание 13: Вычисли $\log_{25} 5$.
Задание 14: Реши уравнение: $\log_3 x = 4$.
Задание 15: Реши уравнение: $\log_x 64 = 3$.
Задание 16: Вычисли $\log_2 \dfrac{1}{32}$.
Задание 17: Нейросеть предсказала вероятность правильного класса $p = 0.25$. Вычисли cross-entropy loss: $\mathcal{L} = -\ln(0.25)$.
Задание 18: Вычисли $\log_4 \dfrac{1}{64}$.
Задание 19: Сравни без вычислений: что больше, $\log_2 5$ или $\log_2 3$?
Задание 20: Вычисли $\log_{0.1} 10$.
Продвинутые (задания 21–30)
Задание 21: Найди $x$, если $\log_2(x + 3) = 5$.
Задание 22: Найди $x$, если $3^{\log_3 x} = 7$.
Задание 23: В языковой модели вероятность токена “кот” составила $p = e^{-3.5}$. Какова log-вероятность этого токена?
Задание 24: Вычисли $\log_2 6 + \log_2 \dfrac{1}{3}$ без калькулятора. (Подсказка: $\log_a(x \cdot y) = \log_a x + \log_a y$.)
Задание 25: Бинарная классификация. Модель предсказала вектор $[0.8, 0.2]$ для класса “спам” / “не спам”. Правильный ответ — “спам” (класс 0). Вычисли бинарную cross-entropy: $\mathcal{L} = -[y \ln p + (1 - y) \ln(1 - p)]$, где $y = 1$, $p = 0.8$.
Задание 26: Найди область допустимых значений выражения $\log_3(5 - 2x)$.
Задание 27: Сколько раз нужно удвоить нейросеть (удвоить количество параметров), чтобы достичь $2^{30} \approx 10^9$ параметров, начиная с 1?
Задание 28: Найди $x$: $\log_x 27 = \dfrac{3}{2}$.
Задание 29: Энтропия датасета. Датасет содержит 3 класса с вероятностями $p_1 = 0.5$, $p_2 = 0.25$, $p_3 = 0.25$. Вычисли энтропию Шеннона: $H = -\sum p_i \log_2 p_i$.
Задание 30: Отладка кода. Найди ошибку и исправь её.
import numpy as np
# Хотим вычислить log2 от массива вероятностей
probs = np.array([0.5, 0.25, 0.25])
log_probs = np.log(probs) # ???
entropy = -np.sum(probs * log_probs)
print(f"Entropy: {entropy:.4f}") # Получаем: 1.0397
# Ожидаем: 1.5 бита
Частые ошибки
❌ Ошибка 1: Логарифм нуля или отрицательного числа
Неправильно:
loss = -np.log(0) # → inf (бесконечность!)
Правильно:
loss = -np.log(pred + 1e-9) # Добавляем epsilon
Почему важно: $\log 0$ — не определён. В ML, если модель предсказала вероятность ровно 0 для правильного класса, потеря стала бы бесконечной. Добавление малого $\varepsilon$ — стандартная защита.
❌ Ошибка 2: Путаница основания
Неправильно: “Логарифм — это всегда $\log_{10}$”
Правильно: Логарифм имеет основание, и оно важно: - $\log_{10} 100 = 2$ (десятичный) - $\log_2 100 \approx 6.64$ (двоичный) - $\ln 100 \approx 4.61$ (натуральный)
Три разных числа — один и тот же аргумент.
Правило запоминания: Если основание не указано явно: - В российских учебниках: $\log$ = десятичный ($\lg$) - В математическом анализе и ML: $\log$ = натуральный ($\ln$) - В теории информации: $\log$ = двоичный ($\log_2$)
❌ Ошибка 3: Логарифм суммы ≠ сумма логарифмов
Неправильно: $\log(a + b) = \log a + \log b$
Правильно: $\log(a \cdot b) = \log a + \log b$ (логарифм произведения)
Логарифм суммы не раскладывается по слагаемым. Это грубая ошибка, которая приведёт к неверным вычислениям.
❌ Ошибка 4: “Логарифм отрицательного числа отрицателен”
Неправильно: думать, что $\log(-5)$ — это просто отрицательное число.
Правильно: $\log(-5)$ в вещественных числах не существует. Аргумент обязан быть положительным. Отрицательный результат логарифма — нормально, но отрицательный аргумент — нет.
Путаница: $\log_2(1⁄8) = -3$ — здесь результат отрицательный, а аргумент $1⁄8$ — положительный. Всё в порядке.
❌ Ошибка 5: Неверный знак при делении на отрицательное
Неправильно: При решении $\log_3(5 - 2x) > 0$, переходя к $5 - 2x > 1$, получают $-2x > -4$, и не меняют знак: $x > 2$.
Правильно: $-2x > -4 \implies x < 2$ (знак меняется при делении на $-2$).
Главное запомнить
📝 Ключевые понятия
✅ Логарифм — это показатель степени: $\log_a b = c \iff a^c = b$. Три числа — три роли: основание, аргумент, результат.
✅ Логарифм и степень — обратные операции: $a^{\log_a b} = b$ и $\log_a(a^c) = c$. Они “уничтожают” друг друга.
✅ Логарифм единицы равен нулю: $\log_a 1 = 0$ для любого допустимого $a$.
✅ Логарифм основания равен единице: $\log_a a = 1$ для любого допустимого $a$.
✅ Условие существования: $a > 0$, $a \neq 1$, аргумент $b > 0$. Логарифм нуля и отрицательных чисел — не определён.
✅ Отрицательный логарифм — нормально: он означает, что аргумент меньше 1. Логарифм -2 от дроби 1⁄9 по основанию 3 — корректное число.
✅ Три важных логарифма: - $\lg x = \log_{10} x$ — десятичный (шкалы, pH, децибелы) - $\ln x = \log_e x$ — натуральный (математика, ML, физика) - $\log_2 x$ — двоичный (теория информации, энтропия)
✅ В ML логарифм нужен для: cross-entropy loss, энтропии Шеннона, численной стабильности при работе с вероятностями, log-likelihood.
✅ В Python: np.log() = натуральный, np.log2() = двоичный, np.log10() = десятичный. Не путай!
✅ Логарифм убывает к $-\infty$, когда аргумент стремится к 0 (это причина $\mathcal{L} \to \infty$, когда модель уверенно ошибается).
Связь с другими темами курса
Что нужно было знать до этого урока: - Степени числа — логарифм — это обратная операция к возведению в степень - Показательная функция $y = a^x$ — именно её мы “обращаем” в логарифм - Дроби и отрицательные числа — они часто возникают как аргументы и результаты логарифмов
Что изучить дальше: - Свойства логарифмов — как раскладывается логарифм произведения, частного, степени. Без этого нельзя упрощать выражения - Логарифмические уравнения и неравенства — применение логарифма к решению задач - Логарифмическая функция и её график — форма, монотонность, область значений
Где это нужно в жизни:
💻 В программировании: Оценка сложности алгоритмов. Двоичный поиск работает за $O(\log_2 n)$ итераций. Если массив из $10^6$ элементов — это всего $\approx 20$ шагов.
🤖 В ML/AI: Cross-entropy loss, KL-дивергенция, информационное усиление в деревьях решений, численная стабильность языковых моделей. В каждой нейросети — как минимум один log.
📊 В Data Science: Feature engineering с логарифмическим преобразованием. Если признак распределён по закону Парето (цены, доходы, размеры файлов), логарифмирование нормализует распределение и улучшает качество модели.
🔬 В физике: Шкала Рихтера, децибелы, формула радиоактивного распада, закон Стивенса в психофизике — всё это логарифмические зависимости.
Интересные факты
💡 Кто придумал? Логарифмы изобрёл шотландский математик Джон Непер в 1614 году — за полвека до дифференциального исчисления. Цель была прагматичная: упростить вычисления для навигации и астрономии. Умножение больших чисел превращалось в сложение с помощью логарифмических таблиц — это спасало месяцы вычислений.
💡 Логарифмическая линейка — механический аналоговый компьютер, основанный на свойстве логарифма превращать умножение в сложение. Использовалась инженерами вплоть до 1970-х. NASA использовала логарифмические линейки при расчётах полётов программы “Аполлон”.
💡 Закон Бенфорда — в реальных данных (размеры городов, цены акций, счета) первая цифра чаще всего $1$ ($\approx 30\%$), а не $9$ ($\approx 5\%$). Это прямое следствие логарифмической природы данных. Налоговые органы используют этот закон для выявления фальсификаций в отчётности.
💡 Почему нейросети учатся быстрее с логарифмом? Логарифм “сжимает” большие значения и “растягивает” малые. Когда вероятность правильного класса $0.001$, нам нужен сильный сигнал обучения — и $-\log(0.001) = 6.9$, это большой градиент. Когда вероятность $0.99$ — сигнал малый: $-\log(0.99) = 0.01$. Именно это поведение делает обучение нейросетей устойчивым.
Лайфхаки и полезные трюки
1. Как быстро оценить $\log_2 n$ в уме
Запомни ключевые значения:
log2(1) = 0
log2(2) = 1
log2(4) = 2
log2(8) = 3
log2(16) = 4
log2(32) = 5
log2(64) = 6
log2(128) = 7
log2(256) = 8
log2(1024) = 10
Для промежуточных — интерполируй. $\log_2 100$: между 64 и 128, значит между 6 и 7. Точнее: ближе к 7, потому что 100 ближе к 128. Ответ: $\approx 6.64$.
Применение: Сразу оценить сложность алгоритма или количество бит.
2. Быстрая проверка: знак логарифма
- Аргумент $> 1$ при основании $> 1$ → логарифм положительный
- Аргумент $< 1$ при основании $> 1$ → логарифм отрицательный
- Аргумент $= 1$ → логарифм равен нулю (всегда)
Пример: $\log{10} 0.001$ — аргумент 0.001 < 1, основание 10 > 1 → результат отрицательный. И правда: $\log{10} 0.001 = -3$.
3. Формула перевода между основаниями
$$\loga b = \frac{\ln b}{\ln a} = \frac{\log{10} b}{\log_{10} a}$$
Калькулятор умеет только $\ln$ и $\lg$? Не беда. Хочешь $\log_2 7$? Вычисли $\dfrac{\ln 7}{\ln 2} = \dfrac{1.946}{0.693} \approx 2.807$.
В Python: np.log(7) / np.log(2) или просто np.log2(7).
4. Мнемоника для определения
Запомни треугольник “OCR” (Основание → Степень/Ответ → Результат):
Результат (аргумент логарифма)
/\
/ \
/ c= \
/ 3 \
/________\
a=2 8
Основание Результат
(= база) (= само число)
$\log_{\text{основание}} \text{результат} = \text{степень}$
Или просто: логарифм — это степень.
5. log в PyTorch и что за ним скрывается
import torch
import torch.nn.functional as F
# cross_entropy в PyTorch = log_softmax + nll_loss
logits = torch.tensor([2.0, 1.0, 0.1]) # выход последнего слоя
# Под капотом:
log_probs = F.log_softmax(logits, dim=0) # log(softmax(x)) = натуральный log
# log_probs ≈ [-0.418, -1.418, -2.318]
# Если правильный класс = 0:
loss = -log_probs[0] # 0.418
# Это и есть cross-entropy!
Понимание того, что log_softmax вычисляет именно натуральный логарифм, помогает правильно интерпретировать потери и отлаживать модели.
💡 Совет: Не пытайся запомнить логарифм как формулу. Запомни вопрос: “В какую степень нужно возвести основание, чтобы получить этот аргумент?” Каждый раз, когда видишь $\log$, задавай этот вопрос — и ответ придёт сам.
Следующий шаг — свойства логарифмов: как логарифм превращает умножение в сложение, деление — в вычитание, и почему это так мощно в ML. Именно там начнётся настоящая магия.
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку