Требуется обновление браузера.

Дифференцирование матрицы


Просмотров: 19792
04 июня 2016 года
Обновление: 1 января 2017
Обновление: 14 июля 2019

Просматривая форум, я наткнулся на своё сообщение более чем 8-летней давности. В сообщении я задавал общественности вопрос, который, в общем-то, сводился к проблеме дифференцирования матрицы по вектору. На момент написания данной заметки, ответ я так и не получил. В то же время, сейчас я не вижу принципиальных трудностей в этой задаче.

Проблема в частой для технических ВУЗ-ов ситуации: на первом курсе тебе рассказывают о физических явлениях, для описания которых необходимо понимание ротора, градиента, дивергенции, а что это за операторы и как ими пользоваться - расскажут на втором курсе.

На первый взгляд ничего непонятно: оператор дифференцирования применяется к матрицам, некоторые из которых ещё и транспонированы, дифференцирование происходит по вектору и т.п. Но не стоит паниковать: есть правила для вычисления производной и от следа матрицы, и от детерминанта произведения матриц или логарифма детерминанта матрицы - в нашем (форумном) случае всё довольно просто.

Сперва опишем общие правила дифференцирования при работе с подобными объектами.
Производная вектора по скаляру - вектор той же размерности, состоящий из производных соответствующих элементов

Производная скалярной функции f от векторного аргумента x – вектор той же размерности, что и x, равный


(То есть вектор, составленный из частных производных f по элементам вектора x.)
Производная векторной функции g размерности m по векторному аргументу x размерности n – матрица размером m×n, в которой первая строка состоит из частных производных элемента g1 по элементам вектора x и т.д.:

Следующие два результата из линейной алгебры можно получить, аккуратно проделав дифференцирование по правилам, рассмотренным ранее (тем не менее, для любопытствующих я их вывел). Эти формулы часто используются, поэтому выпишем и их:


Уточню, что первая формула (как справедливо отмечено в комментариях) справедлива только для симметричной матрицы A. В общем же случае, справа будет получено выражение (A+AT)*x. Для симметричной матрицы A, оператор транспонирования даёт саму матрицу A, что позволяет упростить выражение до указанного выше вида 2*A*x.

Пример


Собственно, возвращаясь к изначальной проблеме (вопрос на форуме):


Как продифференцировать (2.38) и получить (2.39) ?

Рассмотрим производные слагаемых из (2.38).

Для первого - всё очевидно из самого смысла производной:


Второе слагаемое (здесь воспользуемся одной из готовых формул, описанных ранее):


Третье слагаемое (воспользуемся той же готовой формулой, но предварительно немного "доработаем" выражение):


Если Вы не поняли "превращения" выше - ещё раз детальнее:


Здесь мы воспользовались свойствами транспонирования матриц:

Цитата

Транспонированное произведение матриц равно произведению транспонированных матриц, взятых в обратном порядке.
[...]
Дважды транспонированная матрица А равна исходной матрице А.

При помощи этих свойств мы осуществили преобразования, сводящие выражение к виду, удобному для применения готовой формулы.

Четвёртое слагаемое (воспользуемся другой готовой формулой):


Соберём всё воедино и сгруппируем слагаемые:


Именно такой результат мы получили в (2.39).

Запись опубликована в категориях:

Алгоритмы и аспекты  
 

Внешние источники:

  1. Вывод вспомогательных формул

Комментарии

Инкогнито
  Загружаем captcha
Александр
24 Александр  01 июля 2019 01:05
>> 22
Rustam, в ближайшее время я выложу детальный вывод формул. Ваш комментарий окончательно убедил меня в необходимости данной заметки (у читателей возникает много вопросов по данной теме). Отвечаю на Ваш вопрос: это нормально, что оператор (в данном случае, дифференцирования) может возвращать одно и то же значение (функцию) для разных аргументов. Например, если рассмотреть функции f1(x) = (10x) и f2(x) = (10x - 8) - производные по x совпадают (10), хоть сами функции не эквивалентны. Подобным свойством могут обладать и функции: например, в квадратичной зависимости двум разным аргументам может соответствовать одно и то же значение функции.
Rustam Sadykov
22 Rustam Sadykov  Мейлру 18 июня 2019 18:41
как возможно равенство d(x.T b)/dx = d(b.T * x)/dx, если x.T * b != b.T x?
Александр
14 Александр  28 декабря 2016 18:54
>> 13
Верно ! В общем случае там справа получим: (A+Aтранспонированное)*x.
Инкогнито
13 Инкогнито  27 декабря 2016 17:14
Я правильно понял, что первая формула из двух, которые "часто используются", верна только для симметричной матрицы A?
Инкогнито
12 Инкогнито  27 декабря 2016 14:41
Спасибо! Возник ровно ваш вопрос в связи с этой https://habrahabr.ru/post/307004/ статьей на хабре (Вы ведь тоже линейную регрессию разбирали?), а поскольку в математике я полный нуб, самостоятельно решить вряд ли получилось бы.