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

Арифметическая прогрессия

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

Арифметическая прогрессия 📐

Открой конфиг обучения любой современной нейросети — и почти наверняка найдёшь там строчку вроде scheduler: linear. За этим словом стоит простая вещь: скорость обучения (learning rate) не остаётся постоянной, а уменьшается от шага к шагу на одну и ту же величину. Первый шаг — $0{,}001$, второй — $0{,}00099$, третий — $0{,}00098$, и так десять тысяч раз, пока значение не дойдёт до нуля. Никакой магии: перед тобой последовательность, у которой соседние члены отличаются на одно и то же число. Это и есть арифметическая прогрессия — тема сегодняшнего урока.

В уроке 126 мы разобрались, что такое последовательность вообще: функция, у которой аргумент пробегает натуральные числа. Мы научились задавать её формулой $n$-го члена и рекуррентно, отличать возрастающие от убывающих, ограниченные от неограниченных. Но последовательность «вообще» — объект слишком дикий, чтобы про него можно было доказать что-то содержательное. Настоящая математика начинается там, где мы накладываем на объект одно жёсткое условие и смотрим, сколько следствий из него выжимается. Арифметическая прогрессия — как раз такой случай: одно условие («разность соседей постоянна») порождает формулу любого члена, формулу суммы, красивое характеристическое свойство и прямой мост к линейной функции.

Почему это стоит твоего времени, если ты идёшь в ML и работу с данными? Потому что арифметическая прогрессия — это математическое имя для равномерного шага. Всё, что растёт или падает на постоянную величину, — это она: линейное расписание learning rate, линейный warmup, равномерная сетка гиперпараметров в grid search, линейная интерполяция между двумя чекпоинтами модели, номера строк в батче, координаты пикселей по оси, значения np.linspace, простые проценты по вкладу. А формула суммы отвечает на вопрос «сколько всего накопилось за весь прогон» — от суммарного числа обработанных примеров до суммарного «пути», который прошли веса модели.

В этом уроке мы разберём прогрессию по слоям: определение и разность $d$, вывод формулы $n$-го члена, характеристическое свойство и обратное к нему утверждение, две формулы суммы (и историю про восьмилетнего Гаусса, который придумал парный приём быстрее учителя), связь с линейной функцией, задачи на номер члена и количество членов, простые проценты и, конечно, плотный ML-блок с реальными расчётами расписаний.

🎯 Ты узнаешь:

  • Как по определению через постоянную разность $d$ вывести формулу $a_n = a_1 + (n-1)d$ и мгновенно находить любой член, не выписывая все предыдущие
  • Почему каждый член прогрессии равен среднему арифметическому соседей и как это свойство работает в обратную сторону — как критерий того, что перед тобой прогрессия
  • Две формулы суммы $S_n$, приём Гаусса, из которого они обе получаются, и как считать сумму не всей прогрессии, а её куска — «с 11-го по 20-й член»
  • Почему график арифметической прогрессии лежит на прямой, разность $d$ — это угловой коэффициент, а сумма $S_n$ зависит от $n$ квадратично
  • Как посчитать learning rate на конкретной эпохе при linear decay и warmup, почему для скорости обучения берут логарифмическую сетку, а не равномерную, и сколько операций уйдёт на обучение с линейно растущей нагрузкой

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

Арифметическая прогрессия — одна из самых древних математических конструкций, которые дошли до нас в письменном виде. В папирусе Ринда (около 1650 года до н. э., переписан писцом Ахмесом с ещё более раннего текста) есть задача №64: разделить десять мер ячменя между десятью людьми так, чтобы каждый следующий получал на одну восьмую меры больше предыдущего. Ахмес решает её по сути современным способом: находит средний член (одну меру на человека) и раскладывает остальные симметрично вокруг него. Похожие задачи о делении хлеба и зерна «с постоянной прибавкой» встречаются в вавилонских клинописных табличках и в древнекитайском трактате «Математика в девяти книгах».

Систематически прогрессии описал Евклид: в «Началах» (около 300 года до н. э.) целая книга посвящена отношениям величин, а суммы последовательных чисел разбирались геометрически — как площади фигур, выложенных из камешков. Греки вообще любили «фигурные числа»: треугольное число $1+2+3+\dots+n$ буквально изображалось треугольником из точек, и то, что два таких треугольника складываются в прямоугольник $n \times (n+1)$, было для них зрительным фактом, а не алгебраической выкладкой. Формулу суммы арифметической прогрессии в общем виде записали индийские математики — Ариабхата в трактате «Ариабхатия» (499 год) приводит правило, полностью эквивалентное нашему $S_n = \frac{2a_1 + (n-1)d}{2} \cdot n$, причём сразу с обратной задачей: как по известной сумме найти количество членов.

А самая известная история случилась гораздо позже, около 1786 года, в немецком городке Брауншвейг. Учитель начальной школы, желая занять класс надолго, велел ученикам сложить все числа от 1 до 100. Через несколько секунд девятилетний Карл Фридрих Гаусс положил на стол грифельную доску с единственным числом: 5050. Он заметил, что если сложить первое число с последним ($1 + 100 = 101$), второе с предпоследним ($2 + 99 = 101$), третье с третьим с конца ($3 + 98 = 101$) — сумма каждой пары одинакова, а пар ровно пятьдесят. Значит, $101 \cdot 50 = 5050$. Эта история известна в десятке версий (в некоторых числа были не от 1 до 100, а куда более неудобные), но математическая суть везде одна и та же — и именно она лежит в основе формулы, которую мы выведем ниже.

Мостик в сегодня получается неожиданно коротким. Когда в 2017 году в работе про трансформеры («Attention Is All You Need») описывали расписание обучения, первая его фаза — linear warmup — это буквально арифметическая прогрессия: learning rate растёт от нуля на постоянную величину каждый шаг. Когда в библиотеке transformers вызывается get_linear_schedule_with_warmup, внутри считается ровно $a_n = a_1 + (n-1)d$. А когда ты пишешь np.linspace(0, 1, 50), NumPy строит арифметическую прогрессию из пятидесяти членов. Правило, которым египетский писец делил ячмень, никуда не делось — оно просто переехало в конфиги обучения нейросетей.


Определение: последовательность с постоянным шагом

Интуиция

Представь, что ты поднимаешься по лестнице. Все ступеньки одинаковой высоты — скажем, по 17 сантиметров. Тогда высота, на которой ты находишься, полностью определяется номером ступеньки: первая — 17 см, вторая — 34, десятая — 170. Ты не запоминаешь высоту каждой ступеньки отдельно, потому что достаточно знать две вещи: с чего начал и на сколько поднимаешься за шаг. Вся остальная информация — следствие.

Арифметическая прогрессия устроена ровно так же. Это последовательность, у которой «высота ступеньки» одна и та же на всём протяжении. Причём ступенька может быть и отрицательной — тогда ты спускаешься: learning rate при linear decay падает на постоянную величину, остаток по кредиту при равномерном погашении тела долга уменьшается на постоянную сумму, оставшееся число необработанных примеров в эпохе убывает на размер батча.

Ключевое слово здесь — постоянная. Не «примерно одинаковая», не «в среднем такая», а буквально одна и та же для любой пары соседей. Именно эта жёсткость даёт нам право писать формулы, а не гадать. Если разность прыгает хотя бы в одном месте — прогрессия ломается, и все формулы урока перестают работать.

Определение: Арифметической прогрессией называется числовая последовательность $(a_n)$, в которой каждый член, начиная со второго, равен предыдущему, сложенному с одним и тем же числом $d$:

$$a_{n+1} = a_n + d \quad \text{для всех } n \geqslant 1$$

Число $d$ называется разностью прогрессии.

Обрати внимание на два технических момента в этом определении.

Во-первых, оно рекуррентное: каждый следующий член выражен через предыдущий. Чтобы такая запись однозначно задавала последовательность, нужен ещё первый член $a_1$ — стартовая точка. Пара $(a_1, d)$ полностью определяет прогрессию: два числа вместо бесконечного списка. Это и есть та самая «сжатая» форма записи, ради которой мы вообще выделили этот класс последовательностей.

Во-вторых, разность находится вычитанием, а не делением, и это отражено в названии: $d = a_{n+1} - a_n$. Слово «разность» тут буквальное. В следующем уроке появится геометрическая прогрессия, где соседи связаны умножением, и там ключевое число будет называться «знаменателем» — от деления. Не путай эти два слова, они прямо кодируют операцию.

Смысл знака разности:

  • $d > 0$ — прогрессия возрастающая: каждый член больше предыдущего (например, $3, 8, 13, 18, \dots$ при $d = 5$)
  • $d < 0$ — прогрессия убывающая: каждый следующий меньше (например, $100, 93, 86, \dots$ при $d = -7$)
  • $d = 0$ — прогрессия постоянная: все члены равны, $7, 7, 7, 7, \dots$ Формально это тоже арифметическая прогрессия, вырожденный случай — и он не бесполезен: расписание «constant learning rate» это ровно она

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

Пример 1 (простой): является ли последовательность $12, 17, 22, 27, 32, \dots$ арифметической прогрессией? Если да — найди $d$ и следующие два члена

Решение:

Шаг 1. Проверим разности всех соседних пар, которые нам даны:

$$17 - 12 = 5, \quad 22 - 17 = 5, \quad 27 - 22 = 5, \quad 32 - 27 = 5$$

Шаг 2. Все разности совпали и равны $5$. Значит, перед нами арифметическая прогрессия с $d = 5$.

Шаг 3. Следующие члены получаем прибавлением разности:

$$a_6 = 32 + 5 = 37, \qquad a_7 = 37 + 5 = 42$$

Ответ: да, это арифметическая прогрессия, $d = 5$, следующие члены — $37$ и $42$.


Пример 2 (средний): последовательность задана формулой $n$-го члена $a_n = 4n + 1$. Докажи, что это арифметическая прогрессия, и найди её разность

Решение:

Шаг 1. Чтобы доказать, что последовательность — прогрессия, надо показать: разность соседних членов не зависит от $n$. Выпишем член с номером $n+1$, подставив $n+1$ вместо $n$:

$$a_{n+1} = 4(n+1) + 1 = 4n + 4 + 1 = 4n + 5$$

Шаг 2. Вычтем из него член с номером $n$:

$$a_{n+1} - a_n = (4n + 5) - (4n + 1) = 4$$

Шаг 3. Результат — число $4$, в нём нет $n$. Разность одна и та же для любой пары соседей, значит определение выполнено.

Проверим наш ответ: выпишем первые члены. $a_1 = 5$, $a_2 = 9$, $a_3 = 13$, $a_4 = 17$ — шаг действительно 4 ✅

Ответ: это арифметическая прогрессия с $d = 4$ и $a_1 = 5$.

📌 Запомни этот приём: любая последовательность вида $a_n = kn + b$ (линейная по $n$) является арифметической прогрессией с разностью $d = k$. Проверка занимает две строки и работает всегда.


Пример 3 (сложный): является ли арифметической прогрессией последовательность квадратов $b_n = n^2$, то есть $1, 4, 9, 16, 25, \dots$? А последовательность их разностей?

Решение:

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

$$4 - 1 = 3, \quad 9 - 4 = 5, \quad 16 - 9 = 7, \quad 25 - 16 = 9$$

Шаг 2. Разности получились разные: $3, 5, 7, 9$. Достаточно одного несовпадения, чтобы определение нарушилось — уже $3 \neq 5$ закрывает вопрос. Значит, $b_n = n^2$ не арифметическая прогрессия.

Шаг 3. А теперь интересное. Посмотрим на саму последовательность разностей $3, 5, 7, 9, \dots$ Её разности: $5-3 = 2$, $7-5=2$, $9-7=2$. Это арифметическая прогрессия с $d = 2$!

Шаг 4. Проверим в общем виде: $b_{n+1} - b_n = (n+1)^2 - n^2 = n^2 + 2n + 1 - n^2 = 2n + 1$. Мы получили линейную по $n$ формулу — а по выводу из примера 2 такая последовательность обязательно является арифметической прогрессией с разностью $2$.

Ответ: сама последовательность квадратов — не прогрессия, но последовательность её разностей — арифметическая прогрессия с $d = 2$.

💡 Этот факт — не курьёз. Он говорит вот что: квадратичная зависимость даёт линейные разности, а линейная зависимость даёт постоянные разности. В обратную сторону это работает так же: если последовательность постоянных разностей проинтегрировать (сложить), получится квадратичная. Именно поэтому чуть ниже сумма арифметической прогрессии $S_n$ окажется квадратичной по $n$ — мы к этому вернёмся, и ты увидишь, что это тот же самый факт, прочитанный справа налево.


Пример 4 (сложный): прогрессия задана рекуррентно: $a_1 = -4$, $a_{n+1} = a_n + 6$. Выпиши первые шесть членов. Какой член первым станет положительным?

Решение:

Шаг 1. Разворачиваем рекуррентную формулу шаг за шагом:

$$a_1 = -4, \quad a_2 = -4 + 6 = 2, \quad a_3 = 2 + 6 = 8, \quad a_4 = 14, \quad a_5 = 20, \quad a_6 = 26$$

Шаг 2. Первым положительным оказался $a_2 = 2$ — уже второй член перескочил через ноль.

Шаг 3. Заметь, что прыжок через ноль здесь произошёл «мимо» самого нуля: значения $0$ в этой прогрессии нет вообще. Это типичная ситуация — прогрессия шагает дискретно и легко перепрыгивает любую конкретную точку.

Ответ: $-4, 2, 8, 14, 20, 26$; первый положительный член — $a_2 = 2$.

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

Определение через постоянную разность выглядит скромно, но оно даёт колоссальное сжатие информации. Бесконечная последовательность описывается двумя числами. Именно поэтому все линейные расписания в ML хранятся в конфиге как пара «стартовое значение + число шагов»: остальное вычисляется на лету, ничего запоминать не надо. Когда PyTorch создаёт LinearLR(optimizer, start_factor=1.0, end_factor=0.0, total_iters=10000), он не хранит десять тысяч чисел — он хранит два конца отрезка и восстанавливает любой промежуточный член формулой, которую мы сейчас выведем.

Второй практический вывод — про диагностику данных. Если ты видишь колонку с временными метками и хочешь понять, ровный ли у неё шаг (нет ли пропусков в логах, дырок в телеметрии), ты берёшь np.diff(timestamps) и проверяешь, все ли разности одинаковы. Это буквально проверка «является ли последовательность арифметической прогрессией», и в реальной работе с временными рядами она делается едва ли не в первую очередь: половина странных багов в моделях прогнозирования растёт из того, что шаг по времени оказался неравномерным, а модель этого не знала.


Формула $n$-го члена: как перепрыгнуть сразу к тысячному

Интуиция

Рекуррентная запись $a_{n+1} = a_n + d$ честная, но неудобная: чтобы узнать тысячный член, надо посчитать все 999 предыдущих. Это как определять свою высоту на лестнице, считая ступеньки по одной вслух. Но ведь понятно, что делать: если ступенька 17 см и ты на 43-й ступеньке, то поднялся ты на $17 \cdot 42$ от уровня первой ступеньки — потому что шагов между первой и сорок третьей ровно 42, на один меньше, чем ступенек.

Вот эта единичка — главная ловушка всей темы. Между первым и вторым членом один шаг. Между первым и третьим — два. Между первым и $n$-м — $(n-1)$ шагов, а не $n$. Столбы и пролёты: если вдоль дороги стоит 10 столбов, пролётов между ними 9.

Вывод формулы

Давай разберёмся, откуда берётся формула. Просто распишем определение несколько раз подряд, начиная с $a_1$:

$$a_2 = a_1 + d$$

$$a_3 = a_2 + d = (a_1 + d) + d = a_1 + 2d$$

$$a_4 = a_3 + d = (a_1 + 2d) + d = a_1 + 3d$$

$$a_5 = a_4 + d = (a_1 + 3d) + d = a_1 + 4d$$

Закономерность видна невооружённым глазом: у члена с номером $n$ коэффициент при $d$ на единицу меньше номера. У второго — единица, у третьего — двойка, у пятого — четвёрка. Значит:

Формула $n$-го члена арифметической прогрессии:

$$a_n = a_1 + (n-1)d$$

Строгое обоснование даёт метод математической индукции (мы разбирали его схему в теме про последовательности). База: при $n = 1$ формула даёт $a_1 + 0 \cdot d = a_1$ — верно. Шаг: пусть для номера $n$ формула верна, то есть $a_n = a_1 + (n-1)d$. Тогда по определению прогрессии

$$a_{n+1} = a_n + d = a_1 + (n-1)d + d = a_1 + \big((n-1) + 1\big)d = a_1 + \big((n+1) - 1\big)d$$

— ровно та же формула для номера $n+1$. Значит, она верна для всех натуральных $n$. Цепочка замкнулась.

Полезные следствия формулы:

  • Любые два члена связаны так же просто: $a_n = a_k + (n - k)d$. Это та же формула, но «стартующая» не с первого члена, а с $k$-го — между номерами $k$ и $n$ ровно $(n-k)$ шагов
  • Отсюда разность выражается через любые два члена: $d = \dfrac{a_n - a_k}{n - k}$. Это, по сути, «скорость роста» последовательности
  • Формула $a_n = a_1 + (n-1)d$ раскрывается в $a_n = dn + (a_1 - d)$ — то есть $n$-й член линейно зависит от номера. К этому мы вернёмся в разделе про линейную функцию

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

Пример 5 (простой): в прогрессии $a_1 = 2$, $d = 5$. Найди $a_{100}$

Решение:

Шаг 1. Подставляем в формулу $a_n = a_1 + (n-1)d$ значения $a_1 = 2$, $d = 5$, $n = 100$:

$$a_{100} = 2 + (100 - 1) \cdot 5 = 2 + 99 \cdot 5$$

Шаг 2. Считаем: $99 \cdot 5 = 495$, значит $a_{100} = 2 + 495 = 497$.

Проверим наш ответ: прогрессия начинается так — $2, 7, 12, 17$. Все члены дают остаток 2 при делении на 5. Наш ответ $497 = 5 \cdot 99 + 2$ — остаток 2 ✅ Сходится.

Ответ: $a_{100} = 497$.


Пример 6 (средний): известно, что $a_7 = 25$ и $a_{12} = 45$. Найди $a_1$, $d$ и $a_{30}$

Решение:

Шаг 1. Между седьмым и двенадцатым членом ровно $12 - 7 = 5$ шагов. За эти пять шагов значение выросло с 25 до 45, то есть на 20.

Шаг 2. Значит, один шаг — это

$$d = \frac{a_{12} - a_7}{12 - 7} = \frac{45 - 25}{5} = \frac{20}{5} = 4$$

Шаг 3. Теперь найдём $a_1$. От первого члена до седьмого — 6 шагов, значит $a_7 = a_1 + 6d$, откуда

$$a_1 = a_7 - 6d = 25 - 6 \cdot 4 = 25 - 24 = 1$$

Шаг 4. Находим тридцатый член:

$$a_{30} = a_1 + 29d = 1 + 29 \cdot 4 = 1 + 116 = 117$$

Проверим наш ответ: $a_{12} = 1 + 11 \cdot 4 = 45$ ✅ Совпало с условием.

Ответ: $a_1 = 1$, $d = 4$, $a_{30} = 117$.

📌 Общая схема таких задач: два известных члена дают систему из двух уравнений с двумя неизвестными $a_1$ и $d$. Можно решать её честно через систему, а можно — как мы, через «сколько шагов между номерами». Второй способ быстрее и меньше шансов ошибиться в арифметике.


Пример 7 (сложный, ML): linear decay для learning rate. На первой эпохе $\text{lr} = 0{,}01$, дальше каждую эпоху скорость обучения падает на постоянную величину так, что на одиннадцатой эпохе она равна $0{,}001$. Найди шаг расписания, значение на шестой эпохе и первую эпоху, на которой $\text{lr}$ станет меньше $0{,}004$

Решение:

Шаг 1. Значения learning rate по эпохам образуют арифметическую прогрессию: $a_1 = 0{,}01$, $a_{11} = 0{,}001$. Между первой и одиннадцатой эпохой $11 - 1 = 10$ шагов.

Шаг 2. Находим разность:

$$d = \frac{a_{11} - a_1}{11 - 1} = \frac{0{,}001 - 0{,}01}{10} = \frac{-0{,}009}{10} = -0{,}0009$$

Разность отрицательная — расписание убывающее, как и положено decay.

Шаг 3. Значение на шестой эпохе (пять шагов от первой):

$$a_6 = 0{,}01 + 5 \cdot (-0{,}0009) = 0{,}01 - 0{,}0045 = 0{,}0055$$

Логично: шестая эпоха — ровно середина отрезка от 1 до 11, и значение получилось средним между $0{,}01$ и $0{,}001$: $(0{,}01 + 0{,}001)/2 = 0{,}0055$ ✅

Шаг 4. Ищем первую эпоху с $\text{lr} < 0{,}004$. Записываем неравенство:

$$0{,}01 - 0{,}0009(n-1) < 0{,}004$$$$-0{,}0009(n-1) < -0{,}006$$

Делим на $-0{,}0009$ и меняем знак неравенства (делили на отрицательное число):

$$n - 1 > \frac{0{,}006}{0{,}0009} = 6{,}\overline{6} \quad \Rightarrow \quad n > 7{,}\overline{6}$$

Шаг 5. Номер эпохи — натуральное число, поэтому наименьшее подходящее $n = 8$.

Проверим наш ответ: $a_8 = 0{,}01 - 7 \cdot 0{,}0009 = 0{,}01 - 0{,}0063 = 0{,}0037 < 0{,}004$ ✅, а предыдущая эпоха $a_7 = 0{,}01 - 6 \cdot 0{,}0009 = 0{,}0046 > 0{,}004$ ✅ Именно восьмая — первая.

Ответ: $d = -0{,}0009$; $\text{lr}$ на шестой эпохе равен $0{,}0055$; впервые ниже $0{,}004$ — на восьмой эпохе.


Пример 8 (сложный): при каком номере $n$ член прогрессии $-15, -11, -7, \dots$ впервые превысит 100? И является ли число 2026 членом этой прогрессии?

