Gradiente descendente
Atualizado em September 24, 2024 4 Minutos Leia

Introdução
Imagine que temos uma função $f(x)$ e gostaríamos de encontrar o seu mínimo. O que você faria ?
Simples, certo? Precisamos apenas resolver a seguinte equação:
$$f’(x) = 0$$
O fato é que encontrar a fórmula de $f’$ nem sempre é fácil, pois elas tendem a ser extremamente complicadas, especialmente em aprendizado profundo, onde lidamos com funções complexas. Portanto, precisamos encontrar outro método que possa nos fornecer o mínimo de uma função sem a necessidade de encontrar a fórmula da derivada $f’$.
Vamos construir alguma intuição
Suponhamos que temos uma função f com o gráfico correspondente:
Vamos começar com um ponto aleatório $x_{0}$. O objetivo é mover este ponto e torná-lo cada vez mais próximo de $x*$ de modo que $f’($x*$) = 0$. Portanto o problema pode ser dividido em duas partes:
-
Em que direção devemos mover o ponto $x$ ? Esquerda ou direita ?
-
Quanto devemos movê-lo?
A direção
Vamos construir alguma intuição para responder à primeira pergunta. Dê uma olhada no seguinte ponto:
Observe que:
-
quando o ponto $x_{0}$ está à direita do ponto ótimo $x*$ sua reta tangente sobe.
-
quando o ponto $x_{0}$ está à direita do ponto ótimo $x*$ sua reta tangente desce.
A direção de uma linha é determinada pelo sinal de sua inclinação:
-
Uma linha sobe $\implica$ que a inclinação $a$ é positiva.
-
Uma linha desce $\implica$ que a inclinação $a$ é negativa.
Observe que: \
A inclinação da reta tangente de uma função em um determinado ponto $x_{0}$ não é maior que a derivada nesse ponto $f’(x_{0})$:
$$ tangent(x*{0}): g(x) = f’(x*{0}).(x-x*{0}) + f(x*{0}) $$
Então, como resposta à pergunta “Para onde devemos mover $x_{0}$ ?”:
-
$f’(x_{0}) < 0$ $\implies$ $x_{0}$ à direita de $x*$ $\implies$ Precisamos mover $x_{0}$ para a esquerda.
-
$f’(x_{0}) > 0$ $\implies$ $x_{0}$ à esquerda de $x*$ $\implies$ Precisamos mover $x_{0}$ para a direita.
Os passos
Agora, para a segunda pergunta, Quanto devemos mover $x_{0}$ ?
Dê uma olhada nos seguintes exemplos:
Nos podemos concluir que:
-
$x_{0}$ está próximo de $x*$ => A inclinação da tangente é pequena => $f’(x_{0})$ é pequena.
-
$x_{0}$ está distante de $x*$ => A inclinação da tangente é grande => $f’(x_{0})$ é grande.
Ao responder a ambas as questões, concluímos que apenas o conhecimento da derivada no ponto $x_{0}$ pode nos dar muitos insights sobre a direção e a distância do ponto ótimo $x_{0}$.
Gradiente descendente
O gradiente descendente é a formulação das respostas das duas questões anteriores. É um algoritmo iterativo de otimização que aproxima o mínimo $x*$ da função a partir de um ponto inicial aleatório $x_{0}$. O algoritmo é declarado da seguinte forma:
$$ x*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x_{n}} $$
onde:
-
$ \frac{\mathrm{d} f}{\mathrm{d} x*{n}} $ não é mais do que a derivada de $f$ no ponto $x*{n}$.
-
$lr$ é uma constante positiva que determina o tamanho dos passos.
Notar que:
-
$x_{n}$ está à direita de $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 $ => $ x_{n+ 1} = x_{n} - positivo $ => $x_{n}$ move-se para a esquerda.
-
$x_{n}$ está à esquerda de $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0$ => $ x*{n +1} = x*{n} + positivo $ => $x_{n}$ move-se para a direita.
-
$x_{n}$ perto de $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}}$ perto de $0$ => Pequena atualização para $x_{ n}$.
Questionário
-
Quando a descida gradiente para de iterar:
-
Quando $x_{n}$ é pequeno o suficiente.
-
Quando $x_{n}$ está próximo de $x_{0}$ .
-
Quando $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} = 0 $. XXX
-
Como escolhemos $x_{0}$:
-
Nós escolhemos aleatoriamente. XXX
-
Tomamos isso na vizinhança de $x{n}$.
-
Depende do problema.
-
Por que precisamos de descida gradiente:
-
Porque os computadores não são suficientemente poderosos para calcular derivadas.
-
Porque é extremamente difícil encontrar as fórmulas derivadas dos modelos de aprendizagem profunda. XXX
-
Porque as funções possuem mais de um mínimo local.