Redes Neurais e Backpropagation

  • Redes Neurais
  • Backpropagation

Exercício 1

Considere uma rede com uma camada interna, em que tanto ela como a camada de saída possuem apenas um ́unico nó. Ambas a funções de ativação são a sigmóide. Seja y a saída. Assuma que função custo é dada por $\frac{(y − z)^ 2}{2}$, onde z é a classificação do dado univariado x. Use backpropagation para calcular o gradiente da função custo com respeito aos quatro pesos da rede.

Resposta

Podemos esquematizar a rede da seguinte forma:

image.png

Onde a última seta leva à saída, denotada por $\sigma_2$ . Usamos a seguinte função como função de custo:

\[C = \frac{1}{2}(\sigma_2 - z)^2.\]

Queremos encontrar o gradiente relacionado a cada peso e ao bias.


$w_2$:

\[\frac{\partial C}{\partial w_2} \;=\; \underbrace{\frac{\partial i_2}{\partial w_2}}_{\text{(III)}} \;\cdot\; \underbrace{\frac{\partial \sigma_2}{\partial i_2}}_{\text{(II)}} \;\cdot\; \underbrace{\frac{\partial C}{\partial \sigma_2}}_{\text{(I)}}.\]

(I) $\displaystyle \frac{\partial C}{\partial \sigma_2}$:

Vamos usar a regra da cadeia.

\[\frac{\partial C}{\partial \sigma_2} \;=\; \frac{\partial}{\partial \sigma_2}\left[\tfrac{1}{2}\,(\sigma_2 - z)^{2}\right] \;=\; (\sigma_2 - z)\,(1) \;=\; (\sigma_2 - z).\]

(II) $\displaystyle \frac{\partial \sigma_2}{\partial i_2}$:

\[\frac{\partial \sigma_2}{\partial i_2} \;=\; \sigma_2\,(1 - \sigma_2).\]

A demonstração da derivada da sigmoide foi feita na lista anterior

(III) $\displaystyle \frac{\partial i_2}{\partial w_2}$:

A entrada $i_2$ é dada por $i_2 = w_2 \,\sigma_1 + b_2$. Assim:
\(\frac{\partial i_2}{\partial w_2} \;=\; \sigma_1.\)

Reunindo tudo: \(\frac{\partial C}{\partial w_2} \;=\; \bigl(\sigma_1\bigr) \;\cdot\; \bigl(\sigma_2\,(1 - \sigma_2)\bigr) \;\cdot\; \bigl(\sigma_2 - z\bigr).\)


$b_2$:

Novamente, via regra da cadeia: \(\frac{\partial C}{\partial b_2} \;=\; \underbrace{\frac{\partial i_2}{\partial b_2}}_{\text{(III)}} \;\cdot\; \underbrace{\frac{\partial \sigma_2}{\partial i_2}}_{\text{(II)}} \;\cdot\; \underbrace{\frac{\partial C}{\partial \sigma_2}}_{\text{(I)}}.\)

  • Já sabemos que:
    • $\displaystyle \frac{\partial C}{\partial \sigma_2} = \sigma_2 - \sigma_2$,
    • $\displaystyle \frac{\partial \sigma_2}{\partial i_2} = \sigma_2\,(1 - \sigma_2)$

(III) $\displaystyle \frac{\partial i_2}{\partial b_2}$:

Temos que $i_2 = w_2\,\sigma_1 + b_2$, logo \(\frac{\partial i_2}{\partial b_2} =1.\)

Então: \(\frac{\partial C}{\partial b_2} \;=\; (1) \;\cdot\; \bigl(\sigma_2\,(1 - \sigma_2)\bigr) \;\cdot\; \bigl(\sigma_2 - z\bigr).\)


$w_1$:

