Machine Learning · Insper

Redes Neurais

Abordagem fundamental

O que uma rede calcula e como ela aprende os seus pesos

O caminho desta parte

  1. Um neurônioa regressão logística como neurônio; o perceptron
  2. Camadas ocultasXOR, uma camada oculta, ativações não lineares
  3. Passagem diretaum produto de matrizes por camada; contar parâmetros
  4. Retropropagaçãoregra da cadeia, seis passos, um simulador
  5. Na práticaescala, largura, weight decay
Cada etapa responde a uma pergunta: o que um único neurônio aprende? → por que uma reta não basta e o que as camadas acrescentam? → o que uma rede calcula? → como ela aprende todos os pesos de uma vez? → como treiná-la bem?
Etapa 1 · o que um único neurônio aprende?

Um neurônio é uma regressão logística

\[ z = w^\top x + b, \qquad a = \varphi(z) \]

Entradas \(x\), pesos \(w\), viés \(b\), pré-ativação \(z\), função de ativação \(\varphi\). Com \(\varphi = \sigma\), a sigmoide \(\sigma(z) = 1/(1 + e^{-z})\), isso é a regressão logística: \(a\) é a probabilidade da classe positiva.

à mão

\(w = (2, -1)\), \(b = 0{,}5\), \(x = (1, 2)\): \(z = 2 \cdot 1 - 1 \cdot 2 + 0{,}5 = 0{,}5\) e \(a = \sigma(0{,}5) = 0{,}622\).

Tudo nesta aula muda uma de duas coisas: a ativação \(\varphi\) (um degrau, uma sigmoide, uma ReLU) ou a ligação (um neurônio ou camadas deles).

O perceptron (Rosenblatt, 1958)

Ativação: um degrau, \(\hat y = +1\) se \(z > 0\), \(-1\) caso contrário. Rótulos \(y \in \{-1, +1\}\).

Visite os pontos um a um. Se o ponto \(i\) está errado ou sobre a reta (\(y_i z_i \le 0\)), com tamanho de passo \(\eta\):

\[ w \leftarrow w + \eta \, y_i \, x_i, \qquad b \leftarrow b + \eta \, y_i \]

Depois da atualização, o escore com sinal do ponto, \(y_i z_i\), cresce \(\eta(\lVert x_i \rVert^2 + 1) > 0\): a reta se inclina para classificá-lo.

Repita em épocas (passadas completas) até uma época sem erro. Se alguma reta separa as classes com margem \(\gamma\) e todo ponto fica a uma distância de no máximo \(R\) da origem, são no máximo \((R/\gamma)^2\) erros (Novikoff, 1962), mas ele para numa reta qualquer, não na melhor.

Três atualizações à mão, passo a passo

Seis pontos: A, E, F são \(+1\); B, C, D são \(-1\). Início \(w = (0, 0)\), \(b = 0\), \(\eta = 1\). Preveja. Que pontos vão causar uma atualização e quantas épocas até uma passar sem erro?

Etapa 2 · por que uma reta não basta e o que as camadas acrescentam?

XOR: por que uma reta não basta

\((0, 1)\) e \((1, 0)\) são \(+1\); \((0, 0)\) e \((1, 1)\) são \(-1\). Uma reta separadora \(w_1 x_1 + w_2 x_2 + b = 0\) precisaria de:

  • \((0,0)\) negativo: \(b < 0\)
  • \((0,1)\), \((1,0)\) positivos: \(w_2 + b > 0\), \(w_1 + b > 0\)
  • \((1,1)\) negativo: \(w_1 + w_2 + b < 0\)

Some as duas do meio: \(w_1 + w_2 + 2b > 0\), então \(w_1 + w_2 + b > -b > 0\). Contradição.

Minsky e Papert, Perceptrons (1969): um único neurônio não calcula o XOR nem nada que dependa de uma combinação de atributos que nenhuma reta expressa.

Simulador: o perceptron no XOR

Escolha o preset XOR e aperte Época inteira algumas vezes. Preveja. Os erros por época vão chegar a zero? Para onde vão os pesos?

O mesmo muro para a regressão logística

Um XOR com ruído: 400 pontos em volta dos quatro cantos (205 e 195 por classe), validação cruzada em 5 folds.

regressão logística

0,485
acurácia na validação cruzada: nível do acaso

suas probabilidades

0,37–0,61
P(classe 1) em todo lugar: ela fica em cima do muro
Preveja. XOR é "\(x_1\) OU \(x_2\), mas NÃO os dois". Cada pedaço é linearmente separável. Como vários neurônios poderiam resolvê-lo?