Решение:

Шаг 1. Находим параметры: $a_1 = -15$, $d = -11 - (-15) = 4$.

Шаг 2. Общая формула члена:

$$a_n = -15 + 4(n-1) = 4n - 19$$

Шаг 3. Решаем неравенство $4n - 19 > 100$:

$$4n > 119 \quad \Rightarrow \quad n > 29{,}75$$

Наименьшее натуральное — $n = 30$. Проверка: $a_{30} = 4 \cdot 30 - 19 = 101 > 100$ ✅, а $a_{29} = 97 < 100$ ✅

Шаг 4. Теперь вопрос про 2026. Число является членом прогрессии тогда и только тогда, когда уравнение $4n - 19 = 2026$ имеет натуральное решение:

$$4n = 2045 \quad \Rightarrow \quad n = 511{,}25$$

Шаг 5. Номер получился дробным — значит, 2026 не является членом этой прогрессии. Она перескакивает через него: $a_{511} = 2025$, $a_{512} = 2029$.

Ответ: впервые превысит 100 член с номером $n = 30$ (он равен 101); число 2026 членом прогрессии не является.

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

Формула $n$-го члена превращает последовательность из «списка, который надо прокрутить» в «функцию, которую можно вычислить». Разница принципиальная: чтобы узнать learning rate на 7431-м шаге обучения, не нужно эмулировать 7430 предыдущих — достаточно подставить номер в формулу. Именно так устроены все планировщики в ML-фреймворках: они хранят номер текущего шага и пересчитывают значение с нуля, а не накапливают его прибавлениями. Второе было бы хуже ещё и численно: при накоплении миллиона прибавлений типа $-1{,}1 \cdot 10^{-7}$ ошибки округления чисел с плавающей точкой заметно накапливаются, а прямая формула считает значение за одну операцию, без дрейфа.

Обратная задача — «каким по счёту является данное число» — встречается не реже. Это вопросы вида «на каком шаге прогрев закончится», «сколько батчей влезет», «на какой эпохе lr упадёт ниже порога, после которого обучение фактически встало». Решается всегда одинаково: составить уравнение $a_1 + (n-1)d = x$ и посмотреть, натуральное ли получилось $n$. Если дробное — такого элемента в последовательности просто нет, и это тоже полноценный ответ.


Характеристическое свойство: каждый член — среднее соседей

Интуиция

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

Это свойство настолько плотно приклеено к прогрессии, что работает и как критерий: если каждый член (кроме крайних) равен полусумме соседей — перед тобой обязательно арифметическая прогрессия. Ни больше, ни меньше. Отсюда и название — характеристическое: свойство характеризует прогрессию полностью, оно эквивалентно определению.

Кстати, само слово «арифметическая» в названии прогрессии — именно отсюда: члены связаны средним арифметическим. В следующем уроке члены будут связаны средним геометрическим — и прогрессия будет называться геометрической. Названия не случайные, они прямо указывают на характеристическое свойство.

Прямое утверждение

Характеристическое свойство: если $(a_n)$ — арифметическая прогрессия, то для любого $n \geqslant 2$

$$a_n = \frac{a_{n-1} + a_{n+1}}{2}$$

то есть каждый член, начиная со второго, равен среднему арифметическому соседних с ним членов.

Доказательство. Пусть $d$ — разность прогрессии. По определению $a_{n-1} = a_n - d$ и $a_{n+1} = a_n + d$. Складываем:

$$a_{n-1} + a_{n+1} = (a_n - d) + (a_n + d) = 2a_n$$

Разность $d$ сократилась — как раз потому, что она одна и та же слева и справа. Делим обе части на 2 и получаем требуемое: $a_n = \dfrac{a_{n-1} + a_{n+1}}{2}$. ∎

Свойство работает и «через одну», и вообще для любой симметричной пары: если отступить от члена $a_n$ на $k$ позиций в обе стороны, получим

$$a_{n-k} + a_{n+k} = (a_n - kd) + (a_n + kd) = 2a_n$$

Это обобщение пригодится нам буквально через раздел, когда мы будем выводить формулу суммы приёмом Гаусса: там складываются как раз симметричные пары.

Обратное утверждение

А теперь самое ценное — обратный ход. Он превращает свойство в рабочий инструмент проверки.

Обратное утверждение (критерий): если в последовательности $(a_n)$ для всех $n \geqslant 2$ выполняется $2a_n = a_{n-1} + a_{n+1}$, то $(a_n)$ — арифметическая прогрессия.

Доказательство. Перепишем условие, перебросив члены так, чтобы слева и справа оказались разности соседей:

$$2a_n = a_{n-1} + a_{n+1} \quad \Longleftrightarrow \quad a_n - a_{n-1} = a_{n+1} - a_n$$

Слева стоит разность $n$-й и $(n-1)$-й пары, справа — разность следующей пары. Равенство говорит: разность соседей у любых двух подряд идущих пар одинакова. Обозначим разность первой пары через $d = a_2 - a_1$. Тогда по условию $a_3 - a_2 = a_2 - a_1 = d$, дальше $a_4 - a_3 = a_3 - a_2 = d$, и так далее для всех номеров. Все разности равны одному числу $d$ — это в точности определение арифметической прогрессии. ∎

Объединяя оба утверждения, получаем: последовательность является арифметической прогрессией тогда и только тогда, когда каждый её член (кроме первого) равен среднему арифметическому соседей.

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

Пример 9 (простой): числа $4$, $x$, $22$ образуют арифметическую прогрессию. Найди $x$

Решение:

Шаг 1. По характеристическому свойству средний член равен полусумме крайних:

$$x = \frac{4 + 22}{2} = \frac{26}{2} = 13$$

Проверим наш ответ: $13 - 4 = 9$ и $22 - 13 = 9$ — разности совпали ✅

Ответ: $x = 13$.


Пример 10 (средний): при каком $x$ числа $x - 1$, $2x + 1$, $5x - 3$ образуют арифметическую прогрессию?

Решение:

Шаг 1. Применяем характеристическое свойство: удвоенный средний член равен сумме крайних.

$$2(2x + 1) = (x - 1) + (5x - 3)$$

Шаг 2. Раскрываем скобки и приводим подобные:

$$4x + 2 = 6x - 4$$

Шаг 3. Переносим:

$$2 + 4 = 6x - 4x \quad \Rightarrow \quad 6 = 2x \quad \Rightarrow \quad x = 3$$

Проверим наш ответ: при $x = 3$ числа равны $x-1 = 2$, $2x+1 = 7$, $5x-3 = 12$. Разности: $7 - 2 = 5$ и $12 - 7 = 5$ ✅ Прогрессия с $d = 5$.

Ответ: $x = 3$, прогрессия $2, 7, 12$.

📌 Заметь, насколько удобнее было использовать характеристическое свойство, чем приравнивать разности напрямую. Оба пути ведут к одному уравнению, но в форме «удвоенный средний = сумма крайних» меньше знаков минус, а значит и меньше шансов ошибиться.


Пример 11 (сложный, ML): сглаживание скользящим средним. Метрика на валидации по эпохам ведёт себя как арифметическая прогрессия. Что произойдёт с ней после сглаживания скользящим средним по окну из трёх точек?

Решение:

Шаг 1. Скользящее среднее с окном 3 заменяет каждую точку $a_n$ на среднее трёх точек — самой точки и двух её соседей:

$$\tilde{a}_n = \frac{a_{n-1} + a_n + a_{n+1}}{3}$$

Шаг 2. Подставим выражения соседей через $a_n$ и разность $d$:

$$\tilde{a}_n = \frac{(a_n - d) + a_n + (a_n + d)}{3} = \frac{3a_n}{3} = a_n$$

Шаг 3. Разность $d$ сократилась полностью. Сглаженное значение совпало с исходным.

Ответ: линейный тренд скользящее среднее не искажает вообще — сглаженный ряд в точности равен исходному (кроме краёв, где окно не помещается целиком).

💡 Почему это важно на практике. Скользящее среднее — самый ходовой способ «причесать» шумную кривую обучения. Из выкладки видно его главное свойство: линейную часть тренда оно пропускает нетронутой, а вот на нелинейной кривой начинает врать. Возьми выпуклый участок (loss резко падает и выполаживается) — там среднее соседей окажется выше истинного значения, и сглаженная кривая пойдёт над реальной. Именно поэтому по сильно сглаженной кривой опасно определять момент, когда обучение вышло на плато: сглаживание сдвигает и заваливает как раз изгибы, которые тебе и интересны. На линейных участках оно безопасно — а на них-то как раз и не нужно.


Пример 12 (сложный): докажи, что если числа $a$, $b$, $c$ образуют арифметическую прогрессию, то и числа $a + 2b$, $3b$, $2b + c$ тоже образуют арифметическую прогрессию

Решение:

Шаг 1. Условие «$a, b, c$ — прогрессия» по критерию означает: $2b = a + c$.

Шаг 2. Проверим критерий для новой тройки. Надо показать, что удвоенный средний член равен сумме крайних:

$$2 \cdot 3b \stackrel{?}{=} (a + 2b) + (2b + c)$$

Шаг 3. Считаем правую часть:

$$(a + 2b) + (2b + c) = a + c + 4b$$

Шаг 4. Подставляем сюда известное равенство $a + c = 2b$:

$$a + c + 4b = 2b + 4b = 6b$$

Шаг 5. Левая часть равна $2 \cdot 3b = 6b$. Обе части совпали, критерий выполнен.

Ответ: доказано — тройка $a + 2b$, $3b$, $2b + c$ действительно является арифметической прогрессией.

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

Характеристическое свойство — это способ проверять «прогрессивность», не зная ни $a_1$, ни $d$. В задачах с параметром это часто единственный разумный путь: одно уравнение вместо системы. А обратное утверждение переводит свойство в ранг критерия — то есть даёт право по нему опознавать прогрессию, а не только выводить следствия из неё. Такая пара «прямое + обратное» встречается в математике постоянно, и различать их надо чётко: прямое отвечает на вопрос «что следует», обратное — «чего достаточно».

В работе с данными этот же критерий — рабочий тест на линейность ряда. Если разности соседних значений постоянны, ряд линеен; если постоянны вторые разности (разности разностей) — квадратичен; и так далее. Метод конечных разностей, на котором стоит численный анализ и добрая часть алгоритмов интерполяции, начинается ровно с этой мысли — с той самой, что мы увидели в примере 3 про квадраты.


Сумма первых $n$ членов: приём Гаусса

Интуиция

Вернёмся к истории про Гаусса. Задача: сложить $1 + 2 + 3 + \dots + 100$. Лобовой способ — сто сложений, минут пять аккуратной работы и почти гарантированная арифметическая ошибка где-нибудь на седьмом десятке. Гаусс поступил иначе: он согнул сумму пополам.

Выпишем числа в два ряда — один слева направо, второй справа налево:

$$\begin{array}{ccccccc} 1 & 2 & 3 & \dots & 98 & 99 & 100 \\ 100 & 99 & 98 & \dots & 3 & 2 & 1 \end{array}$$

