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

Определение логарифма

Логарифм 🔢

Ты когда-нибудь замечал, что шкала громкости на смартфоне работает странно? Первые несколько делений почти неслышны, а последние — оглушительные. Или что звёздная величина в астрономии — это не линейная яркость, а что-то совсем другое? Или что в нейронной сети функция потерь 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, чтобы получить 19?”

$$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$

Что означает отрицательный логарифм? Это значит, что аргумент ($19$) меньше единицы. Когда основание больше 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(18) = -3$ — здесь результат отрицательный, а аргумент $18$ — положительный. Всё в порядке.


Ошибка 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 от дроби 19 по основанию 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

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