Uma camada oculta resolve o XOR

  • \(h_1\): \(x_1 + x_2 - 0{,}5 > 0\), OU
  • \(h_2\): \(x_1 + x_2 - 1{,}5 > 0\), E
  • saída: \(h_1 - h_2 - 0{,}5 > 0\), XOR
\(x_1\)\(x_2\)\(h_1\)\(h_2\)\(z_{\text{saída}}\)saída
0000−0,50
01100,51
10100,51
1111−0,50

Linha \((1, 1)\): \(z_1 = 1{,}5 \Rightarrow h_1 = 1\); \(z_2 = 0{,}5 \Rightarrow h_2 = 1\); \(z_{\text{saída}} = 1 - 1 - 0{,}5 = -0{,}5 \Rightarrow 0\). Todos os pesos escolhidos à mão.

A camada oculta constrói atributos novos

À esquerda, o XOR com ruído e as retas OU e E; a classe 1 fica entre elas. À direita, no espaço oculto os pontos caem em três cantos e uma reta separa as classes
A camada oculta calcula atributos em que o problema fica linearmente separável; a saída é um classificador linear sobre eles. Atributos polinomiais faziam isso à mão, o kernel da SVM (support vector machine, máquina de vetores de suporte) implicitamente: uma rede os aprende.

Do degrau à sigmoide: algo para derivar

O degrau tem derivada 0 em todo lugar: o gradiente não diz nada. Troque-o por uma sigmoide e multiplique cada peso por 10:

\(x_1\)\(x_2\)\(h_1\)\(h_2\)P(XOR = 1)
000,0070,0000,007
010,9930,0070,992
100,9930,0070,992
111,0000,9930,007
A mesma rede, agora derivável: o tipo de rede que um treino por gradiente consegue encontrar sozinho.

Funções de ativação

Sigmoide, tanh e ReLU com suas derivadas: a inclinação da sigmoide nunca passa de 0,25; a tanh chega a 1; a ReLU tem inclinação 1 para toda entrada positiva
maior derivada
sigmoide0,25, em \(z = 0\)
tanh1, em \(z = 0\)
ReLU1, para todo \(z > 0\)
A retropropagação multiplica uma derivada por camada: em 10 camadas de sigmoide, no máximo \(0{,}25^{10} \approx 10^{-6}\). O gradiente que desaparece é o motivo de a ReLU (rectified linear unit, unidade linear retificada, \(\max(0, z)\)) ser o padrão nas camadas ocultas.

Sem não linearidade, as camadas colapsam

\(W_2 (W_1 x + b_1) + b_2\) é uma camada com pesos \(W_2 W_1\) e viés \(W_2 b_1 + b_2\): função linear de função linear é linear.

duas camadas lineares

−5,4084

uma camada fundida

−5,4084

ReLU no meio

−5,3273

No XOR com ruído, 8 unidades ocultas:

ativaçãoacurácia na validação cruzada
identity0,510
relu0,983
Etapa 3 · o que uma rede calcula?

A passagem direta: um produto de matrizes por camada

\[ z = W x + b^{h}, \quad h = \sigma(z), \quad u = v^\top h + b^{y}, \quad \hat{y} = \sigma(u) \]

\(W\): uma linha de pesos por unidade oculta; \(b^h\), \(b^y\): vieses; \(v\): os pesos da saída; \(u\): a pré-ativação da saída. Para um lote de linhas \(X\): \(H = \sigma(X W^\top + b^h)\), e é por isso que as redes rodam tão bem em GPUs (graphics processing units, unidades de processamento gráfico), máquinas de multiplicar matrizes.

uma rede 2-2-1, um exemplo \(x = (0{,}5;\ 0{,}8)\), alvo \(y = 0\)

\(W = \begin{pmatrix} 0{,}2 & 0{,}4 \\ 0{,}6 & 0{,}8 \end{pmatrix}\), \(b^h = (0{,}1;\ 0{,}2)\), \(v = (0{,}3;\ 0{,}5)\), \(b^y = 0{,}4\)

Preveja. Todos os pesos são positivos e o alvo é 0. \(\hat y\) vai ficar perto de 0? O passo 1 do simulador da próxima etapa calcula isso, valor por valor.

Contando parâmetros

Uma camada com \(n_\text{ent}\) entradas e \(n_\text{sai}\) unidades: \(n_\text{ent} \cdot n_\text{sai}\) pesos e \(n_\text{sai}\) vieses, \((n_\text{ent} + 1) \cdot n_\text{sai}\) parâmetros. Preveja. Uma camada oculta de 256 unidades ou duas de 64: qual tem mais?

arquiteturaparâmetros
2 → 2 → 19
64 → 10650
64 → 32 → 102.410
64 → 256 → 1019.210
64 → 64 → 64 → 108.970
256 unidades: mais parâmetros que imagens no conjunto de dígitos inteiro (1.797). A contagem cresce com o produto das larguras vizinhas; regularizar não é opcional.
Etapa 4 · como ela aprende todos os pesos de uma vez?

