Matrix Calculus, часть 1: производная как линейный оператор
Перевод глав 1–2 конспекта MIT «Matrix Calculus»: производная как линеаризация, линейные операторы, производная по направлению, градиент как вектор той же формы, что вход, якобиан, правило цепочки и почему порядок умножения якобианов — это прямой и обратный режим автодифференцирования.
Это перевод первых двух глав конспекта курса MIT «Matrix Calculus (for Machine Learning and Beyond)» — матричное дифференциальное исчисление для машинного обучения и не только. Карта всего курса — в путеводителе. Перевод распространяется под лицензией CC BY-NC-SA 4.0 (как материалы курса на MIT OpenCourseWare).
1. Обзор и мотивация
Заголовок раздела «1. Обзор и мотивация»Для начала: где матричный анализ стоит в каталоге курсов MIT? Там есть 18.01 (анализ функций одной переменной) и 18.02 (векторный анализ), которые студенты MIT обязаны пройти. Но кажется, что эта последовательность обрывается произвольно:
Ведь именно так эта последовательность устроена во многих языках программирования, включая Julia! Почему анализ должен останавливаться на векторах?
За последнее десятилетие линейная алгебра стала всё важнее во многих областях: машинном обучении, статистике, инженерии и т. д. Она постепенно заняла гораздо бо́льшую часть современного инструментария — сейчас линейная алгебра нужна всем. Поэтому естественно хотеть заниматься анализом на этих массивах высших порядков, и обобщение будет не простым и не очевидным (например, для нескалярных матриц ).
Шире говоря, дифференцирование и анализ чувствительности (sensitivity analysis) гораздо глубже, чем можно подумать по простым правилам первого-второго семестра. Дифференцирование функций, у которых входы и/или выходы лежат в более сложных векторных пространствах (матрицы, функции и т. д.), — одна часть предмета. Другая — эффективное вычисление производных функций, заданных очень сложными вычислениями, от нейросетей до огромных инженерных симуляций. Это приводит к «сопряжённому» (adjoint) или «обратному» (reverse-mode) дифференцированию, оно же «обратное распространение ошибки» (backpropagation). Автоматическое дифференцирование (AD) программ компиляторами — ещё одна неожиданная тема: компьютер делает нечто совсем иное, чем человек, который сначала выписывает явную символьную формулу, а потом проводит через неё правило цепочки. Это лишь несколько примеров; главное — дифференцирование сложнее, чем вы, возможно, думаете, и эти сложности становятся важны для всё большего числа приложений.
1.1. Приложения (кратко)
Заголовок раздела «1.1. Приложения (кратко)»Машинное обучение. С ним связано много модных слов: оптимизация параметров, стохастический градиентный спуск, автоматическое дифференцирование, обратное распространение. Во всём этом видна лишь часть того, как матричный анализ применяется в машинном обучении.
Физическое моделирование. Большие физические симуляции, например в инженерном проектировании, всё чаще описываются огромным числом параметров, и производные результатов симуляции по этим параметрам нужны, чтобы оценить чувствительность к неопределённостям и применить крупномасштабную оптимизацию. Форму крыла самолёта можно задать тысячами параметров; если вычислить производную силы сопротивления (из большой симуляции потока) по этим параметрам, можно оптимизировать форму крыла. Крайний случай — «топологическая оптимизация», где материал в «каждой точке» пространства — степень свободы.
Анализ данных и многомерная статистика. В многомерной статистике модели часто формулируются через матричные входы и выходы. Например, «простая» линейная многомерная модель , где — неизвестная матрица коэффициентов, а — неизвестная матрица случайного шума. Регрессия сводится к минимизации некоторой функции ошибки , например матричной нормы , определителя или чего-то сложнее. Для этого нужно дифференцировать такие функции по .
Автоматическое дифференцирование. Обычные курсы анализа построены на символьных вычислениях: студенты по сути учатся делать то, что умеют Mathematica или Wolfram Alpha. Сегодняшнее автоматическое дифференцирование — ни то, ни другое (ни символьные формулы, ни конечные разности). Оно ближе к теории компиляторов, чем к математике. Но математика, лежащая в его основе, интересна, и мы её изучим!
Даже приближённое дифференцирование на компьютере сложнее, чем кажется. Для функции одной переменной производная определяется как предел разности при . Грубая аппроксимация «конечной разностью» просто берёт эту формулу при малом , но это поднимает много интересных вопросов: баланс ошибок усечения и округления, аппроксимации высших порядков, численная экстраполяция.
1.2. Первые производные
Заголовок раздела «1.2. Первые производные»Производная функции одной переменной сама является функцией одной переменной — грубо говоря, это линеаризация функции. То есть она имеет вид . В этом смысле со скалярными функциями скаляров (функциями, которые принимают одно число и выдают одно число) «всё просто».
Для этой линеаризации встречаются разные обозначения:
- ,
- ,
- ,
- .
В этом курсе мы предпочитаем последнее. Можно думать о и как о «совсем маленьких числах». В математике их называют бесконечно малыми (infinitesimals) и строго определяют через пределы. Заметьте: здесь мы не хотим делить на . Со скалярами это совершенно нормально, но когда дойдём до векторов и матриц, делить можно будет не всегда!
С числами таких производных легко поиграть. Возьмём и точку . Рядом с получаем такие значения:
Здесь выделенные цифры слева — это , а выделенные цифры справа — . Заметьте, что . Следовательно,
Значит, линеаризация в точке — это функция .
Теперь мы покидаем мир скалярного анализа и входим в мир векторного и матричного! Профессор Эдельман предлагает думать о матрицах целостно — не просто как о таблице чисел.
Понятие линеаризации функции концептуально переносится на производные функций, которые принимают или выдают больше одного числа. Конечно, у производной тогда будет другая «форма», чем у одного числа. Вот таблица формы первой производной. Входы функции — по строкам, выходы — по столбцам.
| вход ↓, выход → | скаляр | вектор | матрица |
|---|---|---|---|
| скаляр | скаляр | вектор (например, скорость) | матрица |
| вектор | градиент = вектор (столбец) | матрица (матрица Якоби) | массив высшего порядка |
| матрица | матрица | массив высшего порядка | массив высшего порядка |
В этом курсе вы научитесь подробно разбираться с каждым случаем! Цель таблицы — посеять мысль, что дифференциал — это линеаризация. Рассмотрим пример.
Пример. Пусть , где — матрица , и выход, значит, — матрица . Убедитесь, что действительно дифференциал в точке .
Сначала вычислим :
Пусть . Тогда
Заметим, что . Следовательно,
Как мы сейчас увидим, взялось не из ниоткуда!
1.3. Введение: правило произведения для матриц и векторов
Заголовок раздела «1.3. Введение: правило произведения для матриц и векторов»Для матриц правило произведения на самом деле тоже есть! Подробно мы обсудим его в следующих главах, а здесь — небольшая проба.
Теорема (правило произведения для дифференциалов). Пусть , — две матрицы. Тогда для выполняется
Под дифференциалом матрицы мы понимаем малое (ничем не ограниченное) изменение матрицы . Позже на допустимые возмущения можно будет наложить ограничения.
Заметьте, однако, что (по нашей таблице) производная матрицы — матрица! Так что в общем случае множители переставлять нельзя.
Если — вектор, то по правилу произведения
Но это скалярное произведение, а скалярные произведения коммутируют (поскольку ), так что
Замечание. Для векторов как матриц правило произведения работает так, что транспонирование «едет вместе» с множителем. См. пример ниже.
Пример. По правилу произведения
- , поскольку скалярные произведения коммутируют;
- .
Как доказывать такие утверждения, показано в главе 2.
2. Производные как линейные операторы
Заголовок раздела «2. Производные как линейные операторы»Вернёмся к понятию производной так, чтобы его можно было обобщить на массивы высших порядков и другие векторные пространства. Мы подробнее разберём дифференцирование как линейный оператор и, в частности, глубже посмотрим на факты, которые до сих пор только формулировали.
2.1. Снова анализ функций одной переменной
Заголовок раздела «2.1. Снова анализ функций одной переменной»Рисунок 1 оригинала: суть производной — линеаризация: предсказать малое изменение выхода по малому изменению входа с точностью до первого порядка по . На рисунке — график кривой , точка и сдвинутая точка ; касательная в точке предсказывает изменение , а настоящее изменение отличается от него на малую величину более высокого порядка.
В первом семестре анализа (вроде 18.01 в MIT) производную вводят как наклон касательной в точке , что можно рассматривать и как линейное приближение около . Как показано на рисунке 1, это равносильно тому, чтобы предсказать изменение «выхода» по малому изменению «входа» с точностью до первого (линейного) порядка по :
Точнее записать члены высших порядков можно асимптотическим обозначением «о-малое» : так обозначают любую функцию, модуль которой убывает намного быстрее, чем , при , так что при достаточно малых она пренебрежимо мала по сравнению с линейным членом . (Варианты этого обозначения часто используются в информатике; формальное определение мы опускаем.1) Примеры таких членов высших порядков: , , и .
1 Коротко: функция есть , если . Мы вернёмся к этому в главе 5.
Замечание. Здесь — не бесконечно малая, а просто маленькое число. Обратите внимание: наш символ «» (греческая строчная «дельта») — не то же самое, что символ «», которым обычно обозначают частные производные.
Это понятие производной может напомнить вам первые два члена ряда Тейлора (хотя на самом деле оно гораздо базовее ряда Тейлора!), и это обозначение хорошо обобщается на высшие размерности и другие векторные пространства. В дифференциальных обозначениях та же идея выражается так:
В этой записи мы неявно отбрасываем член , который исчезает в пределе, когда становится бесконечно малым.
Это и будет нашим обобщённым определением производной. В такой формулировке мы избегаем деления на , потому что скоро позволим (а значит, и ) быть чем-то кроме числа — а если — вектор, разделить на него мы просто не сможем!
2.2. Линейные операторы
Заголовок раздела «2.2. Линейные операторы»С точки зрения линейной алгебры производной функции мы считаем линейный оператор , такой что
Как и выше, дифференциал обозначает произвольное малое изменение , и мы неявно отбрасываем все члены , то есть убывающие быстрее линейных при . Часто мы будем опускать квадратные скобки и писать просто вместо , но понимать это нужно как линейный оператор , действующий на . Не пишите — в общем случае это бессмыслица!
Такое определение позволит распространить дифференцирование на произвольные векторные пространства входов и выходов . (Технически нам понадобятся векторные пространства с нормой — «банаховы пространства», — чтобы точно определить отбрасываемые члены . Мы вернёмся к банаховым пространствам позже.)
Напоминание (векторное пространство). Нестрого: векторное пространство (над ) — это множество элементов, для которых определены сложение и вычитание, а также умножение на вещественные числа. Например, перемножать произвольные векторы из бессмысленно, но складывать их и масштабировать на постоянный множитель — безусловно можно.
Примеры векторных пространств:
- , как описано выше. Шире — , пространство вещественных матриц . Снова заметьте: если , умножение между элементами не определено.
- — множество непрерывных функций на с поточечным сложением.
Напоминание (линейный оператор). Линейный оператор — это отображение вектора из векторного пространства в вектор (иногда пишут просто ) в каком-то другом векторном пространстве. Точнее, линеен, если
для скаляров .
Замечание. В этом курсе — это отображение, которое принимает и выдаёт линейный оператор (производную в точке ). В свою очередь, — линейное отображение, которое принимает направление и выдаёт вектор (позже мы истолкуем его как производную по направлению, см. раздел 2.2.1). Когда направление — бесконечно малое , выход — это дифференциал (соответствующее бесконечно малое изменение ).
Обозначения производных. В ходу несколько обозначений производных и несколько родственных понятий: производная, дифференцирование, дифференциалы. Таблица ниже их сводит; обозначения, принятые в курсе, в оригинале взяты в рамку — здесь они выделены жирным.
| Название | Обозначения | Пояснение |
|---|---|---|
| производная | , а также , , , , … | линейный оператор , который переводит малое изменение входа в малое изменение выхода . В анализе одной переменной этот оператор задаётся одним числом — «наклоном»: если , то — число, на которое умножаем , чтобы получить . В анализе многих переменных оператор задаётся матрицей — якобианом , так что . Но мы увидим, что выражать матрицей не всегда удобно, даже когда это возможно |
| дифференцирование | , , , … | линейный оператор, который переводит функцию в её производную |
| разность | и | малое (но не бесконечно малое) изменение входа и выхода соответственно (зависит от и ): элемент векторного пространства, а не линейный оператор |
| дифференциал | и | сколь угодно малое («бесконечно малое» — члены высших порядков отброшены) изменение входа и выхода : элемент векторного пространства, а не линейный оператор2 |
| градиент | вектор, скалярное произведение которого с малым изменением входа даёт малое изменение выхода . «Транспонированная производная»: (см. раздел 2.3) | |
| частная производная | , , | линейный оператор, который переводит малое изменение одного аргумента функции многих аргументов в соответствующее изменение выхода; например, для имеем |
2 Нестрого можно считать, что бесконечно малые живут в том же пространстве, что и (малое изменение вектора — всё равно вектор). Формально «пространство бесконечно малых» определяют по-разному, например как кокасательное пространство в дифференциальной геометрии, но подробнее мы на этом останавливаться не будем.
Примеры линейных операторов:
- Умножение на скаляр , то есть . Также умножение векторов-столбцов на матрицы , то есть .
- Некоторые функции, вроде , очевидно нелинейны. А как насчёт ? На графике она выглядит линейной, но это не линейная операция, потому что . Такие функции — линейные плюс ненулевая константа — называются аффинными.
- Есть много других линейных операций, которые неудобно или непросто записать как произведение матрицы на вектор. Например, если — матрица , то — линейный оператор при заданных матрицах и . Транспонирование вектора-столбца линейно, но не задаётся никакой матрицей, умноженной на . А если рассматривать векторные пространства функций, то операции анализа — дифференцирование и интегрирование — тоже линейные операторы!
2.2.1. Производные по направлению
Заголовок раздела «2.2.1. Производные по направлению»Есть равносильный способ истолковать производную как линейный оператор, который вы, возможно, видели в анализе многих переменных: как производную по направлению.
Если у нас есть функция от произвольных векторов , то производная в точке по направлению (вектору) определяется так:
где — скаляр. Это возвращает производные из произвольных векторных пространств обратно в анализ одной переменной. Величина измеряет скорость изменения из точки в направлении . Но оказывается, что она очень просто связана с нашим линейным оператором , потому что (отбрасывая члены высших порядков в пределе ):
где на последнем шаге мы вынесли скаляр , потому что — линейный оператор. Сравнивая с формулой выше, сразу получаем, что производная по направлению равна
Это в точности наш прежний ! (Это можно увидеть и как частный случай правила цепочки из раздела 2.5.) Один урок отсюда: на вход вполне можно подавать произвольный не бесконечно малый вектор — результат будет не , а просто производная по направлению.
2.3. Снова анализ многих переменных, часть 1: скалярные функции
Заголовок раздела «2.3. Снова анализ многих переменных, часть 1: скалярные функции»Рисунок 2 оригинала: для вещественной градиент определён так, что указывает направление «в гору» в точке , перпендикулярное линиям уровня . Он не обязательно смотрит прямо на ближайший локальный максимум (если линии уровня не окружности), но «идти в гору» — отправная точка многих алгоритмов численной оптимизации при поиске максимума. На рисунке — линии уровня функции на плоскости и стрелка градиента, перпендикулярная линии уровня.
Пусть — скалярная функция, которая принимает векторы-«столбцы» и выдаёт скаляр (из ). Тогда
Поскольку — вектор-столбец (в произвольном направлении, произвольное малое изменение ), линейный оператор , который выдаёт скаляр , должен быть вектором-строкой («матрицей из одной строки», или, формальнее, тем, что называют ковектором, «двойственным» вектором или линейной формой)! Эту строку мы называем транспонированным градиентом , так что — это скалярное произведение на градиент:
Некоторые авторы считают градиент вектором-строкой (отождествляя его с или якобианом), но считать его «вектором-столбцом» (транспонированной ), как в этом курсе, — распространённый и полезный выбор. Как вектор-столбец градиент можно рассматривать как направление «в гору» (наискорейшего подъёма) в пространстве , как на рисунке 2. Кроме того, такой градиент проще обобщить на скалярные функции в других векторных пространствах. Как бы то ни было, в этом курсе мы всегда определяем так, чтобы он имел ту же «форму», что и , — тогда есть скалярное произведение на градиент.
Это полностью согласуется с тем, что вы, возможно, помните из анализа многих переменных, где градиент — вектор из компонент
или, равносильно,
Покомпонентный взгляд иногда удобен, но мы хотим приучить вас видеть вектор целиком, а не просто как набор компонент, и понять, что дифференцировать выражения без покомпонентного взятия производных часто удобнее и изящнее. Этот новый подход лучше обобщается на более сложные пространства входов и выходов.
Посмотрим на примере, как вычислять такой дифференциал.
Пример. Пусть , где , а — квадратная матрица , так что . Найдите , и .
Сделаем это прямо по определению:
Здесь мы отбросили члены с более чем одним множителем , поскольку они асимптотически пренебрежимы. Ещё один приём — объединить и , заметив, что это скаляры, а значит, равны своему транспонированию: . Итак, мы нашли , или, равносильно, .
Разумеется, тот же градиент можно найти и покомпонентно, как вас, вероятно, учили в анализе многих переменных. Сначала пришлось бы явно записать через компоненты : . Затем — найти для каждого , не забыв, что входит в сумму дважды. Но такой подход неуклюж, подвержен ошибкам, трудоёмок и быстро становится ещё хуже, когда мы переходим к более сложным функциям. Мы считаем, что гораздо лучше привыкнуть обращаться с векторами и матрицами целиком, а не как с простыми наборами чисел.
2.4. Снова анализ многих переменных, часть 2: векторные функции
Заголовок раздела «2.4. Снова анализ многих переменных, часть 2: векторные функции»Теперь пусть — векторная функция: принимает векторы и выдаёт векторы . Тогда — вектор-столбец из компонент, — вектор-столбец из компонент, и мы должны получить линейный оператор , для которого
так что должна быть матрицей — она называется матрицей Якоби (якобианом) !
Матрица Якоби представляет линейный оператор, который переводит в :
Элементы матрицы — это (-я строка, -й столбец ).
Пусть, например, . Разберёмся, как вычислить дифференциал :
Пример. Рассмотрим функцию , где — постоянная матрица . Применяя дистрибутивность умножения матрицы на вектор, получаем
Следовательно, .
Заметьте: линейный оператор — сам себе матрица Якоби!
Рассмотрим теперь некоторые правила дифференцирования.
-
Правило суммы. Для получаем
Значит, , как и следовало ожидать. Это линейный оператор ; заметьте, что линейные операторы (вроде и ) можно складывать так же, как матрицы! В этом смысле линейные операторы сами образуют векторное пространство.
-
Правило произведения. Пусть . Тогда
где член — высшего порядка и потому отброшен в записи через бесконечно малые. Заметьте, как обычно, что и могут не коммутировать, поскольку они больше не обязательно скаляры!
Несколько коротких примеров того, как удобно применять правило произведения.
Пример. Пусть (отображает ), где — постоянная матрица . Тогда
Здесь , потому что не меняется, когда мы меняем .
Пример. Пусть (отображает ). Тогда
и, значит, . (В частом случае симметричной это упрощается до .) Заметьте, что здесь мы применили предыдущий пример, вычисляя . Кроме того, — скалярная функция, так что можно получить и градиент , как раньше (для симметричной это упрощается до ).
Пример (поэлементные произведения). Для определим
— поэлементное произведение векторов (его также называют произведением Адамара); для удобства мы определили как диагональную матрицу с на диагонали. Далее для определим как
В качестве упражнения проверьте:
- (a) ;
- (b) ;
- (c) . Так что если взять постоянным и определить , её матрица Якоби — ;
- (d) , так что матрица Якоби — ;
- (e) производная в точке по направлению (раздел 2.2.1) равна просто . Можно численно проверить для произвольных , , , что .
Примечание переводчика: .* — это поэлементное умножение в Julia и MATLAB; в NumPy и PyTorch это
просто x * y.
2.5. Правило цепочки
Заголовок раздела «2.5. Правило цепочки»Одно из важнейших правил дифференциального исчисления — правило цепочки (chain rule), потому что оно позволяет дифференцировать сложные функции, собранные как композиции более простых. Его тоже можно обобщить на нашу дифференциальную запись, чтобы оно работало для функций на произвольных векторных пространствах:
-
Правило цепочки. Пусть . Тогда
где — композиция и как матриц.
Иными словами, : якобиан (линейный оператор) — это просто произведение (композиция) якобианов . Порядок важен, потому что линейные операторы в общем случае не коммутируют: слева направо = от выходов к входам.
Посмотрим внимательнее на формы этих матриц Якоби в примере, где каждая функция переводит вектор-столбец в вектор-столбец.
Пример. Пусть , и . Пусть отображает в . Тогда правило цепочки утверждает, что
и это осмысленно: — матрица , — матрица , так что произведение — матрица , как и ! Но заметьте, что это не то же самое, что : матрицы и (при ) перемножить нельзя, а даже если , ответ будет неверным, потому что они, скорее всего, не коммутируют.
Важен не только порядок умножения — практически важна и ассоциативность умножения матриц. Рассмотрим функцию
где , и . По правилу цепочки
По ассоциативности это то же самое, что
(аргументы функций опущены для краткости). Слева — умножение слева направо, справа — умножение справа налево.
Ну и что? Оказывается, ассоциативность глубоко важна. Настолько, что у двух порядков есть названия: умножение слева направо в области автоматического дифференцирования (AD) называют «обратным режимом» (reverse mode), а умножение справа налево — «прямым режимом» (forward mode). Обратный режим дифференцирования в некоторых контекстах известен также как «метод сопряжённых уравнений» (adjoint method) или «обратное распространение ошибки» (backpropagation); подробнее мы разберём его позже. Почему это важно? Подумаем о вычислительной стоимости умножения матриц.
2.5.1. Стоимость умножения матриц
Заголовок раздела «2.5.1. Стоимость умножения матриц»Рисунок 3 оригинала: умножение матриц ассоциативно — для любых , , , — но умножать слева направо может быть гораздо выгоднее, чем справа налево, если в самой левой матрице всего одна (или несколько) строк. Соответственно, порядок применения правила цепочки резко меняет объём вычислений. Порядок «слева направо» называют «обратным режимом» или «обратным распространением»; он лучше всего подходит, когда выходов намного меньше, чем входов. На рисунке — строка, умноженная на две большие квадратные матрицы: если сначала умножить строку на первую матрицу, всё время получаются строки; если сначала перемножить квадратные матрицы, получается дорогая большая матрица.
Умножая матрицу на матрицу , обычно вычисляют скалярных произведений длины (или делают какую-то равносильную перестановку этих операций). Скалярное произведение длины требует умножений и сложений чисел. Всего это примерно скалярных операций. В информатике записали бы, что это «»: объём вычислений асимптотически пропорционален при больших .
Так почему порядок в правиле цепочки важен? Рассмотрим два примера.
Пример. Пусть у вас много входов и только один выход , а промежуточных значений тоже много, то есть . Тогда обратный режим (слева направо) обойдётся в скалярных операций, а прямой (справа налево) — в ! Это огромная разница в стоимости, схематично показанная на рисунке 3.
Наоборот, пусть у вас много выходов и только один вход , а промежуточных значений . Тогда обратный режим будет стоить операций, а прямой — всего !
Мораль. Если входов много, а выходов мало (обычный случай в машинном обучении и оптимизации), вычисляйте правило цепочки слева направо (обратный режим). Если выходов много, а входов мало, — справа налево (прямой режим). Мы вернёмся к этому в главе 8.
Числовой пример переводчика: пусть . Слева направо: строка на матрицу — около операций, и ещё раз столько же: всего . Справа налево: сначала две матрицы — около операций, то есть в 500 раз больше. У нейросети с миллиардами параметров и одной функцией потерь разница ещё драматичнее — поэтому градиент считают обратным проходом.
flowchart LR X["x: n входов"] -->|"c′: p×n"| H1["c(x)"] -->|"b′: q×p"| H2["b(c(x))"] -->|"a′: 1×q"| Y["f(x): 1 выход"]
2.6. За пределами анализа многих переменных
Заголовок раздела «2.6. За пределами анализа многих переменных»Теперь вычислим производные, которые выходят за рамки первого курса анализа: входы и выходы лежат в более общих векторных пространствах. Например:
Пример. Пусть — матрица . Возможны такие матричнозначные функции:
- ;
- , если обратима;
- или — матрица, которая получается после применения метода Гаусса к !
Возможны и скалярные выходы, например:
- ;
- (след);
- или — наибольшее сингулярное число .
Сосредоточимся в этой лекции на двух более простых примерах.
Пример. Пусть , где — квадратная матрица. Найдите .
Применяем правило произведения шаг за шагом:
Заметьте: это не равно (если только и не коммутируют, а в общем случае это не так, ведь — произвольное малое изменение ). Правая часть — линейный оператор , действующий на , но её не так просто истолковать как одну «матрицу Якоби», умноженную на !
Пример. Пусть , где — квадратная обратимая матрица. Найдите .
Здесь мы применим небольшую хитрость. Заметим, что — единичная матрица. Значит, дифференциал можно найти по правилу произведения (учитывая, что : изменение не меняет ):
Как это читать: для числа это знакомое . Для матриц « в знаменателе» расщепляется на слева и справа, и переставить их нельзя.
Словарик
Заголовок раздела «Словарик»| EN | RU |
|---|---|
| linearization | линеаризация |
| linear operator, linear map | линейный оператор, линейное отображение |
| affine function | аффинная функция |
| differential, infinitesimal | дифференциал, бесконечно малая |
| little-o notation | «о-малое» |
| directional derivative | производная по направлению |
| gradient, steepest ascent | градиент, наискорейший подъём |
| covector, dual vector, linear form | ковектор, двойственный вектор, линейная форма |
| Jacobian matrix | матрица Якоби, якобиан |
| chain rule | правило цепочки (дифференцирование сложной функции) |
| forward mode / reverse mode | прямой режим / обратный режим |
| backpropagation, adjoint method | обратное распространение ошибки, метод сопряжённых уравнений |
| elementwise (Hadamard) product | поэлементное произведение (произведение Адамара) |
| sensitivity analysis | анализ чувствительности |
| Banach space | банахово пространство |