Inteligência Artificial

André Claudino

André Claudino

https://www.linkedin.com/in/andreclaudino/

https://github.com/andreclaudino

http://t.me/aclaudino

PhD. Física Computacional
(Física Matemática com IA simbólica)

time: IA Front

Interajam!

Inteligência 

Inteligência? 

  • O torna uma pessoa inteligente?
  • O que torna um cachorro inteligente?
  • O que torna um computador inteligente?

Inteligência

=

habilidade de generalizar

Inteligência Artificial? 

Como generalizar artificialmente? 

Inteligência Artificial? 

Antes

  • modelos = funções
  • poucos dados
  • poder computacional menor
  • Armazenamento caro
  • Problemas pequenos
  • Geral

Hoje

  • modelos = resultados
  • muitos dados
  • mais poder, mas também mais dados
  • Armazenamento barato
  • Problemas grandes
  • Geral ou específico

Do que vamos falar

  • Abordagens
  • Exemplos simples
  • Exemplo complexo
  • Supervisionada

  • Não Supervisionada

  • Reforço

  • Geradores

  • Outros

Abordagens

Supervisionada

Aprende a relacionar características comuns a exemplos

Não Supervisionada

Aprende a relacionar características comuns, apenas

Reforço

Aprende qual ação tomar em busca de recompensa

Reforço

Aprende qual ação tomar em busca de recompensa

Geradores

Aprende a gerar itens parecidos com a entrada

Geradores

Aprende a gerar itens parecidos com a entrada

Exemplo

Criar modelo para inferir grupos semânticos de produtos

Árvore semântica

Árvore semântica

Cluster de frete

Microdados

Projeto

git clone git@github.com:IABrasil/inferir-grupos.git
cd inferir-grupos
python3 -m virtualenv venv
source venv/bin/activation

Supervisionado

Rede neural

Rede neural

Funciona otimizando o comportamento de um conjunto de neurônios organizados numa camada

y = \varphi(\vec{w} \cdot \vec{x} + \vec{b})
\vec{y} = \varphi(W \vec{x} + \vec{b})

Neurônio

Camada

Rede neural

Usa os gradientes para otimizar os neurônios

def training_step(model, features, labels, optimizer):
    
    with tf.GradientTape() as tape:
        tape.watch(model.trainable_variables)
        
        predicted = model(features, training=True)
        loss = sigmoid_loss(predicted, labels)

    gradients = tape\
    	.gradient(loss, model.trainable_variables)
   
    grads_per_vars = zip(gradients, model.trainable_variables)
    optimizer.apply_gradients(grads_per_vars)

Rede neural

Repete o processo para os elementos no conjunto de treino

def train(model: ClassifierModel, dataset: tf.data.Dataset,
          save_path: str, summary_step: int, save_step: int,
          optimizer):
  
    for features, label in dataset:
      
        training_step(model, features, label, optimizer)

        last_step = model.last_step.value()

        if last_step % summary_step == 0:
            model.summary()

        if last_step % save_step == 0:
            model.save(save_path)

Resultados

Não supervisionado

K-Means

K-Means

  • Cria k centroides e mede a distância de cada ponto até o centroide mais próximo.
     
  • Atualiza os centróides até que todos os pontos tenham a menor distância possível até um centróide

K-means

Treina k-means num único lote grande

def input_fn():
  	tensor = tf.convert_to_tensor(batch, dtype=tf.float32)
    return tf.compat.v1.train.limit_epochs(tensor, num_epochs=1)

num_clusters = 2
kmeans = tf.compat.v1.estimator\
			.experimental\
			.KMeans(num_clusters=num_clusters,
                    	use_mini_batch=False)

for _ in np.arange(num_iterations):
  kmeans.train(input_fn)

accuracy = calculate_accuracy(input_fn, kmeans, labels)
print(accuracy.numpy())

Resultado

https://asciinema.org/a/t5WdUP9XFeoFEdYHk36iegbh6
 

Exercícios

Adicione uma etapa de validação no modelo supervisionado com dados não utilizados em treino

def train(model: ClassifierModel,
          train_dataset: tf.data.Dataset,
          validation_dataset: tf.data.Dataset,
          save_path: str, summary_step: int, save_step: int,
          validation_step: int, optimizer):
  
    for features, label in dataset:
      
        training_step(model, features, label, optimizer)

        last_step = model.last_step.value()
        
        if last_step % validation_step == 0:
          	validate_step(model, validation_dataset)

        if last_step % summary_step == 0:
            model.summary()

        if last_step % save_step == 0:
            model.save(save_path)

Faça treinos por batches no modelo k-means (terça)

dataset = load_dataset_for_unsupervised(
  		source_directory, batch_size, repeats=1)
			.as_numpy_iterator()
   
for batch, labels in dataset:
	    
    def input_fn():
		return tf.compat.v1.train.limit_epochs(
          tf.convert_to_tensor(batch, dtype=tf.float32),
          	num_epochs=1)
  
	kmeans.train(input_fn)
    
    accuracy = calculate_accuracy(input_fn, kmeans, labels)
    print(accuracy.numpy())

Pesquise, discuta com seus colegas e responda

  • Por que o modelo supervisionado performa tão mal?
  • O que significa a taxa de acerto em torno de 50%?
  • Considerando o resultado no modelo não supervisionado, o supervisionado poderia ser melhor?
  • Se sim, o que pode ser feito para melhorar o modelo supervisionado?
  • O que mudou quando alterou o modelo não supervisionado para usar vários lotes?
  • Modifique as duas versões do modelo supervisionado para ter uma etapa de teste num dataset de teste com dados não usados em treino

deck

By André Claudino