Язык математики
Функции: инъекция, сюръекция, биекция
Функция как отображение между множествами и три вопроса, которые к ней задают
Функция — это тоже множество пар
Функция — это отношение с одним дополнительным требованием: для каждого существует ровно одна пара .
Из этого требования следуют две вещи, которые в неформальном разговоре обычно теряются:
- функция определена на всём — не бывает «функции, которая иногда не возвращает значение»;
- функция однозначна — один вход, один выход.
Именно поэтому «функция» в математике и function в Python — не одно и то же:
питоновская функция может бросить исключение или вернуть разное при разных
запусках.
Запись def f(x: X) -> Y. Читать формулу без такой
аннотации — то же самое, что читать код без типов.
Три вопроса
Про любую функцию задают три вопроса, и все три — про стрелки.
В каждый элемент приходит не больше одной стрелки: разные аргументы дают разные значения. Здесь она заодно и сюръекция.
Инъекция (injective, «вложение»): разные аргументы дают разные значения.
Информация не теряется: по значению можно однозначно восстановить аргумент. Хеш-функция инъективной не является — в этом весь смысл коллизий.
Сюръекция (surjective, «накрытие»): каждый элемент достигается.
Биекция: и то, и другое сразу. Только у биекций есть обратная функция.
Полезная проверка для конечных множеств: если , инъекции быть не может — это принцип Дирихле, он же pigeonhole. Если , не может быть сюръекции.
Композиция
Читается справа налево: сначала применяется , потом . Это регулярный источник ошибок, потому что записано в обратном порядке относительно выполнения.
Причина такого порядка станет очевидной в блоке 1: умножение матриц — это композиция отображений, и означает «сначала , потом ». Порядок в записи наследуется от .
Свойства наследуются приятным образом: композиция инъекций инъективна, композиция сюръекций сюръективна, композиция биекций — биекция.
Обратная функция
существует тогда и только тогда, когда — биекция, и удовлетворяет
Обратите внимание на обозначение: используют и для обратной функции, и для прообраза — а прообраз определён для любой функции, не только для биекции. Это разные вещи с одинаковой записью, и следующий урок посвящён именно прообразу.
Почему это важно для ML
- Обратимость линейного отображения — это существование , и критерий формулируется как «ядро тривиально», то есть «отображение инъективно».
- Softmax — не инъекция: прибавление константы ко всем логитам не меняет результат. Отсюда и берётся трюк с вычитанием максимума для устойчивости.
- Замена переменных в интеграле требует биективности — это условие в формуле normalizing flows.
Источники
- Hammack — Book of Proof, гл. 12 — Functions, injective/surjective/bijective, composition, inverses
- Deisenroth, Faisal, Ong — Mathematics for Machine Learning — Глава 2.7, линейные отображения — прямое продолжение этого урока
Проверки
0 из 2Инъекция, сюръекция или биекция
Рассмотрим , заданную формулой .
Чем является эта функция?
Проверка свойств отображения
Функция задана таблицей:
mapping[i]— это значение наdomain[i].Реализуйте
classify(domain, codomain, mapping), которая возвращает список из трёх булевых значений:- является ли инъекцией,
- является ли сюръекцией на указанное
codomain, - является ли биекцией.
Считайте, что
mappingтой же длины, что иdomain, и все значения лежат вcodomain.Обратите внимание на второй пункт: сюръективность — вопрос не только про , но и про то, какое множество объявлено областью прибытия.
Загрузка редактора…
Ctrl/⌘ + Enter