В этой статье я поясню, как все эти принципы увязываются друг с другом, и покажу, для чего они могут применяться.

Производные

Производные — это фундаментальный компонент математического анализа. Если у вас есть функция, то её производная показывает, насколько эта функция меняется в каждой точке.

Если мы возьмём функцию y=x^2-6x+13, то сможем вычислить её производную как y'=2x-6.

Вот графики этих двух функций:

y'=2x-6

Одним из применений производных является оптимизация, или поиск нижней точки графа.

Если мы находимся в точке x = 1 и хотим узнать, в каком направлении нужно двигаться, чтобы опуститься ниже — вправо или влево — то нам поможет производная. Подставив 1 в 2x-6, мы получаем -4. Отрицательная производная означает, что шаг вправо приведёт к уменьшению y, значит, это путь вниз. Тогда можно сместиться в этом направлении и снова проверить производную, чтобы понять, достаточно ли далеко мы ушли. В ходе такого пошагового перемещения можно следить за производной, и если она станет положительной, это будет говорить о том, что мы зашли слишком далеко, и нужно шагать в обратную сторону. Если мы будем уменьшать размер шага в каждом случае чрезмерного смещения в том или ином направлении, то сможем приблизиться к фактической минимальной точке графа.

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

Но здесь можно подметить один нюанс: в точке минимума функция имеет горизонтальный участок, и его производная равна 0. Если это не так, значит, точка находится на возвышенности, и шаг влево или вправо приведёт к дальнейшему снижению. То есть такая точка минимумом не является.

Если оттолкнуться от этого понимания, то можно использовать ещё один способ для поиска минимума — а именно искать место, где производная будет равна 0. Сделать это можно через решение уравнения 2x-6 = 0, которое даст нам x=3. В этом случае без совершения каких-либо шагов мы выяснили, где находится минимум функции, и теперь можем подставить 3 в исходное уравнение y=x^2-6x+13, чтобы получить минимальное значение y, а именно 4.

Но всё усложняется, когда степень функции выше второй. Полиномиальные функции имеют и минимумы, и максимумы, производные для которых в обоих случаях будут равны 0. Кроме того, если член x^2 квадратичной функции отрицателен, то она имеет только максимум.

Полиномиальные функции также усложняются, когда, например, в двухмерной функции z=f(x,y) присутствует точка, которая для x является локальным минимумом, а для y — локальным максимумом. В этом случае градиент в обоих направлениях будет нулевым, и несмотря на то, что истинный минимум не достигнут, симулированный шар застрянет.  

Градиенты

Градиенты становятся актуальны как раз в отношении полиномиальных функций.

Если у вас есть функция w=f(x,y,z), то градиентом будет вектор производных, в которых рассматривается изменение только одного значения за раз с сохранением других переменных неизменными. Определяется градиент так:

Если взять отдельную запись в векторе — \frac{\partial w}{\partial x} — то она означает «производная w относительно x». Иначе это можно описать как «Если прибавить 1 к x до его подстановки в функцию, то мы узнаем, насколько изменится w, если функция является прямой линией». Такие элементы называются частными производными, так как относятся к одной переменной в функции, где переменных несколько.

Теперь разберём вычисление градиента функции w=3x^2+6yz^3+4.

Чтобы получить производную w относительно x(\frac{\partial w}{\partial x}), мы как обычно вычисляем производную функции, но как переменную рассматриваем только x, оставляя все остальные значения неизменными. В результате получаем 6x.

Для вычисления производной w относительно y мы действуем по тому же принципу, рассматривая y как переменную и все остальные значения как константы. Результатом будет 6z^3.

Наконец, в точности по тому же принципу мы вычисляем производную w относительно z, получая 18yz^2.

Вот весь итоговый градиент нашей функции: \begin{bmatrix} 6x & 6z^3 & 18yz^2 \end{bmatrix}.

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

Помимо оптимизации, градиенты также применяются в рендеринге. К примеру, в этой работе его используют для отрисовки сглаженных карт расстояний (Signed Distance Fields).

Матрица Якоби

Предположим, у вас есть функция, получающая несколько значений и выдающая несколько значений: v,w =f(x,y,z).

Можно вычислить градиент этой функции для v, а также для w. Если совместить эти два вектора градиентов для создания матрицы, то у нас получится матрица Якоби. Вектор градиента также можно рассматривать как матрицу Якоби для функции, выводящей одно скалярное значение, а не вектор.

Вот эта матрица для v,w =f(x,y,z):

Поясню: верхняя строка — это градиент для v, а нижняя — для w.

Когда вы вычисляете матрицу Якоби в конкретной точке пространства (в каком бы пространстве ни находились вводные параметры), она показывает, как это пространство искривлено в данной области — то есть, насколько развёрнуто и сжато. Вы также можете получить определитель матрицы, чтобы понять, происходит ли в этой области увеличение (то есть определитель больше 1), уменьшение (определитель меньше 1, но больше 0) или же развёртывание в обратную сторону (определитель меньше 0). Если определитель равен 0, значит, всё сжимается в одну точку (линию или некую другую размерность, поскольку как минимум одно измерение масштабируется до 0), и такую операцию отменить нельзя (то есть матрица не инвертируется).