Сложим их по столбикам: $1 + 100 = 101$, $2 + 99 = 101$, $3 + 98 = 101$, ... Каждый столбик даёт одно и то же число 101! И это не совпадение: когда верхнее слагаемое растёт на 1, нижнее падает на 1, и сумма не меняется. Столбиков ровно 100, значит сумма обоих рядов равна $101 \cdot 100 = 10100$. Но мы сложили каждое число дважды, поэтому исходная сумма вдвое меньше: $10100 / 2 = 5050$.

Гениальность приёма в том, что он не привязан к числам от 1 до 100. Ровно то же самое работает для любой арифметической прогрессии, потому что «шаг вверх слева компенсируется шагом вниз справа» — это и есть свойство постоянной разности.

Вывод первой формулы

Пусть $S_n = a_1 + a_2 + \dots + a_n$. Запишем эту сумму дважды — в прямом и обратном порядке:

$$S_n = a_1 + a_2 + a_3 + \dots + a_{n-1} + a_n$$

$$S_n = a_n + a_{n-1} + a_{n-2} + \dots + a_2 + a_1$$

Сложим эти два равенства почленно, группируя слагаемые по столбикам:

$$2S_n = (a_1 + a_n) + (a_2 + a_{n-1}) + (a_3 + a_{n-2}) + \dots + (a_n + a_1)$$

Теперь ключевой момент. Мы уже доказали в разделе про характеристическое свойство, что симметричные пары дают одинаковые суммы. Проверим прямо: $a_2 + a_{n-1} = (a_1 + d) + (a_n - d) = a_1 + a_n$. Третья пара: $a_3 + a_{n-2} = (a_1 + 2d) + (a_n - 2d) = a_1 + a_n$. В общем виде для $k$-й пары:

$$a_k + a_{n-k+1} = \big(a_1 + (k-1)d\big) + \big(a_1 + (n-k)d\big) = 2a_1 + (n-1)d = a_1 + a_n$$

Разность $d$ всегда сокращается. Значит, все $n$ столбиков равны одному и тому же числу $(a_1 + a_n)$, и

$$2S_n = (a_1 + a_n) \cdot n$$

Формула суммы (через крайние члены):

$$S_n = \frac{a_1 + a_n}{2} \cdot n$$

Читается она очень по-человечески: сумма равна среднему из первого и последнего члена, умноженному на количество членов. То есть прогрессию можно «усреднить» до плоского уровня и просто умножить на длину — как если бы все члены были одинаковыми и равными $\frac{a_1+a_n}{2}$. Геометрически это площадь трапеции: основания $a_1$ и $a_n$, высота $n$.

Вывод второй формулы

Первая формула требует знать последний член $a_n$. Но его не всегда дают — часто известны $a_1$, $d$ и количество членов. Подставим в формулу выражение $a_n = a_1 + (n-1)d$:

$$S_n = \frac{a_1 + a_1 + (n-1)d}{2} \cdot n$$

Формула суммы (через первый член и разность):

$$S_n = \frac{2a_1 + (n-1)d}{2} \cdot n$$

Когда какую формулу брать:

  • Известны $a_1$ и $a_n$ (или последний член легко считается) — первая формула, она короче
  • Известны $a_1$, $d$ и $n$, а последний член не нужен — вторая формула, она экономит один шаг
  • Обе формулы дают одинаковый результат всегда — это одна формула в двух записях, выбор чисто про удобство

Полезные частные случаи, которые стоит помнить наизусть:

  • Сумма первых $n$ натуральных чисел: $1 + 2 + \dots + n = \dfrac{n(n+1)}{2}$
  • Сумма первых $n$ нечётных чисел: $1 + 3 + 5 + \dots + (2n-1) = n^2$
  • Сумма первых $n$ чётных чисел: $2 + 4 + \dots + 2n = n(n+1)$

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

Пример 13 (простой): найди сумму первых двадцати натуральных чисел

Решение:

Шаг 1. Это прогрессия с $a_1 = 1$, $d = 1$, $a_{20} = 20$, $n = 20$.

Шаг 2. По первой формуле:

$$S_{20} = \frac{1 + 20}{2} \cdot 20 = \frac{21}{2} \cdot 20 = 21 \cdot 10 = 210$$

Проверим наш ответ: по формуле для натуральных чисел $\frac{n(n+1)}{2} = \frac{20 \cdot 21}{2} = 210$ ✅

Ответ: $S_{20} = 210$.


Пример 14 (средний): в прогрессии $a_1 = 5$, $d = 7$. Найди сумму первых пятнадцати членов двумя способами

Решение:

Способ 1 — через последний член.

Шаг 1. Находим пятнадцатый член:

$$a_{15} = 5 + 14 \cdot 7 = 5 + 98 = 103$$

Шаг 2. Подставляем в первую формулу:

$$S_{15} = \frac{5 + 103}{2} \cdot 15 = \frac{108}{2} \cdot 15 = 54 \cdot 15 = 810$$

Способ 2 — через $a_1$ и $d$.

$$S_{15} = \frac{2 \cdot 5 + 14 \cdot 7}{2} \cdot 15 = \frac{10 + 98}{2} \cdot 15 = \frac{108}{2} \cdot 15 = 810$$

Оба способа дали $810$ — как и должно быть, ведь формулы отличаются только тем, раскрыли мы $a_n$ или нет.

Ответ: $S_{15} = 810$.


Пример 15 (сложный): найди сумму членов прогрессии с 11-го по 20-й включительно, если $a_1 = 3$, $d = 5$

Решение:

Здесь два разных пути, и оба поучительные.

Путь А — как отдельную прогрессию.

Шаг 1. Кусок прогрессии с 11-го по 20-й член — это тоже арифметическая прогрессия с той же разностью $d = 5$, просто с другим стартом. Найдём её крайние члены:

$$a_{11} = 3 + 10 \cdot 5 = 53, \qquad a_{20} = 3 + 19 \cdot 5 = 98$$

Шаг 2. Сколько в этом куске членов? Внимание, ловушка: не $20 - 11 = 9$, а $20 - 11 + 1 = 10$. Считаем оба конца — это правило «включая границы».

Шаг 3. Применяем формулу суммы к куску:

$$S = \frac{53 + 98}{2} \cdot 10 = \frac{151}{2} \cdot 10 = 151 \cdot 5 = 755$$

Путь Б — через разность двух сумм.

Шаг 1. Сумма с 11-го по 20-й — это «всё до двадцатого» минус «всё до десятого»:

$$S = S_{20} - S_{10}$$

Шаг 2. Считаем $S_{20}$: $a_{20} = 98$, значит $S_{20} = \frac{3 + 98}{2} \cdot 20 = \frac{101}{2} \cdot 20 = 101 \cdot 10 = 1010$.

Шаг 3. Считаем $S_{10}$: $a_{10} = 3 + 9 \cdot 5 = 48$, значит $S_{10} = \frac{3 + 48}{2} \cdot 10 = \frac{51}{2} \cdot 10 = 255$.

Шаг 4. Вычитаем: $S = 1010 - 255 = 755$.

Проверим наш ответ: оба пути дали $755$ ✅

Ответ: сумма членов с 11-го по 20-й равна $755$.

📌 Путь Б надёжнее, когда границы куска «некруглые», а путь А нагляднее. Но главное — запомни правило подсчёта количества: от $k$-го до $m$-го члена включительно ровно $m - k + 1$ членов. Ошибка на единицу здесь — самая частая в теме, она же классическая «fencepost error» в программировании.


Пример 16 (сложный, ML): «бюджет обучения». Сравни суммарный learning rate за весь прогон для двух расписаний по 10 000 шагов: (а) постоянный $\text{lr} = 10^{-3}$; (б) линейный спад от $2 \cdot 10^{-3}$ до почти нуля

Решение:

Шаг 1. Зачем вообще складывать learning rate? Потому что размер шага градиентного спуска пропорционален $\text{lr}$, и сумма всех $\text{lr}$ за прогон — это грубая мера «суммарного пути», который веса могут пройти. Две схемы с одинаковой суммой дают сопоставимый «бюджет движения», хотя распределён он во времени по-разному.

Шаг 2. Расписание (а). Это вырожденная прогрессия с $d = 0$, все члены равны $10^{-3}$:

$$S = 10^{-3} \cdot 10\,000 = 10$$

Шаг 3. Расписание (б). Прогрессия с $a_1 = 2 \cdot 10^{-3}$, которая за 10 000 шагов доходит до нуля. Шаг убывания:

$$d = -\frac{2 \cdot 10^{-3}}{10\,000} = -2 \cdot 10^{-7}$$

Последний, десятитысячный шаг:

$$a_{10000} = 2 \cdot 10^{-3} - 9999 \cdot 2 \cdot 10^{-7} = 2 \cdot 10^{-3} - 1{,}9998 \cdot 10^{-3} = 2 \cdot 10^{-7}$$

Шаг 4. Сумма по первой формуле:

$$S = \frac{2 \cdot 10^{-3} + 2 \cdot 10^{-7}}{2} \cdot 10\,000 \approx \frac{2 \cdot 10^{-3}}{2} \cdot 10\,000 = 10{,}001 \approx 10$$

Шаг 5. Суммарный бюджет практически одинаков — около 10. Но распределён по-разному: в схеме (б) больше половины бюджета тратится в первой половине обучения (там $\text{lr}$ высокий), а к концу шаги становятся микроскопическими, и модель «оседает» в найденном минимуме вместо того, чтобы прыгать вокруг него.

Ответ: обе схемы дают суммарный бюджет $\approx 10$; отличие не в сумме, а в распределении — линейный спад тратит бюджет рано и заканчивает мелкими уточняющими шагами.

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

Формула суммы — это ответ на вопрос «сколько всего накопилось», когда прибавка каждый раз меняется на постоянную величину. Такие вопросы возникают везде: сколько всего примеров обработает модель, если каждая эпоха на 500 примеров длиннее предыдущей; сколько всего заплатишь по кредиту с равномерно убывающими процентами; сколько операций сделает вложенный цикл for i in range(n): for j in range(i) (спойлер: $\frac{n(n-1)}{2}$ — это ровно сумма прогрессии).

Последний пример стоит подчеркнуть: оценка сложности алгоритмов часто сводится к суммированию арифметической прогрессии. Пузырьковая сортировка, вычисление всех попарных расстояний между $n$ объектами, построение матрицы схожести в рекомендательной системе — во всех этих случаях число операций равно $1 + 2 + \dots + (n-1) = \frac{n(n-1)}{2}$, откуда и берётся знаменитое $O(n^2)$. Когда ты видишь квадратичную сложность, за ней почти всегда стоит просуммированная арифметическая прогрессия.


Связь с линейной функцией: прогрессия на графике — это прямая

Интуиция

Раскроем скобки в формуле $n$-го члена и соберём слагаемые по-другому:

$$a_n = a_1 + (n-1)d = a_1 + dn - d = \underbrace{d}_{\text{коэффициент}} \cdot n + \underbrace{(a_1 - d)}_{\text{свободный член}}$$

Посмотри на результат: это же $y = kx + b$! Только вместо $x$ стоит номер $n$, вместо $k$ — разность $d$, а вместо $b$ — число $a_1 - d$.

