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:
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
- $\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.
- 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)$).
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
- Derivada da função de custo em relação à saída da 2ª camada ($a_j^{(2)}$):
onde $j \in {1, 2, 3}$.
- Derivada da ativação sigmóide em relação ao seu argumento:
- Derivada do valor $z_j^{(2)}$ em relação à saída da 1ª camada ($a_i^{(1)}$):
- Derivada da ReLU em relação ao seu argumento:
No enunciado, foi dado que $z_i^{(1)} < 0$, o que implica:
\[\frac{\partial a_i^{(1)}}{\partial z_i^{(1)}} = 0.\]- 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.\]- 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.
- 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}$:
- Caso $i = j$:
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).\]- Caso $i \neq j$:
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: