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