Derivada e Gradiente

Derivada e Gradiente Derivada e Gradiente

Em um texto anterior comentei que uma das causas mais comuns de problemas em redes neurais profundas (deep learning) é o gradiente. Me furtei da explicação alegando que para entender o que é um gradiente seria necessário entender primeiro o que era uma derivada. Pretendo pagar a dívida neste texto. Para tal, vou me basear largamente nos livros de Cálculo do Tom M. Apostol, os famosos Tommy I e Tommy II (no nosso caso, foco bastante no conteúdo que está no capítulo 4 do Tommy I). Na sequência, complemento o texto anterior com as dicas para resolver problemas com gradientes.

Aqui vale um adendo para explicar a importância dos Tommys. Desde a década de 1960 são adotados como os livros oficiais de Cálculo na maioria das Universidades ao redor do mundo (inclusive no Brasil – as versões em português são do início dos anos 1980 – Tommy I e Tommy II). Existe o consenso de que estes livros têm três pontos fortes. O primeiro, são livros de matemática incrivelmente legíveis. Explico: livros de matemática partem do pressuposto de que você mesma(o) estará dando os passos necessários para construir a solução com o texto à medida que o avança. Por isso, em vez de explicar todo o contexto, geralmente o que encontramos é uma justificativa ou regra lógica. No caso dos Tommys, ao invés de “cair dentro” de um fluxo de exemplos, o autor leva um certo tempo para explicar a teoria, as provas e os conceitos básicos. O segundo ponto forte é a minuciosidade do autor. Ele se preocupa em comprovar os teoremas e você, ao entendê-los, pode ver por si mesma(o) o motivo pelo qual as coisas são feitas em Cálculo da forma que são. Por exemplo, o autor não fornece apenas uma lista de métodos de integração, ele mostra de onde eles vêm. O terceiro, e não menos importante, é a organização dos livros. Eles são organizados de maneira diferente do texto típico. O autor começa com integrais, muda para derivadas e, em seguida, volta para integrais. Desta forma, ao passar pelos primeiros capítulos você cobre os conceitos básicos tanto de integrais quanto de derivadas. Quando vi essa ordem pela primeira vez, ela me pareceu natural. Considero que facilitou meu entendimento.   

Vamos começar da mesma forma que o Tommy, dando o contexto histórico. O Cálculo diferencial é o segundo ramo principal do Cálculo (o primeiro, é o Cálculo integral). A sua ideia central é o conceito de derivada. Assim como a integral, a derivada se originou de um problema geométrico: o problema de se encontrar a linha tangente em um ponto de uma curva. Tangente é uma linha que toca uma curva apenas em um ponto. Basicamente, ela intercepta a curva no ponto e possui a mesma inclinação da curva nesse ponto. Na história da matemática, a noção de derivada se desenvolveu tarde. Ela começou a ser estudada no início do século XVII pelo matemático francês Pierre de Fermat. A ideia do Fermat é bem simples e direta. Veja a Figura 1.

Derivada e Gradiente
Figura 1: As tangentes horizontais da curva (x0 e x1). Fonte [1] p.156.

Fermat partiu do pressuposto de que cada ponto da curva possuía uma direção definida que poderia ser descrita por uma linha tangente (observe os pontilhados mais grossos na Fig. 1). Daí, ele percebeu que em alguns pontos onde a curva  possui um ponto máximo ou mínimo (as abscissas x0 e x1), a linha tangente necessariamente deveria ser horizontal. Com isso, Fermat reduziu o problema de se encontrar a linha tangente da curva para se encontrar as tangentes horizontais (que são as localizações dos pontos extremos da curva). Só que isto levantou uma questão mais geral: como determinar a direção da linha tangente em um ponto arbitrário da curva? Foi tentando resolver este problema geral que Fermat descobriu a ideia mais rudimentar do conceito de derivada, a de que há uma conexão entre se encontrar a área da região sob uma curva e encontrar a linha tangente em um ponto de uma curva. Apesar do insight inicial ter sido de Fermat, quem realmente desenvolveu a ideia foram o inglês Isaac Newton e o alemão Gottfried Leibniz. O entendimento de que existe uma conexão entre encontrar a área da região sob uma curva e encontrar a linha tangente em um ponto de uma curva significa que existe um relacionamento entre integrais e derivadas. 

Clarificando a história um pouco mais, já vimos que o Cálculo diferencial surgiu da tentativa de resolver o problema de se determinar a inclinação de uma linha tangente a uma curva em um ponto qualquer. A inclinação da tangente indica a taxa de mudança da função, que é a taxa na qual uma variável muda em relação a outra variável, também chamada de derivada. Calcular uma derivada requer encontrar um limite. O conceito de limite é usado para descrever o comportamento de uma função à medida que o seu argumento se aproxima a um determinado valor. Funciona como o comportamento de uma sequência de números reais, à medida que a sequência vai crescendo, tende para o infinito. O Cálculo integral, por sua vez, surgiu da tentativa de se resolver o problema de encontrar a área de uma região entre o gráfico de uma função e o eixo x. Pode-se aproximar a área dividindo-a em retângulos finos e somando as áreas desses retângulos. Esse somatório leva ao valor de uma função chamada integral, que também é calculada por meio de um limite. 