Ключевой факт: арифметическая прогрессия — это линейная функция $y = dn + (a_1 - d)$, у которой аргумент пробегает только натуральные числа. Если отметить точки $(n; a_n)$ на координатной плоскости, все они лягут на одну прямую, а разность $d$ — это угловой коэффициент этой прямой.

Отсюда сразу вытекает целый набор интуитивных следствий.

  • $d > 0$ — прямая идёт вверх, прогрессия возрастает; $d < 0$ — вниз, убывает; $d = 0$ — горизонтальная прямая
  • Чем больше $|d|$, тем круче наклон — тем «быстрее» прогрессия
  • График прогрессии — не сплошная прямая, а дискретный набор точек на ней: последовательность определена только для натуральных $n$, между точками ничего нет. Прямая тут — вспомогательная линия, а не сам график
  • Знание любых двух членов однозначно задаёт прямую, а значит и всю прогрессию — потому что через две точки проходит ровно одна прямая. Именно это мы и делали в примере 6, когда восстанавливали прогрессию по $a_7$ и $a_{12}$

Сумма зависит от $n$ квадратично

Теперь посмотрим на формулу суммы тем же взглядом. Раскроем скобки во второй формуле:

$$S_n = \frac{2a_1 + (n-1)d}{2} \cdot n = \frac{2a_1 n + dn^2 - dn}{2} = \frac{d}{2}n^2 + \left(a_1 - \frac{d}{2}\right)n$$

Ключевой факт: сумма первых $n$ членов арифметической прогрессии — это квадратичная функция от $n$ вида $S_n = An^2 + Bn$, где $A = \frac{d}{2}$ и $B = a_1 - \frac{d}{2}$. Свободного члена нет: $S_0 = 0$, парабола проходит через начало координат.

И обратное тоже верно: если сумма последовательности задана формулой $S_n = An^2 + Bn$, то последовательность обязательно является арифметической прогрессией с разностью $d = 2A$ и первым членом $a_1 = A + B$. Проверить это легко — надо восстановить член по сумме:

$$a_n = S_n - S_{n-1} = (An^2 + Bn) - \big(A(n-1)^2 + B(n-1)\big) = A(2n - 1) + B = 2An + (B - A)$$

Формула линейна по $n$ — значит, прогрессия, с разностью $d = 2A$ (коэффициент при $n$).

Эта связь объясняет и наблюдение из примера 3: линейная последовательность (постоянные разности) при суммировании даёт квадратичную. Постоянные разности → линейный член → квадратичная сумма. Каждое «суммирование» поднимает степень на единицу — та же логика, что позже, в теме про интегралы, превратит $x^n$ в $x^{n+1}$.

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

Пример 17 (простой): запиши прогрессию $3, 7, 11, 15, \dots$ как линейную функцию номера и назови угловой коэффициент

Решение:

Шаг 1. Находим параметры: $a_1 = 3$, $d = 7 - 3 = 4$.

Шаг 2. Подставляем в $a_n = dn + (a_1 - d)$:

$$a_n = 4n + (3 - 4) = 4n - 1$$

Проверим наш ответ: $a_1 = 4 \cdot 1 - 1 = 3$ ✅, $a_2 = 7$ ✅, $a_4 = 15$ ✅

Шаг 3. Точки $(1;3)$, $(2;7)$, $(3;11)$, $(4;15)$ лежат на прямой $y = 4x - 1$. Угловой коэффициент равен $4$ — он же разность прогрессии.

Ответ: $a_n = 4n - 1$, угловой коэффициент $k = d = 4$.


Пример 18 (средний): сумма первых $n$ членов последовательности равна $S_n = 3n^2 - n$. Докажи, что это арифметическая прогрессия, найди $a_1$, $d$ и $a_{10}$

Решение:

Шаг 1. Находим $n$-й член как разность соседних сумм. Сначала распишем $S_{n-1}$:

$$S_{n-1} = 3(n-1)^2 - (n-1) = 3(n^2 - 2n + 1) - n + 1 = 3n^2 - 6n + 3 - n + 1 = 3n^2 - 7n + 4$$

Шаг 2. Вычитаем:

$$a_n = S_n - S_{n-1} = (3n^2 - n) - (3n^2 - 7n + 4) = 6n - 4$$

Шаг 3. Формула линейна по $n$ — значит, это арифметическая прогрессия (по выводу из примера 2), причём $d = 6$ — коэффициент при $n$.

Шаг 4. Первый член: $a_1 = 6 \cdot 1 - 4 = 2$. Десятый: $a_{10} = 60 - 4 = 56$.

Проверим наш ответ: $S_1$ должно равняться $a_1$. Считаем: $S_1 = 3 - 1 = 2$ ✅ И проверим сумму первых десяти по формуле прогрессии: $\frac{2 + 56}{2} \cdot 10 = 29 \cdot 10 = 290$, а по условию $S_{10} = 3 \cdot 100 - 10 = 290$ ✅

Ответ: это арифметическая прогрессия, $a_1 = 2$, $d = 6$, $a_{10} = 56$.

⚠️ Тонкость: формула $a_n = S_n - S_{n-1}$ работает только при $n \geqslant 2$ (при $n = 1$ никакого $S_0$ в задаче нет). Поэтому $a_1$ всегда находим отдельно, как $S_1$, и потом проверяем, что общая формула его тоже даёт. Если бы в $S_n$ был свободный член — например, $S_n = 3n^2 - n + 5$ — общая формула перестала бы работать для первого члена, и последовательность прогрессией уже не была бы.


Пример 19 (сложный): в прогрессии $a_1 = 25$, $d = -3$. Начиная с какого номера члены становятся отрицательными и при каком $n$ сумма $S_n$ максимальна?

Решение:

Шаг 1. Записываем общий член:

$$a_n = 25 - 3(n-1) = 28 - 3n$$

Шаг 2. Ищем, когда член становится отрицательным:

$$28 - 3n < 0 \quad \Rightarrow \quad n > \frac{28}{3} = 9\tfrac13$$

Наименьшее натуральное — $n = 10$. Проверка: $a_9 = 28 - 27 = 1 > 0$ ✅, $a_{10} = -2 < 0$ ✅

Шаг 3. Теперь про максимум суммы. Рассуждаем без всяких формул: пока мы прибавляем положительные члены, сумма растёт; как только пошли отрицательные — сумма начинает падать. Значит, максимум достигается ровно на последнем положительном члене, то есть при $n = 9$.

Шаг 4. Считаем это значение:

$$S_9 = \frac{a_1 + a_9}{2} \cdot 9 = \frac{25 + 1}{2} \cdot 9 = 13 \cdot 9 = 117$$

Шаг 5. Проверим ответ через квадратичную запись суммы. Здесь $A = \frac{d}{2} = -1{,}5$ и $B = a_1 - \frac{d}{2} = 25 + 1{,}5 = 26{,}5$, то есть

$$S_n = -1{,}5n^2 + 26{,}5n$$

Это парабола ветвями вниз, её вершина — в точке $n_0 = -\frac{B}{2A} = \frac{26{,}5}{3} \approx 8{,}83$. Номер обязан быть натуральным, поэтому проверяем двух ближайших кандидатов: $S_8 = -1{,}5 \cdot 64 + 26{,}5 \cdot 8 = -96 + 212 = 116$ и $S_9 = -1{,}5 \cdot 81 + 26{,}5 \cdot 9 = -121{,}5 + 238{,}5 = 117$. Больше — девятый ✅ Оба способа сошлись.

Ответ: отрицательными члены становятся начиная с $n = 10$; максимальная сумма $S_9 = 117$.

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

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

Связь «прогрессия ↔ прямая» — это мостик между дискретным и непрерывным. Расписание learning rate по своей природе дискретно (значение меняется на каждом шаге оптимизатора), но рисуют его как непрерывную прямую и описывают уравнением прямой. Оба взгляда законны, и переключаться между ними нужно свободно: формула $n$-го члена — «дискретный» взгляд, уравнение прямой — «непрерывный».

Практический вывод: если ты подозреваешь, что данные растут линейно, проверить это можно двумя эквивалентными способами — посмотреть на постоянство разностей np.diff(y) или построить график и увидеть прямую. Первое надёжнее (глаз легко обманывается на маленьких выборках), второе нагляднее. А если постоянны не первые разности, а вторые, то данные квадратичны — и это ровно та ситуация, когда ты смотришь на накопленную сумму линейно растущей величины: суммарное число обработанных примеров при линейно растущем батче растёт как парабола, а не как прямая.


Простые проценты: прогрессия в деньгах

Интуиция

Есть два принципиально разных способа начислять проценты, и разница между ними — это ровно разница между двумя прогрессиями.

Простые проценты: процент каждый период начисляется на исходную сумму. Положил 100 000 под 10% простых — каждый год тебе добавляют по 10 000, независимо от того, сколько уже накопилось. Прибавка постоянна, значит суммы по годам образуют арифметическую прогрессию.

Сложные проценты: процент начисляется на текущую сумму, вместе с уже набежавшими процентами. Второй год ты получаешь 10% не от 100 000, а от 110 000. Прибавка растёт, суммы по годам образуют геометрическую прогрессию — это тема следующего урока.

Модель простых процентов: если начальная сумма $P$ и ставка $p$ процентов за период, то сумма через $n$ периодов равна

$$S(n) = P + \frac{p}{100} \cdot P \cdot n$$

Это арифметическая прогрессия с первым членом $P$ (при $n = 0$) и разностью $d = \frac{p}{100} \cdot P$.

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

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

Пример 20 (простой): вклад 50 000 ₽ под 8% простых годовых. Какая сумма будет на счёте через 5 лет?

Решение:

Шаг 1. Годовая прибавка постоянна и равна 8% от исходной суммы:

$$d = 0{,}08 \cdot 50\,000 = 4000 \text{ ₽}$$

Шаг 2. Через 5 лет начислений было ровно пять:

$$S(5) = 50\,000 + 5 \cdot 4000 = 50\,000 + 20\,000 = 70\,000 \text{ ₽}$$

Ответ: 70 000 ₽.


Пример 21 (средний): вклад 120 000 ₽ под 9% простых годовых. Через сколько полных лет сумма впервые превысит 200 000 ₽?

Решение:

Шаг 1. Годовая прибавка:

$$d = 0{,}09 \cdot 120\,000 = 10\,800 \text{ ₽}$$

Шаг 2. Составляем неравенство для суммы через $n$ лет:

$$120\,000 + 10\,800n > 200\,000$$

Шаг 3. Решаем:

$$10\,800n > 80\,000 \quad \Rightarrow \quad n > \frac{80\,000}{10\,800} \approx 7{,}41$$

Шаг 4. Число лет натуральное, ближайшее подходящее — $n = 8$.

Проверим наш ответ: через 7 лет $120\,000 + 7 \cdot 10\,800 = 195\,600 < 200\,000$ ✅ (ещё не хватает); через 8 лет $120\,000 + 86\,400 = 206\,400 > 200\,000$ ✅

Ответ: через 8 лет.

💡 Для сравнения: при сложных 9% та же сумма превысила бы 200 000 ₽ уже за 6 лет — прибавка растёт год от года. Как считать такие вещи, разберём в уроке 128 про геометрическую прогрессию. Разница между «арифметическим» и «геометрическим» ростом — одна из самых дорогих в буквальном смысле идей в математике.


