Преобразования графиков 🔀
Открой код любой нейросети и посмотри, что делает один-единственный нейрон перед тем, как передать сигнал дальше: y = activation(w * x + b). Всего два числа — вес $w$ и смещение $b$ — и одна фиксированная функция активации. Функция активации всегда одна и та же, зашитая в архитектуру: ReLU, сигмоида, tanh. Она не меняется в процессе обучения ни на йоту. Меняются только $w$ и $b$. И вот в чём фокус: обучение нейросети — это, по сути, подбор преобразований графика одной и той же кривой. Сеть не изобретает новые функции, она двигает, растягивает и отражает уже имеющуюся.
Звучит абстрактно? Давай на пальцах. У тебя есть ReLU: $\text{ReLU}(x) = \max(0, x)$ — прямая с изломом в нуле. Умножил аргумент на $w = 2$ — излом остался на месте, но правая ветвь стала круче вдвое. Добавил $b = -5$ внутрь — и излом уехал вправо, в точку $x = 2{,}5$: теперь нейрон «включается» не с нуля, а только когда сигнал перевалит за 2,5. Один график, два числа, и ты уже управляешь порогом срабатывания. Сложи сотню таких сдвинутых и растянутых ReLU — получишь произвольную ломаную, которой можно приблизить почти любую гладкую функцию. Это не метафора, это буквально теорема об универсальной аппроксимации, только рассказанная на языке школьной алгебры.
Та же самая математика прячется в местах, где ты её точно не ждал. Стандартизация признаков $z = \dfrac{x - \mu}{\sigma}$ — это сдвиг на $\mu$ и сжатие в $\sigma$ раз. Min-max нормализация — сдвиг плюс сжатие. Аугментация данных (когда картинку двигают, отражают и масштабируют, чтобы модель не переобучилась) — это преобразования, применённые к графику яркости. Batch normalization с её обучаемыми $\gamma$ и $\beta$ — растяжение и сдвиг в чистом виде. Понимаешь одну тему — и половина препроцессинга данных вдруг перестаёт быть набором магических формул.
В этом уроке мы разберём все базовые преобразования графика: параллельный перенос по вертикали и горизонтали, растяжение и сжатие вдоль обеих осей, отражения относительно осей и относительно начала координат, а также два трюка с модулем — $y = |f(x)|$ и $y = f(|x|)$. Отдельно — самый частый источник ошибок: порядок применения преобразований, когда их несколько. И в каждом блоке — связь с тем, как это работает в моделях и в данных.
🎯 Ты узнаешь:
- Почему $y = f(x - 3)$ сдвигает график вправо, хотя внутри стоит минус, и как перестать в этом путаться навсегда
- Чем растяжение вдоль оси $Oy$ отличается от сжатия вдоль оси $Ox$, и почему для параболы это одно и то же
- Как за 20 секунд по формуле $y = A f(k(x - a)) + b$ прочитать всю геометрию графика, не подставляя ни одного значения
- Как строить графики с модулем: $|f(x)|$ отражает вверх, $f(|x|)$ копирует правую половину налево — и почему это разные вещи
- Почему $w$ и $b$ в нейроне, $\mu$ и $\sigma$ в стандартизации, $\gamma$ и $\beta$ в batch norm — это одно и то же преобразование в трёх костюмах
История: откуда это взялось?
Первым человеком, который догадался рисовать зависимость одной величины от другой в виде линии, был французский епископ и учёный Николай Орем — примерно в 1350 году, за три века до Декарта. Он изображал скорость движения тела в виде «широт» и «долгот» — по сути, откладывал время по одной оси, а скорость по другой, и получал фигуру, площадь которой равнялась пройденному пути. Орем ещё не знал слов «функция» и «координата», но идея «величина как линия на плоскости» родилась именно там.
Настоящая революция случилась в 1637 году, когда Рене Декарт выпустил приложение «La Géométrie» к своему «Рассуждению о методе». Он показал, что кривую можно задать уравнением, а уравнение — нарисовать кривой. С этого момента вопрос «что будет с фигурой, если в уравнении поменять число» стал осмысленным геометрическим вопросом. Решал Декарт при этом очень практическую задачу: астрономы и оптики XVII века мучились с коническими сечениями — эллипсами орбит и параболами зеркал, — и каждый раз строили их заново, вместо того чтобы понять, что все параболы устроены одинаково и отличаются лишь положением и масштабом.
Систематический вид всё это приняло у Леонарда Эйлера в «Introductio in analysin infinitorum» (1748) — там впервые функции классифицируются как самостоятельные объекты, а замены переменных вида $x \to x + a$ и $x \to kx$ описываются как регулярный приём. Финальную точку поставил Август Мёбиус в «Der barycentrische Calcul» (1827), введя понятие аффинного преобразования — то есть класса преобразований плоскости, которые сохраняют прямые прямыми и параллельность параллельностью. Сдвиг, растяжение, отражение — всё это аффинные преобразования, и Мёбиус первым показал, что их удобно рассматривать не по одному, а как единую алгебраическую систему.
А в 1872 году Феликс Клейн в своей знаменитой «Эрлангенской программе» перевернул взгляд на геометрию целиком: он предложил определять геометрию не через набор фигур, а через группу преобразований, относительно которых свойства фигур не меняются. И вот здесь мостик в сегодняшний день получается почти неприлично прямым. Современные свёрточные нейросети построены именно по Клейну: свёртка спроектирована так, чтобы быть эквивариантной к сдвигу — сдвинул кошку в углу картинки, и карта признаков сдвинулась ровно на столько же, а сеть узнала ту же кошку. Целое направление в ML — geometric deep learning — это буквально Эрлангенская программа, переписанная для нейросетей. Тот же вопрос, который мы сейчас разберём на параболах: «что происходит с объектом, когда мы его двигаем, растягиваем и отражаем?»
Параллельный перенос: сдвиги по вертикали и горизонтали
Интуиция
Представь, что график нарисован не на бумаге, а на прозрачной плёнке, которая лежит поверх координатной сетки. Сдвиг — это когда ты берёшь плёнку и двигаешь её, не поворачивая и не растягивая. Форма кривой не меняется вообще: парабола остаётся точно такой же параболой, синусоида — точно такой же синусоидой. Меняется только её положение относительно осей.
С вертикальным сдвигом всё интуитивно понятно. Запись $y = f(x) + b$ означает буквально: «возьми значение функции и прибавь $b$». Каждая точка графика поднимается на $b$ вверх (если $b > 0$) или опускается вниз (если $b < 0$). Никаких подвохов.
А вот горизонтальный сдвиг — это место, где путаются примерно все, и стоит один раз разобраться до конца. Запись $y = f(x - a)$ при $a > 0$ сдвигает график вправо, хотя внутри скобок стоит минус. Давай разберёмся почему, чтобы это перестало быть заклинанием.
Пусть $f(x) = x^2$, и мы смотрим на $g(x) = f(x - 3) = (x - 3)^2$. Где у новой функции будет вершина, то есть где значение станет нулевым? Тогда, когда выражение внутри скобок обнулится: $x - 3 = 0$, то есть $x = 3$. У исходной параболы вершина была в $x = 0$, у новой — в $x = 3$. Вершина уехала вправо на 3.
Логика такая: чтобы новая функция выдала то же значение, что старая выдавала в точке $t$, нужно подставить $x$ на 3 больше, ведь тройка тут же вычтется. Функция «требует» больший вход для того же выхода — значит, весь график сдвинулся в сторону больших $x$, то есть вправо. Мнемоника: внутри аргумента всё работает «наоборот» — минус двигает вправо, плюс двигает влево, и позже мы увидим, что то же самое правило «наоборот» действует и для растяжений.
Определение: График функции $y = f(x) + b$ получается из графика $y = f(x)$ параллельным переносом вдоль оси $Oy$ на $b$ единиц (вверх при $b > 0$, вниз при $b < 0$). График функции $y = f(x - a)$ получается из графика $y = f(x)$ параллельным переносом вдоль оси $Ox$ на $a$ единиц (вправо при $a > 0$, влево при $a < 0$).
Как преобразуются точки:
- $y = f(x) + b$: точка $(x_0; y_0)$ переходит в $(x_0;\ y_0 + b)$
- $y = f(x - a)$: точка $(x_0; y_0)$ переходит в $(x_0 + a;\ y_0)$
- $y = f(x - a) + b$: точка $(x_0; y_0)$ переходит в $(x_0 + a;\ y_0 + b)$
Что при этом меняется, а что нет:
- Форма кривой не меняется никогда — это жёсткое движение плоскости
- Область определения сдвигается вместе с графиком при горизонтальном сдвиге и не меняется при вертикальном
- Область значений сдвигается при вертикальном сдвиге и не меняется при горизонтальном
- Горизонтальные асимптоты двигаются только вертикальным сдвигом, вертикальные — только горизонтальным
Примеры с разбором
Пример 1 (простой): построй $y = x^2 + 3$ и найди вершину и область значений
Решение:
Шаг 1. Базовая функция — $f(x) = x^2$, парабола с вершиной в $(0; 0)$ и областью значений $[0; +\infty)$.
Шаг 2. Прибавление тройки снаружи — это вертикальный сдвиг. Каждая точка поднимается на 3 вверх.
Шаг 3. Вершина $(0; 0)$ переходит в $(0; 0 + 3) = (0; 3)$.
Шаг 4. Область значений сдвигается вместе с графиком: $[0; +\infty) \to [3; +\infty)$.
Проверим наш ответ: подставим $x = 0$ в исходную формулу: $y = 0^2 + 3 = 3$ ✅. Подставим $x = 2$: $y = 4 + 3 = 7$, а у базовой параболы в этой точке было 4 — разница ровно 3 ✅
Ответ: вершина $(0; 3)$, $E(f) = [3; +\infty)$, $D(f) = \mathbb{R}$.
Пример 2 (средний): построй $y = \sqrt{x + 5} - 2$, найди область определения и «начальную» точку
Решение:
Шаг 1. Базовая функция — $f(x) = \sqrt{x}$, определена при $x \geq 0$, начинается в точке $(0; 0)$ и растёт вправо и вверх.
Шаг 2. Разберём преобразования по отдельности. Внутри корня стоит $x + 5$, то есть $x - (-5)$ — значит, $a = -5$, и это сдвиг влево на 5. Снаружи стоит $-2$ — вертикальный сдвиг вниз на 2.
Шаг 3. Найдём область определения. Подкоренное выражение должно быть неотрицательным:
$$x + 5 \geq 0 \implies x \geq -5$$$$D(f) = [-5; +\infty)$$Обрати внимание: это в точности исходная область $[0; +\infty)$, сдвинутая влево на 5 — всё сходится.
Шаг 4. Найдём образ начальной точки $(0; 0)$: она переходит в $(0 + (-5);\ 0 + (-2)) = (-5; -2)$.
Шаг 5. Область значений: $[0; +\infty)$ сдвигается вниз на 2, получаем $[-2; +\infty)$.
Проверим наш ответ: подставим $x = -5$: $y = \sqrt{-5 + 5} - 2 = \sqrt{0} - 2 = -2$ ✅. Подставим $x = 4$: $y = \sqrt{9} - 2 = 3 - 2 = 1$, и точка $(4; 1)$ действительно является образом точки $(9; 3)$ базового графика, сдвинутой на $(-5; -2)$ ✅
Ответ: $D(f) = [-5; +\infty)$, начальная точка $(-5; -2)$, $E(f) = [-2; +\infty)$.
Пример 3 (сложный): покажи, что график $y = x^2 - 8x + 19$ — это сдвинутая парабола, и найди вершину
Здесь преобразование спрятано: формула записана в раскрытом виде, и глазами сдвиг не читается. Нужно применить выделение полного квадрата — приём, который переводит любой квадратный трёхчлен в форму «сдвинутая парабола».
Решение:
Шаг 1. Сгруппируем слагаемые с $x$:
$$y = (x^2 - 8x) + 19$$Шаг 2. Дополним выражение в скобках до полного квадрата. Половина коэффициента при $x$ равна $-4$, значит нам нужен квадрат $(x - 4)^2 = x^2 - 8x + 16$. Чтобы ничего не сломать, прибавим и тут же вычтем 16:
$$y = (x^2 - 8x + 16) - 16 + 19$$Шаг 3. Свернём скобку в квадрат и досчитаем числа:
$$y = (x - 4)^2 + 3$$Шаг 4. Теперь формула читается напрямую: базовая парабола $y = x^2$, сдвиг вправо на 4 (внутри стоит $x - 4$) и вверх на 3.
Шаг 5. Вершина $(0; 0)$ переходит в $(4; 3)$. Область значений: $[3; +\infty)$.
Проверим наш ответ: раскроем скобки обратно: $(x-4)^2 + 3 = x^2 - 8x + 16 + 3 = x^2 - 8x + 19$ ✅. И подставим $x = 4$ в исходную формулу: $16 - 32 + 19 = 3$ ✅ — вершина действительно на высоте 3.
Ответ: $y = (x-4)^2 + 3$, вершина $(4; 3)$, $E(f) = [3; +\infty)$.
Почему это важно
Сдвиг — это буквально bias в нейросети. В формуле нейрона $y = \text{ReLU}(wx + b)$ параметр $b$ не масштабирует сигнал и не меняет его форму: он двигает порог срабатывания влево или вправо. Без bias все ReLU в сети имели бы излом ровно в нуле, и сеть могла бы строить только функции, «ломающиеся» в одной точке — то есть почти ничего. Именно свобода сдвигать излом даёт сотне нейронов возможность расставить свои изломы по всей числовой прямой и собрать из них произвольную ломаную. Когда в статьях пишут «bias term is essential for expressiveness» — речь ровно об этом параллельном переносе.
Второе место, где сдвиг решает всё, — центрирование данных. Вычитание среднего $x - \mu$ на этапе препроцессинга — это горизонтальный сдвиг облака точек в начало координат. Зачем? Потому что градиентный спуск на нецентрированных данных ходит зигзагом: если все признаки положительны и большие, градиенты всех весов одного нейрона имеют одинаковый знак, и оптимизатор вынужден двигаться «лесенкой» вместо прямой траектории к минимуму. Одно вычитание среднего — и сходимость ускоряется в разы. Ещё пример из практики: логарифмирование признака делают не как $\ln x$, а как $\ln(x + 1)$ — тот самый сдвиг влево на единицу, — чтобы нулевые значения (а их в реальных данных полно: «ноль покупок», «ноль кликов») не превращались в $-\infty$.
Растяжение и сжатие: изменение масштаба
Интуиция
Вернёмся к прозрачной плёнке. Сдвиг — это когда плёнку двигают. Растяжение — это когда её тянут за края, деформируя: по вертикали, по горизонтали или и так и так. Форма кривой при этом меняется по-настоящему: парабола становится уже или шире, синусоида — выше или чаще.
Вертикальное растяжение $y = A f(x)$ — снова абсолютно интуитивное. Все значения функции умножаются на $A$: было 2 — стало $2A$. График «растягивается от оси $Ox$» в $A$ раз при $A > 1$ и «прижимается к оси $Ox$» при $0 < A < 1$. Точки, лежащие на оси $Ox$ (то есть нули функции), остаются на месте — ноль, умноженный на что угодно, остаётся нулём. Ось $Ox$ здесь работает как неподвижная линия, за которую держат плёнку.
Горизонтальное сжатие $y = f(kx)$ — снова «наоборот», по той же причине, что и у сдвига. Чтобы получить то значение, которое базовая функция выдавала в точке $t$, нужно подставить $x = t/k$ — то есть при $k > 1$ вход нужен меньше, и все характерные точки графика съезжаются к оси $Oy$. Умножение аргумента на $k > 1$ сжимает график в $k$ раз, а не растягивает. Проверим на конкретике: у $f(x) = \sqrt{x}$ точка $(9; 3)$. У $g(x) = \sqrt{4x}$ значение 3 достигается там, где $4x = 9$, то есть при $x = 2{,}25$ — точка переехала в 4 раза ближе к оси $Oy$. Сжатие в 4 раза.
Определение: График функции $y = A f(x)$ при $A > 0$ получается из графика $y = f(x)$ растяжением от оси $Ox$ в $A$ раз (при $A > 1$) или сжатием к оси $Ox$ в $\frac{1}{A}$ раз (при $0 < A < 1$). График функции $y = f(kx)$ при $k > 0$ получается сжатием к оси $Oy$ в $k$ раз (при $k > 1$) или растяжением от оси $Oy$ в $\frac{1}{k}$ раз (при $0 < k < 1$).
Как преобразуются точки:
- $y = A f(x)$: точка $(x_0; y_0)$ переходит в $(x_0;\ A y_0)$ — меняется только ордината
- $y = f(kx)$: точка $(x_0; y_0)$ переходит в $\left(\dfrac{x_0}{k};\ y_0\right)$ — меняется только абсцисса
Что важно запомнить:
- Нули функции при вертикальном растяжении не двигаются, при горизонтальном — сжимаются к нулю вместе со всем остальным
- Асимптоты: горизонтальная $y = 0$ и вертикальная $x = 0$ остаются на месте при любых растяжениях; ненулевые асимптоты масштабируются
- Для чётной степени вертикальное и горизонтальное растяжения могут совпасть по результату: $(2x)^2 = 4x^2$ — сжатие вдоль $Ox$ в 2 раза даёт тот же график, что растяжение вдоль $Oy$ в 4 раза. Для большинства других функций такого совпадения нет: $\sin(2x)$ и $2\sin x$ — совершенно разные кривые
Примеры с разбором
Пример 1 (простой): как изменится точка $(2; 4)$ графика $y = x^2$ при переходе к $y = 3x^2$?
Решение:
Шаг 1. Множитель 3 стоит снаружи — это вертикальное растяжение в 3 раза.
Шаг 2. При вертикальном растяжении абсцисса не меняется, ордината умножается на 3:
$$(2; 4) \to (2;\ 3 \cdot 4) = (2; 12)$$Проверим наш ответ: подставим $x = 2$ в новую формулу: $y = 3 \cdot 2^2 = 3 \cdot 4 = 12$ ✅
Шаг 3. Проверим неподвижную точку: вершина $(0; 0)$ переходит в $(0;\ 3 \cdot 0) = (0; 0)$ — осталась на месте, как и должно быть для точки на оси $Ox$.
Ответ: $(2; 12)$; парабола стала «уже», вершина не сдвинулась.
Пример 2 (средний): опиши преобразование графика $y = \sqrt{x}$ в график $y = \sqrt{\dfrac{x}{2}}$ и найди образ точки $(4; 2)$
Решение:
Шаг 1. Множитель стоит внутри аргумента: $f(kx)$ с $k = \dfrac{1}{2}$.
Шаг 2. По правилу «внутри всё наоборот»: $k = 0{,}5 < 1$, значит это растяжение от оси $Oy$ в $\dfrac{1}{k} = 2$ раза.
Шаг 3. Найдём образ точки: абсцисса делится на $k$, то есть умножается на 2:
$$(4; 2) \to \left(\frac{4}{0{,}5};\ 2\right) = (8; 2)$$Проверим наш ответ: подставим $x = 8$: $y = \sqrt{\dfrac{8}{2}} = \sqrt{4} = 2$ ✅
Шаг 4. Область определения: $\dfrac{x}{2} \geq 0 \implies x \geq 0$ — не изменилась, потому что растяжение от оси $Oy$ оставляет луч $[0; +\infty)$ тем же лучом.
Ответ: растяжение от оси $Oy$ в 2 раза, точка $(4; 2) \to (8; 2)$, $D(f) = [0; +\infty)$ не изменилась.
Пример 3 (сложный): стандартизация признака. Признак «рост в см» распределён с $\mu = 170$ и $\sigma = 8$. Опиши переход от графика плотности к графику плотности стандартизованной величины $z = \dfrac{x - \mu}{\sigma}$ и найди, какому росту соответствует $z = 1{,}5$
Решение:
Шаг 1. Разложим формулу стандартизации на два шага. Сначала вычитание среднего: $x \to x - 170$ — это сдвиг влево на 170, центр распределения переезжает в ноль. Затем деление на $\sigma = 8$ — масштабирование шкалы.
Шаг 2. Тут важно не запутаться в том, что именно мы преобразуем. Мы строим новую случайную величину $z$, и её график плотности — это исходный график, сжатый к оси $Oy$ в 8 раз: разброс, который в исходных единицах составлял $\pm 8$ см вокруг среднего, в единицах $z$ превращается в $\pm 1$. Формально $p_z(z) = 8 \cdot p_x(8z + 170)$ — сдвиг на 170, сжатие в 8 раз по горизонтали и растяжение в 8 раз по вертикали (последнее нужно, чтобы площадь под кривой осталась равной единице — плотность обязана нормироваться).
Шаг 3. Найдём рост, соответствующий $z = 1{,}5$. Развернём формулу:
$$z = \frac{x - 170}{8} \implies x = 8z + 170$$Шаг 4. Подставим:
$$x = 8 \cdot 1{,}5 + 170 = 12 + 170 = 182$$Проверим наш ответ: $z = \dfrac{182 - 170}{8} = \dfrac{12}{8} = 1{,}5$ ✅
Ответ: сдвиг на $\mu = 170$ + сжатие по горизонтали в $\sigma = 8$ раз (с компенсирующим растяжением по вертикали для сохранения площади); $z = 1{,}5$ соответствует росту 182 см.
Вывод: обратное преобразование $x = \sigma z + \mu$ — это в точности «растянуть в $\sigma$ раз и сдвинуть на $\mu$». Именно поэтому после того, как модель предсказала значение в стандартизованной шкале, его возвращают в исходные единицы одной строчкой y_pred * sigma + mu — это обратное преобразование графика, не более того.
Почему это важно
Растяжение — это вес $w$ в нейроне. Пока bias двигает порог, вес управляет крутизной: чем больше $|w|$, тем резче нейрон переключается из «выключено» в «включено». Возьми сигмоиду $\sigma(x) = \dfrac{1}{1 + e^{-x}}$: при $w = 0{,}1$ график $\sigma(wx)$ — это почти прямая, растянутая в 10 раз по горизонтали, переход из 0 в 1 занимает десятки единиц. При $w = 100$ — практически ступенька, переключение мгновенное. Обучая веса, сеть буквально настраивает, насколько резким будет каждое решающее правило.
И тут же — самая известная проблема глубоких сетей. Сигмоида в области больших $|x|$ почти горизонтальна, её производная близка к нулю. Большой вес растягивает график по вертикали, но сжимает «рабочую зону» по горизонтали настолько, что почти все входы попадают на плоские участки — градиент затухает, обучение останавливается. Это vanishing gradients, и в терминах нашей темы это ровно «график сжали по горизонтали так сильно, что от наклонного участка ничего не осталось». Поэтому веса инициализируют аккуратно (Xavier, He-инициализация), а данные нормализуют — чтобы рабочая точка не уехала на плоское плато.
Третье применение — min-max нормализация $x' = \dfrac{x - x_{\min}}{x_{\max} - x_{\min}}$: сдвиг на минимум плюс сжатие на размах, результат гарантированно лежит в $[0; 1]$. Без неё признак «годовой доход» (сотни тысяч) полностью задавит признак «количество детей» (единицы) в любой модели, чувствительной к масштабу — в KNN, в SVM, в градиентном спуске без адаптивного шага.
Отражения: зеркала относительно осей
Интуиция
Отражение — это то же самое зеркало, что в ванной, только вместо стекла — координатная ось. Приложил зеркало к оси $Ox$ — весь график перевернулся вверх ногами. Приложил к оси $Oy$ — график перевернулся слева направо.
Формально оба отражения — это частный случай растяжения с отрицательным коэффициентом. $y = -f(x)$ — это $A f(x)$ при $A = -1$: все ординаты меняют знак, а абсциссы остаются. $y = f(-x)$ — это $f(kx)$ при $k = -1$: все абсциссы меняют знак. И когда ты видишь $y = -3f(x)$, читай это как «отражение относительно $Ox$ и растяжение в 3 раза» — два преобразования в одном множителе.
Отдельно стоит третий вариант: $y = -f(-x)$ — оба отражения сразу. Геометрически это центральная симметрия относительно начала координат: точка $(x_0; y_0)$ переходит в $(-x_0; -y_0)$, то есть график поворачивается на 180° вокруг нуля.
Определение: График функции $y = -f(x)$ симметричен графику $y = f(x)$ относительно оси $Ox$. График функции $y = f(-x)$ симметричен графику $y = f(x)$ относительно оси $Oy$. График функции $y = -f(-x)$ симметричен графику $y = f(x)$ относительно начала координат.
Как преобразуются точки:
- $y = -f(x)$: $(x_0; y_0) \to (x_0;\ -y_0)$
- $y = f(-x)$: $(x_0; y_0) \to (-x_0;\ y_0)$
- $y = -f(-x)$: $(x_0; y_0) \to (-x_0;\ -y_0)$
Полезные следствия:
- Если функция чётная, то $f(-x) = f(x)$, и отражение относительно $Oy$ вообще ничего не меняет — график переходит сам в себя
- Если функция нечётная, то $-f(-x) = f(x)$, и центральная симметрия переводит график сам в себя
- Отражение относительно $Ox$ переворачивает область значений: $E(f) = [a; b] \to [-b; -a]$
- Отражение относительно $Oy$ переворачивает область определения: $D(f) = [a; b] \to [-b; -a]$
Примеры с разбором
Пример 1 (простой): построй $y = -\sqrt{x}$, найди $D$ и $E$
Решение:
Шаг 1. Минус стоит снаружи корня — это отражение относительно оси $Ox$.
Шаг 2. Область определения при таком отражении не меняется (мы ведь не трогали то, что подставляется внутрь): $D(f) = [0; +\infty)$.
Шаг 3. Область значений переворачивается: было $[0; +\infty)$, стало $(-\infty; 0]$.
Шаг 4. График — та же ветка корня, но идущая вправо и вниз от начала координат.
Проверим наш ответ: $f(4) = -\sqrt{4} = -2$ — точка $(4; 2)$ базового графика перешла в $(4; -2)$ ✅
Ответ: $D(f) = [0; +\infty)$, $E(f) = (-\infty; 0]$.
Пример 2 (средний): построй $y = \sqrt{-x}$ и сравни с предыдущим примером
Решение:
Шаг 1. Здесь минус стоит внутри, у аргумента — это отражение относительно оси $Oy$.
Шаг 2. Найдём область определения:
$$-x \geq 0 \implies x \leq 0$$$$D(f) = (-\infty; 0]$$Область определения перевернулась — ровно как обещало правило.
Шаг 3. Область значений не изменилась: корень по-прежнему выдаёт неотрицательные числа, $E(f) = [0; +\infty)$.
Шаг 4. График — ветка корня, идущая влево и вверх от начала координат.
Проверим наш ответ: $f(-4) = \sqrt{4} = 2$ — точка $(4; 2)$ перешла в $(-4; 2)$ ✅
Ответ: $D(f) = (-\infty; 0]$, $E(f) = [0; +\infty)$. Сравнение: $-\sqrt{x}$ ушла вправо-вниз, $\sqrt{-x}$ — влево-вверх. Один и тот же минус, но в разных местах формулы даёт совершенно разные графики — это главное, что нужно вынести из пары этих примеров.
Пример 3 (сложный): для $f(x) = x^2 + 2x$ найди формулу графика, симметричного относительно начала координат, и проверь через вершину параболы
Решение:
Шаг 1. Центральная симметрия — это $g(x) = -f(-x)$. Подставим:
$$g(x) = -\left((-x)^2 + 2(-x)\right)$$Шаг 2. Раскроем внутренние скобки. Квадрат «съедает» минус, а линейное слагаемое — нет:
$$g(x) = -\left(x^2 - 2x\right)$$Шаг 3. Раскроем внешний минус:
$$g(x) = -x^2 + 2x$$Шаг 4. Проверим через вершины. У исходной параболы $f(x) = x^2 + 2x = (x+1)^2 - 1$ вершина в точке $(-1; -1)$. При центральной симметрии она обязана перейти в $(1; 1)$.
Шаг 5. Найдём вершину $g$. Выделим полный квадрат:
$$g(x) = -x^2 + 2x = -(x^2 - 2x) = -\left((x-1)^2 - 1\right) = -(x-1)^2 + 1$$Вершина в точке $(1; 1)$ ✅ — ровно то, что предсказала симметрия.
Проверим наш ответ ещё раз, численно: возьмём точку $x = 2$ на исходном графике: $f(2) = 4 + 4 = 8$, точка $(2; 8)$. Её образ должен быть $(-2; -8)$. Считаем: $g(-2) = -4 + (-4) = -8$ ✅
Ответ: $g(x) = -x^2 + 2x = -(x-1)^2 + 1$, вершина $(1; 1)$.
Почему это важно
Отражение — это тот случай, когда простая школьная операция напрямую превратилась в промышленный приём. Горизонтальный флип (RandomHorizontalFlip в torchvision) — самая распространённая аугментация в компьютерном зрении: каждую вторую картинку в батче отражают относительно вертикальной оси. Модель видит вдвое больше разных примеров при том же датасете и перестаёт заучивать «кошка всегда смотрит влево». В терминах нашей темы это отражение $I(x) \to I(-x)$, применённое к функции яркости изображения.
При этом флип — прекрасный пример того, где надо думать, а не применять вслепую. Горизонтальное отражение отлично работает для кошек, машин и лиц, но ломает датасет рукописных цифр: отражённая «2» — это не «2», а мусор, которого в природе не бывает. И совсем плохо — с медицинскими снимками, где право и лево несимметричны анатомически: сердце слева, и отражённый рентген научит модель диагностировать несуществующую патологию. Вертикальный флип (отражение относительно $Ox$) в фотографиях реального мира почти всегда вреден — перевёрнутых деревьев в тестовой выборке не будет, — а вот в спутниковых снимках, где верха и низа нет, он абсолютно уместен.
Отражение относительно $Ox$ встречается ещё в одном месте, о котором редко думают: минимизация вместо максимизации. Оптимизаторы в ML умеют только минимизировать, а задача часто ставится как максимизация (правдоподобия, награды, метрики). Решение — взять функцию со знаком минус: $\max f \equiv \min (-f)$. Именно поэтому вместо максимизации правдоподобия все минимизируют negative log-likelihood, а в обучении с подкреплением — минус ожидаемую награду. Это отражение графика относительно оси $Ox$, после которого пик превращается в яму, и в неё можно скатиться градиентным спуском.
Модуль: два разных трюка
Интуиция
Модуль в формуле графика встречается в двух принципиально разных позициях, и путать их — классика жанра. Разберём по шагам.
Вариант 1: $y = |f(x)|$ — модуль снаружи. Мы берём готовое значение функции и делаем его неотрицательным. Значит, всё, что было выше оси $Ox$, остаётся как есть, а всё, что ушло вниз, отражается вверх. Представь, что часть графика, оказавшаяся под осью, — это отражение в воде, и мы «складываем» плоскость по оси $Ox$, как лист бумаги. Точки пересечения с осью $Ox$ остаются на месте и превращаются в характерные изломы («уголки»).
Вариант 2: $y = f(|x|)$ — модуль внутри. Мы подменяем аргумент: при отрицательном $x$ функция получает на вход $|x| = -x$, то есть то же значение, что и в симметричной точке справа. Значит, левая часть графика полностью выбрасывается, а вместо неё зеркально копируется правая. Результат всегда получается чётной функцией — симметричной относительно оси $Oy$, что бы ни было в исходнике.
Запомни разницу одной фразой: модуль снаружи отражает низ наверх, модуль внутри копирует правое налево.
Определение: График $y = |f(x)|$ получается из графика $y = f(x)$ так: часть, лежащая в верхней полуплоскости ($f(x) \geq 0$), сохраняется, а часть, лежащая ниже оси $Ox$, отражается относительно оси $Ox$ вверх. График $y = f(|x|)$ получается так: часть графика при $x \geq 0$ сохраняется, часть при $x < 0$ отбрасывается и заменяется зеркальным отражением правой части относительно оси $Oy$.
Как читать результат:
- У $y = |f(x)|$ область значений всегда неотрицательна: $E \subseteq [0; +\infty)$; изломы возникают в нулях функции $f$
- У $y = f(|x|)$ область определения становится симметричной относительно нуля
- $y = f(|x|)$ всегда чётная; $y = |f(x)|$ чётной быть не обязана
Примеры с разбором
Пример 1 (простой): построй $y = |x^2 - 1|$ и найди наименьшее значение
Решение:
Шаг 1. Базовая функция $f(x) = x^2 - 1$ — парабола с вершиной $(0; -1)$ и нулями в точках $x = \pm 1$.
Шаг 2. Модуль стоит снаружи — отражаем вверх всё, что ниже оси $Ox$. Ниже оси парабола находится на интервале $(-1; 1)$.
Шаг 3. Что происходит с вершиной: точка $(0; -1)$ отражается в $(0; 1)$ и становится локальным максимумом нового графика.
Шаг 4. Нули $x = \pm 1$ остаются на месте и становятся точками излома, где значение равно 0 — это и есть наименьшее значение функции.
Проверим наш ответ: $y(0) = |0 - 1| = 1$ ✅, $y(1) = |1 - 1| = 0$ ✅, $y(2) = |4 - 1| = 3$ ✅
Ответ: наименьшее значение 0, достигается при $x = \pm 1$; $E(f) = [0; +\infty)$; в точке $x = 0$ — локальный максимум, равный 1.
Пример 2 (средний): построй $y = f(|x|)$ для $f(x) = x^2 - 4x + 3$ и опиши результат
Решение:
Шаг 1. Подставим $|x|$ вместо $x$. Заметим важное упрощение: $|x|^2 = x^2$, потому что квадрат и так убивает знак. А вот линейное слагаемое модуль сохраняет:
$$y = |x|^2 - 4|x| + 3 = x^2 - 4|x| + 3$$Шаг 2. Разберёмся с геометрией. При $x \geq 0$ формула совпадает с исходной: $y = x^2 - 4x + 3$, парабола с вершиной в $(2; -1)$ (проверим: $4 - 8 + 3 = -1$ ✅) и нулями в $x = 1$ и $x = 3$.
Шаг 3. При $x < 0$ график — зеркальная копия правой части. Значит, появляется вторая «яма» с вершиной $(-2; -1)$ и нули в $x = -1$ и $x = -3$.
Шаг 4. В точке $x = 0$ обе половины стыкуются в значении $y(0) = 3$, и там возникает излом — угловая точка, локальный максимум.
Проверим наш ответ: $y(-2) = 4 - 4 \cdot 2 + 3 = 4 - 8 + 3 = -1$ ✅ (то же, что $y(2)$), $y(-3) = 9 - 12 + 3 = 0$ ✅
Ответ: $y = x^2 - 4|x| + 3$; график — «двугорбая» (W-образная) кривая, симметричная относительно $Oy$, с двумя минимумами $(\pm 2; -1)$, четырьмя нулями $x = \pm 1, \pm 3$ и изломом-максимумом в $(0; 3)$.
Пример 3 (сложный): сколько корней имеет уравнение $|x^2 - 4x + 3| = a$ в зависимости от параметра $a$?
Это классическая задача «на параметр», и графический метод решает её за минуту, тогда как алгебраический разбор случаев занимает страницу.
Решение:
Шаг 1. Построим левую часть. $g(x) = x^2 - 4x + 3 = (x-2)^2 - 1$ — парабола с вершиной $(2; -1)$, нулями $x = 1$ и $x = 3$.
Шаг 2. Применим модуль: участок между нулями (там, где парабола уходит вниз до $-1$) отражается вверх. Получаем кривую, у которой:
- два «нуля-излома» в точках $x = 1$ и $x = 3$
- локальный максимум в точке $x = 2$ со значением $|-1| = 1$
- две уходящие вверх ветви по краям
Шаг 3. Правая часть $y = a$ — горизонтальная прямая. Количество корней уравнения равно числу точек пересечения прямой с кривой. Двигаем прямую снизу вверх и считаем.
Шаг 4. Разберём случаи:
- $a < 0$: прямая ниже всей кривой (кривая неотрицательна) — 0 корней
- $a = 0$: прямая проходит по оси $Ox$ и задевает кривую ровно в двух точках излома — 2 корня ($x = 1$ и $x = 3$)
- $0 < a < 1$: прямая пересекает обе внешние ветви и обе стороны «горбика» между ними — 4 корня
- $a = 1$: прямая проходит через вершину горбика, две точки из четырёх сливаются в одну — 3 корня
- $a > 1$: горбик уже ниже прямой, остаются только две внешние ветви — 2 корня
Проверим наш ответ на конкретике. Возьмём $a = 3$ (случай $a > 1$). Уравнение распадается: $x^2 - 4x + 3 = 3 \implies x^2 - 4x = 0 \implies x = 0$ или $x = 4$ (два корня); второй вариант $x^2 - 4x + 3 = -3 \implies x^2 - 4x + 6 = 0$, дискриминант $16 - 24 = -8 < 0$, корней нет. Итого 2 корня ✅
Возьмём $a = 1$: $x^2 - 4x + 3 = 1 \implies x^2 - 4x + 2 = 0$, $D = 16 - 8 = 8 > 0$, два корня; и $x^2 - 4x + 3 = -1 \implies x^2 - 4x + 4 = 0 \implies (x-2)^2 = 0$, один корень $x = 2$. Итого 3 корня ✅
Ответ: $a < 0$ — нет корней; $a = 0$ — 2 корня; $0 < a < 1$ — 4 корня; $a = 1$ — 3 корня; $a > 1$ — 2 корня.
Почему это важно
Модуль — это функция $y = |x|$, а её вариации буквально повсеместны в машинном обучении. L1-регуляризация (Lasso) добавляет к функции потерь штраф $\lambda \sum |w_i|$, и весь её знаменитый эффект «зануления весов» объясняется формой графика: у $|w|$ в нуле не гладкое дно, как у $w^2$, а острый угол. Угол «притягивает» решение — оптимум многомерной задачи с большой вероятностью попадает точно в излом, то есть вес становится ровно нулём, а признак выбывает из модели. Квадратичный штраф $w^2$ такого не делает, потому что около нуля его производная стремится к нулю и давление на маленькие веса исчезает. Отсюда: L1 даёт разреженность и автоматический отбор признаков, L2 — нет. Вся разница — в форме графика возле нуля.
MAE (mean absolute error) — это $|y - \hat{y}|$, средняя абсолютная ошибка, устойчивая к выбросам: один аномальный объект добавляет к штрафу линейную, а не квадратичную величину, и модель не бросается его обслуживать в ущерб остальным. Huber loss — гибрид: квадрат около нуля (гладко, удобно для градиента) и модуль на хвостах (устойчиво к выбросам); это график, склеенный из двух преобразованных кусков. А ReLU $= \max(0, x) = \dfrac{x + |x|}{2}$ — это в буквальном смысле модуль, сжатый и сложенный с прямой: половина $|x|$ плюс половина $x$. Так что каждый раз, когда ты пишешь nn.ReLU(), ты применяешь преобразование графика модуля.
Порядок преобразований: главная ловушка
Интуиция
Пока преобразование одно, всё просто. Проблема начинается, когда их несколько: $y = 2f(3x - 6) + 1$. Здесь сразу четыре операции — растяжение, сжатие, два сдвига, — и результат зависит от порядка. Сдвинуть, а потом растянуть — это не то же самое, что растянуть, а потом сдвинуть.
Убедимся на числах. Возьмём точку $x = 1$ и два сценария. Сценарий А: сначала сдвинем вправо на 2 ($1 \to 3$), потом растянем от нуля в 3 раза ($3 \to 9$). Сценарий Б: сначала растянем в 3 раза ($1 \to 3$), потом сдвинем на 2 ($3 \to 5$). Девять против пяти — порядок критичен.
Правильный способ никогда не ошибиться — привести формулу к канонической форме:
$$y = A \cdot f\big(k(x - a)\big) + b$$Обрати внимание: внутри аргумента коэффициент $k$ вынесен за скобку, а сдвиг стоит рядом с $x$ внутри скобок. Как только формула приведена к такому виду, все четыре числа читаются напрямую, и правильный порядок — такой:
-
Горизонтальное сжатие/растяжение в $k$ раз (сжатие при $k > 1$)
-
Горизонтальный сдвиг на $a$ (вправо при $a > 0$)
-
Вертикальное растяжение в $|A|$ раз и, если $A < 0$, отражение относительно $Ox$
-
Вертикальный сдвиг на $b$ (вверх при $b > 0$)
Ещё проще запомнить так: внутренние операции (с аргументом) выполняются в обратном порядке относительно того, как они записаны, а внешние — в прямом. Причина ровно та же, что и с горизонтальным сдвигом: чтобы функция получила нужное значение на вход, преобразования аргумента приходится «отматывать назад».
Определение: График функции $y = A f\big(k(x-a)\big) + b$ при $A \neq 0$, $k > 0$ получается из графика $y = f(x)$ последовательным применением: сжатия к оси $Oy$ в $k$ раз, переноса вдоль $Ox$ на $a$, растяжения от оси $Ox$ в $|A|$ раз (с отражением относительно $Ox$ при $A < 0$) и переноса вдоль $Oy$ на $b$. Точка $(x_0; y_0)$ исходного графика переходит в точку $\left(\dfrac{x_0}{k} + a;\ A y_0 + b\right)$.
Формула образа точки — самый надёжный инструмент. Если сомневаешься в порядке, просто примени её: она выведена один раз и не ошибается никогда.
Примеры с разбором
Пример 1 (средний): опиши цепочку преобразований для $y = 2\sqrt{x - 3} + 1$ и найди образ точки $(4; 2)$ базового графика
Решение:
Шаг 1. Приведём к канонической форме. Тут она уже готова: $A = 2$, $k = 1$, $a = 3$, $b = 1$.
Шаг 2. Цепочка преобразований графика $y = \sqrt{x}$:
- горизонтального сжатия нет ($k = 1$)
- сдвиг вправо на 3
- растяжение от оси $Ox$ в 2 раза
- сдвиг вверх на 1
Шаг 3. Найдём образ точки $(4; 2)$ по формуле $\left(\dfrac{x_0}{k} + a;\ A y_0 + b\right)$:
$$\left(\frac{4}{1} + 3;\ 2 \cdot 2 + 1\right) = (7; 5)$$Проверим наш ответ: подставим $x = 7$: $y = 2\sqrt{7 - 3} + 1 = 2\sqrt{4} + 1 = 2 \cdot 2 + 1 = 5$ ✅
Шаг 4. Заодно найдём начальную точку графика: базовая начиналась в $(0; 0)$, значит новая — в $\left(0 + 3;\ 2 \cdot 0 + 1\right) = (3; 1)$. Область определения: $x \geq 3$, область значений: $[1; +\infty)$.
Ответ: сдвиг вправо на 3 → растяжение по вертикали в 2 раза → сдвиг вверх на 1; точка $(4; 2) \to (7; 5)$; $D(f) = [3; +\infty)$, $E(f) = [1; +\infty)$.
Пример 2 (сложный): функция $f$ достигает максимума, равного 5, в точке $x = 0$. Где и какой экстремум у функции $g(x) = -2f(3x + 6) - 1$?
Это задача, где базовая функция вообще не задана формулой — известны только её свойства. Именно так задачи на преобразования и звучат на экзаменах, и именно так к ним подходят в реальном анализе: нас интересует геометрия, а не конкретные числа внутри $f$.
Решение:
Шаг 1. Приведём аргумент к канонической форме — вынесем коэффициент при $x$ за скобку:
$$3x + 6 = 3(x + 2) = 3\big(x - (-2)\big)$$Значит $k = 3$, $a = -2$, $A = -2$, $b = -1$.
Шаг 2. Найдём, куда переедет точка экстремума по горизонтали. Аргумент $f$ должен принять значение 0:
$$3x + 6 = 0 \implies x = -2$$Тот же результат даёт формула: $x_{\text{нов}} = \dfrac{x_0}{k} + a = \dfrac{0}{3} + (-2) = -2$ ✅
Шаг 3. Найдём новое значение. Множитель $A = -2$ отрицателен — а это значит, что график перевернулся относительно оси $Ox$, и максимум превратился в минимум! Это ключевой момент задачи, который легко пропустить.
$$y_{\text{нов}} = A y_0 + b = -2 \cdot 5 - 1 = -10 - 1 = -11$$Шаг 4. Сформулируем аккуратно: в точке $x = -2$ функция $g$ достигает минимума, равного $-11$. Максимума у $g$ в этой точке нет.
Проверим наш ответ на конкретной функции. Пусть $f(x) = 5 - x^2$ — у неё действительно максимум 5 в нуле. Тогда:
$$g(x) = -2\big(5 - (3x+6)^2\big) - 1 = -10 + 2(3x+6)^2 - 1 = 2(3x+6)^2 - 11$$Квадрат неотрицателен, значит $g(x) \geq -11$, и равенство достигается при $3x + 6 = 0$, то есть при $x = -2$, где $g(-2) = -11$ ✅ Минимум, как и предсказано.
Ответ: в точке $x = -2$ функция $g$ имеет минимум, равный $-11$.
Почему это важно
Каноническая форма $y = A f(k(x-a)) + b$ — это ровно то, что делает batch normalization, самый влиятельный слой в глубоком обучении после свёртки. Формула BatchNorm выглядит так:
$$y = \gamma \cdot \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \varepsilon}} + \beta$$Разбери её по нашим четырём числам: вычитание $\mu_B$ — горизонтальный сдвиг, деление на $\sigma_B$ — масштабирование, умножение на $\gamma$ — вертикальное растяжение, прибавление $\beta$ — вертикальный сдвиг. Причём $\gamma$ и $\beta$ — обучаемые параметры: сеть сама решает, насколько сильно растянуть и куда сдвинуть распределение активаций, вплоть до того, чтобы полностью отменить нормализацию, если она мешает. Это буквально «преобразование графика с настраиваемыми коэффициентами», встроенное в архитектуру.
И порядок здесь тоже критичен, причём в самом дорогом смысле. Классический спор в ML-инженерии — куда ставить BatchNorm: до функции активации или после. Ставишь до — активация получает нормализованное распределение, и, например, у сигмоиды рабочая точка попадает на крутой участок, где градиенты живые. Ставишь после — нормализуешь уже обрезанный ReLU сигнал, у которого половина значений строго нулевая, и статистики считаются по несимметричному распределению. Разные порядки одних и тех же операций дают разное качество обучения — та же математика, что «сдвинуть, потом растянуть ≠ растянуть, потом сдвинуть», только ценой в несколько процентов accuracy и дни GPU-времени.
Практика: 30 заданий
Базовые (задания 1-10)
Задание 1: График функции $y = x^2$ сдвинули на 3 единицы вверх. Запиши формулу получившейся функции и укажи её область значений.
Задание 2: График функции $y = \sqrt{x}$ сдвинули на 2 единицы вправо. Запиши формулу и найди область определения.
Задание 3: График функции потерь $L(x)$ проходит через точку $(2; 4)$. Модель улучшили, и потери на всех входах уменьшились ровно на 5. Через какую точку пройдёт новый график $L_{\text{нов}}(x) = L(x) - 5$?
Задание 4: Опиши преобразование графика $y = |x|$ в график $y = |x + 4|$ и укажи координаты вершины.
Задание 5: График функции $y = f(x)$ проходит через точку $(1; 2)$. Через какую точку пройдёт график $y = 3f(x)$?
Задание 6: Опиши преобразование графика $y = x^2$ в график $y = (2x)^2$ двумя разными способами.
Задание 7: Опиши график $y = -x^2$ относительно графика $y = x^2$ и найди область значений.
Задание 8: Найди координаты вершины параболы $y = (x - 3)^2 + 5$.
Задание 9: График $y = 2^x$ имеет горизонтальную асимптоту $y = 0$. Какая горизонтальная асимптота у графика $y = 2^x - 1$?
Задание 10: Нейрон с активацией ReLU и bias $b = 2$ вычисляет $y = \max(0,\ x + 2)$. При каких значениях входа $x$ нейрон выдаёт ненулевой сигнал? Как сместился излом относительно базовой ReLU?
Средние (задания 11-20)
Задание 11: Представь функцию $y = x^2 + 6x + 11$ в виде сдвига параболы $y = x^2$ и найди вершину.
Задание 12: График $y = f(x)$ проходит через точку $(4; -1)$. Через какую точку проходит график $y = f(x - 2) + 3$?
Задание 13: Найди уравнения асимптот графика $y = \dfrac{1}{x - 2} + 3$.
Задание 14: Опиши полную цепочку преобразований для $y = -3(x + 2)^2 + 5$ и найди вершину и область значений.
Задание 15: Опиши, как получить график $y = \sqrt{4 - x}$ из графика $y = \sqrt{x}$, и найди область определения.
Задание 16: Чем график $y = |x^2 - 4|$ отличается от графика $y = x^2 - 4$? Укажи наименьшее значение и точки излома.
Задание 17: Для $f(x) = x - 2$ построй график $y = f(|x|)$. Опиши форму и найди нули.
Задание 18: Признак «время на сайте, сек» имеет среднее $\mu = 50$ и стандартное отклонение $\sigma = 10$. Опиши стандартизацию $z = \dfrac{x - \mu}{\sigma}$ как преобразование шкалы и найди $z$ для пользователя, проведшего на сайте 70 секунд.
Задание 19: Признак «возраст» принимает значения от 20 до 80. Запиши формулу min-max нормализации в диапазон $[0; 1]$ и найди нормализованное значение для возраста 50.
Задание 20: Нейрон вычисляет $y = \sigma(2x - 4)$, где $\sigma(t) = \dfrac{1}{1 + e^{-t}}$ — сигмоида. Опиши преобразование графика сигмоиды и найди, при каком $x$ выход равен ровно $0{,}5$.
Продвинутые (задания 21-30)
Задание 21: Функция $y = f(x)$ достигает максимума в точке $x = 4$. В какой точке достигает максимума функция $y = f(2x - 6)$?
Задание 22: График $y = f(x)$ проходит через точку $(6; 4)$. Через какую точку проходит график $y = 2f\left(\dfrac{x}{3}\right) - 1$?
Задание 23: Представь функцию $y = -2x^2 + 8x - 5$ как результат преобразований параболы $y = x^2$. Найди вершину и область значений.
Задание 24: Сколько корней имеет уравнение $|x^2 - 4| = a$ в зависимости от параметра $a$?
Задание 25: График функции $y = x^3$ отразили относительно оси $Oy$, а затем сдвинули на 2 вверх. Запиши формулу и проверь её на точке $x = 2$.
Задание 26: Докажи, что если функция $f$ чётная, то график функции $g(x) = f(x - a)$ симметричен относительно вертикальной прямой $x = a$.
Задание 27: Аугментация изображения: яркость каждого пикселя преобразуют по формуле $I' = 1{,}2 \cdot I + 10$, после чего результат обрезают сверху значением 255. При каких целых значениях исходной яркости $I$ произойдёт обрезка (клиппинг)?
Задание 28: Слой batch normalization после нормализации выдаёт значения $\hat{x} \in [-3; 3]$, затем применяет обучаемое преобразование $y = \gamma \hat{x} + \beta$ с $\gamma = 2$ и $\beta = -1$. Найди диапазон выходных значений и объясни геометрический смысл параметров.
Задание 29: Признак «количество покупок» принимает значения от 0 до 999 и сильно скошен. Его преобразуют по формуле $y = \lg(x + 1)$. Найди диапазон значений нового признака и объясни, зачем нужна единица внутри логарифма.
Задание 30: Отладка кода. Найди ошибку и исправь её.
import numpy as np
def f(x):
return x**2
# ХОТИМ: сдвинуть параболу на 3 вправо и на 2 вверх
def shifted(x):
return f(x + 3) + 2
xs = np.linspace(-8, 8, 200)
# вершина ожидалась в (3, 2), но по графику она оказалась в (-3, 2)
Частые ошибки
❌ Ошибка 1: путают направление горизонтального сдвига
Неправильно: считать, что $y = f(x + 3)$ сдвигает график вправо на 3, потому что «плюс — значит вправо».
Правильно: $y = f(x + 3) = f(x - (-3))$ — сдвиг влево на 3. Вправо двигает минус: $y = f(x - 3)$.
💡 Почему важно: это ошибка номер один во всей теме, и она портит ответ целиком, а не частично. Универсальная проверка за пять секунд: найди, при каком $x$ обнуляется выражение внутри функции. Для $f(x+3)$ это $x = -3$ — значит характерная точка (вершина, начало, излом) уехала влево.
❌ Ошибка 2: не выносят коэффициент за скобку перед определением сдвига
Неправильно: в записи $y = f(2x - 6)$ прочитать «сжатие в 2 раза и сдвиг вправо на 6».
Правильно: сначала вынести коэффициент: $2x - 6 = 2(x - 3)$. Сдвиг равен 3, а не 6. Порядок: сжатие в 2 раза, затем сдвиг вправо на 3.
💡 Почему важно: без вынесения коэффициента ответ отличается ровно в $k$ раз — и это молчаливая ошибка, которая не бросается в глаза при проверке. Правило простое: сначала каноническая форма $A f(k(x-a)) + b$, потом любые выводы.
❌ Ошибка 3: путают $y = |f(x)|$ и $y = f(|x|)$
Неправильно: для $f(x) = x - 2$ считать, что $|f(x)|$ и $f(|x|)$ дают один и тот же график.
Правильно: $|f(x)| = |x - 2|$ — это V-образный график с вершиной в $(2; 0)$ (низ отражён вверх, левая часть сохранена). А $f(|x|) = |x| - 2$ — V-образный график с вершиной в $(0; -2)$ (правая часть скопирована налево). Совершенно разные кривые: у первой один нуль, у второй два.
💡 Почему важно: формулировка «модуль снаружи отражает низ наверх, модуль внутри копирует правое налево» закрывает эту ошибку раз и навсегда. Проверка: $f(|x|)$ обязана быть симметричной относительно $Oy$; если у тебя получилось несимметрично — ты применил не тот модуль.
❌ Ошибка 4: считают, что порядок преобразований не важен
Неправильно: для $y = 2f(x) + 3$ сначала сдвинуть график на 3 вверх, а потом растянуть в 2 раза.
Правильно: при таком порядке получилось бы $2(f(x) + 3) = 2f(x) + 6$ — другая функция! Внешние операции применяются в том порядке, в котором они выполняются при вычислении: сначала умножение, потом сложение. Растянуть, потом сдвинуть.
💡 Почему важно: ошибка даёт неверную вершину, неверную асимптоту и неверную область значений. Самый надёжный способ вообще не думать о порядке — использовать формулу образа точки $\left(\dfrac{x_0}{k} + a;\ A y_0 + b\right)$: она уже учитывает правильный порядок внутри себя.
❌ Ошибка 5: забывают, что отражение относительно $Ox$ меняет максимум на минимум
Неправильно: сказать, что у функции $y = -3f(x)$ максимум в той же точке и равен $-3$ от прежнего максимума, оставив слово «максимум».
Правильно: точка по горизонтали действительно та же, а вот характер экстремума переворачивается: где у $f$ был максимум, у $-3f$ будет минимум (и наоборот). Если $\max f = 5$, то в этой же точке $\min(-3f) = -15$.
💡 Почему важно: ровно на этом строится переход между максимизацией и минимизацией в оптимизации. Оптимизаторы в ML умеют только минимизировать, и максимизацию правдоподобия превращают в минимизацию минус логарифма правдоподобия — то самое отражение относительно $Ox$, после которого вершина становится ямой.
❌ Ошибка 6: считают область определения по старой формуле после горизонтальных преобразований
Неправильно: для $y = \sqrt{4 - x}$ написать $D(f) = [0; +\infty)$, потому что «у корня область такая».
Правильно: область определения задаёт подкоренное выражение целиком: $4 - x \geq 0 \implies x \leq 4$, то есть $D(f) = (-\infty; 4]$. Горизонтальные преобразования (сдвиг, растяжение, отражение) двигают и растягивают область определения; вертикальные её не трогают вовсе.
💡 Почему важно: неверная область определения обесценивает всё дальнейшее решение — уравнения приобретают посторонние корни, а неравенства решаются не на том множестве.
Главное запомнить
✅ Снаружи — прямо, внутри — наоборот. Всё, что применяется к значению функции ($+b$, $\cdot A$), работает интуитивно. Всё, что применяется к аргументу ($x - a$, $kx$), работает в обратную сторону: минус двигает вправо, умножение на $k>1$ сжимает.
✅ Вертикальный сдвиг: $y = f(x) + b$ — перенос на $b$ вверх (вниз при $b<0$). Меняется область значений и горизонтальные асимптоты, форма и область определения — нет.
✅ Горизонтальный сдвиг: $y = f(x - a)$ — перенос на $a$ вправо (влево при $a<0$). Меняется область определения и вертикальные асимптоты, область значений — нет.
✅ Растяжения: $y = A f(x)$ растягивает от оси $Ox$ в $A$ раз (нули не двигаются); $y = f(kx)$ сжимает к оси $Oy$ в $k$ раз при $k > 1$ и растягивает при $0 < k < 1$.
✅ Отражения: $y = -f(x)$ — зеркало относительно $Ox$; $y = f(-x)$ — зеркало относительно $Oy$; $y = -f(-x)$ — центральная симметрия относительно начала координат.
✅ Модуль снаружи $y = |f(x)|$ отражает вверх всё, что ниже оси $Ox$; нули превращаются в изломы, а область значений становится неотрицательной.
✅ Модуль внутри $y = f(|x|)$ выбрасывает левую половину и заменяет её зеркальной копией правой; результат всегда чётная функция.
✅ Каноническая форма $y = A f\big(k(x-a)\big) + b$ читается по шагам: сжатие в $k$ раз → сдвиг на $a$ → растяжение в $|A|$ раз (с отражением при $A<0$) → сдвиг на $b$. Коэффициент внутри обязательно выносить за скобку до любых выводов.
✅ Формула образа точки $\left(\dfrac{x_0}{k} + a;\ A y_0 + b\right)$ — самый надёжный инструмент: она уже содержит правильный порядок и не даёт ошибиться.
✅ Квадратный трёхчлен всегда приводится к виду $y = A(x-a)^2 + b$ выделением полного квадрата — это делает вершину, направление ветвей и область значений видимыми с первого взгляда.
✅ В ML это одна и та же математика: $wx + b$ в нейроне, $\dfrac{x-\mu}{\sigma}$ в стандартизации, $\gamma \hat{x} + \beta$ в batch norm — три записи одного преобразования «растянуть и сдвинуть».
Связь с другими темами курса
Что было раньше: композиция функций (урок 83) — прямой фундамент этой темы. Каждое преобразование графика есть композиция: $f(x - a)$ — это $f \circ g$, где $g(x) = x - a$; $A f(x)$ — это $h \circ f$, где $h(y) = Ay$. Именно поэтому внутренние преобразования ведут себя «наоборот»: во внешней композиции мы работаем с результатом, а во внутренней — с входом, и его приходится «отматывать». Из более ранних тем пригодились квадратичная функция (урок 80) с выделением полного квадрата и степенная функция (урок 81) как источник базовых кривых.
Что дальше: следующий урок — чётность и нечётность функций — это язык, на котором формулируются результаты отражений. Чётность означает «график переходит в себя при отражении относительно $Oy$», нечётность — «при центральной симметрии». То есть чётность и нечётность буквально определяются через преобразования, которые мы только что разобрали. Дальше в курсе преобразования графиков станут рабочим инструментом при построении графиков тригонометрических функций ($y = A\sin(kx + \varphi) + b$ — амплитуда, частота, фаза и смещение суть те же четыре коэффициента), показательных и логарифмических функций, а также при исследовании функций с помощью производной, где знание базовой формы экономит половину работы.
Где это применяется в жизни и в ML/данных:
📊 В нейросетях: $w$ и $b$ в каждом нейроне — это растяжение и сдвиг функции активации; batch normalization с обучаемыми $\gamma$ и $\beta$; layer normalization; сдвиг излома ReLU как настраиваемый порог срабатывания.
📈 В подготовке данных: стандартизация $\dfrac{x-\mu}{\sigma}$, min-max нормализация, robust scaling по медиане и межквартильному размаху, логарифмирование $\lg(x+1)$ для скошенных признаков, обратное преобразование предсказаний в исходную шкалу.
🖼 В компьютерном зрении: аугментация данных — сдвиги (translate), масштабирование (scale), отражения (flip), изменение яркости и контраста $I' = \alpha I + \beta$; эквивариантность свёртки к сдвигу как архитектурный принцип.
📉 В оптимизации: переход от максимизации к минимизации через отражение относительно $Ox$; функции потерь MAE, Huber и L1-регуляризация как преобразованные графики модуля.
🎵 В обработке сигналов и физике: $y = A\sin(\omega t + \varphi)$ — амплитуда, частота и фаза колебания есть в точности растяжение, сжатие и сдвиг синусоиды; эквалайзер в плеере растягивает график спектра по вертикали в каждой полосе.
💰 В финансах и статистике: приведение временных рядов к сопоставимой шкале, дефлятор (сдвиг и масштаб для учёта инфляции), Z-оценки для сравнения показателей из разных распределений.
Интересные факты
💡 Эрлангенская программа дожила до трансформеров. Когда Феликс Клейн в 1872 году предложил определять геометрию через группу преобразований, он и представить не мог, что через 150 лет по этому же принципу будут проектировать нейросети. Направление geometric deep learning (Бронштейн и соавторы, 2021) прямо ссылается на Клейна: свёрточные сети строят вокруг группы сдвигов, графовые — вокруг группы перестановок вершин, сети для молекул — вокруг группы вращений в трёхмерном пространстве. Архитектура сети выводится из того, какие преобразования данных должны оставлять ответ неизменным.
💡 Аугментация как «бесплатные данные». В работе про AlexNet (2012), с которой началась современная эпоха глубокого обучения, авторы прямо пишут, что случайные сдвиги и горизонтальные отражения увеличили эффективный размер обучающей выборки в 2048 раз и без них сеть переобучалась катастрофически. Буквально: сдвинутая на несколько пикселей картинка засчитывается как новый пример. Три школьных преобразования графика сэкономили годы сбора данных.
💡 Пропущенная единица стоит целой модели. Преобразование $\lg(x + 1)$ вместо $\lg x$ — казалось бы, косметическая деталь. Но в реальных табличных данных нулей обычно десятки процентов (ноль покупок, ноль кликов, ноль просмотров), и без сдвига весь пайплайн падает на -inf. Функция np.log1p существует в NumPy отдельным именем не для красоты, а потому что она ещё и вычисляется точнее при малых $x$, где log(1 + x) теряет значащие цифры из-за округления.
💡 Логистическая регрессия — это одна сигмоида, растянутая и сдвинутая. Целая модель классификации, на которой до сих пор держится половина банковского скоринга, математически представляет собой $\sigma(wx + b)$ — базовую сигмоиду, у которой подобрали ровно два числа: сжатие и сдвиг. Граница принятия решения — точка, где аргумент обнуляется, то есть $x = -b/w$. Вся «магия» обучения сводится к тому, чтобы поставить эту точку в правильное место.
💡 Парабола всегда одна. Любые две параболы вида $y = ax^2 + bx + c$ подобны друг другу: одна получается из другой сдвигом и масштабированием. Это верно для парабол, но неверно, например, для эллипсов — у них есть собственная «форма» (эксцентриситет), которую никакой сдвиг и никакое равномерное растяжение не изменят. Поэтому, зная график $y = x^2$, ты автоматически знаешь все параболы на свете.
Лайфхаки и полезные трюки
1. Тест на обнуление аргумента — проверка направления сдвига за 5 секунд
Не помнишь, куда сдвигает $f(x + 5)$? Найди, при каком $x$ выражение внутри равно нулю: $x + 5 = 0 \implies x = -5$. Минус — значит влево. Работает всегда и не требует запоминания правил.
2. Всегда выноси коэффициент за скобку до любых выводов
Увидел $f(3x + 12)$ — первым делом перепиши как $f\big(3(x + 4)\big)$. Сдвиг равен 4, а не 12. Это правило одно закрывает добрую половину ошибок в теме, и оно бесплатное — одна строчка преобразования.
3. Отслеживай не весь график, а одну «якорную» точку
У каждой базовой функции есть характерная точка: вершина параболы $(0;0)$, начало корня $(0;0)$, излом модуля $(0;0)$, центр сигмоиды $(0; 0{,}5)$, точка $(1; 0)$ у логарифма. Прогони через преобразование только её по формуле $\left(\dfrac{x_0}{k} + a;\ A y_0 + b\right)$ — и весь график построится вокруг неё автоматически.
4. Для квадратного трёхчлена — сразу выделяй полный квадрат
Любую формулу вида $ax^2 + bx + c$ переписывай как $a(x - x_0)^2 + y_0$. После этого вершина, направление ветвей, ось симметрии и область значений читаются мгновенно, без формулы $x_0 = -\dfrac{b}{2a}$ и без дискриминанта. Механика: вынести $a$ за скобку у слагаемых с $x$, дополнить до квадрата, вернуть излишек наружу.
5. Задачи с параметром решай графиком, а не разбором случаев
Уравнение вида $|g(x)| = a$ или $f(x) = a$ почти всегда быстрее решается так: нарисуй левую часть один раз, а правую представь как горизонтальную прямую, которую двигаешь снизу вверх. Ответ — «сколько пересечений на каждом уровне». Алгебраический разбор случаев занимает страницу, графический — три строчки.
6. В коде подставляй контрольную точку вместо того, чтобы вспоминать правило
Написал преобразование в Python и не уверен в знаке? Не отлаживай глазами — подставь одно значение, для которого ответ известен заранее. Для «сдвига параболы вправо на 3» проверь shifted(3): если это минимум и он равен ожидаемому, всё верно. Одна строка print надёжнее любой памяти о правилах.
7. Проверяй симметрию как индикатор верного модуля
Построил $y = f(|x|)$ и получил несимметричный относительно оси $Oy$ график? Значит, где-то применил модуль не туда — $f(|x|)$ обязана быть чётной по построению. Аналогично: у $y = |f(x)|$ не может быть ни одной точки ниже оси $Ox$. Два бесплатных теста, которые ловят ошибку до того, как она попадёт в ответ.
Преобразования графиков — это, пожалуй, самая «возвращаемая» тема школьной алгебры: ты будешь встречать её снова и снова, часто не под этим именем. В тригонометрии она придёт как амплитуда, частота и фаза. В матанализе — как замена переменной под интегралом. В статистике — как Z-оценки и приведение к сопоставимой шкале. В машинном обучении — как каждый второй слой нейросети и каждая первая строчка препроцессинга. И везде это будет один и тот же короткий список действий: сдвинуть, растянуть, отразить, сложить пополам по оси.
Самое приятное в этой теме — она экономит труд. Вместо того чтобы строить каждый график по точкам, ты запоминаешь десяток базовых кривых и учишься читать формулу как инструкцию по их перемещению. Один взгляд на $y = -2\sqrt{x-3} + 1$ — и ты уже видишь всю картинку, не подставив ни одного значения. Это ровно тот навык, который отличает человека, который «умеет считать», от человека, который видит математику. Дальше — чётность и нечётность функций, где отражения из этого урока превратятся в способ описывать симметрию самой функции, а не только её графика.
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку