Skip to main content

Gradiente descendente

Atualizado em September 24, 20244 minutos de leitura


Introdução

Imagine que temos uma função f(x)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)=0f'(x) = 0

O fato é que encontrar a fórmula de f′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′f'.

Vamos construir alguma intuição

Suponhamos que temos uma função f com o gráfico correspondente:

Graph 1

Vamos começar com um ponto aleatório x0x_{0}. O objetivo é mover este ponto e torná-lo cada vez mais próximo de x∗x* de modo que f′(f'(x*)=0) = 0. Portanto o problema pode ser dividido em duas partes:

  • Em que direção devemos mover o ponto xx ? 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:

Graph 2

Graph 3

Observe que:

  • quando o ponto x0x_{0} está à direita do ponto ótimo x∗x* sua reta tangente sobe.

  • quando o ponto x0x_{0} está à direita do ponto ótimo x∗x* sua reta tangente desce.

A direção de uma linha é determinada pelo sinal de sua inclinação:

  • Uma linha sobe \implica\implica que a inclinação aa é positiva.

  • Uma linha desce \implica\implica que a inclinação aa é negativa.

Observe que: \

A inclinação da reta tangente de uma função em um determinado ponto x0x_{0} não é maior que a derivada nesse ponto f′(x0)f'(x_{0}):

tangent(x∗0):g(x)=f′(x∗0).(x−x∗0)+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 x0x_{0} ?":

  • f′(x0)<0f'(x_{0}) < 0   ⟹  \implies x0x_{0} à direita de x∗x*   ⟹  \implies Precisamos mover x0x_{0} para a esquerda.

  • f′(x0)>0f'(x_{0}) > 0   ⟹  \implies x0x_{0} à esquerda de x∗x*   ⟹  \implies Precisamos mover x0x_{0} para a direita.

Os passos

Agora, para a segunda pergunta, Quanto devemos mover x0x_{0} ?

Dê uma olhada nos seguintes exemplos:

Graph 4

Graph 5

Nos podemos concluir que:

  • x0x_{0} está próximo de x∗x* => A inclinação da tangente é pequena => f′(x0)f'(x_{0}) é pequena.

  • x0x_{0} está distante de x∗x* => A inclinação da tangente é grande => f′(x0)f'(x_{0}) é grande.

Ao responder a ambas as questões, concluímos que apenas o conhecimento da derivada no ponto x0x_{0} pode nos dar muitos insights sobre a direção e a distância do ponto ótimo x0x_{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∗x* da função a partir de um ponto inicial aleatório x0x_{0}. O algoritmo é declarado da seguinte forma:

x∗n+1=x∗n−lr×dfdx_nx*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x\_{n}}

onde:

  • dfdx∗n\frac{\mathrm{d} f}{\mathrm{d} x*{n}} não é mais do que a derivada de ff no ponto x∗nx*{n}.

  • lrlr é uma constante positiva que determina o tamanho dos passos.

Notar que:

  • xnx_{n} está à direita de x∗x* => dfdxn>0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 => xn+1=xn−positivox_{n+ 1} = x_{n} - positivo => xnx_{n} move-se para a esquerda.

  • xnx_{n} está à esquerda de x∗x* => dfdxn<0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0 => x∗n+1=x∗n+positivox*{n +1} = x*{n} + positivo => xnx_{n} move-se para a direita.

  • xnx_{n} perto de x∗x* => dfdxn\frac{\mathrm{d} f}{\mathrm{d} x_{n}} perto de 00 => Pequena atualização para xnx_{ n}.

Questionário

  • Quando a descida gradiente para de iterar:

  • Quando xnx_{n} é pequeno o suficiente.

  • Quando xnx_{n} está próximo de x0x_{0} .

  • Quando dfdx_n=0\frac{\mathrm{d} f}{\mathrm{d} x\_{n}} = 0 . XXX

  • Como escolhemos x0x_{0}:

  • Nós escolhemos aleatoriamente. XXX

  • Tomamos isso na vizinhança de xnx{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.

Aprenda competências tecnológicas online com a Code Labs Academy

Aprenda competências tecnológicas online com a Code Labs Academy

Junte-se à nossa comunidade de apoio e mentoria, desbloqueie o seu potencial e dê o próximo passo numa carreira em tecnologia.