Теория оптимизации функции нескольких переменных





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

### 1. Введение: О чем вообще речь?

Представьте, что вы стоите на холмистой местности с закрытыми глазами. Ваша задача — найти самую низкую точку (долину) или самую высокую (пик холма). Как вы будете это делать?

*   Вы будете ногой ощущать уклон под собой. Если земля наклонена вправо-вниз, вы сделаете шаг вправо. *   Вы будете повторять этот процесс, пока не окажетесь в точке, где под ногами ровно — это и будет локальная низкая точка.

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

*   **Функция** `f(x, y)` — это наша "местность". Ее значение — это "высота". *   **Переменные** `x, y` — это координаты на карте. *   **Цель:** Найти такие значения `x` и `y`, при которых функция `f(x, y)` принимает **минимальное** или **максимальное** значение.

**Примеры из жизни:** *   Минимизировать затраты на производство (зависит от цены материалов, зарплат, объема выпуска). *   Максимизировать прочность конструкции (зависит от толщины балок, углов соединения). *   Найти наилучшие параметры для алгоритма машинного обучения.

---

### 2. Основные понятия

#### 2.1. Что такое производная для функции одной переменной?

Напомним: производная `f'(x)` показывает **скорость изменения** функции в точке. Если `f'(x) > 0`, функция растет; если `f'(x) < 0` — убывает.

#### 2.2. Градиент (Векторный аналог производной)

Для функции многих переменных (например, `f(x, y)`) у нас нет одной производной, есть вектор частных производных. Это и есть **градиент**.

**Обозначение:** `∇f` (читается "набла эф") или `grad f`.

**Формула для функции двух переменных:** `∇f(x, y) = ( ∂f/∂x , ∂f/∂y )`

*   `∂f/∂x` — частная производная по `x` (производная от f по x, когда y считается константой). *   `∂f/∂y` — частная производная по `y` (производная от f по y, когда x считается константой).

**Геометрический смысл градиента:** *   **Направление:** Градиент указывает направление **наискорейшего роста** функции в данной точке. *   **Длина (модуль):** Показывает, насколько круто идет подъем в этом направлении.

> **Важно!** Антиградиент (`-∇f`) указывает направление **наискорейшего спуска**.

**Пример:** Пусть `f(x, y) = x² + y²` (параболоид, "чаша"). Найдем градиент в точке `(2, 1)`: 1.  `∂f/∂x = 2x` 2.  `∂f/∂y = 2y` 3.  `∇f(2, 1) = (2*2, 2*1) = (4, 2)`

В точке (2,1) самый крутой подъем идет в направлении вектора (4,2).

#### 2.3. Стационарные точки

Стационарная точка — это такая точка, в которой градиент равен нулю.

`∇f(x, y) = (0, 0)`

**Почему это важно?** В стационарной точке "склон под ногами ровный". Это кандидаты на точки **локального минимума, локального максимума** или **седловые точки** (как седло лошади — в одной方向 минимум, в другой максимум).

---

### 3. Классификация стационарных точек: Минимум, Максимум или Седло?

Как понять, что мы нашли — вершину холма, дно долины или седловину? Для этого используется **Матрица Гессе (Hessian)**.

#### 3.1. Что такое Матрица Гессе?

Это матрица вторых частных производных. Для функции `f(x, y)` она выглядит так:

``` H(f) = [ ∂²f/∂x²   ∂²f/∂x∂y ]        [ ∂²f/∂y∂x  ∂²f/∂y²  ] ```

*   `∂²f/∂x²` — показывает "выпуклость" функции вдоль оси X. *   `∂²f/∂y²` — показывает "выпуклость" функции вдоль оси Y. *   `∂²f/∂x∂y` и `∂²f/∂y∂x` — смешанные производные, показывают, как наклон по x меняется при движении по y (и наоборот).

#### 3.2. Критерий для классификации точек

Пусть у нас есть стационарная точка `P`. Мы вычисляем в этой точке матрицу Гессе `H` и ее **определитель** `D`.

`D = det(H) = (∂²f/∂x²) * (∂²f/∂y²) - (∂²f/∂x∂y)²`

Теперь смотрим:

1.  **Если `D > 0` и `∂²f/∂x² > 0`** → **Локальный минимум** (чаша).     *   *Интуиция:* Поверхность "выгнута" вверх по всем направлениям.

