Геометрическая прогрессия 🌾
Открой конфиг обучения почти любой нейросети — и где-то там, рядом с оптимизатором, будет строчка вроде scheduler = ExponentialLR(optimizer, gamma=0.95). Она означает: после каждой эпохи умножай скорость обучения на $0{,}95$. Не вычитай, не пересчитывай по хитрой формуле — просто умножай на одно и то же число. Ниже в том же конфиге — betas=(0.9, 0.999) у Adam: это про то, что вклад градиента, полученного $k$ шагов назад, гасится множителем $0{,}9^k$. А если ты пишешь агента с подкреплением, там обязательно окажется gamma=0.99 — коэффициент, на который умножается награда за каждый шаг задержки.
Три разные подсистемы, три разных инженера их придумали, и все три — одна и та же школьная конструкция: геометрическая прогрессия. Последовательность, в которой каждый следующий член получается из предыдущего умножением на постоянное число. В прошлом уроке мы разбирали арифметическую прогрессию — там к каждому члену прибавляли постоянную разность $d$, и получался линейный рост. Здесь мы будем умножать на постоянный знаменатель $q$ — и получим рост (или затухание), который ведёт себя принципиально иначе: сначала незаметно, потом внезапно и неудержимо.
Разница между «прибавлять» и «умножать» — это разница между тем, чтобы копить по 2000 рублей в неделю, и тем, чтобы держать деньги под процент. Между линейным ростом расходов и взрывным ростом вычислительной сложности. Между «сгорело на 5 позиций» и «сгорело в 5 раз». Люди систематически недооценивают вторую ситуацию — человеческая интуиция настроена на сложение, а не на умножение. Именно поэтому легенда про зёрна на шахматной доске жива уже тысячу лет: она бьёт ровно в это слепое пятно, и мы её честно посчитаем.
В этом уроке мы построим геометрическую прогрессию с нуля: определение и почему в нём два запрета ($b_1 \neq 0$ и $q \neq 0$), формула $n$-го члена, характеристическое свойство со странным на первый взгляд модулем, и главное — формула суммы первых $n$ членов с полным выводом через красивейший приём «умножили на $q$ и вычли». Плюс — где всё это живёт в машинном обучении, и не декоративно, а с реальными числами.
🎯 Ты узнаешь:
- Что такое геометрическая прогрессия, зачем в определении запреты $b_1 \neq 0$ и $q \neq 0$, и почему без них конструкция ломается
- Как из определения выводится формула $n$-го члена $b_n = b_1 q^{n-1}$ и как по любым двум членам восстановить всю прогрессию
- Почему характеристическое свойство записывается через модуль: $|b_n| = \sqrt{b_{n-1} \cdot b_{n+1}}$
- Как за три строчки вывести формулу конечной суммы $S_n = \dfrac{b_1(q^n - 1)}{q - 1}$ и почему случай $q = 1$ приходится разбирать отдельно
- Как одна и та же прогрессия работает в расписании learning rate, в дисконтировании награды в RL, в моментах Adam и в логарифмической сетке подбора гиперпараметров
История: откуда это взялось?
Геометрическая прогрессия старше почти всей остальной алгебры. Древнеегипетский папирус Ринда (около 1650 года до н. э., переписанный писцом Ахмесом с ещё более раннего текста) содержит задачу № 79: в семи домах живёт по семь кошек, каждая кошка съедает по семь мышей, каждая мышь съедает по семь колосьев, каждый колос дал бы по семь мер зерна. Сколько всего? Писец аккуратно выписывает столбик $7, 49, 343, 2401, 16807$ и складывает: $19607$. Это первая известная нам запись суммы геометрической прогрессии — за три с половиной тысячи лет до того, как для неё появилась формула.
Строгая теория пришла из Греции. В девятой книге «Начал» Евклида (около 300 года до н. э.) есть предложение IX.35 — по сути та самая формула суммы, только сформулированная на языке пропорций отрезков: «Если в непрерывной пропорции сколько угодно чисел, и от второго и от последнего отнять равное первому, то как избыток второго к первому, так избыток последнего ко всем предшествующим». Переведи это на современный язык — получишь ровно $\frac{b_2 - b_1}{b_1} = \frac{b_{n+1} - b_1}{S_n}$, откуда мгновенно следует наша формула. Евклиду она понадобилась, чтобы доказать теорему о совершенных числах, — суммы вида $1 + 2 + 4 + \dots + 2^{k}$ там ключевая деталь.
Дальше эстафету подхватили индийские и персидские математики. Легенду об изобретателе шахмат, попросившем зёрна на клетки доски, впервые записал персидский историк ал-Бируни около 1030 года — и он же первым честно посчитал ответ, получив число из двадцати цифр. А по-настоящему массовым инструментом геометрическая прогрессия стала в средневековых итальянских банках: Леонардо Пизанский (Фибоначчи) в «Книге абака» (1202) разбирает задачи на сложные проценты, где капитал каждый год умножается на один и тот же коэффициент. Именно оттуда — из банковской практики — конструкция дошла до нас почти неизменной: total *= (1 + rate) в цикле по годам — это буквально Фибоначчи, только на Python.
Мостик в сегодня короткий. Когда в 1965 году Гордон Мур заметил, что число транзисторов на кристалле удваивается каждые примерно два года, он описал геометрическую прогрессию со знаменателем $q = 2$ на шаге в два года. Когда исследователи считают, во сколько раз выросли вычислительные бюджеты обучения моделей за десятилетие, они снова оперируют знаменателем. И когда ты пишешь lr *= 0.95 — ты продолжаешь традицию, которой три с половиной тысячи лет.
Что такое геометрическая прогрессия
Интуиция: «умножай на одно и то же»
Представь два банковских вклада. На первом тебе каждый год начисляют фиксированные 10 000 рублей — сколько бы ни лежало на счету. Это арифметическая прогрессия: $100\,000$, $110\,000$, $120\,000$, $130\,000$ — прибавка одна и та же, график лежит на прямой.
На втором вкладе начисляют 10% годовых — то есть каждый год умножают на $1{,}1$. Первый год прибавка тоже 10 000 рублей, и разница незаметна. Но дальше: $100\,000 \to 110\,000 \to 121\,000 \to 133\,100 \to 146\,410$. Прибавка растёт сама, потому что проценты начисляются и на уже начисленные проценты. Через 30 лет первый вклад даст 400 тысяч, второй — почти 1,75 миллиона. Одно и то же «10% в первый год», совершенно разные судьбы.
Ключевое слово — отношение. В арифметической прогрессии постоянна разность соседних членов, в геометрической — постоянно их отношение. Из-за этого геометрическая прогрессия — это не «более быстрая арифметическая», а качественно другой зверь: она не растёт равномерно, она растёт в разы.
Определение: Геометрической прогрессией называется числовая последовательность $(b_n)$, у которой первый член отличен от нуля, а каждый следующий член получается из предыдущего умножением на одно и то же отличное от нуля число $q$:
$$b_{n+1} = b_n \cdot q, \qquad b_1 \neq 0, \quad q \neq 0.$$Число $q$ называется знаменателем прогрессии.
Слово «знаменатель» тут неслучайно: $q$ — это результат деления соседних членов, $q = \dfrac{b_{n+1}}{b_n}$, то есть число, стоящее «под чертой» в отношении. Отсюда и обозначение: $q$ — от латинского quotient, «частное».
Зачем два запрета
Оба условия в определении — не бюрократия, а защита конструкции от вырождения.
Запрет $b_1 \neq 0$. Пусть $b_1 = 0$. Тогда $b_2 = 0 \cdot q = 0$, $b_3 = 0$, и вся последовательность — нули: $0, 0, 0, 0, \dots$. Формально она даже удовлетворяет рекуррентному соотношению при любом $q$. Но у неё нет знаменателя: отношение $\frac{b_2}{b_1} = \frac{0}{0}$ не определено, а значит, $q$ невозможно восстановить по самой последовательности. Прогрессия, у которой знаменатель нельзя определить, бесполезна — поэтому нулевую последовательность из рассмотрения выкидывают.
Запрет $q \neq 0$. Пусть $q = 0$ и $b_1 = 5$. Получаем $5, 0, 0, 0, \dots$. Здесь уже второй член равен нулю, и дальше делить на него нельзя: отношение $\frac{b_3}{b_2}$ снова $\frac{0}{0}$. Кроме того, ломается характеристическое свойство и формула суммы. Проще запретить.
Полезное следствие из двух запретов: все члены геометрической прогрессии отличны от нуля. Действительно, $b_n = b_1 q^{n-1}$ — произведение ненулевых сомножителей. Это важная рабочая деталь: на любой член прогрессии всегда можно делить, и в задачах этим постоянно пользуются.
А вот $q = 1$ запрещать не нужно — при $q = 1$ получается вполне законная прогрессия из одинаковых чисел: $7, 7, 7, 7, \dots$. Она скучная, но легальная. Правда, для формулы суммы её придётся разбирать отдельно — об этом ниже.
Примеры с разбором
Пример 1 (простой): выясни, является ли последовательность $3,\ 6,\ 12,\ 24,\ 48$ геометрической прогрессией
Решение:
Шаг 1. Проверяем определение: отношение каждого следующего к предыдущему должно быть одним и тем же числом. Считаем все отношения подряд.
Шаг 2. $\dfrac{6}{3} = 2$, $\quad \dfrac{12}{6} = 2$, $\quad \dfrac{24}{12} = 2$, $\quad \dfrac{48}{24} = 2$.
Шаг 3. Все отношения равны $2$. Первый член $b_1 = 3 \neq 0$, знаменатель $q = 2 \neq 0$ — оба условия определения выполнены.
Ответ: да, это геометрическая прогрессия с $b_1 = 3$ и $q = 2$.
Пример 2 (средний): является ли геометрической прогрессией последовательность $1,\ 2,\ 4,\ 8,\ 15$?
Решение:
Шаг 1. Первые отношения выглядят обнадёживающе: $\dfrac{2}{1} = 2$, $\dfrac{4}{2} = 2$, $\dfrac{8}{4} = 2$.
Шаг 2. Проверяем последнее: $\dfrac{15}{8} = 1{,}875 \neq 2$.
Шаг 3. Отношение не постоянно, значит, определение нарушено уже на одном месте — этого достаточно.
Ответ: нет, не является. Три совпавших отношения ничего не гарантируют — проверять надо все.
📌 Это типичная ловушка: последовательность «почти геометрическая» встречается в реальных данных постоянно (например, замеры с шумом), и заявить «тут геометрическая прогрессия» по трём точкам — верный способ ошибиться в прогнозе.
Пример 3 (сложный): последовательность задана формулой $b_n = 5 \cdot 2^{n}$. Докажи, что это геометрическая прогрессия, и найди $b_1$ и $q$
Решение:
Шаг 1. Чтобы доказать, что последовательность геометрическая, нужно показать, что отношение $\dfrac{b_{n+1}}{b_n}$ не зависит от $n$.
Шаг 2. Выписываем общий член со сдвинутым номером:
$$b_{n+1} = 5 \cdot 2^{\,n+1}.$$Шаг 3. Делим:
$$\frac{b_{n+1}}{b_n} = \frac{5 \cdot 2^{\,n+1}}{5 \cdot 2^{\,n}} = 2^{\,(n+1) - n} = 2^1 = 2.$$Отношение равно $2$ при любом $n$ — константа. Значит, это геометрическая прогрессия с $q = 2$.
Шаг 4. Находим первый член: $b_1 = 5 \cdot 2^1 = 10$.
Проверим наш ответ: выпишем первые члены по формуле: $b_1 = 10$, $b_2 = 5 \cdot 4 = 20$, $b_3 = 5 \cdot 8 = 40$. Отношения: $20/10 = 2$, $40/20 = 2$ ✅
Ответ: да, геометрическая прогрессия, $b_1 = 10$, $q = 2$.
⚠️ Обрати внимание на ловушку: $b_n = 5 \cdot 2^n$, но $b_1 = 10$, а не $5$. Показатель $n$, а не $n-1$ — и первый член уже «сдвинут». Ниже мы разберём каноническую запись, где эта путаница исчезает.
Почему это важно
Определение через постоянное отношение — это математический способ сказать «относительное изменение постоянно». А почти вся аналитика оперирует именно относительными величинами: рост выручки в процентах, ежемесячное падение метрики на столько-то процентов, деградация качества модели в разах. Как только ты слышишь «на X% за период», ты слышишь геометрическую прогрессию со знаменателем $q = 1 + X/100$. Это переводит расплывчатое «растёт быстро» в точную формулу, по которой можно считать на годы вперёд.
Формула n-го члена
Интуиция: сколько раз мы умножили
Чтобы получить $b_2$ из $b_1$, мы умножили на $q$ один раз. Чтобы получить $b_3$ — два раза. Чтобы получить $b_{10}$ — девять раз. Логика простая: чтобы дойти до $n$-го члена, надо сделать $n - 1$ шаг, и на каждом шаге домножить на $q$.
Распишем аккуратно:
$$b_2 = b_1 q, \qquad b_3 = b_2 q = b_1 q^2, \qquad b_4 = b_3 q = b_1 q^3, \quad \dots$$Закономерность видна: показатель степени всегда на единицу меньше номера.
Определение (формула $n$-го члена): Для геометрической прогрессии с первым членом $b_1$ и знаменателем $q$ справедливо
$$b_n = b_1 \cdot q^{\,n-1}, \qquad n = 1, 2, 3, \dots$$
Строго это доказывается индукцией: при $n = 1$ формула даёт $b_1 q^0 = b_1$ — верно; если она верна для номера $n$, то $b_{n+1} = b_n \cdot q = b_1 q^{n-1} \cdot q = b_1 q^{n}$ — то есть верна и для $n+1$. Переход замкнулся, формула работает для всех натуральных $n$.
Полезно сразу иметь под рукой обобщение: чтобы попасть из члена с номером $m$ в член с номером $n$, надо сделать $n - m$ шагов, поэтому
$$b_n = b_m \cdot q^{\,n-m}.$$Эта версия избавляет от лишних вычислений, когда $b_1$ не дан.
Примеры с разбором
Пример 4 (простой): в прогрессии $b_1 = 2$, $q = 3$. Найди $b_7$
Решение:
Шаг 1. По формуле $b_n = b_1 q^{n-1}$ подставляем $n = 7$:
$$b_7 = 2 \cdot 3^{\,7-1} = 2 \cdot 3^6.$$Шаг 2. Считаем $3^6$: $3^2 = 9$, $3^3 = 27$, $3^6 = 27^2 = 729$.
Шаг 3. $b_7 = 2 \cdot 729 = 1458$.
Проверим наш ответ: выпишем прогрессию целиком: $2,\ 6,\ 18,\ 54,\ 162,\ 486,\ 1458$. Седьмой член — действительно $1458$ ✅
Ответ: $b_7 = 1458$.
Пример 5 (средний): известно, что $b_3 = 18$ и $b_6 = 486$. Найди $q$ и $b_1$
Решение:
Шаг 1. Используем формулу перехода между членами: от третьего до шестого — три шага, значит
$$b_6 = b_3 \cdot q^{\,6-3} = b_3 q^3.$$Шаг 2. Подставляем известные значения:
$$486 = 18 \cdot q^3 \quad \Longrightarrow \quad q^3 = \frac{486}{18} = 27.$$Шаг 3. Извлекаем кубический корень: $q = \sqrt[3]{27} = 3$. Здесь корень нечётной степени, поэтому решение единственное — вариант $q = -3$ не подходит, так как $(-3)^3 = -27 \neq 27$.
Шаг 4. Находим $b_1$: от первого члена до третьего — два шага, $b_3 = b_1 q^2$, откуда
$$b_1 = \frac{b_3}{q^2} = \frac{18}{9} = 2.$$Проверим наш ответ: прогрессия $2,\ 6,\ 18,\ 54,\ 162,\ 486$ — третий член $18$ ✅, шестой $486$ ✅
Ответ: $q = 3$, $b_1 = 2$.
Пример 6 (сложный): в прогрессии $5,\ 10,\ 20,\ \dots$ найди номер члена, равного $5120$
Решение:
Шаг 1. Определяем параметры: $b_1 = 5$, $q = \dfrac{10}{5} = 2$.
Шаг 2. Записываем уравнение на номер $n$:
$$5 \cdot 2^{\,n-1} = 5120.$$Шаг 3. Делим обе части на $5$:
$$2^{\,n-1} = 1024.$$Шаг 4. Приводим правую часть к степени двойки: $1024 = 2^{10}$. Показательная функция $y = 2^x$ строго возрастает (урок 113), значит, из равенства степеней с одинаковым основанием следует равенство показателей:
$$n - 1 = 10 \quad \Longrightarrow \quad n = 11.$$Проверим наш ответ: $b_{11} = 5 \cdot 2^{10} = 5 \cdot 1024 = 5120$ ✅
Ответ: $n = 11$, это одиннадцатый член.
📌 Если бы число справа не оказалось «красивой» степенью двойки, пришлось бы логарифмировать: $n - 1 = \log_2 \frac{b_n}{b_1}$. Логарифм тут — родной инструмент, потому что он ровно и есть «показатель степени» (урок 116). И если результат получается нецелым — значит, такого члена в прогрессии просто нет.
Почему это важно
Формула $b_n = b_1 q^{n-1}$ — это готовый предсказатель. В ML она встречается буквально в коде: скорость обучения на эпохе $n$, доля оставшихся весов после $n$ итераций прунинга, размер очереди после $n$ шагов деградации. Умение решать обратную задачу — «на каком шаге величина достигнет порога» — важнее прямой: это ответ на вопросы «сколько эпох обучать», «когда пора останавливаться», «через сколько итераций модель ужмётся вдвое».
Характеристическое свойство: откуда берётся модуль
Интуиция: каждый член — «геометрическая середина» соседей
В арифметической прогрессии каждый член — среднее арифметическое соседей: $a_n = \frac{a_{n-1} + a_{n+1}}{2}$. Логика прозрачная: сосед слева меньше на $d$, сосед справа больше на $d$, среднее ровно посередине.
Давай разберёмся, что будет в геометрическом случае. Сосед слева меньше в $q$ раз, сосед справа больше в $q$ раз. Перемножим их:
$$b_{n-1} \cdot b_{n+1} = \frac{b_n}{q} \cdot b_n q = b_n^2.$$Множитель $q$ сократился! Получилось изящное соотношение $b_n^2 = b_{n-1} b_{n+1}$: квадрат любого члена равен произведению соседей.
А теперь тонкий момент. Хочется извлечь корень и написать $b_n = \sqrt{b_{n-1} b_{n+1}}$ — «средним геометрическим». Но арифметический квадратный корень всегда неотрицателен, а член прогрессии вполне может быть отрицательным. Возьми прогрессию $2,\ -4,\ 8$: произведение соседей $2 \cdot 8 = 16$, корень $\sqrt{16} = 4$, а сам член равен $-4$. Равенство неверно — если не поставить модуль.
Определение (характеристическое свойство): Для любой геометрической прогрессии и любого $n \geq 2$
$$b_n^2 = b_{n-1} \cdot b_{n+1}, \qquad \text{или, что то же самое,} \qquad |b_n| = \sqrt{b_{n-1} \cdot b_{n+1}}.$$То есть модуль каждого члена (начиная со второго) равен среднему геометрическому соседних членов.
Почему модуль обязателен. Три причины сразу:
- Корень $\sqrt{\ }$ по определению возвращает неотрицательное число, а $b_n$ может быть любого знака.
- Знак члена корень восстановить не может в принципе: прогрессии $2, 4, 8$ и $2, -4, 8$ дают одно и то же произведение соседей $16$. Информация о знаке в произведении потеряна.
- Само произведение $b_{n-1}b_{n+1} = b_n^2$ всегда положительно (члены ненулевые), так что корень извлекается всегда — но и только.
Обратное утверждение тоже верно и очень полезно: если в последовательности ненулевых чисел для каждого внутреннего члена выполняется $b_n^2 = b_{n-1}b_{n+1}$, то это геометрическая прогрессия. Проверка: из равенства следует $\frac{b_n}{b_{n-1}} = \frac{b_{n+1}}{b_n}$ — отношение соседей одно и то же на каждом месте, а это и есть определение. Именно так в задачах доказывают «геометричность», не вычисляя $q$ напрямую.
Примеры с разбором
Пример 7 (простой): проверь характеристическое свойство для тройки $3,\ 6,\ 12$
Решение:
Шаг 1. Средний член $b_2 = 6$, соседи $3$ и $12$.
Шаг 2. Считаем квадрат среднего: $6^2 = 36$.
Шаг 3. Считаем произведение соседей: $3 \cdot 12 = 36$.
Шаг 4. Значения совпали: $36 = 36$ ✅
Ответ: свойство выполняется, тройка является фрагментом геометрической прогрессии (с $q = 2$).
Пример 8 (средний): найди все числа $x$, при которых $2,\ x,\ 50$ — геометрическая прогрессия
Решение:
Шаг 1. По характеристическому свойству $x^2 = 2 \cdot 50 = 100$.
Шаг 2. Решаем: $x = \pm 10$. Оба корня годятся, поскольку ни один из них не равен нулю (а член прогрессии обязан быть ненулевым).
Шаг 3. Проверяем обе прогрессии.
При $x = 10$: $2,\ 10,\ 50$, знаменатель $q = 5$ ✅
При $x = -10$: $2,\ -10,\ 50$, знаменатель $q = -5$, и правда $-10 \cdot (-5) = 50$ ✅
Ответ: $x = 10$ или $x = -10$ — два решения.
📌 Вот здесь модуль в формуле и «оживает»: $|x| = \sqrt{100} = 10$, а само $x$ — любое из двух чисел с этим модулем. Формула честно говорит: про модуль знаю всё, про знак — ничего.
Пример 9 (сложный): при каких $x$ числа $x,\ x+3,\ x+9$ образуют геометрическую прогрессию? Выпиши её и найди $q$
Решение:
Шаг 1. Применяем характеристическое свойство к среднему члену:
$$(x+3)^2 = x(x+9).$$Шаг 2. Раскрываем скобки:
$$x^2 + 6x + 9 = x^2 + 9x.$$Шаг 3. Квадраты сокращаются — уравнение становится линейным:
$$6x + 9 = 9x \quad \Longrightarrow \quad 3x = 9 \quad \Longrightarrow \quad x = 3.$$Шаг 4. Проверяем условие ненулевости всех членов: $x = 3 \neq 0$, $x + 3 = 6 \neq 0$, $x + 9 = 12 \neq 0$ — всё в порядке.
Шаг 5. Прогрессия: $3,\ 6,\ 12$. Знаменатель $q = \dfrac{6}{3} = 2$.
Проверим наш ответ: $6^2 = 36$ и $3 \cdot 12 = 36$ ✅
Ответ: $x = 3$, прогрессия $3,\ 6,\ 12$, знаменатель $q = 2$.
Почему это важно
Характеристическое свойство — это тест на «геометричность» без знания $q$. В работе с данными он встречается там, где надо понять природу роста: если три последовательных замера удовлетворяют $y_2^2 \approx y_1 y_3$, рост экспоненциальный, и линейная модель на этих данных будет систематически врать. Если же $y_2 \approx \frac{y_1 + y_3}{2}$ — рост линейный. Два выражения, одна проверка, и сразу понятно, брать ли логарифм от таргета перед обучением модели.
Сумма первых n членов: приём «умножили и вычли»
Интуиция: почему «в лоб» не получится
Просуммировать арифметическую прогрессию просто: сложи первый с последним, второй с предпоследним — суммы одинаковы, и вся задача сводится к умножению. Это трюк Гаусса из прошлого урока.
С геометрической такой номер не проходит: $b_1 + b_n$ и $b_2 + b_{n-1}$ — совершенно разные числа. Нужен другой приём, и он один из самых красивых в школьной алгебре.
Идея: запишем сумму, потом умножим её на $q$ и вычтем одну из другой. При умножении на $q$ каждый член превращается в следующий — то есть почти вся сумма «съезжает на одну позицию» и совпадает с исходной. При вычитании совпавшая часть уничтожается, и остаются только два крайних члена.
Вывод формулы
Пусть $S_n = b_1 + b_2 + \dots + b_n$. Распишем через $b_1$ и $q$:
$$S_n = b_1 + b_1 q + b_1 q^2 + \dots + b_1 q^{\,n-1}. \qquad (1)$$Умножим обе части на $q$:
$$q S_n = b_1 q + b_1 q^2 + b_1 q^3 + \dots + b_1 q^{\,n}. \qquad (2)$$Смотри внимательно: в строке $(2)$ слагаемые от $b_1 q$ до $b_1 q^{n-1}$ — это в точности слагаемые строки $(1)$, кроме самого первого. Вычтем $(1)$ из $(2)$:
$$q S_n - S_n = \big(b_1 q + \dots + b_1 q^{\,n-1} + b_1 q^{\,n}\big) - \big(b_1 + b_1 q + \dots + b_1 q^{\,n-1}\big).$$Всё, что стоит между $b_1 q$ и $b_1 q^{n-1}$, сокращается подчистую. Остаётся:
$$q S_n - S_n = b_1 q^{\,n} - b_1.$$Слева выносим $S_n$, справа $b_1$:
$$S_n (q - 1) = b_1 (q^{\,n} - 1).$$Если $q \neq 1$, делим на $(q-1)$:
$$\boxed{\,S_n = \frac{b_1 \left(q^{\,n} - 1\right)}{q - 1}\,}$$Определение (сумма первых $n$ членов): Для геометрической прогрессии с $q \neq 1$
$$S_n = \frac{b_1 (q^{\,n} - 1)}{q - 1} = \frac{b_1 (1 - q^{\,n})}{1 - q}.$$При $q = 1$ все члены равны $b_1$, и сумма считается напрямую: $S_n = n b_1$.
Обе записи — с $(q^n - 1)/(q-1)$ и с $(1 - q^n)/(1-q)$ — одно и то же выражение: числитель и знаменатель домножены на $-1$. Первая удобнее при $q > 1$ (обе скобки положительны, минусов нет), вторая — при $|q| < 1$ (там $q^n$ маленькое, и видно, что сумма близка к $\frac{b_1}{1-q}$).
Почему $q = 1$ приходится выносить отдельно. Посмотри на вывод: последним действием мы разделили на $(q - 1)$. При $q = 1$ это деление на ноль — запрещено. И сама формула это честно показывает: подставив $q = 1$, получим $\frac{b_1(1 - 1)}{1 - 1} = \frac{0}{0}$ — неопределённость. Но никакой катастрофы нет: при $q = 1$ прогрессия состоит из одинаковых чисел $b_1, b_1, b_1, \dots$, и сумма $n$ штук — это просто $n b_1$. Формула не нужна.
Полезный вариант формулы, когда известен последний член:
$$S_n = \frac{b_n q - b_1}{q - 1},$$потому что $b_1 q^n = (b_1 q^{n-1}) \cdot q = b_n q$. Иногда так считать быстрее — не нужно возводить в степень.
Примеры с разбором
Пример 10 (простой): найди сумму первых пяти членов прогрессии с $b_1 = 2$, $q = 3$
Решение:
Шаг 1. Подставляем в формулу:
$$S_5 = \frac{2 \cdot (3^5 - 1)}{3 - 1}.$$Шаг 2. Считаем $3^5 = 243$, значит числитель $2 \cdot (243 - 1) = 2 \cdot 242 = 484$.
Шаг 3. Знаменатель $3 - 1 = 2$, итого $S_5 = \dfrac{484}{2} = 242$.
Проверим наш ответ: прогрессия $2,\ 6,\ 18,\ 54,\ 162$. Сумма: $2 + 6 = 8$, $8 + 18 = 26$, $26 + 54 = 80$, $80 + 162 = 242$ ✅
Ответ: $S_5 = 242$.
Пример 11 (средний): найди $S_{10}$ для прогрессии $1,\ \tfrac12,\ \tfrac14,\ \dots$
Решение:
Шаг 1. Параметры: $b_1 = 1$, $q = \dfrac{1}{2}$. Знаменатель меньше единицы — берём вторую форму формулы, она тут удобнее:
$$S_{10} = \frac{b_1 (1 - q^{10})}{1 - q}.$$Шаг 2. Считаем $q^{10} = \left(\dfrac{1}{2}\right)^{10} = \dfrac{1}{1024}$.
Шаг 3. Числитель: $1 \cdot \left(1 - \dfrac{1}{1024}\right) = \dfrac{1023}{1024}$.
Шаг 4. Знаменатель: $1 - \dfrac{1}{2} = \dfrac{1}{2}$.
Шаг 5. Делим (деление на $\frac12$ — это умножение на $2$):
$$S_{10} = \frac{1023}{1024} \cdot 2 = \frac{1023}{512} = 1{,}998046875.$$Проверим наш ответ грубой прикидкой: сложим первые члены: $1 + 0{,}5 + 0{,}25 + 0{,}125 = 1{,}875$, а дальше добавки всё мельче. Результат чуть меньше двух — правдоподобно ✅
Ответ: $S_{10} = \dfrac{1023}{512} \approx 1{,}998$.
📌 Обрати внимание: сумма подобралась к $2$ вплотную, но не дотянула. Сколько бы членов мы ни брали, двойка не будет достигнута — а вот что с ней происходит «в пределе», разберём в уроке 130.
Пример 12 (сложный): в прогрессии с $b_1 = 1$, $q = 3$ сумма первых $n$ членов равна $3280$. Найди $n$
Решение:
Шаг 1. Подставляем в формулу суммы:
$$\frac{1 \cdot (3^{n} - 1)}{3 - 1} = 3280 \quad \Longrightarrow \quad \frac{3^{n} - 1}{2} = 3280.$$Шаг 2. Умножаем обе части на $2$:
$$3^{n} - 1 = 6560 \quad \Longrightarrow \quad 3^{n} = 6561.$$Шаг 3. Приводим правую часть к степени тройки. $3^4 = 81$, $3^8 = 81^2 = 6561$. Значит $3^n = 3^8$.
Шаг 4. Показательная функция $y = 3^x$ строго возрастает, поэтому равенство степеней даёт равенство показателей: $n = 8$.
Проверим наш ответ: $S_8 = \dfrac{3^8 - 1}{2} = \dfrac{6560}{2} = 3280$ ✅
Ответ: $n = 8$.
Почему это важно
Формула суммы отвечает на вопрос «сколько накопится всего», а не «сколько будет в конце». Это две разные величины, и путать их дорого. В RL суммарная дисконтированная награда — это буквально $S_n$ геометрической прогрессии. В финансах суммарные выплаты по кредиту — тоже. А в оценке бюджета обучения серии моделей, каждая из которых в $q$ раз дороже предыдущей, общая стоимость проекта — снова $S_n$, и она может оказаться заметно больше, чем «стоимость самой большой модели», если $q$ близко к единице.
Как ведёт себя прогрессия: три сценария по знаменателю
Всё поведение геометрической прогрессии определяется одним числом — $q$. Разберём по случаям.
Случай $|q| > 1$: взрывной рост
Модуль каждого следующего члена больше предыдущего в $|q|$ раз. Члены растут по модулю, и растут не просто быстро, а ускоряясь: прибавка на каждом шаге сама пропорциональна текущему значению.
Пример: $b_1 = 1$, $q = 2$ даёт $1, 2, 4, 8, 16, 32, 64, \dots$ Двадцатый член уже $524\,288$, тридцатый — больше полумиллиарда.
Ключевая психологическая деталь: в начале рост выглядит скромно. Первые пять членов прогрессии с $q = 2$ — это $1, 2, 4, 8, 16$, ничего страшного. Именно поэтому экспоненциальные процессы (эпидемии, вирусные охваты, рост вычислительных бюджетов) регулярно застают людей врасплох.
Случай $|q| < 1$ (при $q \neq 0$): затухание
Модуль каждого следующего члена меньше предыдущего. Члены по модулю стремительно уменьшаются: $16,\ 8,\ 4,\ 2,\ 1,\ 0{,}5,\ 0{,}25, \dots$
Важно: члены становятся сколь угодно малыми, но никогда не обращаются в ноль — все они ненулевые по построению. Именно этот случай стоит за словами «экспоненциальное затухание»: скорость обучения падает, вклад старых градиентов гаснет, награда за далёкое будущее почти не считается.
Насколько быстро? Полезная оценка через логарифм: чтобы модуль упал в $K$ раз, нужно примерно $\dfrac{\ln K}{\ln (1/|q|)}$ шагов. Для $q = 0{,}9$ падение в 10 раз занимает $\frac{2{,}303}{0{,}105} \approx 22$ шага, для $q = 0{,}5$ — всего $\frac{2{,}303}{0{,}693} \approx 3{,}3$ шага.
Случай $q < 0$: знакочередование
Умножение на отрицательное число каждый раз переворачивает знак. Прогрессия «прыгает» через ноль: $16,\ -8,\ 4,\ -2,\ 1,\ -0{,}5, \dots$ (здесь $q = -\frac12$).
Правило знаков простое: если $b_1 > 0$, то члены с нечётными номерами положительны, с чётными — отрицательны (и наоборот при $b_1 < 0$). Формально знак $b_n$ совпадает со знаком $b_1 \cdot q^{n-1}$, а $q^{n-1}$ меняет знак с каждым шагом.
При этом «размах колебаний» подчиняется первым двум правилам: при $|q| > 1$ прыжки становятся всё шире (например, $q = -2$: $1, -2, 4, -8, 16, \dots$), при $|q| < 1$ — всё уже, и последовательность «зажимается» к нулю с двух сторон.
Пример 13 (средний): в прогрессии $b_1 = 16$, $q = -\tfrac12$ найди $b_6$ и $S_6$
Решение:
Шаг 1. Находим шестой член:
$$b_6 = 16 \cdot \left(-\frac{1}{2}\right)^{5}.$$Показатель нечётный, значит знак минус сохраняется: $\left(-\frac12\right)^5 = -\frac{1}{32}$.
$$b_6 = 16 \cdot \left(-\frac{1}{32}\right) = -\frac{16}{32} = -0{,}5.$$Шаг 2. Находим сумму. Здесь $q^6 = \left(-\frac12\right)^6 = \frac{1}{64}$ (показатель чётный — знак плюс):
$$S_6 = \frac{16 \left(\frac{1}{64} - 1\right)}{-\frac12 - 1} = \frac{16 \cdot \left(-\frac{63}{64}\right)}{-\frac{3}{2}}.$$Шаг 3. Числитель: $16 \cdot \left(-\frac{63}{64}\right) = -\frac{63}{4} = -15{,}75$.
Шаг 4. Делим: $S_6 = \dfrac{-15{,}75}{-1{,}5} = 10{,}5$.
Проверим наш ответ прямым сложением: прогрессия $16,\ -8,\ 4,\ -2,\ 1,\ -0{,}5$. Складываем: $16 - 8 = 8$; $8 + 4 = 12$; $12 - 2 = 10$; $10 + 1 = 11$; $11 - 0{,}5 = 10{,}5$ ✅
Ответ: $b_6 = -0{,}5$, $S_6 = 10{,}5$.
⚠️ Самая частая ошибка в таких задачах — потерять минус в скобке $(q - 1)$. При $q = -\frac12$ знаменатель равен $-1{,}5$, а не $-0{,}5$ и не $+1{,}5$. Проверка прямым сложением на маленьких $n$ спасает всегда.
Почему это важно
Три сценария — это три инженерных режима. $|q| > 1$: процесс расходится, и если это норма градиента при обучении, у тебя взрыв градиентов и nan через десяток шагов. $|q| < 1$: процесс затухает, и если это градиент, идущий назад по слоям рекуррентной сети, у тебя классическая проблема затухающих градиентов, из-за которой RNN не помнят далёкое прошлое. $q < 0$: колебания, и если это шаги оптимизатора, значит learning rate слишком велик — параметр «перепрыгивает» минимум туда-обратно. По одному числу $q$ ты предсказываешь судьбу всего процесса.
Связь с показательной функцией
Взгляни ещё раз на формулу $b_n = b_1 q^{\,n-1}$ и перепиши её чуть иначе:
$$b_n = \frac{b_1}{q} \cdot q^{\,n} = C \cdot q^{\,n}, \qquad \text{где } C = \frac{b_1}{q}.$$Справа — знакомая с уроков 111–113 показательная функция $y = C \cdot a^{x}$ с основанием $a = q$, в которую подставляют только натуральные $x = n$. Отсюда главный вывод:
Геометрическая прогрессия — это ограничение показательной функции на натуральные числа. Точки $(n;\, b_n)$ на координатной плоскости лежат ровно на графике экспоненты $y = C q^{x}$, а знаменатель $q$ — это её основание.
Отсюда сразу наследуются все свойства из уроков про показательную функцию:
- При $q > 1$ функция $y = C q^x$ возрастает (при $C > 0$) — прогрессия растёт, точки взлетают вверх.
- При $0 < q < 1$ функция убывает — прогрессия затухает, точки прижимаются к оси абсцисс, никогда её не касаясь.
- При $q = 1$ график — горизонтальная прямая, все члены одинаковы.
- При $q < 0$ непрерывного графика уже нет: выражение $q^x$ для произвольного вещественного $x$ не определено (что такое $(-2)^{0{,}5}$?). Прогрессия существует, а «экспонента через неё» — нет. Точки при этом прыгают между двумя экспонентами: $y = |C| |q|^x$ и $y = -|C||q|^x$.
Практическое следствие, которым пользуются постоянно: прологарифмируй прогрессию — получишь арифметическую. Действительно, если все члены положительны, то
$$\ln b_n = \ln \left(b_1 q^{\,n-1}\right) = \ln b_1 + (n-1)\ln q.$$Справа — арифметическая прогрессия с первым членом $\ln b_1$ и разностью $d = \ln q$. Именно поэтому экспоненциальные данные в логарифмическом масштабе выпрямляются в прямую: любой график «в лог-шкале» — это попытка превратить умножение в сложение и увидеть постоянный темп роста как постоянный наклон.
Пример 14 (средний): за сколько шагов величина $b_n = 1000 \cdot 0{,}5^{\,n-1}$ впервые станет меньше $1$?
Решение:
Шаг 1. Записываем неравенство:
$$1000 \cdot 0{,}5^{\,n-1} < 1 \quad \Longrightarrow \quad 0{,}5^{\,n-1} < 0{,}001.$$Шаг 2. Перепишем через степень двойки: $0{,}5^{n-1} = \dfrac{1}{2^{\,n-1}}$, поэтому неравенство равносильно
$$2^{\,n-1} > 1000.$$Шаг 3. Подбираем: $2^9 = 512 < 1000$, $2^{10} = 1024 > 1000$. Значит, наименьшее подходящее значение $n - 1 = 10$, откуда $n = 11$.
Проверим наш ответ: $b_{10} = 1000 \cdot 0{,}5^9 = \dfrac{1000}{512} \approx 1{,}953 > 1$; $b_{11} = \dfrac{1000}{1024} \approx 0{,}977 < 1$ ✅
Ответ: на одиннадцатом члене, то есть после десяти умножений.
Легенда о зёрнах: считаем по-настоящему
Ты наверняка слышал эту историю. Индийский царь Шерам восхитился игрой в шахматы и предложил её изобретателю Сете любую награду. Тот попросил зерно: одно на первую клетку доски, два на вторую, четыре на третью, восемь на четвёртую — и так до шестьдесят четвёртой, удваивая каждый раз. Царь рассмеялся скромности просьбы. Придворные считали всю ночь.
Давай посчитаем и мы — теперь у нас есть инструмент.
Шаг 1. Опознаём прогрессию. Количество зёрен на клетках: $1,\ 2,\ 4,\ 8,\ \dots$ — геометрическая прогрессия с $b_1 = 1$ и $q = 2$. Клеток на доске $8 \times 8 = 64$, значит нужна сумма $S_{64}$.
Шаг 2. Считаем последнюю клетку.
$$b_{64} = 1 \cdot 2^{63} = 9\,223\,372\,036\,854\,775\,808 \approx 9{,}22 \cdot 10^{18}.$$Девять с лишним квинтиллионов зёрен — на одной клетке.
Шаг 3. Считаем сумму.
$$S_{64} = \frac{1 \cdot (2^{64} - 1)}{2 - 1} = 2^{64} - 1 = 18\,446\,744\,073\,709\,551\,615 \approx 1{,}84 \cdot 10^{19}.$$Шаг 4. Замечаем главное. Сумма всех клеток равна $2^{64} - 1$, а на последней клетке лежит $2^{63}$. То есть на последней клетке зерна чуть больше, чем на всех предыдущих шестидесяти трёх вместе взятых ($2^{63}$ против $2^{63} - 1$). Это общее свойство прогрессии с $q = 2$: каждый следующий член перевешивает всю накопленную сумму. Именно оно ломает интуицию — человек мысленно оценивает «сколько-то там на последних клетках», а на самом деле там почти всё.
Шаг 5. Переводим в физические единицы. Масса одного зерна пшеницы — примерно $0{,}04$ г $= 4 \cdot 10^{-5}$ кг. Тогда:
$$m = 1{,}8447 \cdot 10^{19} \cdot 4 \cdot 10^{-5} \ \text{кг} \approx 7{,}38 \cdot 10^{14} \ \text{кг} = 7{,}38 \cdot 10^{11} \ \text{тонн}.$$Это 738 миллиардов тонн. Мировое производство пшеницы — около 800 миллионов тонн в год. Делим:
$$\frac{7{,}38 \cdot 10^{11}}{8 \cdot 10^{8}} \approx 920.$$Ответ: примерно девятьсот лет всего мирового урожая пшеницы. Царь не расплатился бы, даже отдав всё царство.
Шаг 6. А теперь то же самое, но про вычисления. Замени зёрна на секунды работы алгоритма, и получишь ровно причину, по которой перебор экспоненциальной сложности $O(2^n)$ неприменим. При $n = 64$ и скорости миллиард операций в секунду перебор займёт $\frac{1{,}84 \cdot 10^{19}}{10^{9}} = 1{,}84 \cdot 10^{10}$ секунд — около 580 лет. Добавь к задаче один-единственный элемент — и время удвоится. Это та же самая шахматная доска, просто без зерна.
Сложный процент и удвоение
Формула сложного процента — самое прямое приложение геометрической прогрессии в быту.
Если сумма $P$ лежит под $r$ процентов годовых с капитализацией раз в год, то через год на счету $P \cdot (1 + \frac{r}{100})$, через два — ещё раз столько же умножений. Это прогрессия со знаменателем
$$q = 1 + \frac{r}{100},$$и сумма через $n$ лет равна $P \cdot q^{\,n}$.
Пример 15 (средний): 100 000 ₽ под 8% годовых с ежегодной капитализацией. Сколько будет через 10 лет?
Решение:
Шаг 1. Знаменатель: $q = 1 + \dfrac{8}{100} = 1{,}08$.
Шаг 2. Считаем $1{,}08^{10}$ через последовательное возведение в квадрат:
$$1{,}08^2 = 1{,}1664; \quad 1{,}08^4 = 1{,}1664^2 = 1{,}36048896;$$$$1{,}08^8 = 1{,}36048896^2 \approx 1{,}85093021; \quad 1{,}08^{10} = 1{,}08^8 \cdot 1{,}08^2 \approx 1{,}85093 \cdot 1{,}1664 \approx 2{,}158925.$$Шаг 3. Итоговая сумма: $100\,000 \cdot 2{,}158925 \approx 215\,892{,}50$ ₽.
Ответ: около $215\,893$ ₽, то есть капитал вырос более чем вдвое.
📌 Сравни с простым процентом (арифметическая прогрессия): там было бы $100\,000 + 10 \cdot 8000 = 180\,000$ ₽. Разница почти 36 тысяч — и это всего за 10 лет при скромной ставке.
Время удвоения и правило 72
Отдельный вопрос: за сколько шагов величина удвоится? Нужно решить $q^{\,n} = 2$, откуда
$$n = \frac{\ln 2}{\ln q} \approx \frac{0{,}693}{\ln q}.$$Для $q = 1{,}08$: $\ln 1{,}08 \approx 0{,}07696$, и $n \approx \frac{0{,}693}{0{,}07696} \approx 9{,}0$ лет.
Отсюда знаменитое правило 72: при ставке $r$ процентов удвоение занимает примерно $\dfrac{72}{r}$ периодов. Для 8% это $72/8 = 9$ лет — точное попадание. Работает правило потому, что при малых $x$ выполняется $\ln(1+x) \approx x$, и тогда $n \approx \frac{0{,}693}{r/100} = \frac{69{,}3}{r}$; число 72 берут вместо 69,3 из-за удобной делимости (на 2, 3, 4, 6, 8, 9, 12) и небольшой поправки на то, что $\ln(1+x)$ чуть меньше $x$.
Та же логика работает наоборот, на затухании: время «полураспада» величины с $q < 1$ равно $n = \frac{\ln 0{,}5}{\ln q} = \frac{-0{,}693}{\ln q}$. Для $q = 0{,}9$: $n \approx \frac{-0{,}693}{-0{,}10536} \approx 6{,}6$ шага. То есть расписание с gamma=0.9 уполовинивает learning rate примерно каждые семь эпох — полезная цифра, чтобы прикинуть график в голове, не запуская обучение.
Геометрическая прогрессия в машинном обучении
Здесь тема перестаёт быть школьной. Разберём четыре места, где прогрессия работает в реальном коде, — и посчитаем в каждом.
1. Экспоненциальное расписание learning rate
Скорость обучения (learning rate) — это множитель, на который умножается градиент при обновлении весов. В начале обучения его берут большим, чтобы быстро спуститься в область минимума, а ближе к концу уменьшают, чтобы не «перепрыгивать» через оптимум. Самое простое расписание — экспоненциальное:
$$\text{lr}_n = \text{lr}_0 \cdot \gamma^{\,n},$$где $n$ — номер эпохи, а $\gamma$ (в коде — gamma) — коэффициент затухания. Это геометрическая прогрессия в чистом виде: первый член $\text{lr}_0$, знаменатель $\gamma$. В PyTorch это torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.9).
Пример 16 (средний): $\text{lr}_0 = 0{,}1$, $\gamma = 0{,}9$. Чему равна скорость обучения после 20 эпох и через сколько эпох она впервые упадёт ниже $0{,}001$?
Решение:
Шаг 1. Значение после 20 эпох — это член прогрессии:
$$\text{lr}_{20} = 0{,}1 \cdot 0{,}9^{20}.$$Шаг 2. Считаем $0{,}9^{20}$ последовательным возведением в квадрат:
$$0{,}9^2 = 0{,}81; \quad 0{,}9^4 = 0{,}6561; \quad 0{,}9^8 = 0{,}6561^2 \approx 0{,}43047; \quad 0{,}9^{16} \approx 0{,}43047^2 \approx 0{,}18530.$$$$0{,}9^{20} = 0{,}9^{16} \cdot 0{,}9^{4} \approx 0{,}18530 \cdot 0{,}6561 \approx 0{,}12158.$$Шаг 3. Значит $\text{lr}_{20} \approx 0{,}1 \cdot 0{,}12158 \approx 0{,}01216 \approx 0{,}0122$ — скорость упала примерно в 8 раз.
Шаг 4. Теперь порог. Решаем неравенство:
$$0{,}1 \cdot 0{,}9^{\,n} < 0{,}001 \quad \Longrightarrow \quad 0{,}9^{\,n} < 0{,}01.$$Шаг 5. Логарифмируем по натуральному основанию. Поскольку $\ln 0{,}9 < 0$, при делении на него знак неравенства переворачивается:
$$n \ln 0{,}9 < \ln 0{,}01 \quad \Longrightarrow \quad n > \frac{\ln 0{,}01}{\ln 0{,}9} = \frac{-4{,}60517}{-0{,}10536} \approx 43{,}71.$$Шаг 6. Номер эпохи целый, значит первое подходящее $n = 44$.
Проверим наш ответ: $0{,}9^{43} \approx 0{,}01077$ — ещё больше $0{,}01$; $0{,}9^{44} \approx 0{,}00970$ — уже меньше ✅
Ответ: после 20 эпох $\text{lr} \approx 0{,}0122$; порога $0{,}001$ расписание достигает на 44-й эпохе.
Практический смысл: если ты планируешь обучать модель 30 эпох, а $\gamma = 0{,}9$, то к концу скорость упадёт лишь в 20 раз — возможно, недостаточно для тонкой доводки. А если поставить $\gamma = 0{,}8$, то $0{,}8^{30} \approx 1{,}24 \cdot 10^{-3}$, то есть падение в 800 раз — модель фактически перестанет учиться на середине. Выбор $\gamma$ — это выбор знаменателя прогрессии, и он полностью определяет форму всего расписания.
2. Дисконтирование награды в обучении с подкреплением
В reinforcement learning агент получает награды $r_1, r_2, r_3, \dots$ на каждом шаге эпизода. Но награда «через сто шагов» ценится меньше, чем «прямо сейчас»: будущее неопределённо, а бесконечно далёкая награда вообще не должна влиять на решение здесь и сейчас. Поэтому вводят коэффициент дисконтирования $\gamma \in (0; 1)$ и считают суммарную отдачу:
$$G = r_1 + \gamma r_2 + \gamma^2 r_3 + \dots + \gamma^{\,T-1} r_T.$$Если все награды одинаковы и равны $r$, это ровно сумма геометрической прогрессии с $b_1 = r$ и $q = \gamma$.
Пример 17 (сложный): агент получает награду $1$ на каждом шаге эпизода длиной $T = 200$ шагов, $\gamma = 0{,}99$. Найди суммарную дисконтированную награду. Сравни с $\gamma = 0{,}9$.
Решение:
Шаг 1. Записываем сумму по формуле (удобна форма с $1 - q$, поскольку $\gamma < 1$):
$$G = \frac{1 \cdot (1 - \gamma^{200})}{1 - \gamma}.$$Шаг 2. Считаем $0{,}99^{200}$ через логарифм: $\ln 0{,}99 \approx -0{,}0100503$, умножаем на $200$: $-2{,}01007$. Тогда $0{,}99^{200} = e^{-2{,}01007} \approx 0{,}1340$.
Шаг 3. Подставляем:
$$G = \frac{1 - 0{,}1340}{1 - 0{,}99} = \frac{0{,}8660}{0{,}01} = 86{,}60.$$Шаг 4. Теперь $\gamma = 0{,}9$. Считаем $0{,}9^{200}$: $200 \cdot \ln 0{,}9 = 200 \cdot (-0{,}105361) = -21{,}072$, и $e^{-21{,}072} \approx 7 \cdot 10^{-10}$ — практически ноль.
$$G = \frac{1 - 7 \cdot 10^{-10}}{0{,}1} \approx 10{,}0.$$Ответ: при $\gamma = 0{,}99$ суммарная награда $\approx 86{,}6$; при $\gamma = 0{,}9$ — всего $\approx 10{,}0$.
Разберём смысл. При $\gamma = 0{,}9$ вклад шагов после сотого равен $0{,}9^{100} \approx 2{,}66 \cdot 10^{-5}$ — агент их буквально не видит, его горизонт планирования около десяти шагов. При $\gamma = 0{,}99$ горизонт растягивается примерно до сотни шагов, и агент начинает учитывать отдалённые последствия. Отсюда рабочее правило: эффективный горизонт планирования $\approx \frac{1}{1-\gamma}$ шагов ($10$ и $100$ соответственно — ровно то, что мы получили). Настраивая $\gamma$, ты настраиваешь не «жадность» агента абстрактно, а знаменатель геометрической прогрессии, определяющий, насколько далеко он смотрит.
📌 Ты, возможно, заметил: при $\gamma = 0{,}9$ ответ подозрительно близок к круглым $10$, а при $\gamma = 0{,}99$ — к $100$, но заметно меньше. Это потому, что $\frac{1}{1-\gamma}$ — предельное значение суммы при бесконечном числе шагов, и в первом случае двухсот шагов «более чем достаточно», а во втором — ещё нет. Что именно происходит с суммой при бесконечном числе членов, разберём в уроке 130.
3. Экспоненциальное скользящее среднее в Adam
Оптимизатор Adam хранит «момент» — сглаженную оценку градиента. Обновляется он так:
$$m_n = \beta m_{n-1} + (1 - \beta) g_n,$$где $g_n$ — градиент на шаге $n$, а $\beta$ — коэффициент сглаживания (по умолчанию $0{,}9$ для первого момента и $0{,}999$ для второго).
Развернём рекурсию. Подставим $m_{n-1} = \beta m_{n-2} + (1-\beta) g_{n-1}$ и продолжим до начала (при $m_0 = 0$):
$$m_n = (1-\beta)\Big( g_n + \beta g_{n-1} + \beta^2 g_{n-2} + \dots + \beta^{\,n-1} g_1 \Big).$$Вот оно: вес градиента, полученного $k$ шагов назад, равен $(1-\beta)\beta^{\,k}$ — геометрическая прогрессия с $b_1 = 1 - \beta$ и знаменателем $q = \beta$. Adam взвешивает историю градиентов геометрически убывающими весами: свежий градиент важен, вчерашний — чуть меньше, недельной давности — почти не важен.
Пример 18 (сложный): $\beta = 0{,}9$. Найди сумму всех весов после 10 шагов и объясни, зачем Adam делит момент на $1 - \beta^n$
Решение:
Шаг 1. Сумма весов — это сумма геометрической прогрессии с $b_1 = 1 - \beta = 0{,}1$, $q = 0{,}9$, $n = 10$:
$$W_{10} = \frac{0{,}1 \cdot (1 - 0{,}9^{10})}{1 - 0{,}9} = \frac{0{,}1 \cdot (1 - 0{,}9^{10})}{0{,}1} = 1 - 0{,}9^{10}.$$Множители $0{,}1$ сократились — красиво: сумма весов после $n$ шагов ровно равна $1 - \beta^{\,n}$.
Шаг 2. Считаем $0{,}9^{10}$: $0{,}9^8 \approx 0{,}43047$, $0{,}9^{10} = 0{,}9^8 \cdot 0{,}81 \approx 0{,}34868$.
$$W_{10} \approx 1 - 0{,}34868 = 0{,}65132.$$Шаг 3. Смысл: после десяти шагов «набралось» только 65% нужного веса. Если градиенты примерно одинаковы и равны $g$, то $m_{10} \approx 0{,}651 g$ — оценка занижена почти на треть. На первом шаге всё ещё хуже: $W_1 = 1 - 0{,}9 = 0{,}1$, то есть момент составляет лишь десятую долю градиента.
Шаг 4. Именно поэтому Adam делает bias correction — делит момент на сумму весов:
$$\hat{m}_n = \frac{m_n}{1 - \beta^{\,n}}.$$Для $n = 10$ поправочный множитель равен $\dfrac{1}{0{,}65132} \approx 1{,}5354$.
Ответ: сумма весов $= 1 - 0{,}9^{10} \approx 0{,}6513$; деление на неё компенсирует «недобор» веса на ранних шагах, и знаменитая формула bias correction в статье про Adam — это просто формула суммы конечной геометрической прогрессии.
Для второго момента с $\beta = 0{,}999$ эффект куда драматичнее: $1 - 0{,}999^{10} \approx 0{,}00996$, поправка почти в 100 раз. Без коррекции первые шаги обучения были бы полностью испорчены.
4. Логарифмическая сетка гиперпараметров
Когда подбирают learning rate или коэффициент регуляризации, никто не перебирает значения $0{,}01;\ 0{,}02;\ 0{,}03; \dots$ — это арифметическая сетка, и она бессмысленна: разница между $0{,}01$ и $0{,}02$ огромна (в два раза!), а между $0{,}91$ и $0{,}92$ ничтожна. Правильно перебирать значения, отличающиеся в постоянное число раз, — то есть геометрическую прогрессию.
Именно это делает numpy.logspace(-5, -1, 9): строит 9 значений от $10^{-5}$ до $10^{-1}$.
Пример 19 (средний): найди знаменатель сетки из 9 значений от $10^{-5}$ до $10^{-1}$ и выпиши её
Решение:
Шаг 1. Это геометрическая прогрессия: $b_1 = 10^{-5}$, $b_9 = 10^{-1}$.
Шаг 2. По формуле $b_9 = b_1 q^{8}$:
$$10^{-1} = 10^{-5} \cdot q^{8} \quad \Longrightarrow \quad q^{8} = \frac{10^{-1}}{10^{-5}} = 10^{4}.$$Шаг 3. Извлекаем корень восьмой степени:
$$q = \left(10^{4}\right)^{1/8} = 10^{4/8} = 10^{0{,}5} = \sqrt{10} \approx 3{,}162.$$Шаг 4. Выписываем сетку, умножая каждый раз на $\sqrt{10}$:
$$10^{-5};\ \ 3{,}16\cdot10^{-5};\ \ 10^{-4};\ \ 3{,}16\cdot10^{-4};\ \ 10^{-3};\ \ 3{,}16\cdot10^{-3};\ \ 10^{-2};\ \ 3{,}16\cdot10^{-2};\ \ 10^{-1}.$$Ответ: $q = \sqrt{10} \approx 3{,}162$ — каждое следующее значение примерно втрое больше предыдущего.
Общая формула для сетки из $N$ точек от $a$ до $b$:
$$q = \left(\frac{b}{a}\right)^{\frac{1}{N-1}}.$$Логарифмируя, получаем то же самое в другой форме: $\log q = \frac{\log b - \log a}{N-1}$ — то есть в логарифмической шкале точки расположены равномерно. Геометрическая прогрессия по значениям = арифметическая по логарифмам. Это ровно та связь, которую мы вывели выше.
Почему это важно
Все четыре сюжета — это один и тот же объект, надетый на разные задачи. Как только ты видишь в коде умножение на константу в цикле (lr *= gamma, m = beta*m + (1-beta)*g, total = gamma*total + r), ты видишь геометрическую прогрессию и можешь мгновенно ответить на инженерные вопросы: сколько будет через $n$ шагов ($b_1 q^{n-1}$), сколько накопится всего ($S_n$), через сколько шагов достигнем порога (логарифм). Без формулы это гадание и запуск обучения «посмотреть, что выйдет»; с формулой — расчёт на салфетке за минуту.
Практика: 30 заданий
Базовые (задания 1-10)
Задание 1: В геометрической прогрессии $b_1 = 3$, $q = 2$. Найди $b_5$ и $b_8$.
Задание 2: Является ли последовательность $5,\ 15,\ 45,\ 135$ геометрической прогрессией? Если да, найди $b_7$.
Задание 3: В прогрессии $b_1 = 64$, $q = \dfrac12$. Найди $b_7$.
Задание 4: Найди знаменатель и пятый член прогрессии $2,\ -6,\ 18,\ -54,\ \dots$
Задание 5: Найди сумму первых шести членов прогрессии с $b_1 = 1$, $q = 2$.
Задание 6: Найди сумму первых пяти членов прогрессии, у которой $b_1 = 7$, $q = 1$.
Задание 7: Вставь между числами $4$ и $9$ такое число, чтобы получилась геометрическая прогрессия. Сколько решений?
Задание 8: В геометрической прогрессии $b_3 = 12$, $b_5 = 48$. Найди $q$ и $b_1$.
Задание 9: Скорость обучения меняется по правилу $\text{lr}_n = 0{,}5 \cdot 0{,}5^{\,n-1}$ (первый шаг — $n=1$). Чему она равна на четвёртом шаге?
Задание 10: В прогрессии $b_1 = 2$, $q = 3$. Каким по счёту идёт член, равный $486$?
Средние (задания 11-20)
Задание 11: Найди $S_8$ для прогрессии $1,\ \dfrac12,\ \dfrac14,\ \dots$
Задание 12: На вклад в $100\,000$ ₽ начисляется 8% годовых с ежегодной капитализацией. Сколько будет на счету через 10 лет?
Задание 13: Колония бактерий удваивается каждые 20 минут. Изначально 500 клеток. Сколько будет через 3 часа?
Задание 14: Найди сумму первых десяти членов прогрессии с $b_1 = 3$, $q = 2$.
Задание 15: В прогрессии $b_1 = 16$, $q = -\dfrac12$. Найди $b_6$ и $S_6$.
Задание 16: В обучении с подкреплением агент получает награду $1$ на каждом из 5 шагов эпизода, коэффициент дисконтирования $\gamma = 0{,}9$. Найди суммарную дисконтированную награду.
Задание 17: В геометрической прогрессии $b_2 = 6$, $b_5 = 48$. Найди $b_1$, $q$ и $S_5$.
Задание 18: В прогрессии $b_1 = 1$, $q = 3$ сумма первых $n$ членов равна $3280$. Найди $n$.
Задание 19: Построй логарифмическую сетку из 7 значений learning rate от $10^{-4}$ до $10^{-1}$. Найди знаменатель прогрессии.
Задание 20: При каком $x$ числа $x - 1$, $x + 1$, $2x + 4$ образуют геометрическую прогрессию?
Продвинутые (задания 21-30)
Задание 21: Легенда о шахматах: на первую клетку кладут 1 зерно, на каждую следующую — вдвое больше. Сколько зёрен на всей доске из 64 клеток? Оцени массу, считая одно зерно равным $0{,}04$ г.
Задание 22: Расписание $\text{lr}_n = 0{,}1 \cdot 0{,}9^{\,n}$, где $n$ — номер эпохи. Через сколько эпох скорость обучения впервые станет меньше $0{,}001$?
Задание 23: В геометрической прогрессии $b_1 + b_3 = 30$ и $b_2 + b_4 = 60$. Найди $b_1$, $q$ и $S_5$.
Задание 24: Сумма первых $n$ членов некоторой последовательности равна $S_n = 3^{n} - 1$. Докажи, что это геометрическая прогрессия, и найди $b_1$ и $q$.
Задание 25: В оптимизаторе Adam момент обновляется как $m_n = \beta m_{n-1} + (1-\beta)g_n$ при $m_0 = 0$, $\beta = 0{,}9$. Найди сумму весов, с которыми учитываются градиенты за первые 10 шагов, и поправочный множитель bias correction.
Задание 26: Три числа образуют геометрическую прогрессию. Их сумма равна $21$, а сумма квадратов — $189$. Найди эти числа.
Задание 27: Найди $S_{10}$ для прогрессии с $b_1 = 1$, $q = -2$.
Задание 28: Что больше: сумма первых 20 членов арифметической прогрессии с $a_1 = 1$, $d = 1$ или сумма первых 20 членов геометрической прогрессии с $b_1 = 1$, $q = 1{,}5$? Во сколько раз?
Задание 29: При итеративном прунинге нейросети на каждой итерации удаляют 20% оставшихся весов. Через сколько итераций останется менее 10% исходных весов?
Задание 30: Агент RL получает награду $1$ на каждом шаге эпизода длиной $T = 200$. Найди суммарную дисконтированную награду при $\gamma = 0{,}99$ и при $\gamma = 0{,}95$. Оцени, какая доля суммы набирается за первые 50 шагов при $\gamma = 0{,}95$.
Частые ошибки
❌ Ошибка 1: путают показатель $n$ и $n-1$ в формуле члена
Неправильно: считать $b_5 = b_1 q^5$, то есть возводить $q$ в степень, равную номеру члена.
Правильно: $b_5 = b_1 q^{4}$. Показатель — это число сделанных шагов, а от первого члена до пятого шагов ровно четыре, а не пять.
💡 Почему важно: ошибка на единицу в показателе даёт результат, отличающийся в $q$ раз — при $q = 2$ это ровно вдвое, при $q = 10$ — в десять раз. Мнемоника: подставь $n = 1$ и проверь, получается ли $b_1$. Формула $b_1 q^{n-1}$ при $n=1$ даёт $b_1 q^0 = b_1$ ✅, а $b_1 q^n$ даёт $b_1 q$ ❌.
❌ Ошибка 2: пишут характеристическое свойство без модуля
Неправильно: $b_n = \sqrt{b_{n-1} b_{n+1}}$ — «член равен среднему геометрическому соседей».
Правильно: $|b_n| = \sqrt{b_{n-1} b_{n+1}}$, или в эквивалентной форме без корня $b_n^2 = b_{n-1}b_{n+1}$.
💡 Почему важно: в прогрессии $2,\ -4,\ 8$ произведение соседей равно $16$, корень равен $4$, а член равен $-4$. Без модуля утверждение просто ложно для любой прогрессии с отрицательным $q$. Практическое следствие: задача «вставь число между $a$ и $b$» почти всегда имеет два ответа, и потерять второй — типичная потеря балла.
❌ Ошибка 3: применяют формулу суммы при $q = 1$
Неправильно: подставить $q = 1$ в $S_n = \dfrac{b_1(q^n-1)}{q-1}$ и получить $\dfrac{0}{0}$ или, что хуже, «сократить» и написать какую-нибудь чушь.
Правильно: при $q = 1$ прогрессия состоит из одинаковых членов, и $S_n = n b_1$ — считается устно.
💡 Почему важно: в коде это буквально деление на ноль и inf/nan в результате. Если пишешь функцию расчёта суммы, случай $q = 1$ надо обрабатывать отдельным if — иначе она развалится ровно там, где математика тривиальна.
❌ Ошибка 4: теряют знак в знаменателе $q - 1$ при отрицательном $q$
Неправильно: при $q = -\dfrac12$ написать в знаменателе $\dfrac12 - 1 = -\dfrac12$ или $\left|-\dfrac12\right| - 1$.
Правильно: знаменатель — это $q - 1 = -\dfrac12 - 1 = -\dfrac32$. Никаких модулей, подставляем $q$ как есть, со знаком.
💡 Почему важно: это самая частая арифметическая ошибка в задачах со знакочередованием — и её очень легко поймать: посчитай сумму первых трёх-четырёх членов прямым сложением и сравни с формулой. Если сошлось — знаменатель подставлен верно.
❌ Ошибка 5: путают $n$-й член и сумму первых $n$ членов
Неправильно: на вопрос «сколько всего зёрен на доске» отвечать $2^{63}$ (это только последняя клетка) или на вопрос «сколько накопится на вкладе» отвечать суммой всех промежуточных балансов.
Правильно: $b_n$ — сколько будет на шаге $n$; $S_n$ — сколько накопится за все $n$ шагов. Всегда переформулируй условие: спрашивают «значение» или «итог»?
💡 Почему важно: в RL это разница между наградой на текущем шаге и суммарной отдачей эпизода — двумя совершенно разными величинами, которые оптимизируются по-разному. В финансах — между «сколько на счету» и «сколько всего выплачено».
❌ Ошибка 6: считают, что при $|q| < 1$ члены рано или поздно становятся нулём
Неправильно: утверждать, что прогрессия $16,\ 8,\ 4,\ 2,\ 1,\ 0{,}5, \dots$ «на каком-то шаге доходит до нуля».
Правильно: все члены равны $b_1 q^{n-1}$ — произведению ненулевых чисел, поэтому ни один из них нулю не равен. Члены становятся сколь угодно малыми, но остаются положительными (или отрицательными, если $b_1 < 0$).
💡 Почему важно: отсюда растёт понимание затухающих градиентов: вклад далёкого слоя в RNN не «обнуляется», он становится численно неразличимо малым — и именно поэтому проблема решается архитектурно (LSTM, residual-связи), а не «увеличением точности вычислений». Строгий язык для «сколь угодно малых» величин появится в следующем уроке — там, где вводится предел.
❌ Ошибка 7: определяют «геометричность» по двум-трём отношениям
Неправильно: увидев $1,\ 2,\ 4,\ 8,\ 15$, объявить прогрессию геометрической, потому что «первые отношения по 2».
Правильно: отношение должно быть постоянным на каждой паре соседей. Одно несовпадение — и это не прогрессия.
💡 Почему важно: в реальных данных «почти геометрический» рост встречается сплошь и рядом, а экстраполяция по трём точкам даёт катастрофические промахи именно из-за экспоненциальной природы: маленькая ошибка в $q$ возводится в степень $n$. Ошибись в знаменателе на 5% — и через 20 шагов прогноз разойдётся с реальностью в $1{,}05^{20} \approx 2{,}65$ раза.
Главное запомнить
✅ Геометрическая прогрессия — последовательность, где каждый следующий член получается умножением предыдущего на постоянный знаменатель: $b_{n+1} = b_n q$, при обязательных условиях $b_1 \neq 0$ и $q \neq 0$.
✅ Из этих двух условий следует, что все члены прогрессии ненулевые — на любой из них можно делить.
✅ Формула $n$-го члена: $b_n = b_1 q^{\,n-1}$. Показатель — число шагов, а не номер члена. Обобщение: $b_n = b_m q^{\,n-m}$.
✅ Характеристическое свойство: $b_n^2 = b_{n-1} b_{n+1}$, то есть $|b_n| = \sqrt{b_{n-1}b_{n+1}}$. Модуль обязателен: корень не знает знака, а член может быть отрицательным.
✅ Обратное тоже верно: если у последовательности ненулевых чисел $b_n^2 = b_{n-1}b_{n+1}$ для всех внутренних членов — это геометрическая прогрессия.
✅ Сумма первых $n$ членов при $q \neq 1$: $S_n = \dfrac{b_1(q^{\,n}-1)}{q-1} = \dfrac{b_1(1-q^{\,n})}{1-q}$. Обе записи — одно и то же.
✅ При $q = 1$ формула не работает (деление на ноль), и сумма считается напрямую: $S_n = n b_1$.
✅ Вывод формулы держится на одном приёме: умножили сумму на $q$ и вычли исходную — средние слагаемые уничтожаются, остаются два крайних.
✅ Поведение задаётся знаменателем: $|q|>1$ — взрывной рост по модулю; $|q|<1$ — затухание к нулю без его достижения; $q<0$ — знакочередование; $q=1$ — постоянная последовательность.
✅ Прогрессия — это экспонента на натуральных числах: точки $(n;\,b_n)$ лежат на графике $y = Cq^{x}$, а $q$ — основание. Логарифм превращает геометрическую прогрессию в арифметическую: $\ln b_n = \ln b_1 + (n-1)\ln q$.
✅ В ML это одна и та же конструкция четырежды: lr *= gamma (расписание), $\gamma^k$ (дисконтирование), $(1-\beta)\beta^k$ (моменты Adam), np.logspace (сетка гиперпараметров).
Связь с другими темами курса
Что было раньше: урок 126 ввёл понятие последовательности и способы её задания — рекуррентный и формулой общего члена; здесь мы использовали оба. Урок 127 про арифметическую прогрессию дал прямой контраст: там постоянная разность и линейный рост, здесь постоянное отношение и экспоненциальный. Уроки 111–113 про показательную функцию — теоретический фундамент: формула $b_n = b_1 q^{n-1}$ есть не что иное, как экспонента, вычисленная в целых точках. Уроки 116–119 про логарифмы дали инструмент для обратной задачи: найти номер шага, на котором достигается заданное значение.
Что дальше: урок 129 вводит предел последовательности — строгий язык для фразы «члены становятся сколь угодно малыми», которую мы здесь произносили интуитивно. Урок 130 применит этот язык к нашей теме и разберёт сумму бесконечной геометрической прогрессии — то, к чему подбиралась сумма в примере 11 и в задании 30. Дальше геометрическая прогрессия всплывёт в теории рядов, в формулах аннуитетных платежей и — уже за пределами школьного курса — в анализе сходимости итерационных методов оптимизации, где скорость сходимости как раз и описывают знаменателем геометрической прогрессии.
Где это применяется в жизни и в ML/данных:
🤖 В машинном обучении: экспоненциальные расписания learning rate (ExponentialLR), дисконтирование награды в RL (коэффициент $\gamma$ и эффективный горизонт $\frac{1}{1-\gamma}$), экспоненциальные скользящие средние в Adam/RMSProp и bias correction, логарифмические сетки в подборе гиперпараметров, итеративный прунинг и квантизация, warm restarts с геометрически убывающей амплитудой.
📊 В анализе данных: экспоненциальное сглаживание временных рядов, оценка темпов роста метрик (MoM, YoY — это в точности знаменатель прогрессии), логарифмические оси на графиках, half-life в моделях удержания пользователей.
💰 В финансах: сложный процент, аннуитетные платежи по кредиту, дисконтирование денежных потоков (NPV — это сумма геометрической прогрессии, если платежи равные), инфляция и обесценивание.
🔬 В естественных науках: радиоактивный распад и период полураспада, рост популяций, затухание колебаний, деление клеток, распространение эпидемий на ранней стадии.
💻 В информатике: экспоненциальная сложность алгоритмов $O(2^n)$, удвоение размера динамического массива (амортизированная константа как раз доказывается через сумму прогрессии), экспоненциальный backoff при повторных сетевых запросах, бинарный поиск как деление отрезка с $q = \frac12$.
Интересные факты
💡 Формуле суммы больше двух тысяч лет. Предложение IX.35 из «Начал» Евклида (около 300 г. до н. э.) — это формула суммы геометрической прогрессии, записанная на языке пропорций. Евклиду она была нужна не ради процентов, а чтобы доказать: если $2^{k+1} - 1$ — простое число, то $2^{k}(2^{k+1}-1)$ — совершенное (равно сумме своих делителей). Так родились числа $6$, $28$, $496$, $8128$. Спустя две тысячи лет Эйлер доказал, что все чётные совершенные числа имеют именно такой вид — а нечётных до сих пор не нашли ни одного.
💡 Парадокс Зенона про Ахиллеса — это спор о геометрической прогрессии. Ахиллес догоняет черепаху: пока он бежит до её позиции, она уползает вперёд, и так бесконечно. Отрезки, которые пробегает Ахиллес, образуют геометрическую прогрессию с $q < 1$. Зенон считал, что бесконечное число отрезков нельзя пройти за конечное время. Древние греки не могли аккуратно возразить, потому что у них не было понятия предела — того самого, что появится в уроке 129.
💡 Бумага, сложенная 42 раза, достанет до Луны. Толщина листа $0{,}1$ мм, каждое складывание удваивает: это прогрессия с $q = 2$. После 42 складываний толщина равна $0{,}0001 \cdot 2^{42}$ м $\approx 4{,}4 \cdot 10^{8}$ м $= 440\,000$ км — больше расстояния до Луны ($384\,000$ км). Физически сложить лист больше 7–8 раз почти невозможно, но арифметика неумолима: рекорд, поставленный школьницей Бритни Гэлливен в 2002 году, — 12 складываний рулона туалетной бумаги длиной 1200 метров.
💡 Закон Мура — прогрессия с $q = 2$ и шагом в два года. Гордон Мур в 1965 году заметил удвоение числа транзисторов на кристалле и предсказал, что так продолжится «как минимум десять лет». Продолжалось около пятидесяти. За 50 лет это $2^{25} \approx 33$ миллиона раз — примерно во столько же раз выросло число транзисторов от первых интегральных схем до современных процессоров.
💡 Строй музыкального инструмента — геометрическая прогрессия. В равномерно темперированном строе частоты соседних полутонов относятся как $q = \sqrt[12]{2} \approx 1{,}0595$. За 12 полутонов частота ровно удваивается — это октава. То есть клавиатура пианино — это геометрическая прогрессия, а наше восприятие высоты звука логарифмическое: мы слышим равные отношения частот как равные интервалы. Ровно та же логика, что в логарифмической сетке гиперпараметров.
Лайфхаки и полезные трюки
1. Проверяй формулу подстановкой $n = 1$
Забыл, где $n$, а где $n-1$? Подставь единицу. Правильная формула $b_1 q^{n-1}$ при $n=1$ даёт $b_1 q^0 = b_1$ — то, что нужно. Неправильная $b_1 q^n$ даёт $b_1 q$ — уже видно, что мимо. Этот приём за две секунды спасает от самой частой ошибки в теме.
2. Возводи в степень через квадраты, а не умножением подряд
Чтобы посчитать $1{,}08^{10}$, не умножай десять раз. Считай так: $1{,}08^2$, потом квадрат от него ($=1{,}08^4$), потом квадрат от него ($=1{,}08^8$), потом $1{,}08^8 \cdot 1{,}08^2$. Четыре умножения вместо девяти, и ошибок меньше. Это тот же алгоритм быстрого возведения в степень, что используется в криптографии.
3. Правило 72 для устной оценки удвоения
Величина, растущая на $r$ процентов за период, удваивается примерно за $72/r$ периодов. 8% — девять лет, 12% — шесть лет, 3% — двадцать четыре года. Для затухания работает так же: значение с $q = 0{,}9$ (падение на 10%) уполовинивается примерно за $72/10 \approx 7$ шагов. Проверка через логарифм даёт $6{,}6$ — точность более чем достаточная для прикидки в голове.
4. Сумму со знакочередованием всегда проверяй прямым сложением
Если $q < 0$, посчитай $S_3$ или $S_4$ двумя способами: по формуле и сложением членов в столбик. Совпало — значит, знаки в формуле подставлены верно, и можно смело считать $S_{20}$. Не совпало — почти наверняка потерян минус в $(q-1)$.
5. Логарифм — стандартный ключ к вопросу «на каком шаге»
Любая задача «через сколько шагов величина достигнет порога» решается одинаково: $b_1 q^{n-1} = A \Rightarrow n = 1 + \dfrac{\ln(A/b_1)}{\ln q}$. И запомни: при $q < 1$ логарифм отрицателен, и при делении на него знак неравенства переворачивается. Это правило номер один в таких задачах.
6. «Умножили и вычли» работает не только здесь
Приём из вывода формулы суммы — универсальный. Им же считают суммы вида $1 + 2q + 3q^2 + \dots$ (умножить на $q$, вычесть, получить обычную геометрическую прогрессию), им же берут дисконтированные аннуитеты. Если видишь сумму, где каждый следующий член связан с предыдущим умножением, — попробуй домножить всю сумму на этот множитель и вычесть.
7. Для сетки гиперпараметров считай знаменатель, а не «шаг»
Хочешь $N$ значений от $a$ до $b$ — бери $q = \left(\frac{b}{a}\right)^{1/(N-1)}$ и умножай. Хочешь «примерно втрое», покрывая четыре порядка, — это $q = \sqrt{10}$ и 9 точек. В коде: np.logspace(np.log10(a), np.log10(b), N). Арифметическая сетка для learning rate почти всегда ошибка.
8. Помни разницу «на сколько» и «во сколько»
Услышал «выросло на 500 единиц» — думай про арифметическую прогрессию. Услышал «выросло на 15%», «удвоилось», «упало вдвое», «в разы» — это геометрическая. Одно слово в условии («на» против «в») меняет весь аппарат решения.
А что если членов бесконечно много?
Ты наверняка заметил закономерность в примерах с $|q| < 1$. Сумма прогрессии $1,\ \frac12,\ \frac14,\dots$ за 8 членов дала $1{,}9922$, за 10 членов — $1{,}9980$, и каждый раз подбиралась к двойке всё ближе, но не достигала её. Дисконтированная награда с $\gamma = 0{,}95$ за 200 шагов дала ровно $20{,}00$ — при том, что $\frac{1}{1-0{,}95} = 20$.
Это не совпадение. В формуле $S_n = \frac{b_1(1-q^{\,n})}{1-q}$ при $|q| < 1$ множитель $q^{\,n}$ становится всё меньше с ростом $n$, и вся сумма прижимается к числу $\frac{b_1}{1-q}$. Отсюда и вылезали «круглые» $10$, $20$, $100$ в задачах про RL — это и есть та самая величина.
Но чтобы сказать это строго, а не «на глаз», нужен аппарат, которого у нас пока нет: понятие предела. Что значит «стремится», «приближается сколь угодно близко», почему для $|q| \geq 1$ ничего подобного не происходит — всё это ждёт нас в уроке 129. А в уроке 130 мы применим предел именно к нашей формуле и получим сумму бесконечной геометрической прогрессии — короткую, красивую и на удивление полезную. Пока просто держи в голове: конечная сумма, которую ты научился считать сегодня, — это ровно тот кирпич, из которого она собирается.
Геометрическая прогрессия — редкий случай, когда одна школьная формула буквально лежит в коде, который ты будешь писать. lr *= gamma в цикле обучения, gamma=0.99 в конфиге агента, betas=(0.9, 0.999) у Adam, np.logspace в подборе гиперпараметров — за каждой из этих строк стоит $b_n = b_1 q^{n-1}$ и $S_n = \frac{b_1(q^n-1)}{q-1}$. Разница между тем, кто это видит, и тем, кто не видит, простая: первый за минуту на салфетке считает, на какой эпохе расписание задушит обучение и хватит ли эпизода, чтобы агент увидел отдалённую награду; второй запускает обучение и ждёт полдня, чтобы это выяснить.
И ещё одно — про интуицию. Человеческий мозг устроен для сложения: мы отлично чувствуем «плюс сто в день», и почти не чувствуем «плюс десять процентов в день». Легенда про зёрна жива тысячу лет именно потому, что бьёт в это слепое пятно, и каждый раз ответ поражает. Ты только что посчитал его сам и увидел, откуда берутся эти двадцать цифр. Теперь у тебя есть иммунитет: где бы ни встретилось постоянное отношение — в процентах по вкладу, в темпе роста метрики, в сложности алгоритма или в затухании градиента, — ты знаешь, чем это кончится, и умеешь посчитать когда. Впереди предел, и там наша прогрессия раскроется ещё одной гранью: окажется, что бесконечная сумма бесконечно многих слагаемых может быть вполне конечным и очень аккуратным числом.
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку