Perceptron Camada única

Para entender o funcionamento das redes neurais mais complexa precisamos começar com o modelo mais simples. O Perceptron de Camada Única é um modelo de rede neural, proposto por (Rosenblatt 1958), onde sua estrutura é composta por apenas um neurônio artificial. Esta rede pode ser usada tanto para problemas de classificação quanto para problemas de regressão.

A Arquitetura

A Figura 1 apresenta a arquitetura do Perceptron de Camada Única. Nesta rede a camada de entrada recebe as \(M\) covariáveis, que são as entradas do único neurônio, já na camada de saida. As covariáveis são combinadas linearmente com os pesos sinápticos e o limiar de ativação. Essa combinação linear é o argumento de entrada da função de ativação, que retorna a saída do modelo, \(\hat{y}\).

Neurônio Artificial
Figura 1: Neurônio Artificial

Com essa arquitetura bem simples ainda é possível escrever uma equação que determina os valores previstos pela rede em termos dos valores da camada de entrada:

\[ \hat{y}_i \ = \ g \left( \ \sum\limits_{j=1}^{M} \ \hat{w}_j x_{i,j} \ + \ \hat{\Theta} \right) \]

Função de Ativação

Veremos no próximo tópico que a função de ativação \(g\) precisa ser diferenciável em todos os pontos do domínio. Sendo assim, entre as funções de ativação já apresentadas temos as possibilidades: logística e tanh.

Função Logística (Gaussiana)

A função de ativação logística é apresentada a seguir. Veja que a imagem desta função é o intervalo \([0,1]\), isso significa que ela retorna apenas valores entre 0 e 1.

\[ g(x) = \dfrac{1}{1 + e^{-x}} \quad \Rightarrow \quad g'(x) = \dfrac{e^{-x}}{(1 + e^{-x})^2} . \]

Função Tangente Hiperbólica

A função de ativação tangente hiperbólica é apresentada a seguir. Veja que a imagem desta função é o intervalo \([-1,1]\), isso significa que ela retorna apenas valores entre -1 e 1.

\[ g(x) = \tanh(x) = \dfrac{e^{2x} - 1}{e^{2x} + 1} \quad \Rightarrow \quad g'(x) = \dfrac{2e^{2x}(e^{2x} + 1) - 2e^{2x}(e^{2x} - 1)}{(e^{2x} + 1)^2} = \dfrac{4e^{2x}}{(e^{2x} + 1)^2} . \]

Valores para a variável resposta

A \(Im(g)\) é sempre um subconjunto da reta, como por exemplo, \([0,1]\) para o caso da função logística e \([-1,1]\) para o caso da função tanh. Por esse motivo, quando o problema for de regressão, muitas vezes é preciso fazer uma transformação na variável resposta \(y\) de forma que os seus valores transformados estejam contidos na imagem da função de ativação da saúida da rede. Uma vez que a variável \(y\) foi transformada, a transformação inversa tem que ser feita para levar os valores de saída da rede de volta a sua escala original.

Vale ressaltar que no caso do modelo ser ajustado pela função neuralnet do R o parâmetro linear.output = TRUE indica que o neurônio de saída (no caso deste exemplo, o único neurônio) terá como função de ativação a função identidade. Com isso, a saída da rede, que está contida na imagem da função de ativação, será toda a reta e não será necessário realizar uma transformação na variável \(y\). Porém é recoenda-se usar a transformação \[ \tilde{y}_i = \dfrac{y_i - \bar{y}}{sd(y)} \] que faz com que \(y\) tenha média zero e variância 1.

Porém, nada impede de usar linear.output = FALSE para um problema de regressão. Mas nesse caso é preciso realizar uma transformação na variável resposta de forma que a sua imagem coincida com a imagem da função de ativação escolhida. Por exemplo, para linear.output = FALSE e act.fct = "logistic" a variável resposta \(y\) pode ser transformada por:

\[ \tilde{y}_i = \dfrac{y_i - \min(y)}{\max(y) - \min(y)} \] e para linear.output = FALSE e act.fct = "tanh" a variável resposta \(y\) pode ser transformada por: \[ \tilde{y}_i = 2\left(\dfrac{y_i - \min(y)}{\max(y) - \min(y)}\right) - 1 . \]

Se a rede neural perceptron for usada para um problema de classificação devemos escolher: linear.output = FALSE e act.fct = "logistic", pois a variável resposta assume apenas os valores 0 e 1. Nesse caso, nenhuma transformação será realizada na variável \(y\).

Um exemplo de regressão

Suponha que queremos analisar o gasto com mercado das famílias de uma certa região e para isso foram coletadas informações de 2.000 famílias desta região. As informações coletadas, assim como algumas estatísticas sobre os valores referentes às 2.000 famílias, estão apresentadas na tabela a seguir.

Nome Descrição Média Desvio Padrão Mínimo Máximo
\(Y\) Gasto mensal familar com mercado. 2168.49 1425.72 184.41 8200.59
\(X_1\) Renda familiar mensal. 4090.58 1434.57 1414.53 9535.4
\(X_2\) Quantidade de integrantes na família. 2.55 1.32 1 6
\(X_3\) Região onde a família mora, interior ou litoral. NA NA NA NA

Queremos definir um modelo de regressão capaz de prever o gasto mensal familiar com o mercado a partir do conhecimento das informações: renda familiar, quantidade de integrantes e onde a família mora, interior ou litoral. Isto é, queremos um modelo de regressão onde \(Y=\) gasto mensal familar com mercado é a variável de interesse e \(X_1=\) renda familiar mensal, \(X_2 =\) quantidade de integrantes na família e $X_3 = $ região do Brasil onde a família mora são as covariáveis.

Suponha que tenha sido ajustado um modelo de redes neurais Perceptron camada única com função de ativação logística. Para o ajuste do modelo foram considerados os dados padronizados. As covariáveis quantitativas foram padronizadas da seguinte foram:

\[ \tilde{X}_{i,j} = \dfrac{X_{i,j} - \bar{X}_j}{S_j} \]

sendo \(\bar{X}_j\) a média amostral da covariável \(j\) e \(S_j\) o desvio padrão amostral da covariável \(j\).

A variável de interesse \(Y\) foi padronizada seguindo outro critério, apresentado a seguir.

\[ \tilde{y}_i = \dfrac{y_i - \min\{y_i\}}{\max\{y_i\} - \min\{y_i\}} \]

sendo \(\min\{y_i\}\) e \(\max\{y_i\}\) o o valor mínimo e o valor máximo de \(Y\), respectivamente.

Modelo Perceptron camada única para o problema de regressão apresentado.
Figura 2: Modelo Perceptron camada única para o problema de regressão apresentado.

Baseado nesta rede neural criada, qual previsão sobre o gasto no mercado de uma família com 4 integrantes, que mora no litoral, com renda familiar igual a R$6.500,00?

x1 = (6500 - 4090.58)/1434.57
x2 = (4 - 2.55)/(1.32)
x3 = 1
novo_dado = matrix(c(x1,x2,x3),nrow = 1)
colnames(novo_dado) = c("X1_","X2_","X3litoral")
y = predict(rn1,newdata = novo_dado) #resultado na unidade transformada
y = y*(max(Y)-min(Y)) + min(Y)
y
     [,1]

[1,] 4302.025

De acordo com o modelo, uma família que ganha R$ 6.500,00, com 4 integrantes e que mora no litoral ganha em média R$ 4302.03.

E qual seria a previsão para a segunda família deste exemplo, com 2 integrantes, do interior e com renda familiar R$ 3.100,00?

x1 = (3100 - 4090.58)/1434.57
x2 = (2 - 2.55)/(1.32)
x3 = 0
novo_dado = matrix(c(x1,x2,x3),nrow = 1)
colnames(novo_dado) = c("X1_","X2_","X3litoral")
y = predict(rn1,newdata = novo_dado) #resultado na unidade transformada
y = y*(max(Y)-min(Y)) + min(Y)
y
     [,1]

[1,] 1283.065

De acordo com o modelo, uma família que ganha R$ 3.100,00, com 2 integrantes e que mora no interior ganha em média R$ 1283.06.

Um exemplo de classificação

Vamos manter o mesmo problema sobre o gasto das famílias com mercado. A diferença é que agora queremos classificar cada família entre as que gastam mais mais da metade da sua renda com mercado e as que não gastam. Para isso vamos criar uma nova variável, \(Z\), que é uma variável indicadora.

\[ Z_i = \left\{ \begin{array}{ll} 1 & \text{, se a família } i \text{ gastou mais da metade da renda familiar no mercado;}\\ 0 & \text{, caso contrário.}\\ \end{array} \right. \]

Foi criada uma rede neural Perceptron de camada única com função de ativação logística. As covariáveis quantitativas passaram pela mesma padronização descrita acima. A rede está apresentada na Figura 6.

Modelo Perceptron camada única para o problema de classificação apresentado.
Figura 3: Modelo Perceptron camada única para o problema de classificação apresentado.

A escolha err.fct = "ce" indica que queremos usar como medida de erro a entropia cruzada. A outra alternativa, que é o padrão caso essa característica não seja informada, é o “sse”, que é adequada para problema de regressão e não de classificação.

De acordo com esta rede, o que podemos esperar sobre a família com 4 integrantes, que mora no litoral, com renda familiar igual a R 6.500,00, ela deve gastar mais da metade da sua renda com mercado ou não?

x1 = (6500 - 4090.58)/1434.57
x2 = (4 - 2.55)/(1.32)
x3 = 1
novo_dado = matrix(c(x1,x2,x3),nrow = 1)
colnames(novo_dado) = c("X1_","X2_","X3litoral")
y = predict(rn2,newdata = novo_dado) 
y
      [,1]

[1,] 0.8606864

O valor retornado pelo classificador é um número entre 0 e 1. Este número não é a probabilidade da família gastar mais da metade da renda com mercado, mas quanto mais perto de 1 mais a gente acredito que esse perfil de família gasta mais da metade da renda com o merdado. O valor que o modelo retornou foi {r z}, o que nos indica que essa famíliadeve sim gastar mais da metade da sua renda com mercado.

E para outra família, com 2 integrantes, que mora no interior, com renda familiar igual a R$ 3.100,00? O que o modelo indica, esta família gasta mais da metade da sua renda com mercado ou não?

x1 = (3100 - 4090.58)/1434.57
x2 = (2 - 2.55)/(1.32)
x3 = 0
novo_dado = matrix(c(x1,x2,x3),nrow = 1)
colnames(novo_dado) = c("X1_","X2_","X3litoral")
y = predict(rn2,newdata = novo_dado) 
y
      [,1]

[1,] 0.2548511

Nesse caso o valor retornado pelo modelo já é mais perto de zero, sugerindo que esta família não gasta mais da metade da sua renda com mercado.

Bibliografia

Rosenblatt, Frank. 1958. “The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain.” Psychological Review 65 (6): 386.