Вот прекрасное 10-минутное видео, автор которого более подробно рассказывает о матрицах Якоби и демонстрирует варианты их применения в машинном обучении:

Поскольку якобианы (определители матрицы Якоби) описывают искривление пространства, они также используются в компьютерной графике. Представьте, что хотите использовать альфа-канал для затенения определённого количества пикселей объекта при реализации сглаживания, но сталкиваетесь со сложностью. Например, этот объект может быть описан в полярной системе координат или искривлён таким образом, что становится трудно понять, сколько пикселей нужно затенить. Я сталкивался с подобной ситуацией, когда занимался рендерингом 2-х мерной карты расстояний в shadertoy.

Матрица Гессе

Если вы вычислите частичные производные (построите градиент) функции w=f(x,y,z), то получите вектор с тремя частными производными — одной для x, второй для y и третьей для z.

А что, если мы захотим получить вторые производные? То есть производные от производных.

Можно просто ещё раз получить производную относительно тех же переменных. Но для того, чтобы реально выяснить вторые производные функции, нужно получить все три частные производные (одну для x, вторую для y и третью для z) для каждой из трёх производных в градиенте.

В общей сложности у нас получится 9 производных, и именно это называется матрицей Гессе.

Поясню, что здесь к чему. Каждая строка — это градиент, но верхняя строка дифференцируется относительно x, средняя относительно y, а нижняя относительно z.

Иначе матрицу Гессе можно представить как транспонированную матрицу Якоби для градиента. Звучит сложно, зато демонстрирует взаимосвязь этих концепций.

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

Вот 11-минутное видео, где автор рассказывает об использовании матрицы Гессе в оптимизации для ускорения вычисления минимума за счёт знания кривизны функции:

Если производная аппроксимирует функцию локально с помощью линии, то вторая производная делает это с помощью квадратичной функции. Так что матрице Гессе позволяет смоделировать в точке функцию как квадратичную, после чего использовать ловкий приём из раздела о производных, чтобы сразу перейти к минимуму без лишних итераций.

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

В случае задач машинного обучения, связанных с обработкой миллионов параметров, построение этой матрицы может оказаться весьма затратным как в плане вычислений, так и в плане объёма необходимой памяти. Для таких ситуаций существуют квазиньютоновские методы, которые описываются в этом 16-минутном ролике:

Спасибо за чтение! Надеюсь, что помог вам развеять ореол таинственности вокруг некоторых пугающих терминов. 

Комментарии (10)


  1. abcdsash
    24.08.2025 09:12

    а про арифметику младших классов статью готовите уже?


  1. Daddy_Cool
    24.08.2025 09:12

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

    "Если производная аппроксимирует функцию локально с помощью линии, то вторая производная делает это с помощью квадратичной функции". Что???

    "Получение второй производной функции показывает, как функция изгибается, что, опять же, может быть полезно для оптимизации". А может и не быть. Или еще для чего полезно. А вообще - как функции изгибаются?

    "для функций определённого типа это обеспечит значительное ускорение". это какого?

    В общем вот, написать толковую популярную статью весьма непросто.


    1. v0br23
      24.08.2025 09:12

      Посоветуйте "толковую популярную статью"


      1. Daddy_Cool
        24.08.2025 09:12

        Пожалуйста! Не статьи правда, а книжки.
        https://www.labirint.ru/books/780283/
        и/или вот https://ikfia.ysn.ru/wp-content/uploads/2018/01/Ponomarev1973ru.pdf - прям сразу вам pdfка.
        Справочник Бронштейна и Семендяева тоже очень хорош.


    1. loxloxlox666
      24.08.2025 09:12

      f(x0+a)~f(x0)+grad f(x0)*a+1/2*a*H f(x0)*a+r(a) - разложение тейлора. jacobian же вводится как линейный оператор, рещающий задачу линеаризации. мне кажется имелось в виду это


  1. D_Dementy
    24.08.2025 09:12

    В каждой точке функция не изменяется. Иначе это не функция. Если параболу y=x^2 "положить" набок, то это уже не график функции. Физическая суть производной - это ускорение. У функции y=x производная равна нулю, а у x^2 равна 2x


    1. Daddy_Cool
      24.08.2025 09:12

      ОМГ.
      "В каждой точке функция не изменяется. Иначе это не функция". 
      Может меняться, может не меняться.
      "Если параболу y=x^2 "положить" набок, то это уже не график функции."
      Это два графика.  Вы имеете ввиду, что нет взаимно однозначного соответствия, но есть многозначные функции - арксинус какй-нибудь. В общем всё строго в математике.
      "Физическая суть производной - это ускорение"
      Нет. Физическая "суть" производной - скорость. Ускорение - это "суть" второй производной.
      " У функции y=x производная равна нулю " Нет. Равна единице.

      Иногда хабравчане меня пугают.


      1. Refridgerator
        24.08.2025 09:12

        Всё норм, он не хабравчанин) Просто по новым правилам комментарии на хабре можно писать и без инвайта.


        1. n0isy
          24.08.2025 09:12

          "Новым правилам" лет 8-10? )) А статью без инвайта можно написать? Мне есть что предложить, но я стесняюсь...


    1. Valery35
      24.08.2025 09:12

      У функции y=x производная равна 1 ) Физическая суть производной - скорость. Ужас