Introdução às Redes Neurais Artificiais

As redes neurais artificiais (RNAs) são poderosas ferramentas de aprendizado de máquina inspiradas pelo funcionamento do cérebro humano. Com sua capacidade de aprender e generalizar a partir de dados, elas se tornaram uma técnica amplamente utilizada em uma variedade de aplicações. Neste artigo, exploraremos os conceitos fundamentais das RNAs e como realizar os cálculos essenciais para seu funcionamento.

O que são Redes Neurais?

As redes neurais artificiais são modelos matemáticos compostos por camadas interconectadas de unidades computacionais chamadas de neurônios artificiais. Cada neurônio recebe um ou mais inputs, realiza um cálculo ponderado desses inputs e, em seguida, passa o resultado por uma função de ativação não-linear para gerar o output.

A estrutura das redes neurais é inspirada na organização do sistema nervoso central do cérebro humano. Cada camada de neurônios é responsável por aprender representações de diferentes níveis de abstração dos dados de entrada. As camadas iniciais aprendem características mais simples, enquanto as camadas posteriores combinam essas características para aprender características mais complexas e abstratas.

Como funcionam os neurônios biológicos?

Os neurônios biológicos são as células básicas do sistema nervoso, responsáveis por transmitir e processar informações no cérebro. Cada neurônio possui uma estrutura composta por corpo celular (soma), dendritos e um axônio.

O processo de comunicação entre neurônios ocorre através de sinapses, onde os sinais elétricos são transmitidos na forma de neurotransmissores. Esses sinais podem gerar um impulso elétrico conhecido como “potencial de ação”, que se propaga pelo axônio até atingir outras células.

A plasticidade neural é a capacidade do cérebro de mudar e se adaptar com base na experiência e no aprendizado.

Compreender o funcionamento dos neurônios biológicos é essencial para desenvolver redes neurais artificiais, que buscam replicar a complexidade dos neurônios para aplicações em inteligência artificial.

Essa abordagem concisa fornece uma visão geral dos principais pontos sobre o funcionamento dos neurônios biológicos e sua relevância para as redes neurais artificiais.

Como são os neurônios artificiais?

Os neurônios artificiais são os blocos de construção básicos das redes neurais. Cada neurônio recebe um conjunto de entradas ponderadas, aplica uma função de ativação e gera uma saída. Essa saída é então transmitida para outros neurônios na rede. O cálculo realizado por um neurônio envolve a multiplicação das entradas pelos pesos correspondentes, seguida da soma ponderada e da aplicação da função de ativação.

O que são perceptrons de uma camada?

Perceptrons de uma camada são modelos básicos de redes neurais artificiais com apenas uma camada de neurônios. Eles são capazes de realizar apenas classificações lineares em dados de entrada. Cada neurônio em um perceptron de uma camada recebe os inputs, calcula a soma ponderada dos valores e aplica uma função de ativação para produzir o output. São a base dos modelos de redes neurais mais complexos e têm limitações para resolver problemas não-lineares.

Funções de Ativação

As funções de ativação introduzem a não-linearidade nas RNAs e permitem que elas aprendam relações complexas nos dados. Existem várias funções de ativação comumente usadas, como a função sigmoidal, função tangente hiperbólica (tanh), função ReLU (Rectified Linear Unit) e função softmax. Cada função de ativação possui características específicas que a tornam adequada para diferentes cenários de modelagem.

Sigmoidal

A função de ativação sigmóide é descrita por \( \sigma(z) = \frac{1} {1 + e^{-z}} \)

ReLU

A função de ativação ReLU é descrita por \( ReLu(z) = max(0, z) \)

Softmax

A função de ativação softmax, utilizada na camada de saída para problemas de classificação multiclasse:

$$ f(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} $$

Onde:

\( z_{i} \) é a saída do neurônio para a classe i.

\( K \) é o número total de classes.

Como é a arquitetura de uma Rede Neural Artificial?

Exemplo de Redes Neurais

Uma RNA é composta por três tipos de camadas:

  • Camada de Entrada: É a primeira camada da rede e corresponde aos dados de entrada. Cada neurônio nesta camada representa uma característica específica do input. Os valores desses neurônios são passados para a próxima camada.

  • Camadas Ocultas: Estas são as camadas intermediárias entre a camada de entrada e a camada de saída. São chamadas de “ocultas” porque os valores intermediários dos neurônios não são diretamente observáveis como o input ou o output. Elas são responsáveis por aprender as representações mais abstratas dos dados.

  • Camada de Saída: É a última camada da rede e corresponde ao resultado final do modelo. O número de neurônios nesta camada depende do tipo de problema que está sendo resolvido. Por exemplo, para problemas de classificação binária, pode haver um único neurônio com uma função de ativação sigmoidal. Já para classificação multiclasse, pode haver múltiplos neurônios com uma função de ativação softmax.

Como as Redes Neurais Aprendem?

O aprendizado em redes neurais é realizado por meio do ajuste dos pesos sinápticos entre os neurônios. Inicialmente, os pesos são atribuídos aleatoriamente. O processo de aprendizado ocorre em duas etapas principais: propagação para frente (forward propagation) e retropropagação do erro (backpropagation).

Propagação para Frente (Forward Propagation)

Fórmula do cálculo realizado por cada neurônio durante a propagação para frente:

$$ z = \sum_{i=1}^{n} (w_i \cdot x_i) + b\ $$

Propagação para Trás (Backpropagation)

Após a propagação para frente, o erro entre o output predito e o valor esperado é calculado. Esse erro é então retropropagado pela rede, camada por camada, para ajustar os pesos e reduzir o erro na próxima iteração. Esse processo é realizado utilizando um algoritmo de otimização, como o gradiente descendente, para minimizar a função de perda (loss function).

Função de Ativação

A função de ativação aplicada após o cálculo do neurônio durante a propagação para frente: $$ a = f(z)\ $$

Gradiente Descendente

O algoritmo de otimização utilizado durante a retropropagação para ajustar os pesos sinápticos: $$ \theta = \theta - \alpha \cdot \nabla J(\theta) $$

Onde:

\( \theta \) são os parâmetros da rede neural (pesos e viés)

\( \alpha \) é a taxa de aprendizado, um hiperparâmetro que controla o tamanho dos passos durante a otimização.

\( J(\theta) \) é a função de custo (ou função de perda) que queremos minimizar em relação aos parâmetros \( \theta \)

\( \nabla J(\theta) \) é o gradiente da função de custo em relação aos parâmetros \( \theta \), indicando a direção do maior aumento da função de custo

Função de Perda (Loss Function)

A função de perda utilizada para problemas de classificação binária:

$$ loss = -\frac{1}{N} \sum_{i=1}^{N} [y_i \cdot \log(\hat{y}_i) + (1 - y_i) \cdot \log(1 - \hat{y}_i)] $$

Onde:

\( N \) é o número de amostras nos dados de treinamento.

\( y_{i} \) é o valor real do rótulo para a amostra i (0 ou 1).

\( \hat{y}_i \) é o valor predito pelo modelo para a amostra i.

Implementando uma Rede Neural em Python

Aqui, vamos mostrar um exemplo simples de implementação de uma RNA para classificação binária usando a biblioteca Python tensorflow:

import tensorflow as tf

# Definir a arquitetura da rede
model = tf.keras.Sequential([
    tf.keras.layers.Dense(64, activation='relu', input_shape=(input_dim,)),
    tf.keras.layers.Dense(32, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

# Compilar o modelo
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# Treinar o modelo
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))
Neste exemplo, criamos uma RNA com duas camadas ocultas e uma camada de saída com ativação sigmoidal para classificação binária. O modelo é compilado com a função de perda binary_crossentropy e otimizado com o algoritmo Adam. Em seguida, é treinado com os dados de treinamento e validação.

Visualizando Graficamente nossa Rede Neural

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import pydot
from IPython.display import Image

input_dim = 8
# Definir a arquitetura da rede
model = Sequential([
    Dense(64, activation='relu', input_shape=(input_dim,)),
    Dense(32, activation='relu'),
    Dense(1, activation='sigmoid')
])

# Gerar o grafo da rede neural
tf.keras.utils.plot_model(model, to_file='rede_neural.png', show_shapes=True)

# Exibir a imagem gerada
Image('rede_neural.png')

Conclusão

As redes neurais artificiais são uma ferramenta poderosa para resolver problemas complexos de aprendizado de máquina. Neste artigo, exploramos os fundamentos das RNAs, sua arquitetura básica e o processo de aprendizado. Além disso, fornecemos um exemplo de implementação em Python usando a biblioteca tensorflow. Com o avanço contínuo da pesquisa em inteligência artificial, as RNAs continuarão a desempenhar um papel crucial em várias aplicações práticas e avanços tecnológicos.

Referências

NIELSEN, Michael. Neural Networks and Deep Learning

GOODFELLOW, Ian; BENGIO, Yoshua; COURVILLE, Aaron. Deep Learning Book

ML Equations LaTeX

Asimov Institute - Neural Network