Você está visualizando atualmente O que são e como se desenvolveram as Redes Neurais Artificiais, com código de exemplo
Como referenciar este texto: O que são e como se desenvolveram as Redes Neurais Artificiais, com código de exemplo. Rodrigo Terra. Publicado em: 17/04/2023. Link da postagem: https://www.makerzine.com.br/interdisciplinaridade/o-que-sao-e-como-se-desenvolveram-as-redes-neurais-artificiais-com-codigo-de-exemplo .

Conteúdos dessa postagem

O que são Redes Neurais Artificiais?

As redes neurais artificiais são uma das principais técnicas da inteligência artificial, e têm sido amplamente utilizadas em diversas áreas, desde finanças e comércio até saúde e medicina. Essas redes são especialmente úteis quando se trata de problemas complexos e não-lineares, onde as soluções baseadas em regras simples são insuficientes.

Uma das vantagens das redes neurais artificiais é a sua capacidade de aprender e se adaptar continuamente a novos dados. Por meio do processo de treinamento, a rede ajusta seus parâmetros internos para otimizar a precisão de suas previsões. Isso significa que, quanto mais dados a rede processa, mais precisa e confiável ela se torna.

Além disso, as redes neurais artificiais têm sido combinadas com outras técnicas de inteligência artificial, como algoritmos genéticos e algoritmos de enxame, para criar sistemas ainda mais poderosos e flexíveis.

Uma das áreas em que as redes neurais artificiais têm se destacado é no processamento de imagens. Por exemplo, as redes neurais podem ser treinadas para reconhecer faces humanas em imagens digitais, identificar objetos em tempo real em vídeos ou melhorar a qualidade de imagens de baixa resolução. Isso é particularmente útil em aplicações de segurança, onde a identificação precisa de pessoas e objetos é crucial.

Outra aplicação importante das redes neurais artificiais é no campo da medicina. As redes podem ser usadas para prever o risco de certas doenças em pacientes com base em seus dados médicos, ou para analisar imagens médicas para detectar doenças precocemente.

Matematicamente falando ...

Uma Rede Neural Artificial (RNA) é um modelo matemático que simula o funcionamento do cérebro humano através de camadas de neurônios interconectados. Cada neurônio recebe um conjunto de entradas e gera uma saída, que pode ser enviada para outros neurônios na rede. A rede é capaz de aprender a mapear as entradas para as saídas desejadas, ajustando os pesos das conexões entre os neurônios. A matemática por trás de uma RNA é baseada em álgebra linear e cálculo diferencial. Cada neurônio em uma RNA é modelado por uma função matemática que recebe um vetor de entradas e gera uma saída. A função de ativação mais comumente usada é a função sigmoide, que tem a forma:
onde x é a soma ponderada das entradas do neurônio. A função sigmoide é útil porque produz uma saída que varia continuamente entre 0 e 1, o que é útil para modelar a probabilidade de uma saída binária. Cada conexão entre neurônios é modelada por um peso, que pode ser representado por uma matriz. A entrada para cada neurônio é multiplicada pelos pesos de suas conexões e a soma é passada pela função de ativação. A saída do neurônio é então enviada para as conexões de saída que se conectam a outros neurônios na rede.

Durante o treinamento de uma RNA, os pesos das conexões são ajustados iterativamente para minimizar a diferença entre as saídas da rede e as saídas desejadas. Isso é feito usando um algoritmo de otimização, como o gradiente descendente, que calcula as derivadas parciais da função de perda em relação aos pesos da rede e ajusta os pesos para minimizar a função de perda.

A complexidade matemática de uma RNA aumenta com o número de camadas e neurônios na rede. Redes mais profundas e complexas podem aprender a representar relações mais abstratas e complexas entre as entradas e as saídas desejadas, mas também podem ser mais difíceis de treinar e ajustar corretamente.

Como foram desenvolvidas?

As redes neurais artificiais têm suas raízes na década de 1940, quando o matemático Warren McCulloch e o neurofisiologista Walter Pitts propuseram um modelo matemático para o funcionamento dos neurônios no cérebro. Esse modelo, conhecido como neurônio artificial, serviu de base para o desenvolvimento das redes neurais artificiais.

Na década de 1950 e 1960, vários pesquisadores, incluindo Frank Rosenblatt, desenvolveram as primeiras redes neurais artificiais para reconhecimento de padrões e aprendizagem automática. Essas redes eram baseadas em neurônios artificiais interconectados, que podiam ser treinados para reconhecer padrões em imagens ou sinais.

No entanto, na década de 1970, as redes neurais artificiais caíram em desuso, devido à falta de técnicas eficientes de treinamento e à limitação computacional da época.

Foi somente na década de 1980, com o desenvolvimento de novas técnicas de treinamento, que as redes neurais artificiais voltaram a ganhar destaque. Uma dessas técnicas foi a retropropagação de erros, que permitiu treinar redes neurais com várias camadas (conhecidas como redes neurais profundas) de forma eficiente.

Desde então, as redes neurais artificiais evoluíram significativamente, tanto em termos de estrutura quanto em técnicas de treinamento e aplicação. A explosão de dados e o aumento da capacidade computacional permitiram o desenvolvimento de redes neurais cada vez mais poderosas e sofisticadas, capazes de lidar com problemas cada vez mais complexos e variados.

Hoje em dia, as redes neurais artificiais são amplamente utilizadas em diversas áreas, como processamento de imagens e áudio, reconhecimento de voz, análise de dados, previsão de eventos e muitas outras aplicações.

Um exemplo em Python

Vamos criar uma rede neural para classificar imagens de dígitos escritos à mão. O conjunto de dados que usaremos é o MNIST, que contém imagens de 60.000 dígitos de treinamento e 10.000 dígitos de teste.
Primeiro, vamos importar as bibliotecas necessárias e carregar o conjunto de dados MNIST:
				
					import tensorflow as tf
from tensorflow import keras

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

				
			
Em seguida, vamos pré-processar os dados, normalizando as imagens para que os valores de pixel fiquem entre 0 e 1, e transformando as saídas em vetores one-hot encoding:
				
					x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0

y_train = keras.utils.to_categorical(y_train)
y_test = keras.utils.to_categorical(y_test)

				
			
Em seguida, vamos construir a rede neural. Neste exemplo, vamos usar uma rede neural com duas camadas ocultas, cada uma com 64 neurônios, seguidas por uma camada de saída com 10 neurônios (um para cada dígito).
				
					model = keras.Sequential([
  keras.layers.Flatten(input_shape=(28, 28)),
  keras.layers.Dense(64, activation='relu'),
  keras.layers.Dense(64, activation='relu'),
  keras.layers.Dense(10, activation='softmax')
])

				
			
Em seguida, vamos configurar o modelo, especificando a função de perda (cross-entropy), o otimizador (adam) e as métricas que desejamos acompanhar durante o treinamento (acurácia).
				
					model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

				
			
Finalmente, vamos treinar a rede neural usando os dados de treinamento:
				
					model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)

				
			

Este código treinará a rede neural por 10 ciclos (ou seja, passagens completas pelo conjunto de treinamento), com um tamanho de lote de 32 exemplos por vez, e monitorará a acurácia de validação durante o treinamento.

Depois de treinar a rede neural, podemos avaliá-la nos dados de teste:

				
					test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)

				
			
Este código imprimirá a acurácia da rede neural nos dados de teste.
Test accuracy: 0.9749000072479248, ou seja, 97,49% de acurácia.

Notebooks para download

Você pode baixar o notebook no meu Github, basta clicar aqui, ou diretamente do meu Drive, basta clicar aqui.

Rodrigo Terra

Atuei como Professor de Física e Cultura Maker, por mais de 20 anos. Sou Pesquisador em Ciências Educacionais com ênfase em Tecnologia Educacional e Docência. desenvolvendo trabalhos de Consultorias Pedagógicas para diversas empresas do setor educacional. Há alguns anos, venho direcionando meus estudos para o universo dos dados e programação. Atualmente, trabalho como Líder Acadêmico de matérias técnicas, como Data Analytics, Gestão de Produtos Digitais e Mercado Financeiro. Sou um eterno curioso, apaixonado por café e por uma boa conversa. Acredito que somente com uma formação transdisciplinar é que criamos oportunidades pensar em diferentes aspectos ou ponto de vista de um mesmo assunto, e com isso, desenvolver pessoas mais conscientes e preparadas para a vida.

Deixe um comentário