Арифметическая прогрессия в машинном обучении

Расписания learning rate: warmup и decay

Скорость обучения (learning rate) — самый чувствительный гиперпараметр нейросети. Слишком большой — обучение расходится, слишком маленький — модель ползёт и застревает. Поэтому его почти никогда не держат постоянным: типичное расписание состоит из двух линейных кусков.

Warmup (прогрев). В самом начале обучения веса случайны, градиенты шумные, и большой шаг легко «выбьет» модель в плохую область. Поэтому первые сотни или тысячи шагов $\text{lr}$ поднимают от нуля до рабочего значения — линейно, на постоянную величину за шаг. Это возрастающая арифметическая прогрессия.

Linear decay (линейный спад). Дальше $\text{lr}$ линейно уменьшают до нуля к концу обучения: сначала модель делает большие шаги и ищет «долину», потом всё более мелкие и аккуратно оседает на дне. Это убывающая арифметическая прогрессия.

Обе фазы описываются одной и той же формулой $a_n = a_1 + (n-1)d$ с разными знаками $d$ — вот и вся математика внутри get_linear_schedule_with_warmup.

Пример 22 (средний, ML): linear warmup поднимает $\text{lr}$ от нуля на шаге 0 до $3 \cdot 10^{-4}$ на шаге 1000. Найди шаг расписания, значение $\text{lr}$ на 400-м шаге и первый шаг, на котором $\text{lr}$ достигнет $2 \cdot 10^{-4}$

Решение:

Шаг 1. Здесь удобно нумеровать шаги с нуля: $\text{lr}(0) = 0$, $\text{lr}(1000) = 3 \cdot 10^{-4}$. Между ними 1000 шагов, значит

$$d = \frac{3 \cdot 10^{-4} - 0}{1000} = 3 \cdot 10^{-7}$$

Шаг 2. При нумерации с нуля формула превращается в $\text{lr}(k) = k \cdot d$ (первый член $a_1 = \text{lr}(0) = 0$ и $(n-1)$ шагов — это и есть номер $k$). Считаем 400-й шаг:

$$\text{lr}(400) = 400 \cdot 3 \cdot 10^{-7} = 1{,}2 \cdot 10^{-4}$$

Проверим здравым смыслом: 400 из 1000 — это 40% пути, и $0{,}4 \cdot 3 \cdot 10^{-4} = 1{,}2 \cdot 10^{-4}$ ✅ Для линейного расписания доля пути и доля значения совпадают — удобный способ считать в уме.

Шаг 3. Ищем первый шаг с $\text{lr} \geqslant 2 \cdot 10^{-4}$:

$$k \cdot 3 \cdot 10^{-7} \geqslant 2 \cdot 10^{-4} \quad \Rightarrow \quad k \geqslant \frac{2 \cdot 10^{-4}}{3 \cdot 10^{-7}} = \frac{2000}{3} \approx 666{,}67$$

Наименьшее целое — $k = 667$.

Проверим наш ответ: $\text{lr}(667) = 667 \cdot 3 \cdot 10^{-7} = 2{,}001 \cdot 10^{-4} \geqslant 2 \cdot 10^{-4}$ ✅, а $\text{lr}(666) = 1{,}998 \cdot 10^{-4} < 2 \cdot 10^{-4}$ ✅

Ответ: $d = 3 \cdot 10^{-7}$; $\text{lr}(400) = 1{,}2 \cdot 10^{-4}$; порог $2 \cdot 10^{-4}$ впервые достигается на шаге 667.

⚠️ Отдельно обрати внимание на нумерацию. В математике прогрессии принято нумеровать с единицы, в коде шаги обычно нумеруются с нуля. Из-за этого формула выглядит то как $a_1 + (n-1)d$, то как $a_0 + kd$. Это одна и та же формула, просто сдвинутая на единицу — но перепутав, получишь ошибку ровно в один шаг, которая на графике незаметна, а в юнит-тесте вылезает.

Сетка гиперпараметров: линейная против логарифмической

Grid search перебирает значения гиперпараметра по сетке. И вот тут возникает вопрос, где арифметическая прогрессия помогает, а где вредит.

Для параметров, живущих в понятном ограниченном диапазоне — dropout от 0,1 до 0,5, доля валидации, коэффициент momentum, — берут равномерную сетку: значения образуют арифметическую прогрессию. Это np.linspace(0.1, 0.5, 9), то есть $0{,}1;\ 0{,}15;\ 0{,}2;\ \dots;\ 0{,}5$ с шагом $0{,}05$. Логика простая: разница между dropout 0,2 и 0,25 сопоставима с разницей между 0,4 и 0,45 — «расстояние» тут аддитивное.

А вот для learning rate равномерная сетка — это провал, и вот почему.

Пример 23 (сложный, ML): нужно перебрать learning rate в диапазоне от $10^{-5}$ до $10^{-1}$, бюджет — 5 запусков. Сравни равномерную сетку и логарифмическую

Решение:

Шаг 1. Равномерная сетка (арифметическая прогрессия). Пять точек от $0{,}00001$ до $0{,}1$:

$$d = \frac{0{,}1 - 0{,}00001}{4} = \frac{0{,}09999}{4} \approx 0{,}025$$

Получаем значения: $0{,}00001;\ 0{,}025;\ 0{,}050;\ 0{,}075;\ 0{,}100$.

Шаг 2. Оценим, что вышло. Рабочие значения learning rate для нейросетей обычно лежат в районе $10^{-4} \dots 10^{-3}$. В нашей сетке между $0{,}00001$ и $0{,}025$ — пропасть, и в неё целиком провалился весь полезный диапазон. Четыре из пяти запусков ушли на значения $\geqslant 0{,}025$, при которых обучение почти наверняка разойдётся. Фактически мы проверили одну осмысленную точку из пяти.

Шаг 3. Логарифмическая сетка. Возьмём в качестве членов арифметической прогрессии не сами значения, а их показатели степени:

$$-5, \quad -4, \quad -3, \quad -2, \quad -1 \qquad (\text{АП с } d = 1)$$

Соответствующие значения learning rate:

$$10^{-5},\quad 10^{-4},\quad 10^{-3},\quad 10^{-2},\quad 10^{-1}$$

Шаг 4. Теперь каждый из пяти запусков попадает в свой «масштаб», и полезный диапазон $10^{-4} \dots 10^{-3}$ покрыт двумя точками из пяти. Каждое следующее значение больше предыдущего в 10 раз — значения образуют геометрическую прогрессию, хотя их показатели образуют арифметическую.

Ответ: равномерная сетка тратит 4 из 5 запусков впустую; логарифмическая покрывает весь диапазон осмысленно. Правило: если параметр меняется на порядки — сетку строим по показателям степени.

💡 Именно поэтому в коде пишут np.logspace(-5, -1, 5), а не np.linspace(1e-5, 1e-1, 5). И np.logspace внутри устроен так: строит арифметическую прогрессию показателей и потом возводит десятку в каждую из них. Арифметическая прогрессия никуда не делась — она просто переехала «на этаж логарифмов». А последовательность самих значений, где каждый следующий член получается умножением на постоянное число, — это геометрическая прогрессия, и весь следующий урок посвящён ей.

Линейная интерполяция

Линейная интерполяция (в коде обычно lerp) — это способ «пройти» от точки $A$ к точке $B$ равномерными шагами:

$$x_k = A + \frac{k}{m}(B - A), \qquad k = 0, 1, 2, \dots, m$$

Промежуточные значения образуют арифметическую прогрессию с разностью $d = \frac{B - A}{m}$. В ML это встречается постоянно: интерполяция весов между двумя чекпоинтами (чтобы посмотреть на «ландшафт» функции потерь между ними), усреднение моделей, плавные переходы между эмбеддингами, генерация промежуточных кадров, аугментация mixup (смешивание двух примеров с весами $\lambda$ и $1-\lambda$).

Пример 24 (средний, ML): один вес модели в чекпоинте A равен $0{,}80$, в чекпоинте B — $0{,}20$. Строим 6 равномерно распределённых промежуточных моделей от A до B включительно. Какие значения примет этот вес?

Решение:

Шаг 1. Шесть точек от A до B включительно означают 5 шагов между ними:

$$d = \frac{0{,}20 - 0{,}80}{5} = \frac{-0{,}60}{5} = -0{,}12$$

Шаг 2. Выписываем прогрессию:

$$0{,}80;\quad 0{,}68;\quad 0{,}56;\quad 0{,}44;\quad 0{,}32;\quad 0{,}20$$

Проверим наш ответ: шестой член по формуле — $0{,}80 + 5 \cdot (-0{,}12) = 0{,}80 - 0{,}60 = 0{,}20$ ✅ Совпал с чекпоинтом B.

Шаг 3. Заметь: каждая координата вектора весов интерполируется независимо и по своей прогрессии со своей разностью — но число шагов у всех одно и то же. Поэтому вся траектория в пространстве весов — это отрезок прямой, пройденный равномерно.

Ответ: $0{,}80;\ 0{,}68;\ 0{,}56;\ 0{,}44;\ 0{,}32;\ 0{,}20$ при $d = -0{,}12$.

Суммарная нагрузка при линейном росте

Последний сюжет — про сумму. Если объём работы на каждом шаге растёт на постоянную величину, то суммарный объём считается формулой суммы прогрессии, и растёт он квадратично.

Пример 25 (сложный, ML): curriculum learning. На первой эпохе модель обучается на 1000 самых простых примерах, каждая следующая эпоха добавляет 500 новых примеров. Сколько всего примеров будет обработано за 20 эпох и во сколько раз это больше, чем если бы все 20 эпох шли по 1000?

Решение:

Шаг 1. Размеры обучающей выборки по эпохам — арифметическая прогрессия: $a_1 = 1000$, $d = 500$, $n = 20$.

Шаг 2. Находим размер выборки на последней эпохе:

$$a_{20} = 1000 + 19 \cdot 500 = 1000 + 9500 = 10\,500$$

Шаг 3. Суммарное число обработанных примеров:

$$S_{20} = \frac{1000 + 10\,500}{2} \cdot 20 = \frac{11\,500}{2} \cdot 20 = 5750 \cdot 20 = 115\,000$$

Шаг 4. Если бы каждая эпоха шла по 1000 примеров, всего было бы $1000 \cdot 20 = 20\,000$. Отношение:

$$\frac{115\,000}{20\,000} = 5{,}75$$

Шаг 5. Прикинем и по второй формуле для проверки:

$$S_{20} = \frac{2 \cdot 1000 + 19 \cdot 500}{2} \cdot 20 = \frac{2000 + 9500}{2} \cdot 20 = \frac{11\,500}{2} \cdot 20 = 115\,000$$

Ответ: 115 000 примеров, что в 5,75 раза больше, чем при фиксированном размере эпохи.

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

Главный вывод этого раздела — не «в ML есть прогрессии», а кое-что практичнее. Линейность — это выбор, а не данность. Когда ты пишешь линейное расписание learning rate, ты явно решаешь, что скорость обучения должна падать равномерно. Когда берёшь linspace вместо logspace, ты явно решаешь, что расстояние между значениями аддитивное, а не мультипликативное. Оба решения бывают правильными и оба бывают катастрофическими — как в примере 23, где равномерная сетка сожгла четыре запуска из пяти.

