Rachunek różniczkowy odwzorowań wielu zmiennych
Pochodne cząstkowe i gradient, pochodna kierunkowa, różniczka i płaszczyzna styczna, związek różniczkowalności z ciągłością, twierdzenie Schwarza o symetrii pochodnych mieszanych, macierz Jacobiego i wielowymiarowa reguła łańcuchowa, a następnie optymalizacja: warunek konieczny (gradient zero), warunek dostateczny (określoność hesjanu), punkty siodłowe oraz ekstrema warunkowe z mnożnikami Lagrange'a. Każde twierdzenie z dowodem i rysunkiem.
W ekonometrii prawie wszystko jest funkcją wielu zmiennych: funkcja wiarygodności zależy od wektora parametrów, funkcja produkcji — od wielu nakładów, funkcja użyteczności — od koszyka dóbr. Różniczkowanie takich funkcji wymaga nowych pojęć: pochodnej cząstkowej, gradientu, różniczki i hesjanu. Ten rozdział rozszerza rachunek różniczkowy na odwzorowania $\mathbb{R}^n\to\mathbb{R}^m$ i kończy się optymalizacją — bezwarunkową (gradient i hesjan) oraz warunkową (mnożniki Lagrange’a), czyli dokładnie tym, co stoi za estymacją parametrów i teorią wyboru konsumenta.
Pochodne cząstkowe i gradient
Pochodną cząstkową funkcji $f\colon\mathbb{R}^n\to\mathbb{R}$ względem zmiennej $x_i$ nazywamy
$$ \frac{\partial f}{\partial x_i}(\mathbf{x})=\lim_{h\to 0}\frac{f(\mathbf{x}+h\mathbf{e}_i)-f(\mathbf{x})}{h}, $$czyli zwykłą pochodną przy zamrożeniu pozostałych zmiennych. To nachylenie wykresu wzdłuż osi $x_i$.
Gradientem nazywamy wektor wszystkich pochodnych cząstkowych:
$$ \nabla f(\mathbf{x})=\Big(\frac{\partial f}{\partial x_1},\dots,\frac{\partial f}{\partial x_n}\Big). $$Wskazuje on kierunek najszybszego wzrostu funkcji, a jego długość to tempo tego wzrostu. Gradient jest prostopadły do poziomic (warstwic) funkcji.
Pochodną kierunkową w kierunku wektora jednostkowego $\mathbf{v}$ jest
$$ D_{\mathbf{v}}f(\mathbf{x})=\lim_{t\to 0}\frac{f(\mathbf{x}+t\mathbf{v})-f(\mathbf{x})}{t}. $$Dla funkcji różniczkowalnej $D_{\mathbf{v}}f=\nabla f\cdot\mathbf{v}$ — rzut gradientu na kierunek $\mathbf{v}$. Stąd wzrost jest największy w kierunku gradientu ($\mathbf{v}\parallel\nabla f$).
Różniczka i płaszczyzna styczna
Funkcja $f$ jest różniczkowalna w $\mathbf{a}$, gdy istnieje wektor $L$ (wówczas $L=\nabla f(\mathbf{a})$) taki, że
$$ f(\mathbf{a}+\mathbf{h})=f(\mathbf{a})+L\cdot\mathbf{h}+o(\lVert\mathbf{h}\rVert), $$czyli przyrost funkcji jest z dokładnością do reszty wyższego rzędu liniowy w $\mathbf{h}$. Odwzorowanie liniowe $\mathbf{h}\mapsto\nabla f(\mathbf{a})\cdot\mathbf{h}$ to różniczka.
- Ciągłość. Z definicji $f(\mathbf{a}+\mathbf{h})-f(\mathbf{a})=L\cdot\mathbf{h}+o(\lVert\mathbf{h}\rVert)$. Gdy $\mathbf{h}\to\mathbf{0}$, oba składniki dążą do $0$, więc $f(\mathbf{a}+\mathbf{h})\to f(\mathbf{a})$.
- Pochodne cząstkowe. Wybierzmy $\mathbf{h}=t\mathbf{e}_i$. Wtedy $$\frac{f(\mathbf{a}+t\mathbf{e}_i)-f(\mathbf{a})}{t}=L_i+\frac{o(|t|)}{t}\xrightarrow[t\to 0]{} L_i.$$ Granica istnieje i równa się $L_i$, więc $\partial f/\partial x_i(\mathbf{a})=L_i$, czyli $L=\nabla f(\mathbf{a})$.
- Dlaczego same cząstkowe nie wystarczą. Funkcja może mieć obie pochodne cząstkowe w $\mathbf{0}$ (po obu osiach), a mimo to nie być nawet ciągła — wzdłuż kierunku ukośnego zachowuje się inaczej niż wzdłuż osi. Stąd wymóg różniczki, a nie tylko cząstkowych. $\;$
Odwzorowania wektorowe: Jacobian i reguła łańcuchowa
Dla odwzorowania $\mathbf{F}\colon\mathbb{R}^n\to\mathbb{R}^m$, $\mathbf{F}=(F_1,\dots,F_m)$, macierzą Jacobiego nazywamy macierz wszystkich pochodnych cząstkowych:
$$ J_{\mathbf{F}}(\mathbf{x})=\Big[\frac{\partial F_i}{\partial x_j}\Big]_{m\times n}. $$Jest to różniczka (najlepsze przybliżenie liniowe) odwzorowania $\mathbf{F}$. Dla $m=n$ jej wyznacznik — jakobian — mierzy lokalną zmianę objętości.
Różniczka złożenia jest iloczynem różniczek (macierzy Jacobiego):
$$ J_{\mathbf{g}\circ\mathbf{f}}(\mathbf{x})=J_{\mathbf{g}}\big(\mathbf{f}(\mathbf{x})\big)\cdot J_{\mathbf{f}}(\mathbf{x}). $$W szczególności dla $z=g(u,v)$, $u=u(t)$, $v=v(t)$: $\dfrac{dz}{dt}=\dfrac{\partial g}{\partial u}\dfrac{du}{dt}+\dfrac{\partial g}{\partial v}\dfrac{dv}{dt}$.
Optymalizacja bez ograniczeń
- Redukcja do jednej zmiennej. Ustalmy kierunek osi $x_i$ i rozważmy funkcję jednej zmiennej $\varphi(t)=f(\mathbf{a}+t\mathbf{e}_i)$.
- Fermat w jednym wymiarze. Skoro $\mathbf{a}$ jest ekstremum $f$, to $t=0$ jest ekstremum $\varphi$. Z twierdzenia Fermata (rozdział 6) $\varphi'(0)=0$.
- To jest pochodna cząstkowa. Ale $\varphi'(0)=\partial f/\partial x_i(\mathbf{a})$. Zatem każda pochodna cząstkowa znika, czyli $\nabla f(\mathbf{a})=\mathbf{0}$. $\;$
- Rozwinięcie Taylora. Skoro $\nabla f(\mathbf{a})=\mathbf{0}$, drugi rząd daje $$f(\mathbf{a}+\mathbf{h})-f(\mathbf{a})=\tfrac12\,\mathbf{h}^{\!\top} H(\mathbf{a})\,\mathbf{h}+o(\lVert\mathbf{h}\rVert^2).$$
- Hesjan dodatnio określony. Wtedy istnieje $\lambda\gt 0$ z $\mathbf{h}^{\!\top}H\mathbf{h}\ge\lambda\lVert\mathbf{h}\rVert^2$. Dla małych $\mathbf{h}$ człon kwadratowy przeważa nad resztą $o(\lVert\mathbf{h}\rVert^2)$, więc $f(\mathbf{a}+\mathbf{h})\gt f(\mathbf{a})$ — minimum lokalne.
- Nieokreślony. Istnieją kierunki $\mathbf{h}_+$ z $\mathbf{h}_+^{\!\top}H\mathbf{h}_+\gt 0$ i $\mathbf{h}_-$ z $\mathbf{h}_-^{\!\top}H\mathbf{h}_-\lt 0$. Wzdłuż jednego funkcja rośnie, wzdłuż drugiego maleje — to siodło.
- Maksimum. Symetrycznie, ujemna określoność daje maksimum (zastosuj wynik do $-f$). $\;$
Optymalizacja z ograniczeniem: mnożniki Lagrange’a
Szukając ekstremum $f$ na zbiorze opisanym ograniczeniem $g(\mathbf{x})=0$, w punkcie optymalnym (przy $\nabla g\ne\mathbf{0}$) gradienty są współliniowe:
$$ \nabla f(\mathbf{x}^*)=\lambda\,\nabla g(\mathbf{x}^*) $$dla pewnego mnożnika $\lambda$. Równoważnie: szukamy punktów stacjonarnych funkcji Lagrange’a $\mathcal{L}(\mathbf{x},\lambda)=f(\mathbf{x})-\lambda g(\mathbf{x})$.
- Ruch po ograniczeniu. Punkty dopuszczalne tworzą krzywą $g(\mathbf{x})=0$. Idąc po niej z prędkością styczną $\mathbf{t}$ (czyli $\nabla g\cdot\mathbf{t}=0$), zmieniamy $f$ w tempie $\nabla f\cdot\mathbf{t}$.
- Warunek ekstremum na krzywej. W punkcie optymalnym ruch w żadnym dopuszczalnym kierunku stycznym nie może już zwiększać $f$, więc $\nabla f\cdot\mathbf{t}=0$ dla każdego $\mathbf{t}$ stycznego do ograniczenia.
- Współliniowość gradientów. Oznacza to, że $\nabla f$ jest prostopadły do całej przestrzeni stycznej ograniczenia — tak samo jak $\nabla g$. Dwa wektory prostopadłe do tej samej hiperpłaszczyzny są równoległe, więc $\nabla f=\lambda\nabla g$.
- Interpretacja. Geometrycznie: w optimum poziomica $f$ jest **styczna** do krzywej ograniczenia (gdyby ją przecinała, dałoby się przesunąć wzdłuż ograniczenia i poprawić $f$). $\;$
Mnożnik $\lambda$ ma w ekonomii konkretne znaczenie: to tempo zmiany optymalnej wartości funkcji celu przy poluzowaniu ograniczenia. Jeśli ograniczenie ma postać $g(\mathbf{x})=c$, to
$$ \lambda=\frac{d f^*}{d c}, $$czyli „cena ukryta” (shadow price) jednostki zasobu — o ile wzrosłaby optymalna użyteczność lub zysk, gdyby budżet zwiększyć o jednostkę.
Podsumowanie
Rozszerzyliśmy różniczkowanie na funkcje wielu zmiennych. Pochodne cząstkowe mierzą zmianę wzdłuż osi, a gradient zbiera je w wektor wskazujący najszybszy wzrost (prostopadły do poziomic); pochodna kierunkowa to rzut gradientu. Kluczowe okazało się rozróżnienie istnienia pochodnych cząstkowych od pełnej różniczkowalności (istnienia płaszczyzny stycznej), a twierdzenie Schwarza zapewniło symetrię hesjanu. Dla odwzorowań wektorowych różniczką jest macierz Jacobiego, a reguła łańcuchowa stała się mnożeniem macierzy. Druga połowa to optymalizacja: warunek konieczny $\nabla f=\mathbf{0}$, warunek dostateczny przez określoność hesjanu (z punktem siodłowym jako ostrzeżeniem) oraz mnożniki Lagrange’a dla zadań z ograniczeniami, wraz z interpretacją mnożnika jako ceny ukrytej. To matematyczny rdzeń estymacji największej wiarygodności i teorii wyboru. W następnym rozdziale przyjrzymy się wypukłości — własności, która zamienia warunki konieczne w dostateczne i gwarantuje, że optimum lokalne jest globalne.
- K. Maurin, Analiza, cz. I
- W. Rudin, Podstawy analizy matematycznej
- R. Sundaram, A First Course in Optimization Theory
- Python:
numpy.gradient,scipy.optimize.minimize(gradient, hesjan) - Python:
sympy.hessian(f, vars),sympy.diff(f, x, y) - R:
optim(par, fn, gr, method="BFGS"),numDeriv::hessian