Perceptron e funções de Ativação
- Perceptrons
- Funções de Ativação
Perceptron
Exercício 1
Considere um perceptron com duas features $x_1$ e $x_2$, onde $w_0 = 3$, $w_1 = 2$ e $w_2 = 1$. Qual a fórmula da reta que divide as duas classes? Qual o vetor normal à reta?
Resposta
A equação geral deste perceptron é:
\[w_0 + w_1\cdot x_1 + w_2 \cdot x_2 = 3 + 2\cdot x_1 + x_2 = 0\]Reorganizando os termos, chegamos na equação da reta:
\[x_2 = -2x_1 - 3\]Definida pelo vetor normal:
\[\vec{w} = (w_1, w_2) = (2, 1)\]Exercício 2
Considere um perceptron com $w_0 = 0$, $w_1 = −1$, $w_2 = 1$, com os pontos mostrados no gráfico abaixo (círculos na classe 1, cruzes na classe 0). Esboce o gráfico da reta que separa as classes. Execute uma iteração do algoritmo do perceptron com m = 0.1, esboçando em seguida a nova reta.
Resposta
Inicialmente, a equação do perceptron é dada pela reta $x_1=x_2$.
Os pesos do perceptron são atualizados ponto a ponto, em casos em que ocorra um erro de classificação. No caso acima, o ponto (2,3) é o único em que um erro ocorre, logo ele será usado para a atualização dos pesos.
A predição do ponto é dada por:
\[\begin{align*} \hat{y} &= H(w_0 + w_1x_1 + w_2x_2) \\ &= H(-x_1 + x_2) \\ &= H(-2 + 3) \\ &= 1 \end{align*}\]O erro é dado por:
\[e = y - \hat{y} = 0 - 1 = -1\]Para atualizar os pesos fazemos:
\[\begin{align*} w_1^{novo} &= w_1^{antigo} + m \cdot e \cdot x_1 \\ &= -1 + 0.1 \cdot -1 \cdot 2 \\ &= -1.2 \end{align*}\] \[\begin{align*} w_2^{novo} &= w_2^{antigo} + m \cdot e \cdot x_2 \\ &= 1 + 0.1 \cdot -1 \cdot 3 \\ &= 0.7 \end{align*}\] \[\begin{align*} w_0^{novo} &= w_0^{antigo} + m \cdot e \\ &= 0 + 0.1 \cdot -1 \\ &= -0.1 \end{align*}\]Assim a nova reta é dada por
\(w_0 = -0.1, \ w_1 = -1.2, \ w_2 = 0.7\) \(x_2 = \frac{12}{7}x_1 + \frac{1}{7}\)
Exercício 3
Considere vetores $x$ de duas variáveis booleanas. Quais das seguintes funções o perceptron é capaz de aprender?
(a) $f_1(x) = x_1 \wedge x_2$
(b) $f_2(x) = x_1 \vee x_2$
(c) $f_3(x) = x_1 \oplus x_2$
Resposta
(a) $f_1(x) = x_1 \wedge x_2$ é possível -> a função é linearmente separável
(b)$ f_2(x) = x_1 \vee x_2$ é possível -> a função é linearmente separável
(c) $f_3(x) = x_1 \oplus x_2$ NÃO é possível -> a função NÃO é linearmente separável
Exercício 4
(a) Imagine dados quase linearmente separáveis. Como fazer um perceptron que aceita uma margem de erro?
(b) Imagine dados linearmente separáveis. Como fazer um perceptron que força com que a reta separadora tenha uma distância mínima?
Resposta
(a) Para tolerar erros em dados não linearmente separáveis podemos modificar a função de perda para a hinge loss.
(b) Para garantir uma margem fixa, podemos alterar a regra de atualização para exigir que todo ponto satisfaça
\(y_i(\mathbf{w}\cdot \mathbf{x}_i + b) \;>\; \gamma\)
($\gamma>0$ é a distância/margem desejada).
Nesse caso, se $y_i(\mathbf{w}\cdot \mathbf{x}_i + b) \le \gamma$, os pesos são atualizados mesmo se a classificação fosse correta.
Exercício 5
É possível modelar o perceptron de modo que sua atualização seja da forma \(w_{m+1} = w_m - \alpha \nabla_w (L) \big|_{w_m},\) mas, conforme vimos, esta função $L$ não deve utilizar o resultado da função de ativação $\sigma$, caso contrário este gradiente seria sempre nulo.
Proponha uma função $L$ que toma como entrada os parâmetros da rede, é calculada utilizando apenas os valores de um ponto $(x,\hat{y})$, e cuja descida gradiente com esta função acabe sendo exatamente o que o perceptron, como proposto originalmente, realiza.
Resposta
A função $L$ que satisfaz essas condições pode ser definida como:
\[L(w, b) = max(0, - \hat{y} (w^T x + b)),\]onde:
- $x$ é o vetor de entrada.
- $\hat{y} \in ${-1, 1}$ é o rótulo verdadeiro associado ao dado.
- $w$ e $b$ são os parâmetros do modelo.
Essa função $L$ mede o alinhamento entre a previsão linear $w^T x + b$ e o rótulo verdadeiro $\hat{y}$. Se o produto escalar for negativo (ou seja, o dado foi mal classificado), $L$ será positivo, penalizando o erro.
Atualização dos pesos via descida gradiente:
A derivada de $L(w, b)$ com relação a $w$ é quando $L>0$ é:
\[\nabla_w L(w, b) = - \hat{y} x.\]A atualização dos pesos será:
\[w_{m+1} = w_m - \alpha \nabla_w L(w, b) = w_m + \alpha \hat{y} x.\]Essa é exatamente a regra de atualização do Perceptron original, que ajusta os pesos adicionando $\alpha \hat{y} x$ para corrigir erros de classificação. Assim, a função $L$ proposta permite que o Perceptron seja visto como uma instância da descida gradiente.
Funções de Ativação
Exercício 6
Esboce os gráficos das funções Heaviside, sinal, ReLU, ELU, softplus, logística com c = 1, e tangente hiperbolica.
Resposta
Heavyside
Sign
ReLu
ELU
Softplus
Logística
tanh
Exercício 7
Na função logística com $σ_c(x)$, como o gráfico se altera quando variamos o c? Pense em como ficaria com c muito pequeno perto de 0, e também muito grande tendendo ao infinito. Você pode resolver essa questão plotando em um software.
#In:
import numpy as np
import matplotlib.pyplot as plt
# Definição da função logística com parametro c
def logistic_function(x, c):
return 1 / (1 + np.exp(-c * x))
# Valores de x
x = np.linspace(-10, 10, 500)
# Diferentes valores de c
c_values = [0.1, 0.5, 1, 5, 10]
# Plotar as funções
plt.figure(figsize=(8, 6))
for c in c_values:
y = logistic_function(x, c)
plt.plot(x, y, label=f'c = {c}')
plt.title('Função Logística para diferentes valores de c')
plt.xlabel('x')
plt.ylabel('$\sigma_c(x)$')
plt.legend()
plt.grid()
plt.show()
<>:22: SyntaxWarning: invalid escape sequence '\s'
<>:22: SyntaxWarning: invalid escape sequence '\s'
/tmp/ipykernel_17101/4000807902.py:22: SyntaxWarning: invalid escape sequence '\s'
plt.ylabel('$\sigma_c(x)$')
C é um parâmetro que afeta a taxa de crescimento da função. Se $C>1$, a função terá uma inclinação mais acentuada, tornando-se mais sensível às mudanças em $x$. Se $0<C<1$, a curva será mais suave e menos sensível a mudanças em $x$.
Exercício 8
Mostre que $σ_c(x)’ = cσ_c(x)(1-σ_c(x))$. Mostre também que $σ_c(-x) = 1-σ_c(x)$.
Resposta
Para a função logística com parâmetro $c$, temos: \(\sigma_c(x) = \frac{1}{1 + e^{-c \cdot x}}.\)
A derivada de $\sigma_c(x)$ é: \(\sigma_c(x)' = \frac{d}{dx} \left( \frac{1}{1 + e^{-c \cdot x}} \right).\)
Aplicando a regra da cadeia: \(\sigma_c(x)' = \frac{d}{dx} \left(1 + e^{-c \cdot x}\right)^{-1} = -\left(1 + e^{-c \cdot x}\right)^{-2} \cdot \frac{d}{dx} \left(1 + e^{-c \cdot x}\right).\)
A derivada de $1 + e^{-c \cdot x}$ é $-c \cdot e^{-c \cdot x}$. Assim: \(\sigma_c(x)' = \frac{c \cdot e^{-c \cdot x}}{\left(1 + e^{-c \cdot x}\right)^2}.\)
Agora, utilizando $\sigma_c(x)$: \(\sigma_c(x) = \frac{1}{1 + e^{-c \cdot x}},\) podemos reescrever $1 + e^{-c \cdot x}$ como $\frac{1}{\sigma_c(x)}$. Substituindo: \(\sigma_c(x)' = c \cdot \sigma_c(x) \cdot \left(1 - \sigma_c(x)\right).\)
Prova de $\sigma_c(-x) = 1 - \sigma_c(x)$:
Substituímos $-x$ em $\sigma_c(x)$: \(\sigma_c(-x) = \frac{1}{1 + e^{-c \cdot (-x)}} = \frac{1}{1 + e^{c \cdot x}}.\)
Agora, somamos $\sigma_c(x)$ e $\sigma_c(-x)$: \(\sigma_c(x) + \sigma_c(-x) = \frac{1}{1 + e^{-c \cdot x}} + \frac{1}{1 + e^{c \cdot x}}.\)
Colocando as frações no mesmo denominador: \(\sigma_c(x) + \sigma_c(-x) = \frac{(1 + e^{c \cdot x}) + (1 + e^{-c \cdot x})}{(1 + e^{-c \cdot x})(1 + e^{c \cdot x})}.\)
O numerador torna-se $2 + e^{c \cdot x} + e^{-c \cdot x}$, e o denominador é: \((1 + e^{-c \cdot x})(1 + e^{c \cdot x}) = 1 + e^{c \cdot x} + e^{-c \cdot x} + 1 = 2 + e^{c \cdot x} + e^{-c \cdot x}.\)
Portanto: \(\sigma_c(x) + \sigma_c(-x) = 1,\) e assim: \(\sigma_c(-x) = 1 - \sigma_c(x).\)
Exercício 9
Considere a função $sp(x) = ln(1 + e^x)$. Mostre que $sp’(x) = σ(x)$.
Resposta
\[sp'(x) = \frac{d}{dx} \ln(1 + e^x).\] \[f(u) = \ln(u) \quad \Rightarrow \quad f'(u) = \frac{1}{u}\] \[g(x) = 1 + e^x \quad \Rightarrow \quad g'(x) = e^x\] \[\text{Regra da Cadeia:} \quad \frac{1}{1 + e^x} \cdot e^x = \frac{e^x}{(1 + e^x)} \cdot (e^{-x}) = \frac{1}{e^{-x} + 1}\]Exercício 10
Seja $tanh(x) = (e^x - e^{-x}) / (e^x + e^{-x})$. Mostre que $tanh(x) = 2σ(2x) - 1$.
Resposta
Sabemos que \(\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}\)
Queremos mostrar que
\[\tanh(x) = 2 \cdot \sigma(2x) - 1\]Temos:
\[2 \cdot \left( \frac{1}{1 + e^{-2x}} \right) - 1 = \frac{2}{1 + e^{-2x}} - 1 = \frac{2 \cdot (1 + e^{2x})}{1 + e^{-2x}} - 1\] \[\frac{1 - e^{-2x}}{1 + e^{-2x}} \cdot (e^x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}\]Exercício 11
Sejam \(S(x) = \begin{cases} 1 & \text{se } x \geq 0 \\ -1 & \text{caso contrário,} \end{cases}\qquad \text{e} \qquad H(x) = \begin{cases} 1 & \text{se } x \geq 0 \\ 0 & \text{caso contrário,} \end{cases}\) e também \(\textrm{ReLU}(x) = \begin{cases} x & \text{se } x \geq 0 \\ 0 & \text{caso contrário.} \end{cases}\) Encontre três fórmulas simples que associem cada par dentre as três funções acima.
Resposta
- $S(x) = H(x) \cdot 2 - 1$
- $ReLU(x) = \frac{S(x) + 1}{2} \cdot x$
- $ReLU(x) = H(x) \cdot x$
Exercício 12
Suponha que temos uma sequencia de dados unidimensionais $(x_1,…,x_n)$ respectivamente classificados como $x_i \to t_i$. Desejamos montar uma regressão logística, parametrizada por $w_0$ e pelo vetor unidimensional $w$. Ou seja, calculamos \(p(x^{(i)}) = \frac{1}{1 + e^{-w_0 - w \cdot x_i}}.\) Encontre uma expressão para a log-verossimilhança, e em seguida calcule o seu vetor gradiente com respeito a $w_0$ e a $w$.
Resposta
A log-verossimilhança de $n$ amostras $(x_i, t_i)$ é dada por:
\[\ell(w_0, w) = \sum_{i=1}^n \left[ t_i \log(p(x^{(i)})) + (1 - t_i) \log(1 - p(x^{(i)})) \right].\]Substituindo $p(x^{(i)}) = \frac{1}{1 + e^{-w_0 - w \cdot x_i}}$, temos:
\[\ell(w_0, w) = \sum_{i=1}^n \left[ t_i \log \left( \frac{1}{1 + e^{-w_0 - w \cdot x_i}} \right) + (1 - t_i) \log \left( 1 - \frac{1}{1 + e^{-w_0 - w \cdot x_i}} \right) \right].\]Simplificando, obtemos:
\[\ell(w_0, w) = \sum_{i=1}^n \left[ t_i (w_0 + w \cdot x_i) - \log(1 + e^{w_0 + w \cdot x_i}) \right].\]Agora vamos calcular o gradiente de $\ell(w_0, w)$ em relação a $w_0$ e $w$.
- Gradiente em relação a $w_0$:
Usando $p(x^{(i)}) = \frac{1}{1 + e^{-w_0 - w \cdot x_i}}$, podemos reescrever:
\[\frac{\partial \ell}{\partial w_0} = \sum_{i=1}^n \left[ t_i - p(x^{(i)}) \right].\]- Gradiente em relação a $w$:
Novamente, substituindo $p(x^{(i)})$:
\[\frac{\partial \ell}{\partial w} = \sum_{i=1}^n x_i \left[ t_i - p(x^{(i)}) \right].\]Exercício 13
Deseja-se agora executar a tarefa de classificação usando uma regressão logística. Lembre-se que $\sigma(z) = (1+e^{-z})^{-1}$. Suponha que atualmente $w_1 = -1$, $w_2 = 1$, e $b = 0$. Suponha que recebe-se o par de dados descrito abaixo:
$x_1$ | $x_2$ | $\hat{y}$ | |
---|---|---|---|
dado 1 | 1 | 2 | 0 |
dado 2 | 3 | 2 | 1 |
Use a notação ${z}^{(k)} = b + \texttt{w}^T \texttt{x}^{(k)}$ para o valor de $z$ obtido no dado $k$. Atenção: não é para efetuar qualquer exponenciação nesta questão.
$L(\texttt{w},b)$ é a função que calcula a verossimilhança nestes dados e com os parâmetros apresentados. Escreva abaixo uma expressão simplificada para $-\log L(\texttt{w},b)$.
Quais as derivadas de $\log(1-\sigma(z))$ e de $\log(\sigma(z))$ com respeito a $z$?
Será usado o método do gradiente descendente com $\alpha = 0.1$ para otimizar a escolha dos parâmetros. Após uma iteração, qual será o novo valor de $b$?
Resposta
(1)
A função de log-verossimilhança para os dados é:
\[L(\texttt{w}, b) = \prod_{k=1}^n \sigma(z^{(k)})^{\hat{y}^{(k)}} \cdot (1 - \sigma(z^{(k)}))^{1 - \hat{y}^{(k)}}.\]Tomando o logaritmo negativo, obtemos:
\[-\log L(\texttt{w}, b) = -\sum_{k=1}^n \left[ \hat{y}^{(k)} \log(\sigma(z^{(k)})) + (1 - \hat{y}^{(k)}) \log(1 - \sigma(z^{(k)})) \right].\]Substituindo $\sigma(z) = (1 + e^{-z})^{-1}$, a expressão fica:
\[-\log L(\texttt{w}, b) = -\sum_{k=1}^n \left[ \hat{y}^{(k)} \cdot z^{(k)} - \log(1 + e^{z^{(k)}}) \right].\](2)
- Derivada de $\log(\sigma(z))$:
Sabendo que $\sigma’(z) = \sigma(z) \cdot (1 - \sigma(z))$, temos:
\[\frac{\partial}{\partial z} \log(\sigma(z)) = 1 - \sigma(z).\]- Derivada de $\log(1-\sigma(z))$:
Substituindo $\sigma’(z)$, temos:
\[\frac{\partial}{\partial z} \log(1 - \sigma(z)) = -\sigma(z).\](3)
O gradiente da log-verossimilhança em relação a $b$ é dado por:
\[\frac{\partial}{\partial b} (-\log L(\texttt{w}, b)) = \sum_{k=1}^n \left[ \sigma(z^{(k)}) - \hat{y}^{(k)} \right].\]Calculando os valores de $z^{(k)}$ para os dois dados:
- Para $k = 1$: $z^{(1)} = w_1 \cdot x_1^{(1)} + w_2 \cdot x_2^{(1)} + b = (-1) \cdot 1 + (1) \cdot 2 + 0 = 1$,
- Para $k = 2$: $z^{(2)} = w_1 \cdot x_1^{(2)} + w_2 \cdot x_2^{(2)} + b = (-1) \cdot 3 + (1) \cdot 2 + 0 = -1$.
Agora, calculemos $\sigma(z^{(k)})$:
- $\sigma(z^{(1)}) = \frac{1}{1 + e^{-1}}$,
- $\sigma(z^{(2)}) = \frac{1}{1 + e^{1}}$.
Gradiente em relação a $b$:
\[\frac{\partial}{\partial b} (-\log L(\texttt{w}, b)) = \left[\sigma(z^{(1)}) - \hat{y}^{(1)}\right] + \left[\sigma(z^{(2)}) - \hat{y}^{(2)}\right].\]Substituindo $\hat{y}^{(1)} = 0$ e $\hat{y}^{(2)} = 1$:
\[\frac{\partial}{\partial b} (-\log L(\texttt{w}, b)) = \sigma(z^{(1)}) + (\sigma(z^{(2)}) - 1).\]Novo valor de $b$ após uma iteração de gradiente descendente com $\alpha = 0.1$:
\[b_{\text{novo}} = b - \alpha \cdot \frac{\partial}{\partial b} (-\log L(\texttt{w}, b)).\]Substituindo os valores, obtemos:
\[b_{\text{novo}} = 0 - 0.1 \cdot \left[\frac{1}{1 + e^{-1}} + \left(\frac{1}{1 + e^{1}} - 1\right)\right].\]