| MedInc | HouseAge | MedHouseVal | |
|---|---|---|---|
| 0 | 3.5987 | 31.0 | 3.405 |
| 1 | 1.4267 | 37.0 | 0.523 |
| 2 | 4.0455 | 33.0 | 1.972 |
| 3 | 3.5500 | 36.0 | 2.128 |
| 4 | 2.3393 | 19.0 | 1.182 |
Álgebra Linear e Otimização para Aprendizado de Máquina
2026-09-13
Aula 5: SVD \(X=U\Sigma V^T\) (qualquer matriz, via Teorema Espectral aplicado a \(X^TX,XX^T\)); Eckart-Young-Mirsky (melhor aproximação de posto \(k\)); Decomposição Polar \(X=QS\).
5 aulas construíram uma linguagem para dados estáticos — nunca precisaram perguntar “como ajustar algo para reduzir um erro”.
Mas as Equações Normais (Aula 3) vieram de “a projeção minimiza \(\|\mathbf{y}-X\mathbf{w}\|^2\)” — minimizar uma função é, por definição, Cálculo. A Aula 3 usou essa ideia (via geometria) sem defini-la.
Parte 2 do curso (“Cálculo da Otimização Diferenciável”) fecha essa lacuna, a partir de hoje.
1. O que é derivada parcial, e por que sozinha não basta para qualquer direção?
2. Como generalizar para o vetor-gradiente, calculado por extenso numa perda quadrática real?
3. O que é derivada direcional, e por que o gradiente é a direção de subida mais íngreme?
4. Como generalizar para uma função vetorial — o Jacobiano?
\(L(\boldsymbol{\beta})=\|X\boldsymbol{\beta}-\mathbf{y}\|^2\) (California Housing). Aula 3 resolveu de uma vez (\(X^TX\hat{\boldsymbol{\beta}}=X^T\mathbf{y}\)) — mas imagine milhões de parâmetros (rede neural): resolver o sistema está fora de cogitação.
Dado \(\boldsymbol{\beta}\) qualquer: em que direção mover \(\boldsymbol{\beta}\) para reduzir \(L\) mais rápido, usando só informação local?
Com 1 parâmetro já sabemos achar o mínimo. Com 4, o quê muda?
Dica: o que o Cálculo 1 ensina sobre mínimos, e o que precisa mudar com mais de uma variável?
O que muda de 1 para 4 parâmetros — Resposta
Voltando à pergunta: o objeto que falta é o gradiente — um vetor, não um número — construído a partir de derivadas parciais, tema do Bloco 2.
Ideia central: para entender como \(f(x_1,\dots,x_n)\) muda, fixe todas as variáveis exceto uma, e aplique a derivada de uma variável (Cálculo 1) só àquela.
Definição (Derivada Parcial — MathML Def. 5.5)
\(\dfrac{\partial f}{\partial x_i} = \lim_{h\to 0} \dfrac{f(x_1,\dots,x_i+h,\dots,x_n)-f(\mathbf{x})}{h}\) — as demais variáveis ficam fixas.
Cada \(\partial f/\partial x_i\) é a derivada de uma variável do Cálculo 1, aplicada à função com as demais variáveis “congeladas” — nenhuma ferramenta nova para calcular uma parcial isolada.
Versão simplificada com \(2\) parâmetros, \(5\) bairros, \(2\) atributos (MedInc, HouseAge), para a conta caber à mão.
| MedInc | HouseAge | MedHouseVal | |
|---|---|---|---|
| 0 | 3.5987 | 31.0 | 3.405 |
| 1 | 1.4267 | 37.0 | 0.523 |
| 2 | 4.0455 | 33.0 | 1.972 |
| 3 | 3.5500 | 36.0 | 2.128 |
| 4 | 2.3393 | 19.0 | 1.182 |
\(L(\beta_1,\beta_2)=\sum_i(\beta_1\texttt{MedInc}_i+ \beta_2\texttt{HouseAge}_i-\texttt{MedHouseVal}_i)^2\). Em \((\beta_1,\beta_2)=(0{,}5;\,0{,}02)\): aproximar \(\partial L/ \partial\beta_1\) pelo limite (Def. 5.5) com \(h\) pequeno, comparar com a derivada exata.
L(0.5, 0.02) = 2.612078
dL/db1: limite numérico (h=0.0001) = 5.641952 | fórmula exata 2*sum(r*MedInc) = 5.637009
dL/db2: limite numérico (h=0.0001) = 95.547400 | fórmula exata 2*sum(r*HouseAge) = 95.039800
Praticamente idênticos (diferença de \(h\) finito) — Def. 5.5 concorda com a derivada por manipulação algébrica direta: \(\partial L/\partial\beta_1=2\sum_i r_i\texttt{MedInc}_i\), \(\partial L/\partial\beta_2=2\sum_i r_i\texttt{HouseAge}_i\) (\(r_i=\beta_1\texttt{MedInc}_i+\beta_2\texttt{HouseAge}_i- \texttt{MedHouseVal}_i\)).
Cada parcial isola o efeito de um atributo (resíduo \(\times\) coluna correspondente) — generalizado e organizado em notação matricial no Bloco 3: o gradiente.
Se a perda dependesse só de \(\beta_1\), o que ocorre com \(\partial L/\partial\beta_2\)?
Dica: qual das duas variáveis deixaria de existir na função?
MedHouseVal\(_i\) (sinal trocado) para todos os \(5\) bairros em \((\beta_1,\beta_2)=(0,0)\), isso impediria calcular \(\partial L/\partial\beta_1\) nesse ponto.Derivada parcial: o que muda e o que não muda — Resposta
Voltando à pergunta: “fixar as demais variáveis” é uma operação na definição (qual variável varia), não uma afirmação de que as demais variáveis não influenciam o valor numérico da derivada — elas influenciam, através do ponto onde a derivada é avaliada. O Bloco 3 generaliza isso para todas as \(4\) variáveis de uma vez.
Definição (Gradiente — MathML Def. 5.5, completa)
\(\nabla_{\mathbf{x}}f=\dfrac{df}{d\mathbf{x}}=\left[\dfrac{\partial f} {\partial x_1}\ \cdots\ \dfrac{\partial f}{\partial x_n}\right]\in \mathbb{R}^{1\times n}\) — vetor-linha, chamado gradiente (= Jacobiano, caso escalar).
Observação (convenção linha — MathML, p. 147)
Vetor-linha, não coluna (escolha deliberada): generaliza direto para funções vetoriais (gradiente \(\to\) matriz, o Jacobiano); aplica a regra da cadeia multivariada sem se preocupar com dimensão.
Aviso: parte da literatura de ML usa gradiente como vetor-coluna (Aula 8, Gradiente Descendente, vai usar essa forma) — mesma informação, transposta uma da outra; nunca misturar as duas no mesmo cálculo.
Regras de derivação (MathML §5.2.1)
Premissa: \(\mathbf{r}(\boldsymbol{\beta}):=X\boldsymbol{\beta}- \mathbf{y}\), \(L=\mathbf{r}^T\mathbf{r}=\sum_ir_i^2\), \(r_i=\sum_kX_{ik}\beta_k-y_i\) (afim em \(\boldsymbol{\beta}\)).
Passo 1 (soma + cadeia): \(\partial L/\partial\beta_j=\sum_i \partial(r_i^2)/\partial\beta_j=\sum_i2r_i\cdot\partial r_i/ \partial\beta_j\).
Passo 2 (parte afim): \(\partial r_i/\partial\beta_j=X_{ij}\) diretamente.
Passo 3 (montagem): \(\partial L/\partial\beta_j=2\sum_iX_{ij}r_i= 2(X^T\mathbf{r})_j\Rightarrow\nabla_{\boldsymbol{\beta}}L= 2\mathbf{r}^TX=2(X\boldsymbol{\beta}-\mathbf{y})^TX\).
Resultado
\(\nabla_{\boldsymbol{\beta}}\|X\boldsymbol{\beta}-\mathbf{y}\|^2= 2(X\boldsymbol{\beta}-\mathbf{y})^TX\).
Ponte com a Aula 3: \(\nabla L=\mathbf{0}\iff X^T(X\boldsymbol{ \beta}-\mathbf{y})=\mathbf{0}\iff X^TX\boldsymbol{\beta}=X^T\mathbf{y}\) — exatamente as Equações Normais. “Resíduo ortogonal” (Aula 3) e “gradiente zero” (hoje) são a mesma condição, duas portas diferentes.
Conferir \(\nabla_{\boldsymbol{\beta}}L\) em \(\boldsymbol{\beta}_0= (0{,}4;\,0{,}02;\,-0{,}15;\,0{,}7)\) (ponto qualquer, não o ótimo) contra diferença finita central.
beta0 = [ 0.4 0.02 -0.15 0.7 ]
L(beta0) = 10862.179369274
gradiente (fórmula 2 X^T r, forma coluna): [-5846.1288 71951.8811 4014.1279 1643.7195]
gradiente (diferença finita central): [-5846.1288 71951.8811 4014.1279 1643.7195]
diferença máxima absoluta: 8.144434104906395e-08
Coincidem até a \(4^a\) casa decimal (diferença \(<10^{-6}\), erro de truncamento da diferença finita). Calculado em forma coluna (\(2X^T\mathbf{r}\)) — mesma informação do vetor-linha derivado acima, transposta.
Trocar o quadrado por \(L_1\) (\(\sum_i|r_i|\)): a derivação continua igual?
Dica: releia o Passo 1 — qual regra deixa de valer, exatamente?
Trocar quadrado por \(L_1\) — Resposta
Voltando à pergunta: não, a substituição por \(L_1\) quebra precisamente a regra da cadeia do Passo 1 — \(|t|\) tem um “bico” em \(t=0\), sem derivada aí. Otimizar perdas assim (não-suaves) exige uma ferramenta diferente (subgradientes), fora do escopo desta aula — reservado para a Aula 15.
Cada \(\partial L/\partial\beta_j\) mede a taxa de variação ao longo de um eixo. Um passo de treinamento move todos os parâmetros ao mesmo tempo, numa direção arbitrária \(\mathbf{v}\) — a pergunta do Problema Motivador não é sobre eixos, é sobre todas as direções.
Construção nossa: nenhuma das 3 fontes define derivada direcional no material coberto (MathML não usa o termo; optml.pdf define, mas está reservado para aulas posteriores). Usamos só regra da cadeia (Bloco 3) + Cauchy-Schwarz (Aula 1).
Definição (Derivada Direcional — construção nossa)
\(D_{\mathbf{v}}f(\mathbf{x}):=\lim_{h\to0}\dfrac{f(\mathbf{x}+ h\mathbf{v})-f(\mathbf{x})}{h}\), \(\|\mathbf{v}\|=1\).
Generaliza a parcial: \(\mathbf{v}=\mathbf{e}_j\Rightarrow D_{\mathbf{e}_j}f(\mathbf{x})=\partial f/\partial x_j\).
Premissa: \(g(h):=f(\mathbf{x}+h\mathbf{v})\Rightarrow D_{\mathbf{v}}f(\mathbf{x})=g'(0)\).
Passo 1 (cadeia, \(x_i(h)=x_i+hv_i\)): \(g'(h)=\sum_i\dfrac{\partial f}{\partial x_i}(\mathbf{x}+h\mathbf{v})\,v_i\).
Passo 2 (\(h=0\)): \(D_{\mathbf{v}}f(\mathbf{x})=\sum_i\dfrac{\partial f}{\partial x_i}(\mathbf{x})v_i=\nabla f(\mathbf{x})\,\mathbf{v}\) (vetor-linha \(\times\) vetor-coluna = produto interno).
MathML afirma sem provar (“a derivada aponta na direção de subida mais íngreme”, p. 141 e 227-228). Provamos via Cauchy-Schwarz (Aula 1).
Proposição (prova nossa)
\(\nabla f(\mathbf{x})\ne\mathbf{0}\): entre todo \(\mathbf{v}\) unitário, \(D_{\mathbf{v}}f(\mathbf{x})\) é máxima em \(\mathbf{v}^\star=\nabla f(\mathbf{x})^T/\|\nabla f(\mathbf{x})\|\), valor máximo \(\|\nabla f(\mathbf{x})\|\).
Prova: \(D_{\mathbf{v}}f=\langle\nabla f(\mathbf{x})^T,\mathbf{v} \rangle\). Cauchy-Schwarz: \(|\langle\nabla f^T,\mathbf{v}\rangle|\le \|\nabla f\|\cdot1\), igualdade sse \(\mathbf{v}\parallel\nabla f^T\) (mesmo sentido, para o máximo).
\(\mathbf{v}^\star=\nabla f^T/\|\nabla f\|\Rightarrow D_{\mathbf{v}^\star}f=\|\nabla f\|^2/\|\nabla f\|=\|\nabla f\|\) — bate com a cota, logo é o máximo. \(\blacksquare\)
Gradiente (transposto) = direção de subida mais íngreme, normalizado; sua norma = taxa de aumento ótima. \(-\nabla f^T/\|\nabla f\|\) = descida mais íngreme (Aula 8, Gradiente Descendente).
Exemplo do Bloco 2, em \((\beta_1,\beta_2)=(0{,}5;\,0{,}02)\): \(\nabla L \approx[5{,}637\ \ 95{,}040]\) (norma \(\approx95{,}207\)). Calcular \(D_{\mathbf{v}}L\) para todos os ângulos, confirmar máximo na direção do gradiente.
gradiente 2D em b0: [ 5.637 95.0398], norma = 95.2068
ângulo do gradiente: 86.61 graus
max(D_v) sobre a grade de ângulos: 95.2061 (em theta = 86.83 graus)
Painel direito: \(D_{\mathbf{v}}L\) varia como cosseno, máximo \(=\|\nabla L\|\approx95{,}207\) exatamente no ângulo do gradiente (\(\approx86{,}6°\)); mínimo (mesma magnitude, sinal oposto) na direção oposta.
Painel esquerdo: gradiente (seta ampliada) aponta para fora, sentido de crescimento. Eixos em escalas diferentes \(\Rightarrow\) ortogonalidade às curvas não fica visualmente exata aqui (é exata em eixos de mesma escala — o fato matemático não depende do desenho).
\(\nabla f(\mathbf{x})=\mathbf{0}\): o que a Proposição diz sobre a direção de subida?
Dica: releia a hipótese exata da Proposição.
Gradiente nulo e direção de subida — Resposta
Voltando à pergunta: num ponto de gradiente nulo, a Proposição simplesmente não se aplica — não existe direção de subida garantida de primeira ordem. Esse é, precisamente, o critério de ponto crítico que abre a Aula 7 (convexidade e a Hessiana).
Gradiente (Bloco 3): \(f:\mathbb{R}^n\to\mathbb{R}\). Mas \(\mathbf{r}(\boldsymbol{\beta}):=X\boldsymbol{\beta}-\mathbf{y}\) (Bloco 3) é \(\mathbb{R}^4\to\mathbb{R}^{16\,640}\) — um número por observação.
Definição (Jacobiano — MathML Def. 5.6)
\(f:\mathbb{R}^n\to\mathbb{R}^m\Rightarrow J=\nabla_{\mathbf{x}}f\in \mathbb{R}^{m\times n}\), \(J(i,j)=\partial f_i/\partial x_j\). Caso \(m=1\): \(J\) = vetor-linha = o gradiente já definido (o gradiente é caso particular do Jacobiano).
Convenção (numerator layout, MathML p. 150-151): linhas = \(f\), colunas = \(\mathbf{x}\). Existe a denominator layout (transposta) — mesma cautela do Bloco 3, agora para matrizes.
\(r_i(\boldsymbol{\beta})=\sum_kX_{ik}\beta_k-y_i\Rightarrow J_{\mathbf{r}}(i,j)=\partial r_i/\partial\beta_j=X_{ij}\Rightarrow J_{\mathbf{r}}(\boldsymbol{\beta})=X\).
O Jacobiano do resíduo é a própria matriz de design — não coincidência: função afim \(\mathbf{r}=A\boldsymbol{\beta}+ \mathbf{c}\Rightarrow J_{\mathbf{r}}=A\) (constante), mesmo fato do Passo 2 do Bloco 3.
MathML resolve exatamente este problema (mínimos quadrados de modelo linear) como exemplo de regra da cadeia com Jacobiano (Exemplo 5.11, tradução/adaptação nossa; usam \(\mathbf{e}=\mathbf{y}-\Phi \boldsymbol{\theta}=-\mathbf{r}\)).
Regra da cadeia com Jacobiano (MathML Exemplo 5.11)
\(L(\boldsymbol{\beta})=g(\mathbf{r}(\boldsymbol{\beta}))\), \(g(\mathbf{r})=\mathbf{r}^T\mathbf{r}\Rightarrow\nabla_{\boldsymbol{ \beta}}L=\nabla_{\mathbf{r}}g\cdot J_{\mathbf{r}}(\boldsymbol{\beta})\).
\(\nabla_{\mathbf{r}}g(\mathbf{r})=2\mathbf{r}^T\) (mesma regra do Passo 1, Bloco 3); \(J_{\mathbf{r}}(\boldsymbol{\beta})=X\) (Bloco 5).
\(\nabla_{\boldsymbol{\beta}}L=(2\mathbf{r}^T)(X)=2(X\boldsymbol{\beta}- \mathbf{y})^TX\) — idêntico ao Bloco 3, por rota diferente (sem repetir a soma termo a termo).
Vantagem citada pelo MathML: a rota direta (expandir tudo) “continua prática para funções simples, mas fica impraticável para composições profundas” — o caso de redes neurais com várias camadas (Aula 10, Diferenciação Automática).
Confirmar \(J_{\mathbf{r}}(\boldsymbol{\beta})=X\): a \(j\)-ésima coluna de \(J_{\mathbf{r}}\) (diferença finita) deve coincidir com a \(j\)-ésima coluna de \(X\).
coluna 0 (MedInc): erro máximo |J_numerico - X[:,0]| = 1.15e-10
coluna 1 (HouseAge): erro máximo |J_numerico - X[:,1]| = 1.34e-10
coluna 2 (AveRooms): erro máximo |J_numerico - X[:,2]| = 2.29e-10
coluna 3 (AveBedrms): erro máximo |J_numerico - X[:,3]| = 1.47e-10
erro máximo entre as 4 colunas: 2.29e-10
Erro máximo \(\sim10^{-10}\) (puro truncamento) nas \(4\) colunas — confirma \(J_{\mathbf{r}}(\boldsymbol{\beta})=X\) exatamente, para qualquer \(\boldsymbol{\beta}\) (Jacobiano de função afim não depende do ponto).
Modelo com 2 saídas: como muda a forma do Jacobiano do resíduo?
Dica: quantas linhas/colunas tem um Jacobiano \(m\times n\), e o que muda quando \(m\) aumenta?
Jacobiano com múltiplas saídas — Resposta
Voltando à pergunta: o Jacobiano generaliza exatamente nessa direção — mais saídas, mais linhas; mais parâmetros, mais colunas — sem exigir nenhuma mudança na definição, só na contagem de \(m\) e \(n\).
Blocos anteriores já usaram diferença finita central sem discutir como escolher \(h\). Implementações de gradiente/Jacobiano são código — têm bugs. Competência desta aula: verificar numericamente, não só calcular.
\(h\) grande: erro de truncamento \(O(h^2f''')\) (Taylor, padrão de Cálculo Numérico). \(h\) pequeno: erro de arredondamento \(O(\epsilon_{\text{máquina}}/h)\) (subtração de números quase iguais).
Prática usual: \(h\sim\epsilon_{\text{máquina}}^{1/3}\approx 10^{-5}\)–\(10^{-6}\) (faixa já usada, sem justificar, nos chunks anteriores).
Caso especial honesto: \(L(\boldsymbol{\beta})\) é exatamente quadrática \(\Rightarrow f'''=0\Rightarrow\) erro de truncamento zero para esta perda — só arredondamento aparece, sem o “U” clássico.
h maior -> erro menor (só arredondamento, cresce conforme h diminui):
h=1.00e-02 erro=4.547e-11
h=1.22e-04 erro=5.828e-09
h=1.49e-06 erro=5.909e-07
h=1.82e-08 erro=2.451e-05
h=2.23e-10 erro=1.460e-03
h=2.72e-12 erro=1.528e-01
Erro cresce monotonicamente conforme \(h\to0\) (sem “U”, sem truncamento). Para função com \(f'''\ne0\) (a maioria das perdas de redes neurais), o “U” reaparece — \(h\) grande demais também tem custo.
Faixa \(h\in[10^{-6},10^{-4}]\) (Blocos 2-5, sombreada): pequena o bastante para não expor arredondamento, grande o bastante para funcionar mesmo em funções não-quadráticas — escolha prática segura por padrão.
1. \(\partial f/\partial x_j\): taxa de variação num eixo só — sozinha não cobre outras direções (derivada direcional, pergunta 3).
2. Gradiente = vetor-linha das parciais (Def. 5.5). Para \(L=\|X\boldsymbol{\beta}-\mathbf{y}\|^2\): \(\nabla_{\boldsymbol{\beta}}L =2(X\boldsymbol{\beta}-\mathbf{y})^TX\) — anulamento = Equações Normais.
3. \(D_{\mathbf{v}}f=\nabla f\cdot\mathbf{v}\); Cauchy-Schwarz (Aula 1) prova máximo em \(\mathbf{v}=\) gradiente normalizado, valor \(\|\nabla f\|\).
4. Jacobiano (Def. 5.6): matriz \(m\times n\), gradiente = caso \(m=1\). \(J_{\mathbf{r}}(\boldsymbol{\beta})=X\) recupera o Bloco 3 via regra da cadeia — rota que escala para redes neurais (Aula 10).
\(\nabla L=\mathbf{0}\) identifica ponto crítico — nenhuma direção de primeira ordem aumenta/diminui \(f\) ali (a Proposição do Bloco 4 deixa de se aplicar exatamente nesse caso).
Mas ponto crítico não é, automaticamente, mínimo — pode ser máximo ou sela. Para \(L(\boldsymbol{\beta})=\|X\boldsymbol{\beta}- \mathbf{y}\|^2\), funciona porque \(X^TX\) é PSD (Aula 4) — garantia extra, não do gradiente sozinho.
O que decide mínimo/máximo/sela, em geral: a segunda derivada em várias variáveis, a Hessiana — Aula 7 (Convexidade e a Hessiana).
UNICAMP — Instituto de Computação