Понятие последовательности 🔢
Ты запускаешь обучение нейросети и смотришь в консоль. Каждую эпоху выводится одно число — значение функции потерь: 2.3026, 1.8412, 1.5209, 1.3117, 1.1804, 1.0993... Ты глядишь на этот столбик и пытаешься понять: модель ещё учится или уже встала? Падение замедляется — это плато или просто временная полка? Стоит ли останавливать прогон, который жрёт видеокарту уже четвёртый час?
Так вот: этот столбик чисел — не «лог обучения» и не «набор метрик». С точки зрения математики это числовая последовательность, и все вопросы, которые ты себе задаёшь, глядя на консоль, — это стандартные вопросы теории последовательностей. Убывает ли она? Ограничена ли снизу? Как быстро уменьшаются разности соседних членов? Есть ли у неё «дно», ниже которого она не опустится? На каждый из этих вопросов математика отвечала задолго до появления первых компьютеров — и отвечала строго, без «на глаз».
Последовательность — самый скромный на вид объект во всём курсе анализа. Просто список чисел: первое, второе, третье и так дальше, без конца. Никаких графиков во весь экран, никаких формул на полстраницы. Но именно на последовательностях в следующих уроках вырастет всё остальное: предел, непрерывность, производная, интеграл, ряды. Аналитик, который умеет читать последовательность — видеть в ней монотонность, ограниченность, скорость изменения, — читает и логи обучения, и временные ряды продаж, и графики затухания learning rate, и сходимость итерационных методов.
В этом уроке мы разберём последовательность с самого начала: что она такое формально, тремя способами её зададим, научимся строго доказывать, что она возрастает или убывает (без всякой производной — она появится только в уроке 133), выясним, что значит «ограничена», и посмотрим на четыре знаменитых последовательности, которые ты будешь встречать всю жизнь. А в конце аккуратно, на числовых таблицах, подглядим за тем, что происходит с членами при очень больших номерах — это прямой мостик к уроку 129, где появится настоящий предел.
🎯 Ты узнаешь:
- Почему последовательность — это функция, у которой область определения — множество натуральных чисел, и что из этого следует
- Три способа задать последовательность: формулой общего члена, рекуррентно и словесным описанием — и когда какой удобнее
- Как строго доказывать монотонность через знак разности $a_{n+1} - a_n$ или через отношение $a_{n+1}/a_n$
- Что такое ограниченность сверху, снизу и просто ограниченность — и почему это не то же самое, что монотонность
- Как выглядят Фибоначчи, факториалы, гармоническая последовательность и степени двойки — и где каждая из них всплывает в ML и алгоритмах
История: откуда это взялось?
Идея «упорядоченного бесконечного списка чисел» намного старше самого слова «последовательность». Ещё в вавилонских клинописных табличках II тысячелетия до н.э. встречаются таблицы, где каждое следующее число получается из предыдущего по фиксированному правилу — по сути, рекуррентно заданные последовательности для расчёта процентов по займу. Древнегреческий метод «исчерпывания», которым Евдокс и Архимед считали площади криволинейных фигур, — это построение последовательности вписанных многоугольников с растущим числом сторон. Архимед в III веке до н.э. вычислил $\pi$ с точностью до сотых, построив последовательность периметров правильных многоугольников от 6 до 96 сторон — и рассуждал он ровно в терминах «члены растут, но все меньше некоторой границы».
Знаменитый скачок случился в 1202 году. Итальянский купец и математик Леонардо Пизанский, известный как Фибоначчи, в книге «Liber Abaci» («Книга абака») поставил задачу про кроликов: пара кроликов каждый месяц даёт новую пару, которая сама начинает размножаться со второго месяца. Сколько будет пар через год? Ответ — та самая последовательность $1, 1, 2, 3, 5, 8, 13, 21, \dots$, где каждый член равен сумме двух предыдущих. Это был первый в европейской математике осознанный пример последовательности, заданной рекуррентно: не формулой «посчитай сразу n-й член», а правилом «следующий получается из предыдущих». Тем же приёмом сегодня устроены рекуррентные нейросети, скользящие средние и любой итерационный оптимизатор.
Строгий современный аппарат появился только в XIX веке. Огюстен Луи Коши в «Cours d'Analyse» (1821) впервые дал последовательностям точные определения — ограниченности, монотонности, сходимости — и потребовал доказывать свойства, а не «видеть» их из таблицы. Карл Вейерштрасс в 1860-х довёл дело до нынешней аккуратности и доказал ключевую теорему, к которой мы подберёмся в уроке 129: монотонная и ограниченная последовательность обязательно имеет предел. Обрати внимание на состав: монотонность плюс ограниченность — оба этих свойства определяются без всякого предела, чисто через неравенства, и именно им посвящён наш урок. Мы, по сути, собираем сейчас две детали, из которых в следующих уроках соберётся весь анализ.
А в 1964 году математик Нил Слоун, работавший тогда в Bell Labs, начал собирать картотеку целочисленных последовательностей — сначала на карточках, потом в книге, а с 1996 года в виде онлайн-базы OEIS. Сегодня в ней больше 370 000 последовательностей, и это рабочий инструмент: находишь в данных странный ряд чисел, вбиваешь первые члены — и база говорит, встречался ли он математике раньше и по какой формуле строится.
Последовательность — это функция натурального аргумента
Интуиция
Представь очередь. У каждого человека в ней есть номер: первый, второй, третий. Номера не повторяются, не пропускаются и идут строго по порядку. Теперь замени людей на числа — и ты получил последовательность. Первому номеру соответствует какое-то число, второму — какое-то, и так до бесконечности.
Ключевая мысль, которая экономит кучу сил: последовательность — это не новый математический объект, а старая знакомая функция, просто с очень бедной областью определения. Обычная функция $y = f(x)$ принимает на вход любое вещественное $x$ — весь континуум. Последовательность принимает на вход только натуральные числа: $1, 2, 3, 4, \dots$ Всё остальное — те же самые правила игры. Есть аргумент (номер), есть значение (член последовательности), есть график — только он состоит не из сплошной линии, а из отдельных точек, стоящих на равных расстояниях по горизонтали.
Именно поэтому у последовательностей нет вопроса «что происходит при $x = 2.5$». Между вторым и третьим членом ничего нет — там пустота. Это, кстати, не абстрактная придирка: когда ты рисуешь график loss по эпохам и соединяешь точки линией, ты рисуешь удобную для глаза ложь. Реальных значений между эпохой 7 и эпохой 8 не существует; линия — просто визуальный костыль.
Определение: Числовой последовательностью называется функция, определённая на множестве натуральных чисел $\mathbb{N}$ и принимающая числовые значения. Значение этой функции при аргументе $n$ обозначают $a_n$ и называют $n$-м членом последовательности, а число $n$ — номером члена. Саму последовательность записывают как $(a_n)$ или $\{a_n\}$, а её члены перечисляют: $a_1, a_2, a_3, \dots, a_n, \dots$
Обрати внимание на три технические детали в записи:
- Индекс пишется внизу: $a_n$, а не $a(n)$. Это чистая традиция — так короче и привычнее глазу, но смысл ровно тот же, что у $f(n)$.
- Круглые скобки $(a_n)$ обозначают саму последовательность целиком (упорядоченный бесконечный список), а $a_n$ без скобок — один конкретный её член. Путать их — классическая ошибка новичка.
- Последовательность бесконечна по определению. Список из десяти чисел — это конечный набор данных, а не последовательность в математическом смысле. Хотя на практике мы постоянно работаем с «началом» бесконечной последовательности — первыми 50 эпохами, например.
Ещё важная тонкость: члены последовательности могут повторяться, и это не делает её «неправильной». Последовательность $1, 1, 1, 1, \dots$ (все члены равны единице) — совершенно законная последовательность. Функция ведь тоже может принимать одно значение в разных точках. А вот номера повторяться не могут — у каждого номера ровно одно значение.
Примеры с разбором
Пример 1 (простой): последовательность задана формулой $a_n = 2n + 3$. Найди $a_1$, $a_4$ и $a_{100}$
Решение:
Шаг 1. Формула $a_n = 2n + 3$ — это инструкция: «возьми номер, умножь на 2, прибавь 3». Подставляем номер вместо $n$.
Шаг 2. $a_1 = 2 \cdot 1 + 3 = 5$.
Шаг 3. $a_4 = 2 \cdot 4 + 3 = 11$.
Шаг 4. $a_{100} = 2 \cdot 100 + 3 = 203$.
Заметь главное преимущество такой записи: чтобы узнать сотый член, не нужно вычислять первые девяносто девять. Подставил номер — получил значение за одно действие.
Ответ: $a_1 = 5$, $a_4 = 11$, $a_{100} = 203$.
Пример 2 (средний): является ли число $47$ членом последовательности $a_n = 3n + 2$? А число $50$?
Решение:
Давай разберёмся, что вообще значит вопрос «является ли число членом последовательности». Он значит: существует ли натуральный номер $n$, при котором $a_n$ равно этому числу. Значит, надо решить уравнение относительно $n$ и проверить, натуральный ли получился корень.
Шаг 1. Для числа 47 решаем уравнение:
$$3n + 2 = 47$$$$3n = 45$$$$n = 15$$Число 15 — натуральное. Значит, 47 стоит в последовательности на пятнадцатом месте.
Проверим наш ответ: $a_{15} = 3 \cdot 15 + 2 = 45 + 2 = 47$ ✅
Шаг 2. Для числа 50:
$$3n + 2 = 50$$$$3n = 48$$$$n = 16$$Тоже натуральное! Значит, 50 — шестнадцатый член.
Проверим: $a_{16} = 3 \cdot 16 + 2 = 50$ ✅
Шаг 3. А теперь для контраста возьмём число 49:
$$3n + 2 = 49 \quad \Rightarrow \quad 3n = 47 \quad \Rightarrow \quad n = \frac{47}{3} \approx 15{,}67$$Не натуральное — значит, число 49 в этой последовательности не встречается ни на каком месте.
Ответ: 47 — член последовательности ($n = 15$), 50 — тоже член ($n = 16$), а вот 49 — не член.
Пример 3 (сложный): последовательность задана формулой $a_n = \dfrac{n^2 - 5n + 6}{n}$. Найди все номера, при которых член последовательности равен нулю
Решение:
Шаг 1. Дробь равна нулю, когда числитель равен нулю, а знаменатель — нет. Знаменатель $n$ никогда не равен нулю, потому что $n$ — натуральное число, то есть $n \geq 1$. Значит, ограничение снимается само собой, и нам достаточно решить:
$$n^2 - 5n + 6 = 0$$Шаг 2. Разложим на множители или посчитаем через дискриминант:
$$D = 25 - 24 = 1, \quad n = \frac{5 \pm 1}{2}$$Получаем $n_1 = 3$, $n_2 = 2$.
Шаг 3. Оба корня — натуральные числа, значит оба подходят как номера.
Проверим наш ответ:
$$a_2 = \frac{4 - 10 + 6}{2} = \frac{0}{2} = 0 \ \checkmark$$$$a_3 = \frac{9 - 15 + 6}{3} = \frac{0}{3} = 0 \ \checkmark$$Шаг 4. Полезно посмотреть на соседей, чтобы почувствовать поведение последовательности: $a_1 = \frac{1 - 5 + 6}{1} = 2$, $a_4 = \frac{16 - 20 + 6}{4} = \frac{2}{4} = 0{,}5$, $a_5 = \frac{25 - 25 + 6}{5} = 1{,}2$. Видно, что последовательность сначала падает от 2 до нуля, немного «ныряет» и потом растёт. Никакой монотонности здесь нет — и это нормально, монотонность не обязательное свойство.
Ответ: $n = 2$ и $n = 3$.
Почему это важно
Понимание «последовательность = функция от номера» переворачивает восприятие данных. Любой лог обучения, любой временной ряд, любая история метрики по дням — это функция, у которой аргумент дискретен. И к ней применим весь понятийный аппарат функций: монотонность, ограниченность, экстремумы, скорость изменения.
Практическое следствие для ML: когда ты применяешь early stopping, ты формально проверяешь свойство последовательности валидационного лосса — «перестала ли она убывать на протяжении последних $p$ членов». Когда настраиваешь warmup для learning rate, ты явным образом конструируешь последовательность $\eta_1, \eta_2, \eta_3, \dots$ с нужным профилем. Когда считаешь скользящее среднее по временному ряду — ты строишь новую последовательность из старой. Всё это не метафоры: это буквально тот объект, определение которого мы только что записали.
Три способа задать последовательность
Последовательность бесконечна, а на бумаге и в памяти компьютера помещается только конечное. Значит, нужен способ описать бесконечный список конечным текстом. Таких способов, в сущности, три, и у каждого своя ниша.
Способ 1: формула общего члена
Это самый прямой способ: даётся выражение, куда подставляешь номер и сразу получаешь значение. Как $a_n = 2n + 3$ из предыдущего примера. В программировании это ровно то, что называется «чистая функция от индекса» — она не требует истории и не хранит состояния.
Определение: Формулой общего члена (явной формулой) последовательности называется выражение, позволяющее вычислить $a_n$ непосредственно по номеру $n$, без обращения к другим членам.
Достоинство — мгновенный доступ к любому члену. Хочешь тысячный — подставил тысячу. Недостаток — такая формула существует далеко не всегда, а если и существует, то бывает чудовищно неудобной (мы увидим это на числах Фибоначчи).
Примеры явных формул:
- $a_n = n^2$ даёт $1, 4, 9, 16, 25, \dots$
- $a_n = \dfrac{1}{n}$ даёт $1, \dfrac{1}{2}, \dfrac{1}{3}, \dfrac{1}{4}, \dots$
- $a_n = (-1)^n$ даёт $-1, 1, -1, 1, \dots$ — «переключатель знака», очень частый приём
- $a_n = 5$ даёт $5, 5, 5, 5, \dots$ — постоянная последовательность, тоже законная
Обрати особое внимание на множитель $(-1)^n$. Это стандартный математический способ записать чередование знаков одной формулой. При чётном $n$ он даёт $+1$, при нечётном $-1$. Если нужно начать с плюса, берут $(-1)^{n+1}$ или $(-1)^{n-1}$. В коде тот же эффект даёт (-1) ** n или проверка n % 2.
Способ 2: рекуррентная формула
Здесь правило другое: задаётся один или несколько первых членов, а дальше — правило, как получить следующий из уже известных предыдущих.
Определение: Рекуррентной формулой называется соотношение, выражающее член последовательности через один или несколько предыдущих членов, вместе с заданными начальными членами.
Классика:
$$a_1 = 3, \qquad a_{n+1} = a_n + 4$$Читается так: «первый член равен трём, а каждый следующий больше предыдущего на четыре». Разворачиваем: $3, 7, 11, 15, 19, \dots$
Здесь есть принципиальный момент: начальные члены — обязательная часть определения. Правило $a_{n+1} = a_n + 4$ само по себе задаёт не последовательность, а целое семейство последовательностей — по одной на каждый выбор $a_1$. Забыть указать $a_1$ — то же самое, что написать функцию с необъявленной переменной.
Рекуррентность может опираться и на несколько предыдущих членов. Числа Фибоначчи:
$$F_1 = 1, \quad F_2 = 1, \quad F_{n+2} = F_{n+1} + F_n$$Здесь начальных членов уже два — потому что правило смотрит на два шага назад. Общее правило простое: сколько предыдущих членов использует формула, столько начальных значений надо задать.
Достоинство рекуррентной записи — она часто гораздо ближе к сути процесса. Кролики Фибоначчи размножаются именно рекуррентно; вклад в банке растёт рекуррентно ($S_{n+1} = S_n \cdot 1{,}07$); веса нейросети обновляются рекуррентно ($w_{n+1} = w_n - \eta \cdot g_n$). Недостаток — чтобы узнать тысячный член, придётся честно прокрутить девятьсот девяносто девять шагов.
Способ 3: словесное описание
Иногда формулы нет вообще — есть только правило на человеческом языке.
Определение: Последовательность считается заданной описательно, если сформулировано правило, однозначно определяющее каждый её член по номеру, даже если это правило не записано формулой.
Классические примеры:
- $a_n$ — $n$-е по счёту простое число: $2, 3, 5, 7, 11, 13, 17, 19, 23, \dots$
- $a_n$ — $n$-я цифра десятичной записи числа $\pi$ после запятой: $1, 4, 1, 5, 9, 2, 6, 5, 3, 5, \dots$
- $a_n$ — количество делителей числа $n$: $1, 2, 2, 3, 2, 4, 2, 4, 3, 4, \dots$
Каждая из них абсолютно строго определена — двусмысленности нет, любой человек получит те же числа. Но компактной формулы «подставь $n$» ни у одной из них не существует (для простых чисел её ищут четвёртое столетие). Тем не менее это полноценные последовательности.
⚠️ Отдельно отметим ловушку: перечисление первых членов — это НЕ способ задания. Запись «$2, 4, 6, 8, \dots$» не определяет последовательность однозначно. Да, естественно предположить $a_n = 2n$. Но с тем же успехом это может быть последовательность «чётные числа, кроме 10» или что-нибудь совершенно экзотическое. Задачи типа «продолжи ряд» — это задачи на угадывание закономерности, а не строгая математика. В школьных и олимпиадных условиях подразумевается «самая простая закономерность», но помни: строго говоря, троеточие ничего не доказывает.
Примеры с разбором
Пример 4 (простой): последовательность задана рекуррентно: $a_1 = 2$, $a_{n+1} = 3a_n - 1$. Выпиши первые пять членов
Решение:
Шаг 1. Первый член дан: $a_1 = 2$.
Шаг 2. $a_2 = 3a_1 - 1 = 3 \cdot 2 - 1 = 5$.
Шаг 3. $a_3 = 3a_2 - 1 = 3 \cdot 5 - 1 = 14$.
Шаг 4. $a_4 = 3a_3 - 1 = 3 \cdot 14 - 1 = 41$.
Шаг 5. $a_5 = 3a_4 - 1 = 3 \cdot 41 - 1 = 122$.
Обрати внимание: чтобы получить пятый член, пришлось честно пройти все четыре шага. Никакого «сразу подставить 5» здесь нет.
Ответ: $2, 5, 14, 41, 122$.
Пример 5 (средний): последовательность задана рекуррентно: $a_1 = 1$, $a_{n+1} = a_n + 2n + 1$. Найди явную формулу общего члена
Решение:
Это типичная задача «перевести с рекуррентного языка на явный». Стандартный приём — выписать несколько членов и поискать закономерность, а потом проверить её.
Шаг 1. Вычислим первые члены:
$$a_1 = 1$$$$a_2 = a_1 + 2 \cdot 1 + 1 = 1 + 3 = 4$$$$a_3 = a_2 + 2 \cdot 2 + 1 = 4 + 5 = 9$$$$a_4 = a_3 + 2 \cdot 3 + 1 = 9 + 7 = 16$$$$a_5 = a_4 + 2 \cdot 4 + 1 = 16 + 9 = 25$$Шаг 2. Получили $1, 4, 9, 16, 25$ — это в точности квадраты номеров. Гипотеза: $a_n = n^2$.
Шаг 3. Проверим гипотезу подстановкой в рекуррентное соотношение. Если $a_n = n^2$, то должно выполняться:
$$a_{n+1} = a_n + 2n + 1$$$$(n+1)^2 \overset{?}{=} n^2 + 2n + 1$$Раскрываем левую часть: $(n+1)^2 = n^2 + 2n + 1$. Тождество выполняется при любом $n$ ✅
Шаг 4. Начальное условие тоже согласовано: $a_1 = 1^2 = 1$ ✅ Значит, формула верна для всей последовательности.
Ответ: $a_n = n^2$.
📌 Такой приём — «угадай и подтверди подстановкой» — совершенно легален, если подтверждение доведено до конца. Гипотеза без проверки была бы просто наблюдением, а с проверкой это полноценное доказательство.
Пример 6 (сложный): последовательность задана рекуррентно: $s_1 = 0{,}5$, $s_{n+1} = 0{,}5 \cdot s_n + 0{,}5$. Выпиши первые пять членов, найди явную формулу и объясни, что происходит с членами при росте номера
Решение:
Это в точности схема экспоненциального сглаживания (EMA) с коэффициентом $0{,}5$ на постоянном входном сигнале, равном единице, — рабочая лошадка обработки временных рядов.
Шаг 1. Считаем члены:
$$s_1 = 0{,}5$$$$s_2 = 0{,}5 \cdot 0{,}5 + 0{,}5 = 0{,}75$$$$s_3 = 0{,}5 \cdot 0{,}75 + 0{,}5 = 0{,}875$$$$s_4 = 0{,}5 \cdot 0{,}875 + 0{,}5 = 0{,}9375$$$$s_5 = 0{,}5 \cdot 0{,}9375 + 0{,}5 = 0{,}96875$$Шаг 2. Ищем закономерность. Посмотрим на «недобор до единицы», то есть на величину $1 - s_n$:
$$1 - s_1 = 0{,}5, \quad 1 - s_2 = 0{,}25, \quad 1 - s_3 = 0{,}125, \quad 1 - s_4 = 0{,}0625$$Это степени одной второй: $\dfrac{1}{2}, \dfrac{1}{4}, \dfrac{1}{8}, \dfrac{1}{16}$, то есть $1 - s_n = \left(\dfrac{1}{2}\right)^n = 2^{-n}$.
Шаг 3. Отсюда явная формула:
$$s_n = 1 - \frac{1}{2^n}$$Шаг 4. Проверим её подстановкой в рекуррентное соотношение:
$$0{,}5 \cdot s_n + 0{,}5 = 0{,}5\left(1 - \frac{1}{2^n}\right) + 0{,}5 = 0{,}5 - \frac{1}{2^{n+1}} + 0{,}5 = 1 - \frac{1}{2^{n+1}} = s_{n+1} \ \checkmark$$И начальное условие: $s_1 = 1 - \frac{1}{2} = 0{,}5$ ✅
Шаг 5. Что происходит при росте номера? Составим таблицу:
| $n$ | $s_n = 1 - 2^{-n}$ | недобор до 1 |
|---|---|---|
| 1 | 0,5 | 0,5 |
| 5 | 0,96875 | 0,03125 |
| 10 | 0,9990234375 | ≈ 0,00098 |
| 20 | ≈ 0,99999905 | ≈ 0,00000095 |
| 30 | ≈ 0,999999999 | ≈ 0,0000000009 |
Все члены строго меньше единицы — недобор $2^{-n}$ никогда не обращается в ноль. При этом последовательность растёт, и её значения становятся всё ближе к единице: недобор уменьшается вдвое на каждом шаге. Строгий язык для описания этой картины появится в уроке 129; пока нам достаточно сказать честно и точно: последовательность возрастает и ограничена сверху числом 1, а недобор до единицы после $n$-го шага равен ровно $2^{-n}$.
Ответ: $0{,}5;\ 0{,}75;\ 0{,}875;\ 0{,}9375;\ 0{,}96875$; общий член $s_n = 1 - 2^{-n}$; последовательность возрастает и ограничена сверху единицей.
Почему это важно
Разделение на «явную формулу» и «рекуррентность» — это не школьная классификация, а фундаментальная развилка в том, как устроены вычисления.
Явная формула — это параллелизуемо. Если ты знаешь $a_n = f(n)$, ты можешь посчитать миллион членов одновременно на GPU: каждый поток берёт свой $n$ и считает независимо. Именно поэтому позиционное кодирование в трансформерах задано явной формулой через синусы и косинусы от номера позиции — весь батч токенов кодируется одним матричным вызовом.
Рекуррентность — это последовательно по построению. Чтобы получить $h_n$, нужен $h_{n-1}$; параллелить нечего. Это и есть главная архитектурная боль рекуррентных нейросетей (RNN, LSTM, GRU): длинную последовательность приходится прогонять шаг за шагом. Именно эту проблему решили трансформеры, заменив рекуррентность механизмом внимания, который смотрит на все позиции сразу. Так что фраза «трансформеры быстрее RNN» на самом деле означает «явная формула параллелится, а рекуррентная — нет» — тот же самый математический факт, который ты только что разобрал на примере с EMA.
Нумерация: с единицы или с нуля?
Интуиция
В школьной математике последовательность почти всегда начинается с $a_1$. В программировании массивы почти всегда начинаются с a[0]. Это расхождение стоило человечеству неисчислимого количества багов, и разобраться с ним стоит один раз и навсегда.
Математическая традиция идёт от счёта предметов: первый, второй, третий. Множество натуральных чисел в российской школьной традиции — это $\mathbb{N} = \{1, 2, 3, \dots\}$, ноль в него не входит. Поэтому «функция натурального аргумента» естественно нумеруется с единицы.
Но это именно соглашение, а не закон природы. Ничто не мешает задать последовательность на множестве $\{0, 1, 2, 3, \dots\}$, и в некоторых задачах это гораздо удобнее. Классический пример — степени двойки. Если нумеровать с нуля, формула изящна: $a_n = 2^n$ даёт $1, 2, 4, 8, 16, \dots$, и номер совпадает с показателем степени. При нумерации с единицы приходится писать $a_n = 2^{n-1}$ — та же последовательность, но формула с некрасивым сдвигом.
Ещё пример — многочлены. Коэффициенты многочлена $P(x) = c_0 + c_1 x + c_2 x^2 + \dots$ естественно нумеровать с нуля, чтобы индекс совпадал со степенью. То же самое в разложениях, в теории вероятностей (число успехов от нуля), в комбинаторике (число сочетаний $C_n^0$).
Соглашение: Если явно не указано иное, в этом курсе последовательность нумеруется с $n = 1$. Если задача требует нумерации с нуля, это оговаривается отдельно — например, записью «$a_0 = \dots$, $a_{n+1} = \dots$».
Почему в программировании иначе. Причина не философская, а адресно-арифметическая. Массив в памяти — это непрерывный блок байтов, и адрес элемента вычисляется как
$$\text{адрес}(i) = \text{база} + i \cdot \text{размер элемента}$$При нумерации с нуля индекс — это в точности смещение от начала блока: у первого элемента смещение 0, у второго — один размер, и так далее. При нумерации с единицы в формуле появлялось бы лишнее вычитание: $\text{база} + (i-1) \cdot \text{размер}$. В 1970-х, когда проектировали C, эта лишняя операция на каждом обращении к массиву была реальной ценой. Дейкстра в 1982 году в заметке EWD831 добавил ещё один аргумент: при нумерации с нуля полуинтервал $[0; n)$ описывает ровно $n$ элементов без единой лишней единицы в формулах, и вложенные диапазоны стыкуются без зазоров и перекрытий.
Практический вывод для тебя как для человека на стыке математики и кода: всегда явно проверяй, с чего начинается счёт, особенно когда переносишь формулу из учебника в код. Стандартные места, где это ломается:
range(n)в Python даёт $0, 1, \dots, n-1$ — это $n$ значений, но последнее равно $n-1$, а не $n$- Эпохи обучения в большинстве фреймворков нумеруются с 0, а в логах для человека печатаются с 1 — и графики из-за этого сдвигаются на одну позицию
- Позиции токенов в трансформере считаются с 0, и формула позиционного кодирования написана именно под это
- Номер батча внутри эпохи — с 0, номер эпохи в отчёте — часто с 1
Примеры с разбором
Пример 7 (средний): последовательность степеней двойки $1, 2, 4, 8, 16, 32, \dots$ Запиши формулу общего члена при нумерации с единицы и при нумерации с нуля. Найди номер члена, равного 1024, в обоих вариантах
Решение:
Шаг 1. Нумерация с нуля. Тогда $a_0 = 1 = 2^0$, $a_1 = 2 = 2^1$, $a_2 = 4 = 2^2$. Формула:
$$a_n = 2^n, \qquad n = 0, 1, 2, \dots$$Шаг 2. Нумерация с единицы. Теперь $a_1 = 1$, $a_2 = 2$, $a_3 = 4$. Номер на единицу больше показателя, значит показатель на единицу меньше номера:
$$a_n = 2^{n-1}, \qquad n = 1, 2, 3, \dots$$Шаг 3. Находим номер для значения 1024. Заметим, что $1024 = 2^{10}$.
При нумерации с нуля: $2^n = 2^{10} \Rightarrow n = 10$.
При нумерации с единицы: $2^{n-1} = 2^{10} \Rightarrow n - 1 = 10 \Rightarrow n = 11$.
Проверим наш ответ: выпишем члены при нумерации с единицы: $a_1 = 1$, $a_2 = 2$, $a_3 = 4$, $a_4 = 8$, $a_5 = 16$, $a_6 = 32$, $a_7 = 64$, $a_8 = 128$, $a_9 = 256$, $a_{10} = 512$, $a_{11} = 1024$ ✅ Ровно одиннадцатый.
Ответ: с нуля — $a_n = 2^n$, номер 10; с единицы — $a_n = 2^{n-1}$, номер 11. Один и тот же член, разные номера — вот вам вся суть off-by-one ошибки в одной строке.
Почему это важно
Ошибка на единицу (off-by-one) — статистически одна из самых частых в программировании вообще и в подготовке данных в частности. И почти всегда её корень — рассогласование двух нумераций: математической (с 1) и программистской (с 0).
Конкретный сценарий из практики ML. Ты пишешь скользящее среднее по временному ряду с окном 7 дней и хочешь, чтобы значение на день $t$ учитывало дни $t-6, \dots, t$. Формула на бумаге написана в 1-индексации. В коде ты берёшь срез x[t-6:t] — и молча теряешь текущий день, потому что в Python правая граница среза не включается. Модель обучится, метрики посчитаются, ничего не упадёт — просто фича будет систематически сдвинута на день, и вся ценность признака утечёт. Такие баги не ловятся тестами на падение; их ловит только привычка явно выписывать, какие именно номера входят в диапазон.
Монотонные последовательности
Интуиция
Представь, что ты смотришь на график валидационного лосса. Первое, что хочется понять: он вообще падает или уже болтается? «Падает всё время» — это и есть монотонное убывание. «Болтается вверх-вниз» — это отсутствие монотонности.
Слово «монотонный» в обычной речи означает «однообразный, скучный». В математике смысл почти тот же: последовательность монотонна, если она движется всё время в одну сторону и никогда не разворачивается. Либо только вверх, либо только вниз.
Различают четыре вида монотонности, и разница между ними — в том, разрешено ли соседним членам совпадать.
Определение: Последовательность $(a_n)$ называется:
- возрастающей, если $a_{n+1} > a_n$ для всех $n \in \mathbb{N}$;
- убывающей, если $a_{n+1} < a_n$ для всех $n$;
- неубывающей, если $a_{n+1} \geq a_n$ для всех $n$;
- невозрастающей, если $a_{n+1} \leq a_n$ для всех $n$.
Последовательность любого из этих четырёх видов называется монотонной. Первые два вида (со строгими неравенствами) называют строго монотонными.
Разберём разницу на живом примере. Расписание learning rate типа «step decay»: держим $\eta = 0{,}1$ первые десять эпох, потом $0{,}05$ следующие десять, потом $0{,}025$. Эта последовательность невозрастающая, но не убывающая: внутри каждого блока соседние члены равны, строгого неравенства нет. Если сформулировать про неё «убывающая», это будет ошибкой — придирчивой на вид, но принципиальной, потому что многие теоремы формулируются именно под строгую монотонность.
Ещё важный момент: последовательность может не быть монотонной вообще ни в каком смысле. $(-1)^n$ прыгает между $-1$ и $1$ — она не возрастающая, не убывающая, не неубывающая и не невозрастающая. И это не патология: большинство последовательностей, встречающихся в данных, не монотонны. Реальный training loss с шумом от мини-батчей скачет вверх-вниз почти на каждом шаге, и общий тренд вниз никак не делает его убывающим в математическом смысле.
Наконец, часто говорят «монотонна начиная с некоторого номера». Это законная и очень полезная формулировка: последовательность может пару раз дёрнуться в начале, а потом уже двигаться строго в одну сторону. Мы разберём такой случай в примере 10.
Как доказывать монотонность: два рабочих инструмента
У нас пока нет производной — она появится только в уроке 133, и пользоваться ею мы не будем. Но для последовательностей она и не особо нужна: есть два приёма, которые закрывают почти все школьные и прикладные случаи.
Инструмент 1: знак разности $a_{n+1} - a_n$
Составляем разность соседних членов, упрощаем и смотрим на знак:
- если $a_{n+1} - a_n > 0$ при всех $n$ — последовательность возрастает;
- если $a_{n+1} - a_n < 0$ при всех $n$ — убывает;
- если $\geq 0$ — неубывает, если $\leq 0$ — невозрастает;
- если знак меняется — монотонности нет (или она есть только начиная с некоторого номера).
Это универсальный приём, годится всегда. Технически он сводится к «упростить алгебраическое выражение и определить его знак» — то, что ты умеешь с восьмого класса.
Инструмент 2: отношение $\dfrac{a_{n+1}}{a_n}$
Работает только тогда, когда все члены положительны (это обязательное условие, о нём ниже). Считаем отношение соседних членов:
- если $\dfrac{a_{n+1}}{a_n} > 1$ при всех $n$ — возрастает;
- если $\dfrac{a_{n+1}}{a_n} < 1$ при всех $n$ — убывает;
- если $= 1$ — соседние члены равны.
⚠️ Почему нужна положительность. Если члены отрицательны, отношение врёт. Возьми $a_n = -n$: это убывающая последовательность ($-1, -2, -3, \dots$), но $\frac{a_{n+1}}{a_n} = \frac{-(n+1)}{-n} = \frac{n+1}{n} > 1$ — критерий сказал бы «возрастает». Причина в том, что при делении на отрицательное число неравенство переворачивается. Поэтому перед применением второго инструмента обязательно убедись, что $a_n > 0$ для всех $n$.
Когда какой удобнее. Простое практическое правило: если в формуле общего члена есть произведения, степени с $n$ в показателе или факториалы — бери отношение, при делении всё красиво сократится. Если формула — это сумма, разность или дробь с многочленами — бери разность.
Примеры с разбором
Пример 8 (простой): докажи, что последовательность $a_n = 4n + 7$ возрастает
Решение:
Шаг 1. В формуле только сумма и произведение с $n$ — берём разность.
Шаг 2. Выпишем следующий член. Для этого в формулу вместо $n$ подставляем $n+1$:
$$a_{n+1} = 4(n+1) + 7 = 4n + 4 + 7 = 4n + 11$$Шаг 3. Считаем разность:
$$a_{n+1} - a_n = (4n + 11) - (4n + 7) = 4$$Шаг 4. Разность равна 4, то есть строго положительна при любом $n$. Значит, каждый следующий член больше предыдущего.
Проверим наш ответ: $a_1 = 11$, $a_2 = 15$, $a_3 = 19$ — растёт с шагом 4 ✅
Ответ: последовательность возрастающая, разность соседних членов постоянна и равна 4.
📌 Между прочим, ты только что доказал монотонность арифметической прогрессии — темы следующего урока. Постоянная разность соседних членов — это её определяющее свойство.
Пример 9 (средний): исследуй на монотонность последовательность $a_n = \dfrac{n + 3}{n + 1}$
Решение:
Шаг 1. Прикинем по первым членам, куда всё движется:
$$a_1 = \frac{4}{2} = 2, \quad a_2 = \frac{5}{3} \approx 1{,}667, \quad a_3 = \frac{6}{4} = 1{,}5, \quad a_4 = \frac{7}{5} = 1{,}4$$Похоже на убывание. Но три числа — не доказательство, докажем строго.
Шаг 2. Выпишем следующий член:
$$a_{n+1} = \frac{(n+1) + 3}{(n+1) + 1} = \frac{n + 4}{n + 2}$$Шаг 3. Составим разность и приведём к общему знаменателю:
$$a_{n+1} - a_n = \frac{n+4}{n+2} - \frac{n+3}{n+1} = \frac{(n+4)(n+1) - (n+3)(n+2)}{(n+2)(n+1)}$$Шаг 4. Раскроем скобки в числителе аккуратно:
$$(n+4)(n+1) = n^2 + n + 4n + 4 = n^2 + 5n + 4$$$$(n+3)(n+2) = n^2 + 2n + 3n + 6 = n^2 + 5n + 6$$$$\text{числитель} = (n^2 + 5n + 4) - (n^2 + 5n + 6) = -2$$Шаг 5. Итого:
$$a_{n+1} - a_n = \frac{-2}{(n+1)(n+2)}$$Знаменатель при натуральных $n$ строго положителен (произведение двух положительных чисел), числитель отрицателен. Значит, вся дробь отрицательна при любом $n$.
Ответ: последовательность строго убывающая.
💡 Альтернативный путь. Иногда полезно выделить целую часть: $\dfrac{n+3}{n+1} = \dfrac{(n+1) + 2}{n+1} = 1 + \dfrac{2}{n+1}$. Теперь видно всё сразу: единица постоянна, а дробь $\frac{2}{n+1}$ убывает, потому что знаменатель растёт. Сумма постоянной и убывающей — убывающая. Этот приём «выделить целую часть» невероятно экономит время, запомни его.
Пример 10 (сложный): исследуй на монотонность последовательность $a_n = \dfrac{n^2}{2^n}$
Решение:
Шаг 1. В формуле есть степень с $n$ в показателе — это сигнал использовать отношение. Сначала проверим условие применимости: $n^2 > 0$ и $2^n > 0$, значит $a_n > 0$ для всех натуральных $n$ ✅ Отношением пользоваться можно.
Шаг 2. Составим отношение соседних членов:
$$\frac{a_{n+1}}{a_n} = \frac{(n+1)^2}{2^{n+1}} \cdot \frac{2^n}{n^2} = \frac{(n+1)^2}{n^2} \cdot \frac{2^n}{2^{n+1}} = \frac{(n+1)^2}{2n^2}$$Шаг 3. Теперь выясним, когда это отношение больше единицы, а когда меньше. Поскольку $2n^2 > 0$, неравенство можно умножить на знаменатель без смены знака:
$$\frac{(n+1)^2}{2n^2} > 1 \iff (n+1)^2 > 2n^2$$Шаг 4. Обе части положительны, извлечём квадратный корень:
$$n + 1 > n\sqrt{2}$$$$1 > n(\sqrt{2} - 1)$$$$n < \frac{1}{\sqrt{2} - 1} = \frac{\sqrt{2}+1}{(\sqrt{2}-1)(\sqrt{2}+1)} = \frac{\sqrt{2}+1}{1} = \sqrt{2} + 1 \approx 2{,}414$$Шаг 5. Итак:
- при $n = 1$ и $n = 2$ (то есть $n < 2{,}414$) отношение больше единицы — члены растут;
- при $n \geq 3$ отношение меньше единицы — члены убывают.
Шаг 6. Проверим прямым счётом:
| $n$ | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| $a_n$ | 0,5 | 1 | 1,125 | 1 | 0,78125 | 0,5625 | 0,3828 |
Ровно как предсказано: рост до $n = 3$, потом убывание ✅ Максимум последовательности — $a_3 = \dfrac{9}{8} = 1{,}125$.
Ответ: последовательность не монотонна на всём $\mathbb{N}$: возрастает при $n = 1, 2, 3$ и строго убывает начиная с $n = 3$. Наибольший член — $a_3 = 1{,}125$.
📌 Обрати внимание на важный содержательный вывод: показательная функция $2^n$ в итоге «побеждает» степенную $n^2$, хотя на первых номерах степенная какое-то время лидирует. Это универсальный факт, который в информатике формулируют как «любой полиномиальный алгоритм лучше экспоненциального при достаточно больших входах» — хотя на малых входах экспоненциальный может выигрывать.
Почему это важно
Монотонность — рабочее понятие, а не украшение теории.
Early stopping. Правило остановки обучения формулируется буквально в терминах монотонности: «останавливаемся, если валидационный лосс не убывал последние $p$ эпох». Реализация проверяет ровно те неравенства, которые ты только что писал: сравнение $a_{n+1}$ с минимумом по предыдущим членам.
Гарантии оптимизаторов. Когда в статье пишут, что метод обеспечивает «монотонное убывание целевой функции», это не фигура речи, а доказанное свойство: при подходящем шаге градиентный спуск даёт последовательность $L(w_1) > L(w_2) > L(w_3) > \dots$ Если шаг слишком велик, монотонность ломается — и лосс начинает скакать или расходиться. Отсюда, кстати, и практика уменьшать learning rate при плато.
Расписания learning rate. Почти все они по построению невозрастающие: step decay, экспоненциальный, косинусный на первой половине цикла. Warmup — исключение: там сначала идёт возрастающий участок, потом убывающий, ровно как в примере 10.
Проверка данных. Признаки типа «накопленная сумма покупок клиента» или «общее число просмотров» обязаны быть неубывающими по построению. Если в данных нашлось $a_{n+1} < a_n$ — это баг в выгрузке, а не «интересный паттерн». Проверка монотонности — один из самых дешёвых и самых полезных тестов качества данных.
Ограниченные последовательности
Интуиция
Представь показания датчика температуры в серверной. Они колеблются, но ты точно знаешь: ниже нуля не опустятся и выше пятидесяти не поднимутся. Значит, все значения зажаты между двумя числами — последовательность ограничена.
Ограниченность — это про существование «потолка» и «пола». Причём важно понимать: потолок не обязан достигаться. Если все члены строго меньше 3, то 3 — законный потолок, даже если ни один член не равен трём. И потолков всегда бесконечно много: если 3 — потолок, то и 5, и 100, и миллион тоже потолки. Ограниченность — это утверждение «хоть один потолок существует», а не «вот единственный правильный потолок».
Определение: Последовательность $(a_n)$ называется:
- ограниченной сверху, если существует такое число $M$, что $a_n \leq M$ для всех $n \in \mathbb{N}$. Число $M$ называют верхней границей;
- ограниченной снизу, если существует такое число $m$, что $a_n \geq m$ для всех $n$. Число $m$ называют нижней границей;
- ограниченной, если она ограничена и сверху, и снизу, то есть существуют $m$ и $M$ такие, что $m \leq a_n \leq M$ для всех $n$;
- неограниченной, если она не является ограниченной.
Эквивалентная и часто более удобная формулировка ограниченности: существует такое число $C > 0$, что $|a_n| \leq C$ для всех $n$. То есть все члены помещаются в полосу шириной $2C$ вокруг нуля. Эти два определения равносильны: из $m \leq a_n \leq M$ следует $|a_n| \leq \max(|m|, |M|)$, и наоборот.
Ограниченность и монотонность — независимые свойства. Это важнейшая мысль раздела. Возможны все четыре комбинации:
- монотонная и ограниченная: $a_n = 1 - \frac{1}{2^n}$ (возрастает, все члены между $0{,}5$ и 1);
- монотонная и неограниченная: $a_n = n$ (возрастает, потолка нет);
- немонотонная и ограниченная: $a_n = (-1)^n$ (прыгает, но зажата между $-1$ и 1);
- немонотонная и неограниченная: $a_n = (-1)^n \cdot n$ (прыгает и разбегается).
Отдельно заметим полезный факт: любая монотонно возрастающая последовательность автоматически ограничена снизу — своим первым членом $a_1$, ведь дальше она только растёт. Симметрично, убывающая ограничена сверху первым членом. Так что для возрастающей последовательности вопрос «ограничена ли она» сводится к вопросу «ограничена ли она сверху». Эта половинка достаётся бесплатно, и на ней экономят кучу работы в задачах.
Примеры с разбором
Пример 11 (простой): докажи, что последовательность $a_n = \dfrac{1}{n}$ ограничена, и укажи границы
Решение:
Шаг 1. Ограниченность снизу. Числитель 1 положителен, знаменатель $n \geq 1$ положителен, значит $a_n > 0$ для всех $n$. Нижняя граница найдена: $m = 0$.
Шаг 2. Ограниченность сверху. Наибольший член — первый: $a_1 = 1$. Дальше знаменатель растёт, а значит дробь уменьшается. Строго: при $n \geq 1$ имеем $n \geq 1$, поэтому $\frac{1}{n} \leq \frac{1}{1} = 1$. Верхняя граница: $M = 1$.
Шаг 3. Итого $0 < a_n \leq 1$ для всех натуральных $n$.
Проверим наш ответ: $a_1 = 1$, $a_2 = 0{,}5$, $a_{10} = 0{,}1$, $a_{1000} = 0{,}001$ — все в промежутке $(0; 1]$ ✅
Ответ: последовательность ограничена, $0 < a_n \leq 1$. Верхняя граница 1 достигается (при $n=1$), нижняя граница 0 не достигается ни при каком $n$.
Пример 12 (средний): исследуй последовательность $a_n = \dfrac{2n - 1}{n + 1}$ на монотонность и ограниченность
Решение:
Шаг 1. Выделим целую часть — это почти всегда упрощает жизнь для дробно-линейных выражений:
$$a_n = \frac{2n - 1}{n + 1} = \frac{2(n+1) - 3}{n+1} = 2 - \frac{3}{n+1}$$Шаг 2. Монотонность. При росте $n$ знаменатель $n+1$ растёт, значит дробь $\frac{3}{n+1}$ убывает, значит вычитаемое уменьшается, значит вся разность растёт. Проверим строго через разность:
$$a_{n+1} - a_n = \left(2 - \frac{3}{n+2}\right) - \left(2 - \frac{3}{n+1}\right) = \frac{3}{n+1} - \frac{3}{n+2} = \frac{3(n+2) - 3(n+1)}{(n+1)(n+2)} = \frac{3}{(n+1)(n+2)} > 0$$Последовательность строго возрастает ✅
Шаг 3. Ограниченность сверху. Дробь $\frac{3}{n+1}$ строго положительна, значит из двойки мы всегда что-то вычитаем:
$$a_n = 2 - \frac{3}{n+1} < 2$$Верхняя граница $M = 2$, причём она никогда не достигается.
Шаг 4. Ограниченность снизу. Последовательность возрастает, значит её наименьший член — первый:
$$a_1 = \frac{2 \cdot 1 - 1}{1 + 1} = \frac{1}{2}$$Нижняя граница $m = 0{,}5$, и она достигается.
Шаг 5. Составим таблицу для наглядности:
| $n$ | 1 | 2 | 5 | 10 | 100 | 1000 |
|---|---|---|---|---|---|---|
| $a_n$ | 0,5 | 1 | 1,5 | ≈ 1,727 | ≈ 1,970 | ≈ 1,997 |
Ответ: последовательность строго возрастающая и ограниченная: $0{,}5 \leq a_n < 2$.
Пример 13 (сложный): исследуй последовательность $a_n = (-1)^n \cdot \dfrac{3n}{n + 1}$ на монотонность и ограниченность. Есть ли у неё наибольший и наименьший члены?
Решение:
Шаг 1. Выпишем первые члены, чтобы понять картину:
$$a_1 = -\frac{3}{2} = -1{,}5, \quad a_2 = \frac{6}{3} = 2, \quad a_3 = -\frac{9}{4} = -2{,}25, \quad a_4 = \frac{12}{5} = 2{,}4, \quad a_5 = -\frac{15}{6} = -2{,}5, \quad a_6 = \frac{18}{7} \approx 2{,}571$$Шаг 2. Монотонность. Члены прыгают через ноль: минус, плюс, минус, плюс. Ни $a_{n+1} > a_n$, ни $a_{n+1} < a_n$ не выполняется для всех $n$ (сравни: $a_1 < a_2$, но $a_2 > a_3$). Монотонности нет ни в каком виде.
Шаг 3. Ограниченность. Перейдём к модулю — это стандартный ход для знакочередующихся последовательностей:
$$|a_n| = \frac{3n}{n+1}$$Выделим целую часть:
$$\frac{3n}{n+1} = \frac{3(n+1) - 3}{n+1} = 3 - \frac{3}{n+1}$$Дробь $\frac{3}{n+1}$ строго положительна, значит $|a_n| < 3$ для всех $n$.
Шаг 4. Из $|a_n| < 3$ немедленно получаем $-3 < a_n < 3$. Последовательность ограничена: $M = 3$, $m = -3$.
Шаг 5. Есть ли наибольший член? Чётные члены равны $3 - \frac{3}{n+1}$ и растут с ростом чётного $n$: $2;\ 2{,}4;\ 2{,}571;\ 2{,}667;\ \dots$ Каждый следующий больше предыдущего, и все они меньше 3. Значит, какой бы чётный член мы ни объявили наибольшим, найдётся больший — наибольшего члена не существует.
Шаг 6. Аналогично нечётные члены равны $-\left(3 - \frac{3}{n+1}\right)$ и уменьшаются: $-1{,}5;\ -2{,}25;\ -2{,}5;\ -2{,}625;\ \dots$ Все больше $-3$, но наименьшего среди них нет.
Ответ: последовательность не монотонна, но ограничена: $-3 < a_n < 3$. Ни наибольшего, ни наименьшего члена у неё нет.
📌 Тонкость, которую стоит зафиксировать: «ограничена сверху» и «имеет наибольший член» — разные вещи. Ограниченность гарантирует существование потолка, а не существование самого высокого члена, который до этого потолка достаёт.
Почему это важно
Ограниченность — это про устойчивость вычислений, и в ML она вылезает буквально везде.
Функции активации. Сигмоида и гиперболический тангенс ограничены по построению: $\sigma(x) \in (0;1)$, $\tanh(x) \in (-1;1)$. Именно ограниченность делает их удобными для интерпретации как вероятностей и защищает от взрыва значений — но она же порождает проблему затухающих градиентов. ReLU, напротив, не ограничена сверху, и это её главное достоинство и главный риск одновременно.
Gradient clipping. Приём «обрезки градиента» — это принудительное превращение возможно неограниченной последовательности норм градиентов в ограниченную: если $\|g_n\| > C$, масштабируем до $C$. Без этого при обучении рекуррентных сетей норма градиента может расти лавинообразно, и обучение разваливается за один шаг.
Нормализация признаков. Min-max scaling буквально загоняет значения признака в отрезок $[0; 1]$, то есть делает последовательность значений ограниченной с известными границами. Модели с градиентными методами работают на таких данных заметно стабильнее.
Диагностика обучения. Если последовательность значений лосса неограничена сверху (растёт без потолка) — это диагноз: слишком большой learning rate, взрыв градиентов или ошибка в данных. Ограниченность лосса снизу нулём, кстати, тоже содержательный факт: кросс-энтропия и MSE неотрицательны по построению, и это то, на что опираются все гарантии сходимости.
Четыре знаменитые последовательности
Есть несколько последовательностей, которые ты будешь встречать всю жизнь — в учебниках, в статьях, в анализе алгоритмов. Разберём четыре главные.
Числа Фибоначчи
$$F_1 = 1, \quad F_2 = 1, \quad F_{n+2} = F_{n+1} + F_n$$Первые члены: $1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, \dots$
Свойства, которые стоит знать:
- Последовательность строго возрастает начиная с $F_2$ (первые два члена равны, поэтому «неубывающая» — точнее);
- Она неограничена сверху: каждый член больше предыдущего минимум на 1 начиная с $F_3$, значит члены уходят сколь угодно далеко;
- Отношение соседних членов $F_{n+1}/F_n$ даёт $1;\ 2;\ 1{,}5;\ 1{,}667;\ 1{,}6;\ 1{,}625;\ 1{,}615;\ 1{,}619;\ 1{,}6176;\ \dots$ — числа колеблются вокруг золотого сечения $\varphi = \frac{1+\sqrt{5}}{2} \approx 1{,}6180$;
- Явная формула всё-таки существует — формула Бине: $F_n = \dfrac{1}{\sqrt{5}}\left(\varphi^n - (1-\varphi)^n\right)$. Удивительно, что выражение с двумя иррациональностями при каждом натуральном $n$ даёт целое число.
Где встречается в реальности: структура данных «фибоначчиева куча» (её амортизированная сложность лучше, чем у бинарной), метод фибоначчиева поиска экстремума, генерация псевдослучайных чисел (запаздывающие генераторы Фибоначчи), а в биологии — расположение листьев и семечек в подсолнухе, где углы между элементами связаны с золотым сечением.
Факториалы
$$n! = 1 \cdot 2 \cdot 3 \cdot \ldots \cdot n$$Рекуррентно это записывается изящнее всего:
$$1! = 1, \qquad (n+1)! = (n+1) \cdot n!$$Первые члены: $1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, \dots$
Отдельно оговаривается $0! = 1$ — это не «странное соглашение», а единственное значение, при котором рекуррентная формула $n! = n \cdot (n-1)!$ работает и при $n=1$, а комбинаторные формулы не разваливаются.
Факториал растёт чудовищно быстро — быстрее любой показательной функции. Уже $20! \approx 2{,}43 \cdot 10^{18}$ — это на грани переполнения 64-битного целого. $70!$ превышает $10^{100}$.
Где встречается: число перестановок $n$ элементов (то есть число способов упорядочить датасет), биномиальные коэффициенты $C_n^k = \frac{n!}{k!(n-k)!}$, оценки сложности переборных алгоритмов ($O(n!)$ — это «задача решается только для крошечных $n$»), гамма-функция как обобщение факториала на нецелые аргументы (она всплывает в распределениях вероятностей: бета, гамма, Дирихле — а распределение Дирихле, в свою очередь, лежит в основе тематического моделирования LDA).
Гармоническая последовательность
Есть два родственных объекта с похожими названиями, и их часто путают.
Собственно гармоническая последовательность — это $a_n = \dfrac{1}{n}$: $1;\ 0{,}5;\ 0{,}333\dots;\ 0{,}25;\ 0{,}2;\ \dots$ Она убывающая и ограниченная ($0 < a_n \leq 1$).
А гармонические числа — это её частичные суммы:
$$H_n = 1 + \frac{1}{2} + \frac{1}{3} + \dots + \frac{1}{n}$$Первые значения: $H_1 = 1$, $H_2 = 1{,}5$, $H_3 \approx 1{,}833$, $H_4 \approx 2{,}083$, $H_5 \approx 2{,}283$, $H_{10} \approx 2{,}929$.
Вот главный сюрприз: последовательность $H_n$ не ограничена сверху, хотя прибавляемые слагаемые становятся сколь угодно малыми. Классическое доказательство группировкой (его придумал Николай Орем около 1350 года) мы разберём в задании 21. Растёт она, правда, издевательски медленно: чтобы $H_n$ превысила 10, нужно взять около 12 367 слагаемых, а чтобы превысила 20 — порядка 272 миллионов.
Где встречается: анализ алгоритмов (среднее число сравнений в быстрой сортировке содержит $H_n$), задача о сборе купонов (сколько пачек чипсов купить, чтобы собрать все $n$ наклеек — ответ $n H_n$), а в ML — оценки числа шагов в некоторых схемах убывания learning rate вида $\eta_n = \eta_0 / n$.
Степени двойки
$$a_n = 2^n \quad (\text{нумерация с нуля}): \quad 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, \dots$$Возрастает, неограничена сверху, ограничена снизу. Рекуррентно: $a_0 = 1$, $a_{n+1} = 2a_n$.
Где встречается: размеры батчей (32, 64, 128, 256 — не суеверие, а выравнивание под архитектуру памяти GPU), размерности эмбеддингов (256, 512, 768, 1024), количество узлов на уровне бинарного дерева, число подмножеств множества из $n$ элементов (ровно $2^n$), разрядность чисел. А также классическая легенда о зёрнах на шахматной доске: на 64-й клетке лежит $2^{63} \approx 9{,}2 \cdot 10^{18}$ зёрен — больше, чем человечество вырастило за всю историю.
Полезная деталь, связывающая степени двойки с последовательностями: удвоение размера модели на каждом шаге эксперимента — это построение последовательности $2^n$, а логарифмическая ось на графике scaling laws превращает её в равномерную шкалу. Именно поэтому на таких графиках по оси абсцисс всегда логарифм.
Что происходит при больших номерах: читаем таблицы
Мы уже несколько раз ловили себя на желании сказать что-то вроде «члены подбираются всё ближе к трём». Давай зафиксируем, что мы имеем право говорить на текущем этапе, а что — нет.
Можно (и это строго): вычислить члены с большими номерами, составить таблицу, оценить разность между членом и каким-то числом, доказать монотонность и ограниченность, найти номер, начиная с которого член отличается от числа меньше чем на заданную величину.
Пока нельзя (появится в уроке 129): говорить, что последовательность «сходится», использовать обозначение предела и опираться на теоремы о пределах. Это не формальная придирка: без точного определения фраза «приближается к трём» не отличает случай, когда члены реально подбираются вплотную, от случая, когда они подходят до какой-то границы и застревают.
Разберём это на живом примере.
Пример 14 (средний): исследуй последовательность $a_n = \dfrac{3n^2 + 1}{n^2 + n}$ — монотонность, ограниченность и поведение при больших номерах
Решение:
Шаг 1. Считаем значения. Удобнее сначала преобразовать формулу, поделив числитель и знаменатель на $n^2$:
$$a_n = \frac{3 + \frac{1}{n^2}}{1 + \frac{1}{n}}$$Шаг 2. Составим таблицу:
| $n$ | $a_n$ (точно) | $a_n$ (приближённо) | $3 - a_n$ |
|---|---|---|---|
| 1 | $4/2$ | 2,0000 | 1,0000 |
| 2 | $13/6$ | 2,1667 | 0,8333 |
| 5 | $76/30$ | 2,5333 | 0,4667 |
| 10 | $301/110$ | 2,7364 | 0,2636 |
| 100 | $30001/10100$ | 2,9704 | 0,0296 |
| 1000 | $3000001/1001000$ | 2,9970 | 0,0030 |
| 10000 | — | 2,99970 | 0,00030 |
Шаг 3. Что видно из таблицы? Значения растут и держатся ниже трёх, а «недобор» до тройки уменьшается примерно в 10 раз при увеличении номера в 10 раз.
Шаг 4. Докажем ограниченность сверху строго, а не «по таблице». Нужно проверить неравенство $\frac{3n^2+1}{n^2+n} < 3$. Знаменатель $n^2 + n$ положителен при натуральных $n$, поэтому умножаем на него без смены знака:
$$3n^2 + 1 < 3(n^2 + n)$$$$3n^2 + 1 < 3n^2 + 3n$$$$1 < 3n$$Это верно при всех $n \geq 1$ ✅ Значит, $a_n < 3$ для всех натуральных $n$ — доказано, а не угадано.
Шаг 5. Оценим недобор точно:
$$3 - a_n = 3 - \frac{3n^2+1}{n^2+n} = \frac{3n^2 + 3n - 3n^2 - 1}{n^2+n} = \frac{3n - 1}{n^2 + n}$$Проверим на $n = 10$: $\frac{29}{110} \approx 0{,}2636$ ✅ совпало с таблицей.
Шаг 6. Теперь можно отвечать на содержательные вопросы без всякого предела. Например: начиная с какого номера член отличается от трёх меньше чем на $0{,}01$? Оценим сверху:
$$3 - a_n = \frac{3n-1}{n^2+n} < \frac{3n}{n^2} = \frac{3}{n}$$Значит, достаточно потребовать $\frac{3}{n} < 0{,}01$, то есть $n > 300$. При $n = 301$ и дальше отличие гарантированно меньше сотой.
Проверим: $3 - a_{301} = \frac{902}{301^2 + 301} = \frac{902}{90902} \approx 0{,}00992 < 0{,}01$ ✅
Ответ: последовательность ограничена ($2 \leq a_n < 3$), недобор до тройки равен $\frac{3n-1}{n^2+n}$ и становится меньше $0{,}01$ начиная с $n = 301$.
Анонс: что будет дальше. Ты только что проделал ровно ту работу, которая в уроке 129 получит короткое имя. Определение предела формализует ситуацию «для любой наперёд заданной точности найдётся номер, начиная с которого все члены отличаются от числа меньше этой точности» — то есть в точности шаг 6 нашего решения, только для произвольной точности, а не конкретной сотой. Число 3 в этом примере окажется пределом последовательности, а сама она — сходящейся. Мы также докажем теорему Вейерштрасса: если последовательность монотонна и ограничена, предел у неё точно есть, даже если мы не умеем его вычислить. Так что монотонность и ограниченность, которые мы разбирали весь урок, — это не разминка, а ровно те два кирпича, из которых складывается вся дальнейшая теория.
Последовательность и sequence-данные: в чём разница
Отдельно стоит развести два похоже звучащих понятия, которые в ML-текстах живут рядом.
Числовая последовательность в математическом смысле — это функция $\mathbb{N} \to \mathbb{R}$: бесконечная, с числовыми значениями, с номером в качестве единственного аргумента. Всё, что мы разбирали в уроке, — про неё.
Sequence-данные (последовательные данные) в машинном обучении — это конечный упорядоченный набор объектов, где порядок несёт смысл. Токены в предложении, кадры в видео, значения курса по дням, клики пользователя в сессии. Отличий от математической последовательности три, и все существенные:
- Конечность. У предложения 17 токенов, а не бесконечность. Поэтому вопросы «что при больших $n$» и «есть ли предел» к нему просто неприменимы. Зато появляется своя головная боль — паддинг и маскирование, чтобы уравнять длины в батче.
- Нечисловые элементы. Токен — это не число, а элемент словаря. Он становится числом (вернее, вектором) только после эмбеддинга. Формально это последовательность в векторном пространстве: $x_1, x_2, \dots, x_T$, где каждый $x_t \in \mathbb{R}^d$.
- Аргумент — позиция, а не «номер по порядку в бесконечном списке». Отсюда и вся возня с позиционным кодированием: трансформер сам по себе не различает порядок, порядок приходится подмешивать явно.
А вот где эти два понятия смыкаются вплотную:
- Временной ряд значений метрики по дням — это и sequence-данные, и (если продлить мысленно в бесконечность) числовая последовательность. Все инструменты урока применимы напрямую: монотонность, ограниченность, разности соседних членов.
- Кривая обучения — loss по эпохам — чисто числовая последовательность, задаваемая рекуррентно самим процессом обучения. Именно поэтому к ней применимы рассуждения про монотонность и ограниченность снизу.
- Скользящее среднее любого ряда — это построение новой последовательности из старой по рекуррентной формуле. EMA из примера 6 — ровно такой случай.
- Скрытое состояние RNN $h_t = f(h_{t-1}, x_t)$ — рекуррентно заданная последовательность векторов. Вопрос «не взрывается ли $\|h_t\|$» — это вопрос об ограниченности последовательности, и он не риторический: именно неограниченный рост нормы состояния убивал обучение ранних RNN, пока не появились LSTM с гейтами и gradient clipping.
Практический вывод: когда ты видишь в ML-статье слово «sequence», проверь, о чём речь — о конечных данных с порядком или о бесконечном математическом объекте. От этого зависит, какой аппарат применим.
Практика: 30 заданий
Базовые (задания 1-10)
Задание 1: Последовательность задана формулой $a_n = 3n - 1$. Найди $a_1$, $a_2$ и $a_5$.
Задание 2: Последовательность задана формулой $a_n = \dfrac{n}{n+1}$. Найди $a_1$, $a_3$ и $a_{10}$.
Задание 3: Выпиши первые пять членов последовательности $a_n = (-1)^n \cdot n$.
Задание 4: Последовательность задана рекуррентно: $a_1 = 5$, $a_{n+1} = a_n + 4$. Выпиши первые пять членов.
Задание 5: Последовательность задана рекуррентно: $a_1 = 2$, $a_{n+1} = 2a_n - 1$. Выпиши первые пять членов.
Задание 6: Является ли число 100 членом последовательности $a_n = 4n + 2$?
Задание 7: Первые члены последовательности: $1, 4, 9, 16, 25, \dots$ Запиши формулу общего члена и найди $a_{12}$.
Задание 8: Первые члены последовательности: $2, 4, 8, 16, 32, \dots$ Запиши формулу общего члена (нумерация с единицы) и найди $a_{10}$.
Задание 9: Докажи, что последовательность $a_n = 5n - 3$ возрастающая.
Задание 10: При обучении модели значения функции потерь по эпохам составили: $2{,}30$; $1{,}85$; $1{,}52$; $1{,}31$; $1{,}18$. Выпиши последовательность разностей соседних членов и определи, монотонна ли последовательность лосса на этом участке. Что происходит с величиной падения от эпохи к эпохе?
Средние (задания 11-20)
Задание 11: Докажи, что последовательность $a_n = \dfrac{n}{n+1}$ возрастает, и укажи её границы.
Задание 12: Докажи, что последовательность $a_n = \dfrac{2n+1}{n}$ убывает, и найди её границы.
Задание 13: Исследуй на монотонность последовательность $a_n = \dfrac{2^n}{n!}$, используя отношение соседних членов.
Задание 14: Докажи, что последовательность $a_n = \dfrac{3n}{n+2}$ ограничена, и укажи точные границы.
Задание 15: Исследуй последовательность $a_n = \dfrac{(-1)^n}{n}$ на монотонность и ограниченность. Найди её наибольший и наименьший члены, если они существуют.
Задание 16: Гармонические числа задаются как $H_n = 1 + \dfrac{1}{2} + \dfrac{1}{3} + \dots + \dfrac{1}{n}$. Вычисли $H_1, \dots, H_5$ и докажи, что последовательность $(H_n)$ строго возрастает.
Задание 17: Выпиши первые десять чисел Фибоначчи ($F_1 = F_2 = 1$, $F_{n+2} = F_{n+1} + F_n$) и проверь на $n = 6$ тождество $F_1 + F_2 + \dots + F_n = F_{n+2} - 1$.
Задание 18: Экспоненциальное скользящее среднее (EMA) задаётся рекуррентно: $s_0 = 0$, $s_n = \alpha x_n + (1-\alpha) s_{n-1}$. Пусть $\alpha = 0{,}2$, а входной сигнал постоянен: $x_n = 1$ для всех $n$. Вычисли $s_1, \dots, s_4$, найди явную формулу и объясни, ограничена ли последовательность.
Задание 19: Расписание learning rate «step decay» задано формулой $\eta_n = \eta_0 \cdot 0{,}5^{\lfloor n/10 \rfloor}$, где $\lfloor x \rfloor$ — целая часть, $\eta_0 = 0{,}1$, а $n$ — номер эпохи (нумерация с нуля). Найди $\eta_1$, $\eta_{10}$, $\eta_{25}$ и определи тип монотонности последовательности.
Задание 20: Найди наибольший член последовательности $a_n = \dfrac{n}{n^2 + 16}$.
Продвинутые (задания 21-30)
Задание 21: Докажи, что последовательность гармонических чисел $H_n = 1 + \frac{1}{2} + \dots + \frac{1}{n}$ не ограничена сверху. Укажи номер $n$, для которого гарантированно $H_n > 5$.
Задание 22: Докажи, что последовательность $a_n = \dfrac{n!}{n^n}$ строго убывает.
Задание 23: Найди наибольший член последовательности $a_n = \dfrac{3^n}{n!}$.
Задание 24: Докажи, что последовательность $a_n = \dfrac{n^2 + 1}{n^2 + n + 1}$ возрастает и ограничена. Укажи границы.
Задание 25: Последовательность задана рекуррентно: $a_1 = 1$, $a_{n+1} = \sqrt{2 + a_n}$. Вычисли первые четыре члена и докажи, что последовательность возрастает и ограничена сверху числом 2.
Задание 26: Докажи методом математической индукции тождество для чисел Фибоначчи: $F_1^2 + F_2^2 + \dots + F_n^2 = F_n \cdot F_{n+1}$. Проверь его на $n = 5$.
Задание 27: Кривая обучения модели описывается формулой $L_n = 0{,}5 + \dfrac{2}{n}$, где $n$ — номер эпохи. Докажи, что последовательность убывает и ограничена. Составь таблицу для $n = 1, 10, 100, 1000$. Начиная с какой эпохи выполняется $L_n < 0{,}51$?
Задание 28: Косинусное расписание learning rate задано формулой $\eta_n = \dfrac{\eta_0}{2}\left(1 + \cos\dfrac{\pi n}{N}\right)$ при $n = 0, 1, \dots, N$. Пусть $\eta_0 = 0{,}1$ и $N = 10$. Вычисли $\eta_0$, $\eta_2$, $\eta_5$, $\eta_8$, $\eta_{10}$ и определи тип монотонности на отрезке номеров от 0 до 10.
Задание 29: В датасете 50 000 примеров, размер батча 128, неполный последний батч не отбрасывается. Сколько батчей в одной эпохе и сколько примеров в последнем батче? Какие индексы примеров (нумерация с нуля) попадут в батч номер 17? Сколько шагов оптимизатора будет сделано за 30 эпох?
Задание 30: Рассмотри последовательность $a_n = \left(1 + \dfrac{1}{n}\right)^n$. Вычисли $a_1$, $a_2$, $a_5$, $a_{10}$, $a_{100}$ и докажи, что все члены меньше 3.
Частые ошибки
❌ Ошибка 1: путают член последовательности $a_n$ и его номер $n$
Неправильно: в задаче «найди номер члена последовательности $a_n = 4n - 3$, равного 25» ответить «25». Или, наоборот, в задаче «найди пятый член» ответить «5».
Правильно: это два принципиально разных объекта. Номер $n$ — это аргумент (место в очереди), а $a_n$ — значение (то, что на этом месте стоит). Чтобы найти номер по значению, надо решать уравнение: $4n - 3 = 25 \Rightarrow 4n = 28 \Rightarrow n = 7$. Значит, число 25 стоит на седьмом месте. А пятый член — это $a_5 = 4 \cdot 5 - 3 = 17$.
💡 Почему важно: это ошибка того же класса, что перепутать индекс массива и его содержимое — arr[5] и 5. В математической записи путаницу провоцирует то, что и номер, и член обозначаются буквами рядом друг с другом. Простое лекарство: всегда проговаривай вслух «на месте номер $n$ стоит число $a_n$». В задачах формата ЕГЭ на последовательности эта путаница даёт неверный ответ примерно в каждом третьем случае.
❌ Ошибка 2: считают, что проверка нескольких первых членов доказывает монотонность
Неправильно: «Посчитал $a_1 = 0{,}5$, $a_2 = 1$, $a_3 = 1{,}125$ — растёт. Значит, последовательность $a_n = \dfrac{n^2}{2^n}$ возрастающая».
Правильно: три (и триста) значений ничего не доказывают. В примере 10 мы видели ровно эту последовательность: она действительно растёт до $n = 3$, а потом начинает строго убывать и уходит к нулю. Доказательство требует общего рассуждения для всех $n$: составить разность $a_{n+1} - a_n$ или отношение $\dfrac{a_{n+1}}{a_n}$ и определить знак (или сравнить с единицей) в общем виде, с буквой $n$, а не с конкретными числами.
💡 Почему важно: это не педантизм, а рабочая привычка. Точно та же ошибка в ML называется «сделал вывод по первым эпохам»: лосс убывал 10 эпох подряд, ты решил, что всё хорошо, оставил прогон на ночь — а на 40-й эпохе начался переобучение и рост валидационного лосса. Численная проверка нужна как страховка от арифметических описок, но она никогда не заменяет доказательства.
❌ Ошибка 3: применяют метод отношения $\dfrac{a_{n+1}}{a_n}$ к последовательности с отрицательными или нулевыми членами
Неправильно: для $a_n = -n$ посчитать $\dfrac{a_{n+1}}{a_n} = \dfrac{-(n+1)}{-n} = \dfrac{n+1}{n} > 1$ и заключить «последовательность возрастает».
Правильно: последовательность $-1, -2, -3, \dots$ на самом деле убывает — каждый следующий член меньше предыдущего. Метод отношения работает только при $a_n > 0$ для всех $n$ — потому что при переходе от неравенства $\frac{a_{n+1}}{a_n} > 1$ к неравенству $a_{n+1} > a_n$ мы умножаем на $a_n$, и при отрицательном $a_n$ знак переворачивается. Для знакопеременных и отрицательных последовательностей используй разность $a_{n+1} - a_n$ — она работает всегда. И отдельно: если хоть один член равен нулю, отношение просто не определено.
💡 Почему важно: проверка положительности занимает одну строку, а её пропуск переворачивает вывод на противоположный. Заведи привычку: перед делением на $a_n$ первой строкой пиши «все члены положительны, так как…».
❌ Ошибка 4: называют убывающей последовательность, у которой соседние члены могут совпадать
Неправильно: про step-decay расписание $\eta_n = 0{,}1 \cdot 0{,}5^{\lfloor n/10 \rfloor}$ сказать «learning rate убывает».
Правильно: внутри каждого блока из 10 эпох значения равны ($\eta_5 = \eta_6 = 0{,}1$), а определение убывания требует строгого неравенства $a_{n+1} < a_n$ для всех $n$ без исключения. Такая последовательность называется невозрастающей. То же самое с $a_n = \dfrac{2^n}{n!}$ из задания 13: $a_1 = a_2 = 2$, поэтому она невозрастающая, а строго убывающей становится только начиная с $n = 2$.
💡 Почему важно: различие «строго / нестрого» — не терминологическая придирка, а условие применимости теорем. Многие утверждения формулируются для строго монотонных последовательностей, и подстановка нестрого монотонной ломает доказательство. В коде это ровно разница между < и <= в условии early stopping: с нестрогим сравнением обучение остановится на первом же плато, со строгим — переживёт его.
❌ Ошибка 5: путают «ограничена сверху» и «имеет наибольший член»
Неправильно: «Последовательность $a_n = \dfrac{n}{n+1}$ ограничена сверху числом 1, значит её наибольший член равен 1».
Правильно: ни один член не равен единице — числитель всегда на 1 меньше знаменателя, поэтому $a_n < 1$ строго. Наибольшего члена у этой последовательности просто нет: какой бы член ты ни назвал, следующий будет больше. Верхняя граница — это число, которое не меньше всех членов; оно не обязано быть одним из них. Симметрично, в задании 15 наибольший член существует и равен $0{,}5$ — но это отдельный факт, требующий отдельной проверки.
💡 Почему важно: на этом различии стоит вся дальнейшая теория. Именно потому, что возрастающая ограниченная последовательность может не достигать своего «потолка», понадобилось отдельное понятие предела (урок 129) — способ говорить о числе, к которому члены подбираются вплотную, но которого не касаются.
❌ Ошибка 6: считают, что перечисление первых членов однозначно задаёт последовательность
Неправильно: «Дано $2, 4, 8, 16, \dots$ — значит, $a_n = 2^n$, других вариантов нет».
Правильно: троеточие не является математическим определением. Ту же четвёрку чисел продолжает, например, последовательность «максимальное число областей, на которые делят круг $n$ хорд, соединяющих точки на окружности»: $1, 2, 4, 8, 16, 31, \dots$ — на шестом шаге вместо ожидаемых 32 получается 31. Последовательность считается заданной только формулой общего члена, рекуррентным соотношением с начальными членами или однозначным словесным описанием.
💡 Почему важно: в задачах формата «продолжи ряд» подразумевается «найди простейшую закономерность» — это задача на угадывание, и как таковая она решается. Но в работе с данными привычка «вижу четыре точки — понял закон» приводит к переобучению на выборке из четырёх наблюдений. Ровно такую же ошибку совершает модель, которой дали слишком мало данных.
❌ Ошибка 7: забывают указать начальные члены при рекуррентном задании
Неправильно: «Последовательность задана формулой $a_{n+1} = a_n + 4$. Найди $a_{10}$».
Правильно: такой задачи не существует — данных не хватает. Правило $a_{n+1} = a_n + 4$ описывает бесконечное семейство последовательностей: при $a_1 = 1$ получим $1, 5, 9, \dots$, при $a_1 = 100$ получим $100, 104, 108, \dots$ Рекуррентное задание считается полным только вместе с начальными членами, и их нужно ровно столько, на сколько шагов назад смотрит формула: одно значение для $a_{n+1} = f(a_n)$, два для $F_{n+2} = F_{n+1} + F_n$.
💡 Почему важно: в коде это буквально неинициализированная переменная. Итерационный процесс без стартовой точки не запускается, а в машинном обучении выбор начальной точки (инициализации весов) — самостоятельная большая тема: одна и та же формула обновления $w_{n+1} = w_n - \eta g_n$ при разных $w_1$ приводит в разные минимумы.
Главное запомнить
✅ Последовательность — это функция натурального аргумента. Область определения — множество $\mathbb{N}$, значение при аргументе $n$ обозначается $a_n$. Всё, что ты знаешь про функции (монотонность, ограниченность, наибольшие и наименьшие значения), переносится сюда без изменений — только график состоит из отдельных точек, а не из линии.
✅ Способов задания три: формулой общего члена (подставил номер — получил значение), рекуррентно (следующий член через предыдущие плюс обязательные начальные члены) и словесным описанием. Перечисление первых членов с троеточием способом задания не является.
✅ Явная формула параллелится, рекуррентная — нет. Это та самая разница, из-за которой трансформеры быстрее RNN: позиционное кодирование считается по явной формуле для всех позиций сразу, а скрытое состояние RNN — только шаг за шагом.
✅ Нумерация с 1 — математическое соглашение, нумерация с 0 — программистское. Причина второго — адресная арифметика: индекс равен смещению от начала блока памяти. Одна и та же последовательность степеней двойки записывается как $2^n$ (с нуля) или $2^{n-1}$ (с единицы). Перед любым переносом формулы в код проверяй, с чего начинается счёт.
✅ Четыре вида монотонности: возрастающая ($a_{n+1} > a_n$), убывающая ($a_{n+1} < a_n$), неубывающая ($\geq$), невозрастающая ($\leq$). Различие строгое/нестрогое — не формальность: step-decay расписание невозрастающее, но не убывающее.
✅ Два инструмента доказательства монотонности: знак разности $a_{n+1} - a_n$ (работает всегда) и сравнение отношения $\dfrac{a_{n+1}}{a_n}$ с единицей (только при всех $a_n > 0$). Отношение удобно, когда в формуле степени с $n$ в показателе и факториалы — при делении всё сокращается.
✅ Ограниченность сверху — существует $M$ с $a_n \leq M$ для всех $n$; снизу — существует $m$ с $a_n \geq m$; ограниченность — и то, и другое, равносильно $|a_n| \leq C$. Границ бесконечно много, и они не обязаны достигаться: «ограничена сверху» $\neq$ «имеет наибольший член».
✅ Монотонность и ограниченность независимы. Возможны все четыре комбинации: $1 - 2^{-n}$ (монотонна и ограничена), $n$ (монотонна, не ограничена), $(-1)^n$ (не монотонна, ограничена), $(-1)^n n$ (ни то, ни другое). Бесплатный бонус: возрастающая всегда ограничена снизу первым членом, убывающая — сверху первым членом.
✅ Приём «выдели целую часть» экономит половину работы на дробно-линейных формулах: $\dfrac{n+3}{n+1} = 1 + \dfrac{2}{n+1}$, и монотонность с ограниченностью видны сразу.
✅ Четыре последовательности, которые надо знать в лицо: Фибоначчи $1,1,2,3,5,8,\dots$ (рекуррентная, неограниченная, отношение соседних членов колеблется около золотого сечения), факториалы $1,2,6,24,120,\dots$ (растут быстрее любой показательной), гармонические числа $H_n$ (возрастают и, вопреки интуиции, не ограничены сверху) и степени двойки (размеры батчей и размерности эмбеддингов).
✅ О «поведении при больших $n$» пока говорим только через таблицы и оценки. Законно: доказать $a_n < 3$, вычислить недобор $3 - a_n$, найти номер, с которого недобор меньше заданной величины. Строгий язык для этого — предел — появится в уроке 129.
Связь с другими темами курса
Что было раньше. Понятие функции, её области определения и монотонности — фундамент, на котором стоит весь этот урок: последовательность и есть функция, просто с очень бедной областью определения. Показательная функция и число $e$ (уроки 111–112) всплыли в задании 30, где $\left(1+\frac{1}{n}\right)^n$ подбирается к $2{,}718\dots$ Задачи на рост и распад (урок 125) — прямой предшественник: там процесс описывался непрерывной моделью $A(t) = A_0 q^t$, а здесь тот же процесс становится дискретным — по шагам, по эпохам, по месяцам. Метод математической индукции, использованный в заданиях 25 и 26, — стандартный инструмент именно для последовательностей: утверждение доказывается для базы и для перехода $n \to n+1$, потому что сама последовательность так и устроена.
Что дальше. Следующие два урока — частные случаи того, что ты только что разобрал. Арифметическая прогрессия (урок 127) — это последовательность с постоянной разностью соседних членов: $a_{n+1} - a_n = d$. Ты уже вычислял такие разности во всех задачах на монотонность, так что определение прогрессии не будет для тебя новостью — знак $d$ сразу даёт монотонность. Геометрическая прогрессия (урок 128) — последовательность с постоянным отношением: $\dfrac{a_{n+1}}{a_n} = q$; здесь пригодится второй инструмент из этого урока. А предел последовательности (урок 129) даст точное имя тому, что мы описывали таблицами: там появится определение, позволяющее строго сказать, к какому числу подбираются члены, и будет доказана теорема Вейерштрасса — монотонная ограниченная последовательность обязательно имеет предел. Обрати внимание: обе гипотезы этой теоремы — монотонность и ограниченность — мы разбирали весь урок, так что вход в тему предела у тебя уже подготовлен. Дальше на этом фундаменте вырастут сумма бесконечной геометрической прогрессии (130), предел функции (131) и непрерывность (132).
Где это применяется в жизни и в ML/данных:
🤖 В машинном обучении: кривая обучения (loss по эпохам) — числовая последовательность, к которой напрямую применимы монотонность и ограниченность снизу; early stopping — формальная проверка «не убывал последние $p$ членов»; расписания learning rate (step decay, косинусное, warmup) — явно сконструированные последовательности с заданным профилем монотонности; скрытое состояние RNN $h_t = f(h_{t-1}, x_t)$ — рекуррентно заданная последовательность векторов, а вопрос о взрыве градиентов — вопрос об её ограниченности.
📊 В data science: временные ряды и скользящие средние (EMA — рекуррентная формула в чистом виде); проверка качества данных через монотонность накопительных признаков; логарифмическая ось на графиках scaling laws — это способ выпрямить последовательность степеней двойки.
💻 В алгоритмах: оценки сложности через факториалы и степени двойки; гармонические числа в анализе быстрой сортировки и в задаче о сборе купонов; фибоначчиевы кучи; двоичный поиск как последовательность сужающихся отрезков.
💰 В финансах и физике: ежемесячные платежи по кредиту и капитализация процентов задаются рекуррентно; итерационные численные методы (например, вычисление корня последовательными приближениями, как в задании 25) — базовый инструмент вычислительной математики.
Интересные факты
💡 Задача Фибоначчи была про кроликов, а прославила его не она. В той же «Liber Abaci» 1202 года Леонардо Пизанский сделал куда более важное дело: познакомил Европу с индо-арабскими цифрами и позиционной записью чисел. Римские цифры для расчётов были кошмаром, и именно эта книга запустила переход на систему, которой мы пользуемся сегодня. Последовательность кроликов была в ней проходным примером на пару страниц — и пережила всё остальное содержание.
💡 Гармонический ряд расходится, но узнать это по таблице невозможно. Чтобы сумма $1 + \frac12 + \frac13 + \dots$ превысила 10, нужно сложить около 12 367 слагаемых. Чтобы превысила 20 — примерно 272 миллиона. Чтобы превысила 100 — больше, чем $10^{43}$ слагаемых, что превосходит число атомов в Солнечной системе. Никакой компьютер никогда не «увидит» расходимость численно — её можно только доказать, и доказательство Орема из задания 21 занимает три строки. Это, пожалуй, лучшая иллюстрация того, зачем вообще нужны доказательства.
💡 Из гармонического ряда можно построить башню без клея, свисающую на любое расстояние. Если складывать одинаковые кирпичи со сдвигом $\frac{1}{2n}$ каждый, суммарный вынос верхнего кирпича за край стола равен $\frac{1}{2}H_n$ — а раз $H_n$ не ограничена, теоретически башня может свисать сколь угодно далеко. Практическое ограничение — количество кирпичей: чтобы вынести стопку на два кирпича вправо, нужно уже 31 штука.
💡 Онлайн-энциклопедия целочисленных последовательностей содержит больше 370 000 записей. Нил Слоун начал её в 1964 году как картотеку на перфокартах, а сегодня OEIS — рабочий инструмент исследователей: вбиваешь несколько первых членов найденной в данных последовательности и узнаёшь, встречалась ли она математике раньше. Не раз бывало, что последовательность из физического эксперимента совпадала с последовательностью из чистой комбинаторики — и это подсказывало объяснение эффекта.
💡 Размеры батчей — степени двойки не из суеверия. Память GPU выделяется блоками, и тензорные ядра обрабатывают данные фрагментами фиксированного размера. Батч в 128 примеров укладывается в эти фрагменты без остатка, а батч в 100 — оставляет неиспользованные «хвосты» в каждом блоке. Разница в скорости обучения на одинаковом объёме данных может доходить до десятков процентов — редкий случай, когда красивая математическая последовательность даёт прямой выигрыш в секундах.
Лайфхаки и полезные трюки
1. Выделяй целую часть в дробно-линейных формулах
Любое выражение вида $\dfrac{an+b}{cn+d}$ приводится к виду «константа плюс дробь с числом в числителе»: $\dfrac{n+3}{n+1} = 1 + \dfrac{2}{n+1}$, $\dfrac{3n}{n+2} = 3 - \dfrac{6}{n+2}$. После этого монотонность и обе границы видны без единого вычисления: знаменатель растёт → дробь убывает → знак перед дробью говорит, растёт или падает вся последовательность, а константа сразу даёт недостижимую границу.
2. Выбирай инструмент по виду формулы
Простое правило, экономящее время на контрольной: факториалы, степени с $n$ в показателе, произведения → бери отношение $\dfrac{a_{n+1}}{a_n}$ (всё сократится). Многочлены, суммы, разности, дроби с многочленами → бери разность $a_{n+1} - a_n$ (общий знаменатель, и знак определяется числителем). Попытка взять разность там, где напрашивается отношение, обычно приводит к неподъёмной алгебре.
3. Считай первые 4-5 членов ДО начала доказательства
Численная прикидка не доказывает ничего, но она бесплатно говорит тебе, что именно доказывать: растёт, падает или разворачивается на третьем члене. Доказывать «возрастание» у последовательности, которая на самом деле убывает с $n=4$, — гарантированно потерянные двадцать минут. Первые члены — это разведка, а не вывод.
4. Для знакочередующихся последовательностей сразу переходи к модулю
Если в формуле есть $(-1)^n$, не пытайся анализировать монотонность (её почти наверняка нет) — сразу пиши $|a_n| = \dots$ и исследуй модуль. Ограниченность $|a_n| \leq C$ немедленно даёт $-C \leq a_n \leq C$, и вопрос закрыт. А про монотонность достаточно предъявить два соседних неравенства разного смысла — например, $a_1 < a_2$ и $a_2 > a_3$.
5. Для возрастающей последовательности ищи только верхнюю границу
Возрастающая последовательность автоматически ограничена снизу своим первым членом — половина задачи решается одной строкой. Симметрично для убывающей: сверху её ограничивает $a_1$. Поэтому в задачах на ограниченность порядок действий такой: сначала докажи монотонность, потом одну «бесплатную» границу возьми из первого члена, и вся работа сведётся к поиску второй.
6. Проверяй рекуррентную гипотезу подстановкой, а не сравнением таблиц
Когда угадал явную формулу по первым членам, не ограничивайся проверкой ещё двух-трёх значений. Подставь предполагаемую формулу в само рекуррентное соотношение и убедись, что получается тождество (как в примерах 5 и 6 и в задании 18). Плюс проверь начальное условие. Это займёт три строки и превратит догадку в доказательство.
7. В коде явно выписывай границы диапазона
Каждый раз, перенося формулу с индексами в код, выписывай на бумаге первый и последний номер, которые должны попасть в диапазон, и только потом пиши срез или range. Скользящее окно из 7 дней, заканчивающееся сегодняшним днём $t$, — это индексы от $t-6$ до $t$ включительно, то есть срез x[t-6:t+1], а не x[t-6:t]. Такой баг не роняет программу и не ловится тестами — он просто тихо сдвигает признак на день и съедает его полезность.
8. Разности соседних членов — универсальный диагностический инструмент
Столкнувшись с непонятным числовым рядом (в данных, в логе, в задаче), первым делом посчитай разности соседних членов. Постоянные разности — арифметическая прогрессия (урок 127). Постоянное отношение — геометрическая (урок 128). Разности сами образуют арифметическую прогрессию — исходная последовательность квадратичная. Разности убывают, но остаются положительными — рост замедляется, и стоит проверить, есть ли потолок. Одна колонка разностей часто рассказывает о ряде больше, чем весь ряд целиком.
Последовательность — самый неприметный объект во всём курсе анализа и одновременно тот, на котором держится всё остальное. Ты только что научился делать с ней три главные вещи: задавать (тремя способами), доказывать монотонность (через разность и через отношение) и оценивать границы. Это ровно тот набор, который отличает человека, который «смотрит на столбик чисел», от человека, который его читает — видит, растёт ли метрика по существу или это шум, есть ли у процесса потолок, замедляется ли улучшение и стоит ли ждать дальше.
Дальше будет проще и конкретнее. В уроке 127 мы возьмём самый простой возможный случай — последовательность с постоянной разностью соседних членов — и выжмем из него всё: формулу любого члена без перебора, формулу суммы первых $n$ членов (ту самую, которую десятилетний Гаусс, по легенде, придумал за минуту, пока класс складывал числа от 1 до 100), и десяток прикладных задач от расчёта платежей до линейного расписания warmup. Потом будет геометрическая прогрессия — постоянное отношение вместо постоянной разности, и вся твоя работа с отношением $\frac{a_{n+1}}{a_n}$ окупится сразу. А в уроке 129 монотонность и ограниченность, которые ты сегодня разбирал по отдельности, встретятся в одной теореме — и из этой встречи родится понятие предела, с которого начинается настоящий математический анализ. Так что этот урок — не разминка перед серьёзными темами. Это их фундамент, и ты его только что залил.
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку