Язык математики

Функции: инъекция, сюръекция, биекция

Функция как отображение между множествами и три вопроса, которые к ней задают

Шаг 5 из 117 · ~25 мин

Функция — это тоже множество пар

Функция f:XYf : X \to Y — это отношение fX×Yf \subseteq X \times Y с одним дополнительным требованием: для каждого xXx \in X существует ровно одна пара (x,y)f(x, y) \in f.

Из этого требования следуют две вещи, которые в неформальном разговоре обычно теряются:

  1. функция определена на всём XX — не бывает «функции, которая иногда не возвращает значение»;
  2. функция однозначна — один вход, один выход.

Именно поэтому «функция» в математике и function в Python — не одно и то же: питоновская функция может бросить исключение или вернуть разное при разных запусках.

f:XY\htmlData{k=f}{f} : \htmlData{k=dom}{X} \to \htmlData{k=cod}{Y}

Запись :: \to — это в точности аннотация типа: def f(x: X) -> Y. Читать формулу без такой аннотации — то же самое, что читать код без типов.

Три вопроса

Про любую функцию задают три вопроса, и все три — про стрелки.

XYabc123

В каждый элемент приходит не больше одной стрелки: разные аргументы дают разные значения. Здесь она заодно и сюръекция.

Инъекция (injective, «вложение»): разные аргументы дают разные значения.

f(a)=f(b)    a=bf(a) = f(b) \;\Rightarrow\; a = b

Информация не теряется: по значению можно однозначно восстановить аргумент. Хеш-функция инъективной не является — в этом весь смысл коллизий.

Сюръекция (surjective, «накрытие»): каждый элемент YY достигается.

yY    xX:f(x)=y\forall y \in Y\;\; \exists x \in X : f(x) = y

Биекция: и то, и другое сразу. Только у биекций есть обратная функция.

Полезная проверка для конечных множеств: если X>Y|X| > |Y|, инъекции быть не может — это принцип Дирихле, он же pigeonhole. Если X<Y|X| < |Y|, не может быть сюръекции.

Композиция

(gf)(x)=g(f(x))(g \circ f)(x) = g(f(x))

Читается справа налево: сначала применяется ff, потом gg. Это регулярный источник ошибок, потому что записано в обратном порядке относительно выполнения.

Причина такого порядка станет очевидной в блоке 1: умножение матриц — это композиция отображений, и ABxAB\mathbf{x} означает «сначала BB, потом AA». Порядок в записи наследуется от f(x)f(x).

Свойства наследуются приятным образом: композиция инъекций инъективна, композиция сюръекций сюръективна, композиция биекций — биекция.

Обратная функция

f1:YXf^{-1} : Y \to X существует тогда и только тогда, когда ff — биекция, и удовлетворяет

f1f=idX,ff1=idYf^{-1} \circ f = \mathrm{id}_X, \qquad f \circ f^{-1} = \mathrm{id}_Y

Обратите внимание на обозначение: f1f^{-1} используют и для обратной функции, и для прообраза — а прообраз определён для любой функции, не только для биекции. Это разные вещи с одинаковой записью, и следующий урок посвящён именно прообразу.

Почему это важно для ML

  • Обратимость линейного отображения — это существование A1A^{-1}, и критерий формулируется как «ядро тривиально», то есть «отображение инъективно».
  • Softmax — не инъекция: прибавление константы ко всем логитам не меняет результат. Отсюда и берётся трюк с вычитанием максимума для устойчивости.
  • Замена переменных в интеграле требует биективности — это условие в формуле normalizing flows.

Источники

Проверки

0 из 2
  1. Инъекция, сюръекция или биекция

    Рассмотрим f:RRf : \R \to \R, заданную формулой f(x)=x2f(x) = x^2.

    Чем является эта функция?

  2. Проверка свойств отображения

    Функция задана таблицей: mapping[i] — это значение ff на domain[i].

    Реализуйте classify(domain, codomain, mapping), которая возвращает список из трёх булевых значений:

    1. является ли ff инъекцией,
    2. является ли ff сюръекцией на указанное codomain,
    3. является ли биекцией.

    Считайте, что mapping той же длины, что и domain, и все значения лежат в codomain.

    Обратите внимание на второй пункт: сюръективность — вопрос не только про ff, но и про то, какое множество объявлено областью прибытия.

    функция classify

    Загрузка редактора…

    Ctrl/⌘ + Enter