Вопрос, который стоит задавать себе каждый раз: «величина у меня меняется на сколько или в сколько раз?» Если на сколько — это арифметическая прогрессия и linspace. Если во сколько раз — геометрическая и logspace. Первое — сегодняшний урок, второе — следующий.


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

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

Задание 1: Дана последовательность $5, 9, 13, 17, \dots$ Найди разность $d$ и десятый член.


Задание 2: В арифметической прогрессии $a_1 = -7$, $d = 3$. Найди $a_{20}$.


Задание 3: Является ли последовательность $2, 5, 9, 14, \dots$ арифметической прогрессией?


Задание 4: Известно, что $a_5 = 17$ и $a_6 = 21$. Найди разность и первый член.


Задание 5: Найди сумму всех натуральных чисел от 1 до 100 (та самая задача Гаусса).


Задание 6: В прогрессии $a_1 = 4$, $d = 3$. Найди сумму первых тридцати членов.


Задание 7: Между числами 3 и 27 вставь два числа так, чтобы все четыре образовали арифметическую прогрессию.


Задание 8: Числа $6$, $x$, $20$ образуют арифметическую прогрессию. Найди $x$.


Задание 9: Learning rate уменьшается линейно: на первой эпохе он равен $3 \cdot 10^{-4}$, и каждую следующую эпоху падает на $2 \cdot 10^{-5}$. Чему он равен на восьмой эпохе?


Задание 10: Найди сумму всех нечётных чисел от 1 до 99.


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

Задание 11: В арифметической прогрессии $a_3 = 10$ и $a_8 = 30$. Найди $a_1$ и $d$.


Задание 12: Каким по счёту членом прогрессии $7, 11, 15, \dots$ является число 143?


Задание 13: Сколько первых членов прогрессии $-12, -9, -6, \dots$ надо взять, чтобы их сумма оказалась равна 54?


Задание 14: В прогрессии $a_1 = 2$, $d = 6$. Найди сумму членов с 11-го по 25-й включительно.


Задание 15: Вклад 100 000 ₽ размещён под 12% простых годовых. Какая сумма будет на счёте через 7 лет и через сколько лет она достигнет 208 000 ₽?


Задание 16: Linear warmup поднимает learning rate от 0 на нулевом шаге до $5 \cdot 10^{-4}$ на шаге 2000. Чему равен $\text{lr}$ на шаге 800 и на каком шаге он достигнет $4 \cdot 10^{-4}$?


Задание 17: Сколько чисел, кратных 7, лежит между 100 и 1000? Найди их сумму.


Задание 18: Сумма первых пяти членов арифметической прогрессии равна 40, а пятый член равен 14. Найди $a_1$ и $d$.


Задание 19: В схеме curriculum learning первая эпоха обучается на 2000 примерах, каждая следующая — на 400 примерах больше. Сколько всего примеров обработает модель за 25 эпох?


Задание 20: Последовательность задана формулой $a_n = 5n - 3$. Докажи, что это арифметическая прогрессия, найди $d$ и сумму первых двадцати членов.


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

Задание 21: Сумма первых $n$ членов последовательности равна $S_n = 2n^2 + 5n$. Докажи, что последовательность — арифметическая прогрессия, найди $a_1$, $d$ и $a_{10}$.


Задание 22: В прогрессии $a_1 = 30$, $d = -4$. Начиная с какого номера члены становятся отрицательными и при каком $n$ сумма $S_n$ максимальна?


Задание 23: Три числа образуют арифметическую прогрессию. Их сумма равна 15, а сумма их квадратов равна 83. Найди эти числа.


Задание 24: Сумма всех натуральных чисел от 1 до $n$ равна 1225. Найди $n$.


Задание 25: Между числами 5 и 45 вставили $k$ чисел так, что все вместе они образовали арифметическую прогрессию. Сумма всех членов получившейся прогрессии равна 275. Найди $k$ и разность прогрессии.


Задание 26: Расписание обучения состоит из двух линейных фаз, всего 10 000 шагов: warmup поднимает $\text{lr}$ от 0 до $10^{-3}$ за первые 1000 шагов, затем linear decay опускает его от $10^{-3}$ до 0 за оставшиеся 9000 шагов. Найди $\text{lr}$ на шаге 4000 и средний $\text{lr}$ за весь прогон.


Задание 27: В grid search перебирается dropout от 0,1 до 0,5. Сколько будет точек при равномерном шаге 0,05 и при шаге 0,02? Почему для learning rate такую же равномерную сетку строить не стоит?


Задание 28: В схеме с постепенно растущим батчем размер батча на шаге $k$ равен $b_k = 32 + 8(k-1)$. Сколько всего примеров обработает модель за 100 шагов и на каком шаге размер батча впервые превысит 512?


Задание 29: Докажи, что сумма первых $n$ нечётных чисел равна $n^2$.


Задание 30: Известно, что loss модели на валидации равен 0,85 на эпохе 10 и 0,45 на эпохе 20. Оцени loss на эпохе 14 линейной интерполяцией. Насколько такой оценке можно доверять?


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

Ошибка 1: путают $n$ и $n-1$ в формуле члена

Неправильно: считать $a_{10} = a_1 + 10d$, механически подставив номер вместо числа шагов.

Правильно: $a_{10} = a_1 + 9d$. Между первым и десятым членом девять шагов, а не десять. Формула $a_n = a_1 + (n-1)d$ содержит именно $(n-1)$ — количество переходов, а не количество членов.

💡 Почему важно: это самая массовая ошибка темы, и она коварна тем, что ответ получается «правдоподобным» — просто сдвинутым на один шаг. Мнемоника: столбы и пролёты. Десять столбов вдоль дороги — девять пролётов между ними. Проверяй себя на $n = 1$: формула обязана давать $a_1$, то есть множитель при $d$ должен обнуляться.


Ошибка 2: неправильно считают количество членов в куске прогрессии

Неправильно: «с 11-го по 20-й член — это $20 - 11 = 9$ членов».

Правильно: $20 - 11 + 1 = 10$ членов. Обе границы включены, поэтому к разности номеров прибавляется единица.

💡 Почему важно: ошибка на единицу в количестве членов портит всю сумму: в примере 15 вместо 755 получилось бы $\frac{53+98}{2} \cdot 9 = 679{,}5$ — даже не целое, что должно было бы насторожить. Это ровно та же «fencepost error», из-за которой в коде путают range(a, b) и range(a, b+1). Полезная привычка: посчитать количество на маленьком примере руками — от 3-го до 5-го члена это 3, 4, 5, то есть три члена, а $5 - 3 = 2$.


Ошибка 3: считают прогрессией последовательность с «примерно постоянной» разностью

Неправильно: увидев данные $10; 20; 30; 41$, объявить их арифметической прогрессией с $d = 10$ и посчитать по формуле сотый член.

Правильно: разности здесь $10, 10, 11$ — определение нарушено, формулы прогрессии применять нельзя. Можно построить линейную аппроксимацию данных, но это уже другая задача (метод наименьших квадратов), и результат будет приближением, а не точным значением.

💡 Почему важно: реальные данные почти никогда не образуют идеальную прогрессию, и соблазн «округлить до линейности» велик. Но формула $a_n = a_1 + (n-1)d$ верна только при точном равенстве разностей — экстраполяция накапливает ошибку линейно по $n$, и на сотом члене расхождение станет огромным. Если разности гуляют, честнее сказать «данные приблизительно линейны» и работать с моделью регрессии.


Ошибка 4: забывают проверить, что найденный номер натуральный

Неправильно: решив уравнение $a_n = 100$ и получив $n = 12{,}5$, написать «член с номером 12,5» или округлить до 13 и объявить, что 100 — тринадцатый член.

Правильно: дробный номер означает, что такого члена в прогрессии нет. Прогрессия определена только для натуральных $n$ и просто перескакивает через число 100.

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


Ошибка 5: не меняют знак неравенства при делении на отрицательную разность

Неправильно: из $0{,}01 - 0{,}0009(n-1) < 0{,}004$ получить $n - 1 < 6{,}67$ и объявить ответом $n = 7$ или меньше.

Правильно: при делении обеих частей на отрицательное число знак неравенства переворачивается: $n - 1 > 6{,}67$, откуда $n \geqslant 8$. Проверка обязательна: $a_8 = 0{,}0037 < 0{,}004$ ✅, $a_7 = 0{,}0046 > 0{,}004$ ✅

💡 Почему важно: в убывающих прогрессиях (а все decay-расписания именно такие) разность отрицательна, и это правило срабатывает в каждой второй задаче. Самый надёжный способ не ошибиться — после решения подставить найденный номер и соседний с ним и убедиться, что порог пересекается именно между ними.


Ошибка 6: применяют формулу $a_n = S_n - S_{n-1}$ к первому члену

Неправильно: для $S_n = 3n^2 - n$ считать $a_1$ по общей формуле $a_n = 6n - 4$, не проверяя первый член отдельно.

Правильно: формула $a_n = S_n - S_{n-1}$ имеет смысл только при $n \geqslant 2$ — при $n = 1$ никакого $S_0$ в задаче не определено. Первый член всегда находим как $a_1 = S_1$, а потом проверяем, совпадает ли он с тем, что даёт общая формула. Если совпал — последовательность действительно прогрессия; если нет (например, при $S_n = 3n^2 - n + 5$), то прогрессией она не является, «сломан» ровно первый член.

💡 Почему важно: это тонкое место любят на экзаменах именно потому, что проверка занимает одну строчку, а без неё легко объявить прогрессией то, что ею не является. Правило простое: посчитал общую формулу — сверь с $S_1$.


Ошибка 7: строят равномерную сетку там, где нужна логарифмическая

Неправильно: перебирать learning rate через np.linspace(1e-5, 1e-1, 5), полагая, что «равномерно — значит честно».

Правильно: для величин, меняющихся на порядки, арифметическую прогрессию строят по показателям степени: np.logspace(-5, -1, 5). Сами значения при этом образуют геометрическую прогрессию.

💡 Почему важно: в задании 27 мы посчитали, что равномерная сетка отправляет четыре запуска из пяти в заведомо расходящуюся область, а весь рабочий диапазон остаётся непроверенным. Вопрос-детектор один: «эта величина меняется на сколько или во сколько раз


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

Определение: арифметическая прогрессия — последовательность, у которой каждый член, начиная со второго, равен предыдущему плюс одно и то же число $d$: $a_{n+1} = a_n + d$. Разность находится вычитанием: $d = a_{n+1} - a_n$.

Прогрессия задаётся двумя числами — первым членом $a_1$ и разностью $d$. Всё остальное вычисляется. Знак $d$ определяет поведение: $d > 0$ — возрастает, $d < 0$ — убывает, $d = 0$ — постоянная.

Формула $n$-го члена: $a_n = a_1 + (n-1)d$. Множитель при $d$ — это число шагов, оно на единицу меньше номера. Более общий вид: $a_n = a_k + (n-k)d$, отсюда $d = \frac{a_n - a_k}{n - k}$.