2.  **Если `D > 0` и `∂²f/∂x² < 0`** → **Локальный максимум** (холм).     *   *Интуиция:* Поверхность "выгнута" вниз по всем направлениям.

3.  **Если `D < 0`** → **Седловая точка**.     *   *Интуиция:* В одном направлении это минимум, в другом — максимум (как седло).

4.  **Если `D = 0`** → **Неопределенный случай**. Нужны дополнительные исследования.

---

### 4. Практический пример "для чайников"

**Задача:** Найти экстремумы функции `f(x, y) = x² + y² - 4x - 6y + 15`.

**Шаг 1: Находим градиент.** 1.  `∂f/∂x = 2x - 4` 2.  `∂f/∂y = 2y - 6` 3.  `∇f(x, y) = (2x - 4, 2y - 6)`

**Шаг 2: Находим стационарные точки (приравниваем градиент к нулю).** ``` 2x - 4 = 0  => x = 2 2y - 6 = 0  => y = 3 ``` Стационарная точка одна: `P(2, 3)`.

**Шаг 3: Строим матрицу Гессе и находим определитель.** 1.  `∂²f/∂x² = 2` 2.  `∂²f/∂y² = 2` 3.  `∂²f/∂x∂y = 0` 4.  Матрица Гессе: `H = [2, 0; 0, 2]` (постоянная, не зависит от точки). 5.  Определитель `D = (2 * 2) - (0 * 0) = 4`.

**Шаг 4: Классифицируем точку.** *   `D = 4 > 0` *   `∂²f/∂x² = 2 > 0`

**Вывод:** В точке `P(2, 3)` функция имеет **локальный минимум**.

**Шаг 5 (проверка):** Найдем значение функции в этой точке: `f(2, 3) = 2² + 3² - 4*2 - 6*3 + 15 = 4 + 9 - 8 - 18 + 15 = 2`.

Можно преобразовать исходную функцию: `f(x,y) = (x-2)² + (y-3)² + 2`. Видно, что это параболоид с минимумом в точке (2,3), значение которого равно 2.

---

### 5. Методы оптимизации (как искать эти точки?)

Бывает, что стационарную точку нельзя найти аналитически (решив уравнение). Тогда используют численные методы.

#### 1. Градиентный спуск (для минимизации)

**Алгоритм (как тот человек с закрытыми глазами):** 1.  Выбрать случайную начальную точку. 2.  Вычислить градиент в этой точке. 3.  Сделать небольшой шаг в направлении **антиградиента** (`-∇f`), чтобы "спуститься".     *   Новая точка: `P_new = P_old - α * ∇f(P_old)`     *   `α` (альфа) — **скорость обучения** (шаг). Если взять слишком большой, можно "перепрыгнуть" минимум. Если слишком маленький, спуск будет очень медленным. 4.  Повторять шаги 2-3, пока градиент не станет очень маленьким (мы почти на дне) или не будет достигнуто максимальное число итераций.

Это основа большинства алгоритмов машинного обучения!

#### 2. Метод Ньютона (для нахождения стационарных точек)

Более сложный, но и более быстрый метод. Он использует не только градиент, но и матрицу Гессе, чтобы "угадать", где находится минимум, учитывая кривизну поверхности. Он сходится к решению гораздо быстрее, но требует вычисления `H⁻¹` (обратной матрицы Гессе), что может быть сложно для больших размерностей.

---

### Итог и Шпаргалка

1.  **Цель:** Найти `min f(x₁, x₂, ...)` или `max f(x₁, x₂, ...)`. 2.  **Ключевой инструмент:** **Градиент** `∇f` = вектор первых производных. 3.  **Кандидаты:** **Стационарные точки**, где `∇f = 0`. 4.  **Проверка кандидатов:** Через **Матрицу Гессе** `H` и ее определитель `D`:     *   `D > 0` и `f''ₓₓ > 0` → **Минимум**     *   `D > 0` и `f''ₓₓ < 0` → **Максимум**     *   `D < 0` → **Седловая точка** 5.  **Если не решается:** Используем **Градиентный спуск**.

Надеюсь, этот материал помог сделать первый шаг в понимании многомерной оптимизации

не проверено
  • Автор сообщения: Глеб

Комментариев пока нет. Вы можете стать первым!  
Добавить комментарий