Любая задача машинного обучения — это задача оптимизации, а задачи оптимизации удобнее всего решать градиентными методами (если это возможно, конечно). Поэтому важно уметь находить производные всего, что попадается под руку. Казалось бы, в чём проблема: ведь дифференцирование — простая и понятная штука (чего не скажешь, например, об интегрировании). Зачем же как-то специально учиться дифференцировать матрицы?
Да в принципе-то никаких проблем: в этом параграфе вы не узнаете никаких секретных приёмов или впечатляющих теорем. Но, согласитесь, если исходная функция от вектора имела вид (где — константная матрица, а — постоянный вектор), то хотелось бы уметь и производную выражать красиво и цельно через буквы , и , не привлекая отдельные координаты , и . Это не только эстетически приятно, но и благотворно сказывается на производительности наших вычислений: ведь матричные операции обычно очень эффективно оптимизированы в библиотеках, чего не скажешь о самописных циклах по . И всё, что будет происходить дальше, преследует очень простую цель: научиться вычислять производные в удобном, векторно-матричном виде. А чтобы сделать это и не сойти с ума, мы должны ввести ясную систему обозначений, составляющую ядро техники матричного дифференцирования.
Основные обозначения
Вспомним определение производной для функции . Функция дифференцируема в точке , если
где — дифференциал функции : линейное отображение из мира -ов в мир значений . Грубо говоря, он превращает «малое приращение » в «малое приращение » («малые» в том смысле, что на о-малое можно плюнуть):
Отметим, что дифференциал зависит от точки , в которой он берётся: . Под подразумевается норма вектора , например корень из суммы квадратов координат (обычная евклидова длина).
Давайте рассмотрим несколько примеров и заодно разберёмся, какой вид может принимать выражение в зависимости от формы . Начнём со случаев, когда — скалярная функция.
Примеры конкретных форм , когда — скалярная функция
- — скалярная функция, — скаляр. Тогда
Здесь и — просто числа. В данном случае — это обычная линейная функция.
- — скалярная функция, — вектор. Тогда
то есть
где — операция скалярного произведения, а — градиент функции .
- — скалярная функция, — матрица. Дифференциал скалярной функции по матричному аргументу определяется следующим образом:
Можно заметить, что это стандартное определение дифференциала функции многих переменных для случая, когда переменные — элементы матрицы . Заметим также один интересный факт:
где и — произвольные матрицы одинакового размера. Объединяя оба приведённых выше факта, получаем:
Можно заметить, что здесь, по аналогии с примерами, где — скаляр и где — вектор (и — скалярная функция), получилось на самом деле скалярное произведение градиента функции по переменным и приращения. Этот градиент мы записали для удобства в виде матрицы с теми же размерами, что матрица .
В примерах выше нам дважды пришлось столкнуться с давним знакомцем из матанализа: градиентом скалярной функции (у нескалярных функций градиента не бывает). Напомним, что градиент функции в точке состоит из частных производных этой функции по всем координатам аргумента. При этом его обычно упаковывают в ту же форму, что и сам аргумент: если — вектор-строка, то и градиент записывается вектор-строкой, а если — матрица, то и градиент тоже будет матрицей того же размера. Это важно, потому что для осуществления градиентного спуска мы должны уметь прибавлять градиент к точке, в которой он посчитан.
Как мы уже имели возможность убедиться, для градиента скалярной функции выполнено равенство
где скалярное произведение — это сумма попарных произведений соответствующих координат (да-да, самое обыкновенное).
Посмотрим теперь, как выглядит дифференцирование для функций, которые на выходе выдают не скаляр, а что-то более сложное.
Примеры , где — это вектор или матрица
— вектор. Тогда
В последнем выражении происходит покомпонентное умножение:
- , где и — матрицы. Тогда
то есть
- , где и — матрицы. Тогда
то есть
- — вектор-строка, — вектор-строка. Тогда
Матрица, выписанная в предпоследней выкладке, — это знакомая вам из курса матанализа матрица Якоби.
Простые примеры и свойства матричного дифференцирования
-
Производная константы. Пусть . Тогда
то есть — это нулевое отображение. А если — скалярная функция, то и
-
Производная линейного отображения. Пусть — линейное отображение. Тогда
Поскольку справа линейное отображение, то по определению оно и является дифференциалом . Мы уже видели примеры таких ситуаций выше, когда рассматривали отображения умножения на матрицу слева или справа. Если — (скалярная) линейная функция, то она представляется в виде для некоторого вектора — он и будет градиентом .
-
Линейность производной. Пусть , где — скаляры, а — некоторые отображения, тогда
Попробуйте доказать сами, прежде чем смотреть доказательство.
-
Производная произведения. Пусть , где — некоторые отображения, тогда
Попробуйте доказать сами, прежде чем смотреть доказательство.
Обозначим для краткости . Тогда
И всё бы хорошо, да в первом слагаемом вместо . Придётся разложить ещё разок:
Это же правило сработает и для скалярного произведения:
В этом нетрудно убедиться, повторив доказательство или заметив, что в доказательстве мы пользовались лишь дистрибутивностью (= билинейностью) умножения.
-
Производная сложной функции. Пусть . Тогда
Здесь — дифференциал в точке , а — это применение отображения к тому, что в скобках. Итого получаем:
-
Важный частный случай: дифференцирование перестановочно с линейным отображением. Пусть , где — линейное отображение. Тогда совпадает с самим и формула упрощается:
Простые примеры вычисления производной
- Вычислим дифференциал и градиент функции , где — вектор-столбец, — постоянный вектор.
Попробуйте вычислить сами, прежде чем смотреть решение.
Вычислить производную можно непосредственно:
Но можно и воспользоваться формулой дифференциала произведения:
Сразу видно, что градиент функции равен .
- Вычислим производную и градиент , где — вектор-столбец, — постоянная матрица.
Попробуйте вычислить сами, прежде чем смотреть решение.
Снова воспользуемся формулой дифференциала произведения:
Чтобы найти градиент, нам надо это выражение представить в виде . Для этого поменяем местами множители первого произведения и перенесём в другую сторону ( перенесётся с транспонированием):
Получается, что градиент в точке равен .
- Вычислим производную обратной матрицы: , где — квадратная матрица.
Попробуйте вычислить сами, прежде чем смотреть решение.
Рассмотрим равенство и продифференцируем его:
Отсюда уже легко выражается
Осталось подставить , но запомните и предыдущую формулу, она нам пригодится.
- Вычислим градиент определителя: , где — квадратная матрица.
Попробуйте вычислить сами, прежде чем смотреть решение.
В предыдущих примерах мы изо всех сил старались не писать матричных элементов, но сейчас, увы, придётся. Градиент функции состоит из её частных производных: . Попробуем вычислить . Для этого разложим определитель по -й строке:
где — это определитель подматрицы, полученной из исходной выбрасыванием -й строки и -го столбца. Теперь мы видим, что определитель линеен по переменной , причём коэффициент при ней равен . Таким образом,
Чтобы записать матрицу, составленную из таких определителей, покороче, вспомним, что
Обратите внимание на переставленные индексы и (отмечены красным). Но всё равно похоже! Получается, что
где — это более короткая запись для .
- Вычислим градиент функции . С этой функцией мы ещё встретимся, когда будем обсуждать задачу линейной регрессии.
Попробуйте вычислить сами, прежде чем смотреть решение.
Распишем квадрат модуля в виде скалярного произведения:
Применим формулу дифференциала произведения и воспользуемся симметричностью скалярного произведения:
Получаем, что
Примеры вычисления производных сложных функций
- Вычислим градиент функции .
Попробуйте вычислить сами, прежде чем смотреть решение.
Вспомним формулу производной сложной функции:
и посмотрим, как её тут можно применить. В роли функции у нас логарифм:
а в роли — определитель:
где под скалярным произведением двух матриц понимается, как обычно,
Подставим это всё в формулу произведения сложной функции:
Отсюда сразу видим, что
- Вычислим градиент функции .
Попробуйте вычислить сами, прежде чем смотреть решение.
Воспользуемся тем, что след — это линейное отображение (и значит, перестановочно с дифференцированием), а также правилом дифференцирования сложной функции:
Чтобы найти градиент, мы должны представить это выражение в виде , что в случае матриц переписывается, как мы уже хорошо знаем, в виде . Воспользуемся тем, что под знаком следа можно транспонировать и переставлять множители по циклу:
Стало быть,
- Вычислим градиент функции .
Подумайте, почему мы не можем расписать определитель в виде произведения определителей
Расписать у нас может не получиться из-за того, что и могут быть не квадратными, и тогда у них нет определителей и представить исходный определитель в виде произведения невозможно.
Воспользуемся правилом дифференцирования сложной функции для , . А для этого сначала вспомним, какие дифференциалы у них самих. С функцией всё просто:
Функция сама является сложной, но, к счастью, множители и выносятся из-под знака дифференциала, а дифференцировать обратную матрицу мы уже умеем:
С учётом этого получаем:
Чтобы найти градиент, мы должны, как обычно, представить это выражение в виде .
Стало быть,
Вторая производная
Рассмотрим теперь не первые два, а первые три члена ряда Тейлора:
где — второй дифференциал, квадратичная форма, в которую мы объединили все члены второй степени.
Вопрос на подумать. Докажите, что второй дифференциал является дифференциалом первого, то есть
Зависит ли выражение справа от порядка и ?
Этот факт позволяет вычислять второй дифференциал не с помощью приращений, а повторным дифференцированием производной.
Вторая производная может оказаться полезной при реализации методов второго порядка или же для проверки того, является ли критическая точка (то есть точка, в которой градиент обращается в ноль) точкой минимума или точкой максимума. Напомним, что квадратичная форма называется положительно определённой (соответственно, отрицательно определённой), если (соответственно, ) для всех , причём только при .
Теорема. Пусть функция имеет непрерывные частные производные второго порядка в окрестности точки , причём . Тогда точка является точкой минимума функции, если квадратичная форма положительно определена, и точкой максимума, если она отрицательно определена.
Если мы смогли записать матрицу квадратичной формы второго дифференциала, то мы можем проверить её на положительную или отрицательную определённость с помощью критерия Сильвестра.
Примеры вычисления и использования второй производной
- Рассмотрим задачу минимизации по переменной , где — матрица с линейно независимыми столбцами. Выше мы уже нашли градиент этой функции; он был равен . Мы можем заподозрить, что минимум достигается в точке, где градиент обращается в ноль: . Отметим, что обратная матрица существует, так как , а столбцы по условию линейно независимы и, следовательно, равен размеру этой матрицы. Но действительно ли эта точка является точкой минимума? Давайте оставим в стороне другие соображения (например, геометрические, о которых мы упомянем в параграфе про линейные модели) и проверим аналитически. Для этого мы должны вычислить второй дифференциал функции .
Попробуйте вычислить сами, прежде чем смотреть решение.
Вспомним, что
Продифференцируем снова. Скалярное произведение — это линейная функция, поэтому можно занести дифференцирование внутрь:
Мы нашли квадратичную форму второго дифференциала; она, оказывается, не зависит от точки (впрочем, логично: исходная функция была второй степени по , так что вторая производная должна быть константой). Чтобы показать, что действительно является точкой минимума, достаточно проверить, что эта квадратичная форма положительно определена.
Попробуйте сделать это сами, прежде чем смотреть решение.
Хорошо знакомый с линейной алгеброй читатель сразу скажет, что матрица положительно определена для матрицы с линейно независимыми столбцами. Но всё же давайте докажем это явно. Имеем . Это выражение равно нулю тогда и только тогда, когда . Последнее является однородной системой уравнений на , ранг которой равен числу переменных, так что она имеет лишь нулевое решение .
- Докажем, что функция является выпуклой вверх на множестве симметричных, положительно определённых матриц. Для этого мы должны проверить, что в любой точке квадратичная форма её дифференциала отрицательно определена. Для начала вычислим эту квадратичную форму.
Попробуйте сделать это сами, прежде чем смотреть решение.
Выше мы уже нашли дифференциал этой функции:
Продифференцируем снова:
Чтобы доказать требуемое в условии, мы должны проверить следующее: что для любой симметричной матрицы и для любого симметричного (чтобы не выйти из пространства симметричных матриц) приращения имеем
Покажем это явно.
Так как — симметричная, положительно определённая матрица, у неё есть симметричный и положительно определённый квадратный корень: Тогда
что, конечно, меньше нуля для любой ненулевой .