Характеристическое свойство: каждый член равен среднему арифметическому соседей, $a_n = \frac{a_{n-1} + a_{n+1}}{2}$, или в удобной форме $2a_n = a_{n-1} + a_{n+1}$. Обратное тоже верно — это критерий: если свойство выполнено для всех членов, последовательность обязательно является арифметической прогрессией.

Симметричные пары дают одинаковые суммы: $a_k + a_{n-k+1} = a_1 + a_n$. На этом стоит весь приём Гаусса.

Две формулы суммы: $S_n = \frac{a_1 + a_n}{2} \cdot n$ (когда известен последний член) и $S_n = \frac{2a_1 + (n-1)d}{2} \cdot n$ (когда известны $a_1$ и $d$). Это одна формула в двух записях — вторая получается подстановкой $a_n = a_1 + (n-1)d$ в первую.

Классика наизусть: $1 + 2 + \dots + n = \frac{n(n+1)}{2}$; сумма первых $n$ нечётных равна $n^2$; сумма первых $n$ чётных равна $n(n+1)$.

Прогрессия — это линейная функция номера: $a_n = dn + (a_1 - d)$, все точки $(n; a_n)$ лежат на одной прямой, а разность $d$ — её угловой коэффициент. График дискретный: точки на прямой, а не сама прямая.

Сумма зависит от $n$ квадратично: $S_n = \frac{d}{2}n^2 + \left(a_1 - \frac{d}{2}\right)n$. Обратно: если $S_n = An^2 + Bn$ (без свободного члена), то это прогрессия с $d = 2A$ и $a_1 = A + B$. Проверка первого члена через $S_1$ обязательна.

Количество членов с $k$-го по $m$-й включительно равно $m - k + 1$, а не $m - k$. Сумму такого куска считают либо как отдельную прогрессию, либо как $S_m - S_{k-1}$.

Максимум суммы убывающей прогрессии достигается на последнем неотрицательном члене — производная для этого не нужна, достаточно проследить за знаком членов или найти вершину параболы $S_n$.

В ML это: linear warmup и linear decay learning rate, равномерная сетка гиперпараметров (linspace), линейная интерполяция между чекпоинтами, суммарная нагрузка при линейном росте. Если величина меняется на столько-то — арифметическая прогрессия; если во столько-то раз — геометрическая, и это следующий урок.


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

Что было раньше. Урок 126 «Понятие последовательности» дал общий язык: последовательность как функция натурального аргумента, способы задания (формулой $n$-го члена и рекуррентно), монотонность, ограниченность. Арифметическая прогрессия — первый содержательный частный случай этого понятия: мы наложили одно условие и немедленно получили закрытую формулу для любого члена и для суммы. Из более ранних тем работают линейная функция $y = kx + b$ (прямая связь через $a_n = dn + (a_1 - d)$), квадратичная функция и её вершина (максимум суммы), квадратные уравнения (задачи «сколько членов взять, чтобы сумма равнялась...») и решение линейных неравенств (задачи «начиная с какого номера»).

Что дальше. Урок 128 — геометрическая прогрессия, где соседние члены связаны не сложением, а умножением на постоянный знаменатель $q$. Между двумя прогрессиями есть точный мост: если $(a_n)$ — арифметическая, то $(10^{a_n})$ — геометрическая, и наоборот, логарифмы членов геометрической прогрессии образуют арифметическую. Мы это уже видели вживую в задании 27: показатели $-5, -4, -3, -2, -1$ образуют арифметическую прогрессию, а сами значения logspace — геометрическую. Дальше в уроке 129 появится предел последовательности, и там прогрессии станут первым полигоном: арифметическая при $d \neq 0$ неограниченно растёт или убывает, а вот геометрическая при $|q| < 1$ сходится, что даст формулу бесконечно убывающей суммы. Ещё дальше — производная (урок 133), и там связь «постоянный шаг ↔ постоянная скорость роста» получит второе, непрерывное прочтение.

Где это применяется в жизни и в ML/данных:

📊 В машинном обучении: линейные расписания learning rate (warmup, linear decay), равномерные сетки гиперпараметров в grid search, линейная интерполяция весов между чекпоинтами и в mixup-аугментации, расписания коэффициента $\beta$ в KL-annealing у вариационных автоэнкодеров, постепенный рост размера батча.

📈 В анализе данных: равномерные сетки времени во временных рядах и проверка их целостности через np.diff, разбиение диапазона на равные интервалы при построении гистограмм, np.linspace и range — буквально генераторы арифметических прогрессий.

💻 В программировании: оценка сложности алгоритмов с вложенными циклами ($1 + 2 + \dots + n = O(n^2)$ — это пузырьковая сортировка, попарные расстояния, матрицы схожести), индексация массивов с постоянным шагом (strided access), адресация памяти.

💰 В финансах: простые проценты, пени и штрафы за просрочку, равномерная амортизация оборудования, дифференцированные платежи по кредиту (тело долга гасится равными долями, а проценты убывают арифметической прогрессией).

🏗 В быту и физике: ряды сидений в амфитеатре (каждый следующий на постоянную величину длиннее), равноускоренное движение (пути за равные промежутки времени образуют арифметическую прогрессию с разностью $at^2$), укладка плитки и раскрой материала.


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

💡 Задача из папируса Ринда, 1650 год до н. э. Древнеегипетский писец Ахмес просил разделить 10 мер хлеба между 10 людьми так, чтобы каждый следующий получал на $\frac{1}{8}$ меры больше предыдущего. Решается это ровно нашей формулой: средний член равен $10/10 = 1$ мере, а дальше значения расходятся от него симметрично с шагом $\frac18$. Прогрессиям почти четыре тысячи лет, и первая же записанная задача про них была не абстрактной, а про еду.

💡 История про Гаусса, вероятно, приукрашена — но не выдумана. Первым её записал биограф Вольфганг Сарториус фон Вальтерсхаузен в 1856 году, через год после смерти математика, со слов самого Гаусса. В разных пересказах числа отличаются: где-то это 1-100, где-то — сумма ста чисел с большим шагом (например, $81\,297 + 81\,495 + \dots$), что делает подвиг ещё убедительнее: угадать закономерность в таком ряду сложнее, чем в натуральных числах. Сам приём «сложить ряд с самим собой наоборот» после этого стал стандартным во всей математике — им же выводится формула суммы биномиальных коэффициентов и множество других тождеств.

💡 Треугольные числа — прогрессия в картинках. Сумма $1 + 2 + \dots + n$ называется $n$-м треугольным числом, потому что столько шаров можно выложить равносторонним треугольником (вспомни расстановку шаров в бильярде — это треугольное число 15). Два одинаковых треугольника складываются в прямоугольник $n \times (n+1)$ — это и есть геометрическое доказательство формулы $\frac{n(n+1)}{2}$, известное грекам за две тысячи лет до Гаусса.

💡 Теорема Грина — Тао (2004). Один из самых громких результатов современной теории чисел: в последовательности простых чисел содержатся арифметические прогрессии любой наперёд заданной длины. Например, $5, 11, 17, 23, 29$ — пять простых чисел с разностью 6. Существует и прогрессия из 27 простых чисел (найдена в 2019 году), а теорема гарантирует, что найдётся и из 1000, и из миллиона — правда, ничего не говорит о том, где их искать. Теренс Тао получил за эту и смежные работы Филдсовскую медаль.

💡 np.linspace считает не прибавлением. Наивная реализация арифметической прогрессии — цикл с накоплением x += d. NumPy так не делает: он вычисляет каждый элемент как $a_1 + k \cdot d$ по прямой формуле. Причина — накопление ошибок округления чисел с плавающей точкой: при миллионе прибавлений последний элемент заметно «уезжает» от заданного конца отрезка. Прямая формула считает каждый член независимо и попадает точно. Это ровно тот же аргумент, по которому планировщики learning rate пересчитывают значение по номеру шага, а не накапливают его.


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

1. Проверяй формулу подстановкой $n = 1$

Любая выведенная формула $n$-го члена обязана при $n = 1$ давать $a_1$. Подставил единицу, получил первый член — почти наверняка не перепутал $n$ и $n-1$. Эта односекундная проверка снимает главную ошибку темы.


2. Считай не номера, а шаги между ними

Вместо того чтобы вспоминать, где ставится минус единица, спрашивай себя: «сколько шагов от известного члена до искомого?» От $a_7$ до $a_{12}$ — пять шагов, значит $a_{12} = a_7 + 5d$. Формула $a_n = a_k + (n-k)d$ работает от любого члена, а не только от первого, и с ней почти невозможно ошибиться.


3. Три числа в прогрессии обозначай как $a-d$, $a$, $a+d$

Симметричная запись — стандартный трюк для задач вида «три числа образуют прогрессию, их сумма равна...». Разность мгновенно сокращается в сумме: $(a-d) + a + (a+d) = 3a$, и одна неизвестная исчезает сама. Для четырёх чисел аналогично берут $a - 3t$, $a - t$, $a + t$, $a + 3t$ с шагом $2t$ — тогда сумма снова равна $4a$ без всяких $t$.


4. «Полусумма краёв на количество» — единственное, что стоит помнить про сумму

Формулу $S_n = \frac{a_1 + a_n}{2} \cdot n$ можно не заучивать, а понимать: прогрессия «сплющивается» до среднего уровня, а дальше просто умножается на длину. Вторая формула из неё получается за одну подстановку, и держать её в голове отдельно не обязательно.


5. Для куска прогрессии считай $S_m - S_{k-1}$, а не мучайся с границами

Сумма с $k$-го по $m$-й член равна $S_m - S_{k-1}$ — обрати внимание, вычитается сумма до $(k-1)$-го, а не до $k$-го. Этот способ полностью снимает вопрос «включать границу или нет»: количество членов нигде не фигурирует явно.


6. Ищи максимум суммы по смене знака членов

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


7. Задавай себе вопрос «на сколько или во сколько раз»

Это универсальный детектор типа прогрессии, который спасает и в задачах, и в коде. Растёт на постоянную величину — арифметическая, linspace, простые проценты. Растёт в постоянное число раз — геометрическая, logspace, сложные проценты. Ошибка в этом выборе стоит дороже, чем любая арифметическая: в задании 27 она сожгла четыре запуска обучения из пяти.


8. Помни про «столбы и пролёты» в коде

Ошибка на единицу при работе с прогрессиями и ошибка на единицу в индексах массива — это буквально одно и то же явление. Если в расписании обучения шаги нумеруются с нуля, формула превращается в $a_0 + kd$; если с единицы — в $a_1 + (n-1)d$. Договорись с собой о нумерации в начале задачи и держись её до конца.


Арифметическая прогрессия — та тема, где скромное условие («шаг постоянный») выдаёт непропорционально много: формулу любого члена, формулу суммы, критерий через среднее соседей и прямой мост к линейной функции. Именно поэтому она стоит в самом начале большого разговора о последовательностях: на ней удобно потренировать привычку выводить формулы, а не запоминать их. Ты уже умеешь за одну строчку сказать, каким будет learning rate на 7431-м шаге, сколько примеров переварит модель за двадцать эпох с растущим батчем и почему linspace для скорости обучения — плохая идея.

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

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

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

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