Veja desse modo: quando usamos integrais (sob o conceito da soma de Riemann), o que estamos fazendo é uma soma ininterrupta de uma função contínua f(x) em relação à quantidade infinitesimal dx ao longo de um intervalo (a, x). Isto quer dizer que estamos pegando o “produto” de “f” e “dx” sobre os infinitos valores reais em (a, x) e os somando. Assim, obtemos uma nova função chamada F(x), que é definida pela equação 1. Durante o texto mostrarei algumas transformações apenas para sinalizar a lógica por trás do conceito. Sei que para os que não têm muita familiaridade com notação matemática, pode parecer uma “sopa de letrinhas”. Minha sugestão é que tentem perceber o tipo de transformação (substituição, simplificação, etc.). O importante aqui é captar como o processo evolui. Uma característica da matemática é basear os seus conceitos complexos em conceitos mais simples. Na medida do possível, vou indicando conceitos incidentais em hyperlinks (uma dica, a “tripazinha” da equação.1, com “a” na parte inferior e “x” na superior, é o símbolo da integral). 

Derivada e Gradiente
Equação 1

A mágica acontece quando você representa essa equação de maneira geométrica, como na Fig.2.

Derivada e Gradiente
Figura 2: Relação entre área abaixo da curva e tangente. Fonte: math.stackexchange.com

Perceba que é possível calcular as tangentes x0 e x1 desta curva. Podemos usar a inclinação de uma linha secante para uma função em um ponto (a, f (a)) para estimar a derivada (taxa de mudança). É possível obter a inclinação da secante escolhendo um valor de “x” próximo a “a” e traçando uma linha através dos pontos (a, f (a)) e (x, f (x)). A inclinação desta linha é dada por uma equação (eq. 2) na forma de um quociente de diferença: 

Derivada e Gradiente
Equação 2

Voltando à Fig. 2. Se você quiser calcular F’ (x), que é a derivada de F (x), usando a inclinação da reta tangente ao gráfico da função f no ponto (x0, f(x0)), poderia usar a expressão:

Derivada e Gradiente
Expressão 3

As leis de limite permitem que avaliemos os limites das funções sem ter que passar pelo mesmo processo de cálculo a cada iteração em cada ponto. Para polinômios e funções racionais, é considerado:

Derivada e Gradiente
Limite das funções

Dessa forma, é possível avaliar o limite de uma função por meio de fatoração, multiplicação por um conjugado ou simplificação de uma fração complexa. Considerando os limites expressos na expressão 3, poderíamos a reescrever como:

Derivada e Gradiente
Expressão 4

Usando as propriedades das integrais definidas, reescrevemos a expressão 4 como:

Derivada e Gradiente
Expressão 5

O Teorema do Valor Intermediário garante que se uma função é contínua ao longo de um intervalo fechado, então a função assume qualquer valor entre os valores representados pelos seus pontos de extremidade. Assim, reescrevemos a expressão 5 como:

Derivada e Gradiente
Expressão 6

Usando a expressão inicial 3, encontramos:

Derivada e Gradiente
Expressão 7

Mas, já sabemos pela expressão 6 que o número representado pela letra grega xi (o “e” com rabinho) é um elemento do intervalo entre “x” e “x” somado ao seu delta (o triângulo seguido de “x”):

Derivada e Gradiente

Isto significa que:

Derivada e Gradiente
Equação 8

O que foi feito aqui? Recuperamos a função original f que somamos junto com dx em (a, x) para obter F(x). Isso quer dizer que a derivada, em um sentido operacional, reverte o processo da integral. Funciona como a relação entre multiplicação e divisão, em que uma reverte o processo da outra. O processo de se encontrar a derivada, chama-se diferenciação. Tommy introduz o conceito de derivada explicando o cálculo da velocidade média durante um intervalo de tempo. Na página 157 do Tommy I, é apresentado o coeficiente diferencial como o coeficiente entre a mudança na distância durante o intervalo de tempo e o tamanho do intervalo de tempo:

Derivada e Gradiente
Expressão 9

O conceito apresentado na expressão 9, é a definição tradicional da equação de derivada, como podemos ver a seguir:

Derivada e Gradiente
Equação 10

A equação 10, que define a derivada, pode ser apresentada de três maneiras: como diferença para a frente (forward difference), diferença central (central difference) e diferença para trás (backward difference) [3]. Assim, temos a expressão:

Derivada e Gradiente
Expressão 11

Estes métodos são aplicados para converter resultados não lineares, usando-se um sistema de equações lineares. A razão é que os computadores modernos são bem mais eficientes para realizar cálculos de álgebra linear. Estes métodos são chamados de métodos de diferença finita

Agora, vejamos: o que é um gradiente? Um gradiente é uma derivada de uma função que tem mais de uma variável de entrada. O termo é utilizado para se referir à derivada de uma função do ponto de vista da álgebra linear, pelo chamado Cálculo Vetorial [3]. O gradiente é a generalização da derivada para funções multivariadas. Ele captura a inclinação local da função, o que nos permite prever o efeito de se ir de um ponto para qualquer outra direção. O gradiente é calculado em um espaço vetorial (n-dimensional) chamado hiperplano. Cada componente do gradiente define uma linha tangente local. Essas linhas tangentes definem o hiperplano local tangente [3]. O vetor gradiente aponta na direção de maior aumento, como mostra a Figura 3.

Derivada e Gradiente
Figura 3: Direção do vetor gradiente. Fonte: [3]

Assim, o gradiente de f em x é um vetor e é escrito como:

Derivada e Gradiente

Cada componente deste vetor é uma derivada parcial de f. A derivada parcial de uma função em relação a uma variável é a derivada, assumindo claro, que todas as outras variáveis de entrada são mantidas constantes. É representada como:

Derivada e Gradiente

O gradiente de f pode ser escrito como:

Derivada e Gradiente

Para calcular a matriz hessiana do gradiente, usamos o cálculo das derivadas de segunda ordem. As derivadas de segunda ordem capturam informação a respeito da curvatura local da função. É representada como:

Derivada e Gradiente

É possível usar os gradientes para computar a derivada direcional, aplicar os métodos de diferença finita para obter a série de Taylor (usei o método no início da pandemia do Coronavírus para calcular o seu crescimento no Brasil – explicado com mais detalhes neste artigo científico), dentre outras aplicações.

Vejamos agora que métodos de depuração baseados em gradientes podem ser usados. O primeiro, é fazer a checagem de gradiente. Basicamente, trata-se de computar numericamente o gradiente para cada peso. Uma das maneiras de se fazer isto, é usando a diferença finita. Mais detalhes neste tutorial. O segundo método de depuração é comparar a magnitude do gradiente com a magnitude do peso, para cada peso. O objetivo aqui é ter certeza de que a proporção das magnitudes é razoável. Se a magnitude do gradiente for muito menor do que a magnitude do peso, a rede levará uma eternidade para ser treinada. Se a magnitude do gradiente for quase igual ou maior do que a magnitude do peso, a rede ficará muito instável e provavelmente não conseguirá “aprender” nada.

Outra prática é verificar se há gradientes explodindo ou desaparecendo. Se você verificar que um gradiente está indo para 0 ou trazendo informações como nan (Not a Number) ou mesmo tendendo para infinito, pode ter certeza de que a rede não está sendo treinada corretamente. É preciso primeiro descobrir por que a explosão ou desaparecimento do gradiente está ocorrendo. Por exemplo, é possível que as camadas estejam muito aprofundadas. Depois de descobrir o motivo da explosão ou do desaparecimento do gradiente, fica mais fácil encontrar a solução para corrigir o problema, como adicionar conexões residuais para propagar melhor o gradiente ou simplesmente usar uma rede menor. Funções de ativação também podem causar a explosão ou desaparecimento de gradientes. Se a magnitude da entrada para uma função de ativação sigmóide for muito grande, o gradiente será muito próximo de zero. Aqui, o conselho é verificar as entradas para suas funções de ativação ao longo do tempo e certificar-se de que essas entradas não geram gradientes que consistentemente tendem a zero ou a uma grande magnitude.

Como citei no início, este texto complementa outro chamado “configurando e depurando uma rede deep learning”. Como comentei no referido texto, não espero que alguém saia por aí configurando ou depurando uma rede neural profunda depois da leitura. A intenção é dar uma ideia de como uma rede neural funciona e como se pode resolver problemas decorrentes da sua configuração (e aliviar um pouco a dívida intelectual da IA). Sei também que é possível que algumas ou alguns possam se sentir intimidadas(os) com as expressões matemáticas usadas ao longo do texto. É importante comentar que a matemática também é uma linguagem e nisto pode ser comparável ao português ou inglês. Como tal, possui seus sinais gráficos, sua nomenclatura, sua sintaxe e semântica. Durante as transformações feitas nas expressões, tente identificar as semelhanças entre elas para melhor visualizar o que está sendo modificado. O entendimento conceitual de limite também é fundamental. Por isso, deixo este link para você explorar o assunto.     

[1] Apostol, T. (2007). Calculus, Volume I, 2nd Ed One-variable Calculus, with an Introduction to Linear Algebra. Wiley India Pvt. Limited.
[2] Apostol, T. (2007). Calculus, Volume II, 2nd Ed Multi-variable Calculus and Linear Algebra, with Applications to Differential Equations and Probabil. Wiley India Pvt. Limited.
[3] Kochenderfer, Mykel J.and Wheeler, Tim A. (2019). Algorithms for Optimization. The MIT Press.
Add a comment

Deixe um comentário