Retropropagação: a regra da cadeia, organizada

Um peso da primeira camada só chega à perda \(L = (\hat y - y)^2\) através de tudo o que vem depois dele:

\[ w_{11} \;\to\; z_1 \;\to\; h_1 \;\to\; u \;\to\; \hat y \;\to\; L \]
  1. gradiente da perda: \(\partial L / \partial \hat y = 2(\hat y - y)\)
  2. delta da saída: \(\delta_y = \partial L / \partial u = 2(\hat y - y) \cdot \hat y (1 - \hat y)\), pois \(\sigma'(u) = \hat y(1 - \hat y)\)
  3. pesos da saída: \(\partial L / \partial v_{1j} = \delta_y \, h_j\)
  4. deltas ocultos: \(\delta_{h_j} = \delta_y \, v_{1j} \cdot h_j (1 - h_j)\)
  5. pesos ocultos: \(\partial L / \partial w_{jk} = \delta_{h_j} \, x_k\)
  6. atualização, com passo \(\eta\): \(p \leftarrow p - \eta \, \partial L / \partial p\) para todo parâmetro \(p\)
O gradiente de cada peso = o delta da unidade que ele alimenta × o valor que entrou nele. Rumelhart, Hinton & Williams (1986).

Retropropagação, passo a passo

A rede 2-2-1 da etapa 3. O passo 1 é a passagem direta; os passos 2 a 6 mandam o gradiente de volta; o passo 7 atualiza com \(\eta = 0{,}5\). Preveja. Qual dos 9 gradientes será o menor? (Clique no simulador para usar as setas dentro dele.)

Etapa 5 · como treiná-la bem?

Na prática: escalone as entradas

Spambase: 4.601 e-mails, 57 atributos, desvios-padrão de 0,076 a 606.

MLP (multi-layer perceptron, perceptron multicamadas)acurácia na validação cruzada
entradas cruas0,927
StandardScaler antes0,948
Dois pontos com uma linha de pré-processamento, dentro do pipeline. Atributos sem escala esticam a superfície de perda num vale estreito, como nos modelos lineares.

Largura e weight decay, nas luas com ruído

Preveja. 1, 3, 10 ou 100 unidades ocultas, quase sem penalidade: qual tem a melhor acurácia na validação cruzada? E o que o alpha, a penalidade L2 nos pesos (weight decay, decaimento de pesos), faz com as 100 unidades?
unidades ocultastreinovalidação
regressão logística0,830
10,8420,843
30,8970,873
100,9380,893
1000,9970,857
100 unidades, alphatreinovalidação
0,00010,9970,857
0,010,9930,880
0,10,9390,903
10,9140,917
100,8370,830

As fronteiras

Fronteiras de decisão nas luas com ruído: 1 unidade traça uma reta, 3 e 10 unidades a dobram, 100 unidades contornam pontos isolados, 100 unidades com alpha = 1 dão uma curva suave
A receita de todo modelo do curso: uma arquitetura generosa, depois ajustar o alpha (e a largura) por validação cruzada.

Resumo

  1. Um neurônio = soma ponderada + ativação; com sigmoide, regressão logística; com degrau, o perceptron.
  2. Um neurônio traça uma reta: o XOR pede uma camada oculta, que calcula atributos novos.
  3. A ativação precisa ser não linear, senão as camadas colapsam; a ReLU impede o gradiente de desaparecer.
  4. Passagem direta: um produto de matrizes por camada. Retropropagação: deltas mandados de volta, um gradiente exato por peso.
  5. Na prática: escalonar e depois ajustar largura e alpha por validação cruzada.
sintomao que fazer
treino perto de 1, validação bem abaixosubir o alpha ou usar menos unidades
treino e validação no nível da regressão logísticamais unidades, menos alpha, uma ativação não linear
Lab fundamental · cerca de 30 min, em duplas

Uma rede neural em dígitos manuscritos, passos 1 a 5

  • 1.797 dígitos de 8 × 8 pixels: dizer o dígito. Trancar o teste, fixar uma baseline, comparar três modelos nos mesmos folds, ajustar a largura e o alpha.
  • Baixe o notebook do lab e abra no Jupyter ou no Colab; roda em cerca de um minuto.
  • Em cada passo, responda o Preveja antes de rodar.
  • Simulações: uma rede sem ativação (passo 4) e quão estreita a rede pode ser? (passo 5).

Ritmo: passos 1 a 3 em 6 min; passo 4 e a primeira simulação em 10 min; passo 5 e a segunda em 14 min.