\[\frac{\partial C}{\partial w_1} \;=\; \underbrace{\frac{\partial i_1}{\partial w_1}}_{\text{(V)}} \;\cdot\; \underbrace{\frac{\partial \sigma_1}{\partial i_1}}_{\text{(IV)}} \;\cdot\; \underbrace{\frac{\partial i_2}{\partial \sigma_1}}_{\text{(III')}} \;\cdot\; \underbrace{\frac{\partial \sigma_2}{\partial i_2}}_{\text{(II)}} \;\cdot\; \underbrace{\frac{\partial C}{\partial \sigma_2}}_{\text{(I)}}.\]

Já sabemos:

  • (I) $\displaystyle \frac{\partial C}{\partial \sigma_2} = \sigma_2 - z$

  • (II) $\displaystyle \frac{\partial \sigma_2}{\partial i_2} = \sigma_2(1 - \sigma_2)$

  • (IV) $\displaystyle \frac{\partial \sigma_1}{\partial i_1} = \sigma_1(1 - \sigma_1)$

(III) $\displaystyle \frac{\partial i_2}{\partial \sigma_1}$:

temos $i_2 = w_2\,\sigma_1 + b_2$,

logo

\[\frac{\partial i_2}{\partial \sigma_1} = w_2\]

(V) $\displaystyle \frac{\partial i_1}{\partial w_1}$:

se $i_1 = w_1\,x + b_1$, então

\[\frac{\partial i_1}{\partial w_1} = x\]

Reunindo tudo: \(\frac{\partial C}{\partial w_1} \;=\; x \;\cdot\; \bigl(\sigma_1\,(1-\sigma_1)\bigr) \;\cdot\; w_2 \;\cdot\; \bigl(\sigma_2\,(1-\sigma_2)\bigr) \;\cdot\; (\sigma_2 - z).\)


$b_1$:

Por fim, \(\frac{\partial C}{\partial b_1} \;=\; \underbrace{\frac{\partial i_1}{\partial b_1}}_{\text{(V)}} \;\cdot\; \underbrace{\frac{\partial \sigma_1}{\partial i_1}}_{\text{(IV)}} \;\cdot\; \underbrace{\frac{\partial i_2}{\partial \sigma_1}}_{\text{(III)}} \;\cdot\; \underbrace{\frac{\partial \sigma_2}{\partial i_2}}_{\text{(II)}} \;\cdot\; \underbrace{\frac{\partial C}{\partial \sigma_2}}_{\text{(I)}}.\)

Já sabemos que:

  • (I) = $(y-z)$

  • (II) = $\sigma_2 (1 - \sigma_2)$

  • (III) = $w_2$

  • (IV) = $sigma_1 (1-\sigma_1)

(V) $\displaystyle \frac{\partial i_1}{\partial b_1}$:

de $i_1 = w_1\,x + b_1$, temos

\[\frac{\partial i_1}{\partial b_1} = 1\]

Então: \(\frac{\partial C}{\partial b_1} \;=\; 1 \;\cdot\; \bigl(\sigma_1\,(1 - \sigma_1)\bigr) \;\cdot\; w_2 \;\cdot\; \bigl(\sigma_2\,(1 - \sigma_2)\bigr) \;\cdot\; (\sigma_2 - z).\)

Exercício 2

Considere uma rede neural com input de duas features x1 e x2, e com duas camadas internas, cada uma com dois nós. Assuma que os pesos estão distribúıdos de forma que os nós em cima nas camadas aplicam a sigmóide na soma dos seus inputs, e que os nós embaixo aplicam a função tangente hiperbólica em seus inputs. O nó de saída aplica a ReLU na soma dos dois inputs. Desenhe esta rede. Escreva a saída dessa rede neural como uma função de x1 e x2 de forma fechada.

Resposta

image.png

  • $\sigma$ -> sigmóide
  • $\tan$ -> tangente hiperbólica
  • $w_{ab}^{c}$ -> peso que relaciona (a) neuronio de origem da camada c-1 e (b) neuronio de destino da camada c

Camada 1

$a_{1}^{1}: \sigma(w_{11}^{1} \cdot X_1 + w_{21}^{1} \cdot X_2) + b_{1}^{1}$

$a_{2}^{1}: \tanh(w_{12}^{1} \cdot X_1 + w_{22}^{1} \cdot X_2) + b_{2}^{1}$

Camada 2

$a_{1}^{2}: \sigma(w_{11}^{2} \cdot a_{1}^{1} + w_{21}^{2} \cdot a_{2}^{1}) + b_{1}^{2}$

$a_{2}^{2}: \tanh(w_{12}^{2} \cdot a_{1}^{1} + w_{22}^{2} \cdot a_{2}^{1}) + b_{2}^{2}$

Camada 3 (Saída)

$a_{1}^{3}: ReLU(w_{11}^{3} \cdot a_{1}^{2} + w_{21}^{3} \cdot a_{2}^{2}) + b_{1}^{3}$

Para obter a fórmula fechada bastatria substituis o neurônios (representados por a) pelas fórmuulas dos mesmos na camada anterior, que é explícita

Exercício 3

Vimos como usar uma rede de perceptrons com uma camada interna para construir a função XOR. Queremos novamente construir esta função, mas nos dois nós da camada interna temos a função de ativação ReLU, e no nó de saída a função de ativação f(x) = x. Caso o XOR dê 0, queremos que saída seja 0, e se o XOR dá 1, queremos que a saída seja > 0. Construa a rede, exibindo explicitamente a escolha dos pesos.

image.png

  • R -> ReLu
  • F -> Função de Ativação
  • $w_{ab}^{c}$ -> peso que relaciona (a) neuronio de origem da camada c-1 e (b) neuronio de destino da camada c

Fórmulas:

$i_1 = W_{11}^{(1)} \cdot x_1 + W_{21}^{(1)} \cdot x_2 + b_1^{(1)}$

$i_2 = W_{12}^{(1)} \cdot x_1 + W_{22}^{(1)} \cdot x_2 + b_2^{(1)}$

$i_3 = W_{11}^{(2)} \cdot R(i_2) + W_{21}^{(2)} \cdot R(i_2) + b_1^{(2)}$

\[F(x) = x\]

Valores:

$b_1^{(1)} = 0 \quad b_2^{(1)} = -1 \quad b_3^{(2)} = 0$

$W_{11}^{(1)} = 1 \quad W_{21}^{(1)} = 1 \quad W_{12}^{(1)} = 1 \quad W_{22}^{(1)} = 1$

$W_{11}^{(2)} = 1 \quad W_{21}^{(2)} = -2$

Resultado:

Para $x_1 = 0$ e $x_2 = 0$
$i_1 = (0 \cdot 1) + (0 \cdot 1) + 0 = 0 \quad \Rightarrow \quad R(i_1)$
$i_2 = (0 \cdot 1) + (0 \cdot 1) - 1 = -1 \quad \Rightarrow \quad R(i_2)$
$i_3 = (0 \cdot 1) + (0 \cdot -2) + 0 = 0 \quad \Rightarrow \quad F(0) = 0$


Para $x_1 = 0$ e $x_2 = 1$
$i_1 = (0 \cdot 1) + (1 \cdot 1) + 0 = 1 \quad \Rightarrow \quad R(i_1)$
$i_2 = (0 \cdot 1) + (1 \cdot 1) - 1 = 0 \quad \Rightarrow \quad R(i_2)$
$i_3 = (1 \cdot 1) + (0 \cdot -2) + 0 = 1 \quad \Rightarrow \quad F(1) = 1$


Para $x_1 = 1$ e $x_2 = 0$
$i_1 = (1 \cdot 1) + (0 \cdot 1) + 0 = 1 \quad \Rightarrow \quad R(i_1)$
$i_2 = (1 \cdot 1) + (0 \cdot 1) - 1 = 0 \quad \Rightarrow \quad R(i_2)$
$i_3 = (1 \cdot 1) + (0 \cdot -2) + 0 = 1 \quad \Rightarrow \quad F(1) = 1$


Para $x_1 = 1$ e $x_2 = 1$
$i_1 = (1 \cdot 1) + (1 \cdot 1) + 0 = 2 \quad \Rightarrow \quad R(i_1)$
$i_2 = (1 \cdot 1) + (1 \cdot 1) - 1 = 1 \quad \Rightarrow \quad R(i_2)$
$i_3 = (1 \cdot 1) + (1 \cdot -2) + 0 = 0 \quad \Rightarrow \quad F(0) = 0$

Exercício 4

Imagine que montou-se a rede neural abaixo, para resolver um problema em que vetores $\texttt{x}^{(k)}$ com $4$ features cada são classificados em $3$ possíveis classes, representadas por vetores $\texttt{y}^{(k)}$ de $0s$ e $1s$, onde $\texttt{y}^{(k)}_i = 1$ implica que o dado $k$ pertence à classe $i$. Nesta rede, a função de custo é a soma do erro quadrado para cada entrada do vetor $\texttt{y}$ (ou seja, se $\texttt{x}^{(k)}$ é classe $2$, queremos que a saída da rede se aproxime o máximo possível do vetor $(0,1,0)$).

image.png

Resolve-se realizar uma iteração do backpropagation a partir de um único dado $(\texttt{x},\texttt{y})$. Assuma que a função de ativação usada na 1a camada interna foi a ReLU, e na 2a camada interna foi a sigmóide. Neste exemplo, ao calcular os valores, obteve-se que $\texttt{x} \cdot \texttt{W}^{(1)} + \texttt{b}^{(1)} < 0$.

(a) Calcule $\displaystyle \frac{\partial L}{\partial w^{(1)}_{12}}$.

(b) O que ocorreu acima pode se repetir para outros dados de treino. Explique por que isso seria indesejável, e qual seria uma possível modificação na estrutura da rede que impediria este problema de acontecer novamente.

Resposta

(a)

Cálculo de $\frac{\partial L}{\partial w^{(1)}_{12}}$ pela regra da cadeia

  1. Derivada da função de custo em relação à saída da 2ª camada ($a_j^{(2)}$):
\[\frac{\partial L}{\partial a_j^{(2)}} = 2 (a_j^{(2)} - y_j),\]

onde $j \in {1, 2, 3}$.

  1. Derivada da ativação sigmóide em relação ao seu argumento:
\[\frac{\partial a_j^{(2)}}{\partial z_j^{(2)}} = \sigma(z_j^{(2)}) (1 - \sigma(z_j^{(2)})).\]
  1. Derivada do valor $z_j^{(2)}$ em relação à saída da 1ª camada ($a_i^{(1)}$):
\[\frac{\partial z_j^{(2)}}{\partial a_i^{(1)}} = w_{ij}^{(2)}.\]
  1. Derivada da ReLU em relação ao seu argumento:
\[\frac{\partial a_i^{(1)}}{\partial z_i^{(1)}} = \begin{cases} 1 & \text{se } z_i^{(1)} > 0, \\ 0 & \text{se } z_i^{(1)} \leq 0. \end{cases}\]

No enunciado, foi dado que $z_i^{(1)} < 0$, o que implica:

\[\frac{\partial a_i^{(1)}}{\partial z_i^{(1)}} = 0.\]
  1. Derivada de $z_i^{(1)}$ em relação a $w_{12}$:

Sabemos que:

\[z_i^{(1)} = \sum_k x_k w_{ki}^{(1)} + b_i^{(1)}.\]

Logo:

\[\frac{\partial z_i^{(1)}}{\partial w_{12}} = x_2.\]
  1. Regra da cadeia completa:

A derivada $\frac{\partial L}{\partial w_{12}}$ é dada por:

\[\frac{\partial L}{\partial w_{12}} = \frac{\partial L}{\partial a_j^{(2)}} \cdot \frac{\partial a_j^{(2)}}{\partial z_j^{(2)}} \cdot \frac{\partial z_j^{(2)}}{\partial a_i^{(1)}} \cdot \frac{\partial a_i^{(1)}}{\partial z_i^{(1)}} \cdot \frac{\partial z_i^{(1)}}{\partial w_{12}}.\]

Como $\frac{\partial a_i^{(1)}}{\partial z_i^{(1)}} = 0$, a derivada final será:

\[\frac{\partial L}{\partial w_{12}} = 0.\]

(b)

A derivada encontrada foi 0, de modo que, ao aplicar o backpropagation, os pesos de nossa rede não seriam atualizados, o que pode ser um grande problema. Para consertar esse problema, devemos mudar a função de ativação, empregando alternativas À ReLU como a Leaky ReLU ou demais variações da ReLU.

Exercício 5

Suponha que todos os nós de uma rede neural utilizam uma função de ativação linear, ou seja, $g(x) = k\cdot x$ para algum $k$. Mostre que, quando utilizada esta função, qualquer rede com duas camadas é equivalente a uma rede com $1$ camada. Verifique intuitivamente que esse resultado é válido independentemente do número de camadas.

Resposta

Intuitivamente, ao utilizar uma camada linear como ativação, nós sempre realizaremos apenas operações lineares, de forma que a saída de toda camada será ainda apenas uma transformação linear dos dados.

  1. Rede com duas camadas:

Considere a saída de uma rede com duas camadas:

  • Primeira camada: \(a^{(1)} = g(z^{(1)}) = k \cdot (W^{(1)} \cdot x + b^{(1)})\)

  • Segunda camada: \(a^{(2)} = g(z^{(2)}) = k \cdot (W^{(2)} \cdot a^{(1)} + b^{(2)})\)

Substituindo $a^{(1)}$ na segunda camada:

\[a^{(2)} = k \cdot \big(W^{(2)} \cdot (k \cdot W^{(1)} \cdot x + k \cdot b^{(1)}) + b^{(2)}\big)\]

Fatorando $k$, obtemos:

\[a^{(2)} = k^2 \cdot W^{(2)} \cdot W^{(1)} \cdot x + k^2 \cdot W^{(2)} \cdot b^{(1)} + k \cdot b^{(2)}\]

Note que após a saída da segunda camada, temos um termo constante $k^2 \cdot W^{(2)} \cdot W^{(1)}$ multiplicando $x$ (esse termo poderia ser o peso de uma rede com uma camada), e um número constante $k^2 \cdot W^{(2)} \cdot b^{(1)} + k \cdot b^{(2)}$ somado ao final, que poderia ser o bias de nossa rede de uma camada.

Exercício 6

Considere a função de normalização softmax na camada de saída, em que os outputs da camada $a_1,…,a_k$ são convertidos em probabilidades como \(p_i = \frac{e^{a_i}}{\sum_{j = 1}^k e^{a_j}}.\) Mostre que o valor de $\partial p_i / \partial a_j$ é $p_i (1-p_i)$ quando $i = j$, e $-p_ip_j$ quando $i \neq j$.

Em seguida, assuma que a função custo é dada por \(L = - \sum_{i = 1}^k y_i \log(p_i),\) onde $y_i \in {0,1}$ é a classe real a qual o dado $i$ pertence. Demonstre que \(\frac{\partial L}{\partial a_i} = p_i - y_i.\)

Reposta

Usando a regra do quociente, derivamos $\frac{\partial p_i}{\partial a_j}$:

  1. Caso $i = j$:
\[\frac{\partial p_i}{\partial a_i} = \frac{e^{a_i} \cdot \sum_{j=1}^k e^{a_j} - e^{a_i} \cdot e^{a_i}}{\left(\sum_{j=1}^k e^{a_j}\right)^2}.\]

Fatorando:

\[\frac{\partial p_i}{\partial a_i} = \frac{e^{a_i} \left( \sum_{j=1}^k e^{a_j} - e^{a_i} \right)}{\left(\sum_{j=1}^k e^{a_j}\right)^2} = p_i (1 - p_i).\]
  1. Caso $i \neq j$:
\[\frac{\partial p_i}{\partial a_j} = -\frac{e^{a_i} \cdot e^{a_j}}{\left(\sum_{j=1}^k e^{a_j}\right)^2}.\]

Substituindo $p_i = \frac{e^{a_i}}{\sum_{j=1}^k e^{a_j}}$ e $p_j = \frac{e^{a_j}}{\sum_{j=1}^k e^{a_j}}$:

\[\frac{\partial p_i}{\partial a_j} = -p_i p_j.\]

A função de custo é:

\[L = -\sum_{i=1}^k y_i \log(p_i).\]

Derivando em relação a $a_i$ e aplicando a regra da cadeia:

\[\frac{\partial L}{\partial a_i} = -\sum_{j=1}^k y_j \cdot \frac{\partial \log(p_j)}{\partial a_i}.\]

Sabemos que:

\[\frac{\partial \log(p_j)}{\partial a_i} = \begin{cases} 1 - p_i & \text{se } i = j, \\ -p_i & \text{se } i \neq j. \end{cases}\]

Substituímos no somatório e percebemos que apenas o termo associado a (y_i) permanece devido à definição de (y_i \in {0, 1}). Isso nos dá:

\[\frac{\partial L}{\partial a_i} = p_i - y_i.\]
#In: