Exercícios — Aula 6: Derivadas Parciais, Gradiente e Jacobiano

Álgebra Linear e Otimização para Aprendizado de Máquina

Autor

Prof. Marcos Medeiros Raimundo

Aula Soluções

DicaConvenções usadas nesta lista
  • A derivada parcial de \(f:\mathbb{R}^n\to\mathbb{R}\) em relação a \(x_j\) no ponto \(\mathbf{x}\) é \(\dfrac{\partial f}{\partial x_j}(\mathbf{x})=\lim_{h\to0}\dfrac{f(\mathbf{x}+h\mathbf{e}_j)-f(\mathbf{x})}{h}\) — um limite bilateral (\(h\to0\), tanto por valores positivos quanto negativos de \(h\)), que mede a taxa de variação de \(f\) ao longo do eixo \(j\), mantendo as demais coordenadas fixas.
  • O gradiente de \(f:\mathbb{R}^n\to\mathbb{R}\) é o vetor-linha \(\nabla f(\mathbf{x})=[\partial f/\partial x_1\ \cdots\ \partial f/\partial x_n]\in\mathbb{R}^{1\times n}\), coletando as \(n\) derivadas parciais.
  • Regras de derivação usadas aqui: regra da soma (\(\nabla(f+g)=\nabla f+\nabla g\); em particular, \(\nabla(\text{constante})=\mathbf{0}\)), regra do produto (\(\partial(fg)/\partial x=f\,\partial g/\partial x+g\,\partial f/\partial x\), aplicável termo a termo mesmo quando \(f=g\)) e regra da cadeia.
  • Problema-fio: para a perda quadrática \(L(\boldsymbol{\beta})=\|X\boldsymbol{\beta}-\mathbf{y}\|^2\) (com \(X\in\mathbb{R}^{N\times d}\), \(\boldsymbol{\beta}\in\mathbb{R}^d\), resíduo \(\mathbf{r}(\boldsymbol{\beta})=X\boldsymbol{\beta}-\mathbf{y}\)), a derivação por extenso (regra da soma + regra da cadeia, termo a termo) dá \(\nabla_{\boldsymbol{\beta}}L=2(X\boldsymbol{\beta}-\mathbf{y})^TX=2\mathbf{r}^TX\) — cuja condição de anulamento é, exatamente, as Equações Normais de um ajuste por mínimos quadrados.
  • A derivada direcional de \(f\) em \(\mathbf{x}\) na direção unitária \(\mathbf{v}\) (\(\|\mathbf{v}\|=1\)) é \(D_{\mathbf{v}}f(\mathbf{x})=\nabla f(\mathbf{x})\mathbf{v}\). Pela desigualdade de Cauchy-Schwarz, o valor máximo de \(D_{\mathbf{v}}f(\mathbf{x})\) sobre todas as direções unitárias é \(\|\nabla f(\mathbf{x})\|\), atingido quando \(\mathbf{v}=\nabla f(\mathbf{x})^T/\|\nabla f(\mathbf{x})\|\) (a direção do gradiente, normalizada) — a proposição de subida mais íngreme. A prova usa a condição de igualdade da desigualdade de Cauchy-Schwarz (vetores paralelos) e exige \(\nabla f(\mathbf{x})\ne\mathbf{0}\).
  • O Jacobiano de \(f:\mathbb{R}^n\to\mathbb{R}^m\) em \(\mathbf{x}\) é a matriz \(J_f(\mathbf{x})\in\mathbb{R}^{m\times n}\) cuja linha \(i\) é o gradiente da componente \(f_i\) (uma linha por componente de saída, uma coluna por variável de entrada — numerator layout); o gradiente é o caso particular \(m=1\). Para o resíduo \(\mathbf{r}(\boldsymbol{\beta})=X\boldsymbol{\beta}-\mathbf{y}\) (afim em \(\boldsymbol{\beta}\)), \(J_{\mathbf{r}}(\boldsymbol{\beta})=X\), constante (não depende de \(\boldsymbol{\beta}\)).
  • A regra da cadeia com Jacobiano: para \(L(\boldsymbol{\beta})=g(\mathbf{r}(\boldsymbol{\beta}))\) com \(g(\mathbf{r})=\mathbf{r}^T\mathbf{r}\), vale \(\nabla_{\boldsymbol{\beta}}L=\nabla_{\mathbf{r}}g\cdot J_{\mathbf{r}}(\boldsymbol{\beta})\) — uma rota alternativa à derivação termo a termo, que recupera o mesmo \(\nabla_{\boldsymbol{\beta}}L=2(X\boldsymbol{\beta}-\mathbf{y})^TX\) e generaliza melhor para composições de várias funções (como em redes neurais).
  • Verificação numérica: a diferença finita central \([f(x+h)-f(x-h)]/(2h)\) aproxima \(f'(x)\) com erro de truncamento da ordem \(O(h^2f'''(x))\) — para a perda quadrática do problema-fio, \(f'''\equiv0\) identicamente, então esse termo de erro desaparece; para uma perda com terceira derivada não-nula, ele não desaparece.

Questões discursivas

  1. Explique, com suas próprias palavras, por que a definição de derivada parcial (ver Convenções acima) exige um limite bilateral (\(h\to 0\), não só \(h\to 0^+\)) — o que poderia dar errado, na prática, se o limite fosse tomado só com valores positivos de \(h\)?

  2. A prova da proposição de subida mais íngreme (ver Convenções) usa a condição de igualdade da desigualdade de Cauchy-Schwarz. Reproduza o argumento e explique por que a condição de igualdade sozinha (vetores paralelos) não basta para identificar a direção de máximo — o que mais precisa ser verificado?

  3. Compare as duas rotas usadas para chegar ao mesmo resultado, \(\nabla_{\boldsymbol{\beta}}\|X\boldsymbol{\beta}-\mathbf{y}\|^2=2(X\boldsymbol{\beta}-\mathbf{y})^TX\): a derivação termo a termo (soma + regra da cadeia) e a regra da cadeia com Jacobiano (ver Convenções). Por que a segunda rota escala melhor para “composições profundas de funções”? Ilustre com um exemplo hipotético de duas camadas compostas, \(\mathbf{y}=f_2(f_1(\mathbf{x}))\).

Questões de Verdadeiro/Falso

Cada bloco de 4 itens trata do mesmo tema. A questão só é considerada correta se todos os 4 itens forem julgados corretamente (deixar em branco tem penalidade de 20% da nota da questão).

NotaTeste 1 — Derivada parcial: definição e interpretação
  • □ Se \(f(x_1,x_2)\) não dependesse de \(x_2\) (só de \(x_1\)), então \(\partial f/\partial x_2=0\) em todo ponto do domínio.
  • □ Na definição de derivada parcial (ver Convenções), o limite que define \(\partial f/\partial x_1\) é tomado só com valores positivos de \(h\) (\(h\to 0^+\)), nunca com valores negativos.
  • □ Numa função de perda de regressão logística com \(2\) parâmetros (peso e viés), calcular \(\partial L/\partial(\text{viés})\) (mantendo o peso fixo) segue exatamente a mesma definição usada para a perda quadrática desta aula.
  • □ Se todas as derivadas parciais de \(f\) existirem e forem iguais a zero num ponto \(\mathbf{x}\), isso garante que \(\mathbf{x}\) é um ponto de mínimo local de \(f\).
NotaTeste 2 — O gradiente como vetor: convenção linha/coluna
  • □ Se o gradiente de \(f:\mathbb{R}^n\to\mathbb{R}\) fosse definido como vetor-coluna em vez de vetor-linha, o valor numérico de cada derivada parcial dentro dele mudaria.
  • □ Para uma função \(f:\mathbb{R}^1\to\mathbb{R}\) (uma única variável), o gradiente de \(f\), segundo a definição de gradiente (ver Convenções), coincide exatamente com a derivada usual do Cálculo 1.
  • □ Numa camada linear de rede neural com perda escalar em relação aos pesos \(W\) (uma matriz, não um vetor), a mesma ideia de “coletar derivadas parciais” se generaliza, mas o resultado organizado é uma matriz de mesma forma que \(W\), não um vetor-linha.
  • □ Como o gradiente de \(f:\mathbb{R}^n\to\mathbb{R}\) é um vetor-linha \(1\times n\), isso implica que o gradiente é, ele mesmo, uma função escalar, não vetorial.
NotaTeste 3 — Regras de derivação e o gradiente da perda quadrática
  • □ Se a perda fosse \(L(\boldsymbol{\beta})=\|X\boldsymbol{\beta}-\mathbf{y}\|^2+5\) (somando uma constante), o gradiente \(\nabla_{\boldsymbol{\beta}}L\) seria idêntico ao calculado para o problema-fio (ver Convenções), sem nenhuma mudança.
  • □ Se \(X\) fosse a matriz nula (todas as entradas zero), o gradiente \(\nabla_{\boldsymbol{\beta}}L=2(X\boldsymbol{\beta}-\mathbf{y})^TX\) seria o vetor-linha nulo, para qualquer \(\boldsymbol{\beta}\).
  • □ Numa perda com dois termos de erro para dois conjuntos de dados distintos, \(L(\boldsymbol{\beta})=\|X_1\boldsymbol{\beta}-\mathbf{y}_1\|^2+\|X_2\boldsymbol{\beta}-\mathbf{y}_2\|^2\) (ex.: dados coletados em dois períodos diferentes), o gradiente total é a soma dos dois gradientes, cada um pela fórmula do problema-fio.
  • □ Como a regra do produto foi enunciada para \(f(x)g(x)\) (ver Convenções), isso implica que ela não pode ser usada, de forma alguma, para derivar \(L=\mathbf{r}^T\mathbf{r}\) (um produto de vetores, não de duas funções escalares de \(x\)).
NotaTeste 4 — Derivada direcional
  • □ Se \(\mathbf{v}=-\mathbf{e}_j\) (o negativo do \(j\)-ésimo vetor da base canônica), então \(D_{\mathbf{v}}f(\mathbf{x})=-\partial f/\partial x_j\).
  • □ Se, em vez de exigir \(\|\mathbf{v}\|=1\), a definição permitisse qualquer \(\mathbf{v}\ne\mathbf{0}\), no limite em que \(\|\mathbf{v}\|\to 0\) o valor de \(\nabla f(\mathbf{x})\cdot\mathbf{v}\) (com a mesma fórmula, sem normalizar) tenderia a zero.
  • □ Numa superfície de perda de uma rede neural com \(2\) parâmetros, mover-se na direção perpendicular ao gradiente produz, em primeira ordem, taxa de variação da perda igual a zero.
  • □ Como a derivada direcional generaliza a derivada parcial (tomando \(\mathbf{v}=\mathbf{e}_j\)), isso implica que toda propriedade das derivadas parciais (poder ser calculada “mantendo as demais variáveis fixas”) se aplica igualmente à derivada direcional numa direção genérica \(\mathbf{v}\).
NotaTeste 5 — A direção de subida mais íngreme
  • □ Se, em vez do máximo de \(D_{\mathbf{v}}f(\mathbf{x})\), quiséssemos o mínimo (a direção de descida mais íngreme), a prova da proposição de subida mais íngreme (ver Convenções) mudaria só no sinal da condição de igualdade, dando \(\mathbf{v}^\star=-\nabla f(\mathbf{x})^T/\|\nabla f(\mathbf{x})\|\).
  • □ Se \(\nabla f(\mathbf{x})\) já fosse, ele mesmo, um vetor unitário (\(\|\nabla f(\mathbf{x})\|=1\)), o valor máximo de \(D_{\mathbf{v}}f(\mathbf{x})\) sobre todas as direções unitárias seria exatamente \(1\).
  • □ Num algoritmo que gera exemplos adversariais em visão computacional (perturbar uma imagem para enganar um classificador), buscar a perturbação de norma fixa que mais aumenta a perda do modelo é, essencialmente, aplicar a proposição de subida mais íngreme.
  • □ Como a igualdade na desigualdade de Cauchy-Schwarz exige vetores paralelos, isso implica que a direção de subida mais íngreme é única a menos de reflexão — existem exatamente duas direções, uma oposta à outra, que atingem o valor máximo de \(D_{\mathbf{v}}f(\mathbf{x})\).
NotaTeste 6 — O Jacobiano: definição e generalização
  • □ Se \(f:\mathbb{R}^n\to\mathbb{R}^m\) tivesse \(m=1\), o Jacobiano (ver Convenções) deixaria de ser uma matriz e passaria a ser um vetor-coluna \(n\times 1\).
  • □ Se \(f:\mathbb{R}^n\to\mathbb{R}^m\) for uma função constante (não depende de \(\mathbf{x}\)), seu Jacobiano é a matriz nula \(m\times n\), para todo \(\mathbf{x}\).
  • □ Numa camada convolucional de rede neural (mapeia um vetor de entrada para um vetor de ativações via convolução, não multiplicação matricial direta), o Jacobiano dessa camada em relação à entrada ainda é bem definido pela mesma definição de Jacobiano.
  • □ Como o Jacobiano do resíduo do problema-fio é constante (igual a \(X\), não depende de \(\boldsymbol{\beta}\)), isso implica que o Jacobiano de qualquer função vetorial é sempre constante, independente do ponto onde é avaliado.
NotaTeste 7 — A regra da cadeia com Jacobiano
  • □ Se \(g(\mathbf{r})\) não fosse \(\mathbf{r}^T\mathbf{r}\), mas sim \(g(\mathbf{r})=\sum_i|r_i|\) (norma \(L_1\)), a mesma estrutura \(\nabla_{\boldsymbol{\beta}}L=\nabla_{\mathbf{r}}g\cdot J_{\mathbf{r}}(\boldsymbol{\beta})\) ainda se aplicaria em princípio, mas \(\nabla_{\mathbf{r}}g\) deixaria de existir em pontos onde algum \(r_i=0\).
  • □ Se \(X\) (o Jacobiano do resíduo) fosse a matriz identidade (hipoteticamente, mesmo número de observações e atributos), o gradiente do problema-fio se reduziria a \(\nabla_{\boldsymbol{\beta}}L=2(\boldsymbol{\beta}-\mathbf{y})^T\).
  • □ Numa rede neural com duas camadas, \(\mathbf{y}=f_2(f_1(\mathbf{x}))\), calcular o gradiente da perda em relação aos parâmetros da primeira camada exigiria compor o Jacobiano de \(f_2\) com o Jacobiano de \(f_1\), pela mesma lógica de regra da cadeia com Jacobiano vista nesta aula.
  • □ Como a regra da cadeia com Jacobiano envolve multiplicação de matrizes, e multiplicação de matrizes não é comutativa em geral, isso implica que a ordem \(\nabla_{\mathbf{r}}g\cdot J_{\mathbf{r}}(\boldsymbol{\beta})\) poderia ser trocada para \(J_{\mathbf{r}}(\boldsymbol{\beta})\cdot\nabla_{\mathbf{r}}g\) sem alterar o resultado, desde que as dimensões permitissem a multiplicação.
NotaTeste 8 — Verificação numérica
  • □ Se a perda fosse cúbica em \(\boldsymbol{\beta}\) (não quadrática), o erro de truncamento da diferença finita central para essa perda seria, em geral, diferente de zero, ao contrário do que ocorre para a perda quadrática do problema-fio (ver Convenções).
  • □ No limite em que \(h\) é escolhido igual a zero exatamente (não um valor pequeno, mas literalmente \(h=0\)), a fórmula de diferença finita central \([f(x+h)-f(x-h)]/(2h)\) deixa de estar definida.
  • □ Ao implementar do zero uma camada de rede neural (sem diferenciação automática disponível ainda), verificar o gradiente analítico por diferença finita central, na escala \(h\sim10^{-5}\)\(10^{-6}\), é prática recomendada antes de confiar na implementação para treinar o modelo.
  • □ Como o erro de arredondamento da diferença finita cresce conforme \(h\) diminui, isso implica que aumentar \(h\) o máximo possível (por exemplo, \(h=1\)) é sempre a escolha mais segura para verificar um gradiente.