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.

image.png

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}\)

image.png

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

image.png

Sign

image.png

ReLu

image.png

ELU

image.png

Softplus

image.png

Logística

image.png

tanh

image.png

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)$')

png

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$.

  1. Gradiente em relação a $w_0$:
\[\frac{\partial \ell}{\partial w_0} = \sum_{i=1}^n \left[ t_i - \frac{e^{w_0 + w \cdot x_i}}{1 + e^{w_0 + w \cdot x_i}} \right].\]

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].\]
  1. Gradiente em relação a $w$:
\[\frac{\partial \ell}{\partial w} = \sum_{i=1}^n x_i \left[ t_i - \frac{e^{w_0 + w \cdot x_i}}{1 + e^{w_0 + w \cdot x_i}} \right].\]

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 1120
dado 2321

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.

  1. $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)$.

  2. Quais as derivadas de $\log(1-\sigma(z))$ e de $\log(\sigma(z))$ com respeito a $z$?

  3. 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)

  1. Derivada de $\log(\sigma(z))$:
\[\frac{\partial}{\partial z} \log(\sigma(z)) = \frac{1}{\sigma(z)} \cdot \sigma'(z).\]

Sabendo que $\sigma’(z) = \sigma(z) \cdot (1 - \sigma(z))$, temos:

\[\frac{\partial}{\partial z} \log(\sigma(z)) = 1 - \sigma(z).\]
  1. Derivada de $\log(1-\sigma(z))$:
\[\frac{\partial}{\partial z} \log(1 - \sigma(z)) = \frac{1}{1 - \sigma(z)} \cdot (-\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].\]