segunda-feira, 31 de julho de 2017

Fuzzy - Mariana e Jean

Ao passo que as tecnologias da informação se desenvolve o estudo relacionado se torna cada vez mais não-linear e complicado, onde a linguística natural se torna cada vez mais presente.  Um mecanismo de controle biológico pode desenvolver várias funções complexas sem a necessidade de modelos matemáticos ou de resolver alguma equação complicada. Entretanto é muito difícil fazer com que um robô desenvolva as mesmas funções se baseando em informações vagas.  Para que robô possa desenvolver essas tarefas é necessária uma combinação de várias técnicas de controle como logica fuzzy e computação neural.
Os princípios da lógica fuzzy foram desenvolvidos primeiramente por Jan Lukasiewicz (1878-1956), que em 1920 desenvolveu e introduziu conjuntos com grau de pertinência que combinados aos conceitos da lógica clássica, desenvolvida por Aristóteles, deu embasamento suficiente para que na década de 60, Lotfi Asker Zadeh, professor de Ciências da Computação da Universidade da Califórnia, chegasse a ser o primeiro autor de uma publicação sobre lógica fuzzy.
            Zadeh observou que várias regras presentes no cotidiano não podiam ser explicadas pelas pessoas que as usavam. Por exemplo, quando olhamos pra uma pessoa podemos imaginar que ela tenha 50 anos, mas não sabemos explicar o porquê. Esse fato levou Zadeh a desenvolver o que conhecemos como lógica fuzzy.
Diferentemente dalógica booleana em que se usa 0 e 1 para representar verdadeiro ou falso, na lógica fuzzy são permitidos números entre 0 e 1 que representam informações como, meia-verdade ou quase-mentira.
Sistemas fuzzy podem ser utilizados em estimativa, tomada de decisão, e controle de sistemas mecânicos como refrigeração, controladores de automóveis e controladores de processos industriais. O principal uso da lógica fuzzy tem sido nos vários controladores de processos japoneses, mas os desenvolvimentos mais recentes em controle fuzzy estão acontecendo na Europa.
O engenheiro britânico Ebrahim Mamdani foi o primeiro a usar regras fuzzy em um sistema de controle fuzzy, e isso aconteceu quase que por acidente. No começo da década de 70 ele estava desenvolvendo um sistema de controle automático para um motor a vapor que tivesse a capacidade de um operador humano. Sua primeira tentativa foi usando um algoritmo matemático que aprendia a controlar o motor, mas ele logo descobriu que o algoritmo não funcionava tão bem como um operador humano. Mamdani e seus colegas então decidiram utilizar um método de inteligência artificial que combinava a habilidade humana com uma série de regras para o uso do conhecimento. Enquanto estava tendo problemas para escrever regras tradicionais em linguagem de máquina, ele se deparou com um trabalho de Lotfi Zadeh sobre o uso de regras fuzzy e algoritmos de análise e decisão em sistemas complexos. Com uma semana ele foi capaz de ler o trabalho de Zadeh e produzir um controlador fuzzy baseado em linguística e variáveis matemáticas.
Hoje o mais notável sistema fuzzy em funcionamento é sem dúvidas o metrô de Senddai no Japão. Desde 1987 um sistema fuzzy mantém os trens andando muito rápido sobre os trilhos, freando e acelerando suavemente, parando de forma precisa sem perder um segundo ou chacoalhar um passageiro.

Aprendizado de Máquina - Machine Learning

RAMON LUIZ SPOSITO, JONATHAS CORREA ALVES, RODRIGO BERTUCCI DO AMARAL, WANNER MARTINS DE MENEZES, FÁBIO DINIZ

O Aprendizado de máquina (Machine Learning) pode ser definido como um conjunto de regras e procedimentos que permitem que os computadores possam agir e tomar decisões em dados, não precisando que sejam programados especificamente para realizarem tais tarefas.

Os programas de Aprendizado de Máquina evoluem com o longo do tempo, adaptando-se de forma independente quando expostos a novos dados. Eles aprendem com seus cálculos anteriores, com o intuito de produzir resultados cada vez mais confiáveis.

Atualmente, têm-se vários métodos de machine learning. Os dois mais adotados são:


- Algoritmos de aprendizado supervisionado: É a técnica utilizada quando o programa tem um conjunto de dados já rotulado/pré-definido. Começando a manipular esses dados, o programa toma decisões mais precisas quando recebe novos dados. É um tipo de algoritmo utilizado na situação em que dados já passados podem prever acontecimentos futuros.


- Aprendizado não supervisionado: É utilizado com dados que não possuem informações passadas/histórico. Sendo assim, o algoritmo tenta descobrir o que está sendo exatamente mostrado: ele explora os dados, e encontra padrões, relações e estruturas dentro deles. Esse tipo de aprendizado funciona muito bem dados transicionais, por exemplo.
Além desses métodos, existem alguns conceitos importantes para entender melhor o aprendizado de máquina. 

A Classificação é uma sub-categoria da aprendizagem supervisionado. Pode ser definido como o processo de analisar uma entrada, e basicamente rotular a mesma. Sendo assim, é geralmente utilizado para previsões distintas, como um simples “sim” ou “não”.

Também sendo uma sub-categoria da mesma natureza que a Classificação, têm-se a Regressão que é utilizada quando o valor procurado pode ter informações diferentes de um “sim ou não”, podendo responder a questões mais específicas, como por exemplo: “Quantas pessoas residem no local X?”

As Árvores de Decisão são ferramentas que utilizam gráficos de árvore ou modelos de decisões, juntamente com suas possíveis consequências.

Um tema muito trabalho atualmente é o de Aprendizagem Profunda. Ela tem o propósito de aprender padrões mais complexos em uma quantidade grande de dados. É geralmente utilizada quando o volume de dados é muito grande para outras abordagens mais simples. As aplicações atuais desse tipo de aprendizagem são nas áreas de identificação de objetos em imagens, e de palavras em sons.


Computação Evolutiva

Alunos: Diego de Souza Silva, Cesar Augusto Silva de Carvalho, Wellington Pereira Gonçalves 

Computação Evolutiva
Computação Evolucionária (CE) é um ramo de pesquisa emergente da Inteligência Artificial que propõe um novo paradigma para solução de problemas inspirado na Seleção Natural (Darwin 1859).
Entende- se como (CE) um conjunto de técnicas de busca e otimização de soluções para um processo complexo com grande número de variáveis, que se inspiram na evolução natural das espécies (Indivíduos e populações competem entre si por recursos, sobrevivência e por parceiros, os mais bem-sucedidos nessa competição geram mais descendentes)
As técnicas incluem (Banzhaf 1998): Programação Evolucionária, Estratégias Evolucionarias, Algoritmo Genéticos e Programação Genética. A comunidade de inteligência artificial estão cada vez mais utilizando esses métodos para obter modelos de inteligência computacional(Barreto 1997)
Programação Evolutiva:
L. FOGEL et al. (1966) propuseram a programação evolutiva como uma técnica de simulação da evolução para desenvolver uma forma alternativa de inteligência artificial. O comportamento inteligente era visto como requerendo as seguintes habilidades, predizer um determinado ambiente e responder apropriadamente a este ambiente baseado na predição feita O ambiente foi considerado de forma genérica como sendo descrito por uma sequência de símbolos tomados a partir de um alfabeto finito. O problema evolutivo foi então definido como sendo a evolução de um algoritmo que pudesse operar na sequência de símbolos até então observada de tal forma a produzir um símbolo de saída que maximizaria o desempenho do algoritmo em relação ao próximo símbolo a ser apresentado, dada uma função de custo bem definida.
As Primeiras Técnicas de (PE)
  FOGEL et al. (1966) propuseram a programação evolutiva para operar com máquinas de estado finito da seguinte forma: Uma população de máquinas de estado finito está exposta ao ambiente, ou seja, à sequência de símbolos observados até o momento.
Como cada símbolo é apresentado à cada máquina pai, o símbolo de saída é observado (predito) e comparado ao próximo símbolo de entrada. A qualidade desta predição é medida utilizando-se uma dada função de custo (p.ex. erro absoluto, erro quadrático, etc.). Após a última predição ser feita, uma função de custo (payoff) para cada símbolo vai indicar o fitness de cada máquina. Máquinas “filhas” são geradas aplicando-se uma mutação aleatória em cada máquina pai e cada pai produz um único filho. Cinco tipos básicos de mutação são possíveis para a máquina de estado finito: Mude um símbolo de saída; mude uma transição de estado; adicione um estado; delete um estado existente; e mude o estado inicial.
Estratégias evolutivas:
Estratégia Evolutiva (ES – Evolution Strategy) é uma classe de algoritmos da Computação Evolucionária e surgiu para solucionar problemas de otimização de parâmetros contínuos ou discretos. Foi proposto por I. Rechenberg e H. P. Schwefel, na Alemanha, com a publicação de um livro em 1973 que fundamenta a Estratégia Evolutiva.
A característica principal da ES é a adaptação online dos parâmetros que regem o processo evolutivo. Como consequência, um algoritmo baseado em ES executa simultaneamente duas tarefas: a solução de um problema de otimização específico e a própria calibragem do algoritmo para resolver o problema em questão.
A Estratégia Evolutiva é a que mais se aproxima da teoria evolutiva de Lamarck. Essa teoria, publicada em, defende que as variações no meio ambiente levam o indivíduo a se adaptar buscando a perfeição, seguindo duas leis: a do uso e desuso e a da transmissão dos caracteres adquiridos. Nesse contexto, a Estratégia Evolutiva utiliza como operações a mutação auto adaptativa e a recombinação com operador de seleção determinístico no processo de busca da solução.
Algoritmos evolutivos:
Os algoritmos evolutivos como o próprio nome diz eles mantêm uma população que evoluem, de acordo com as regras de seleção e operadores, sendo esses operadores de busca.
De acordo com Fernando J. Os algoritmos evolutivos não podem ser estipulados como algoritmos de processos de busca aleatória, porque a evolução não é aleatória, eles são algoritmos simples, rápidos e poderosos, o processo de busca dos algoritmos pode ser feito por meio de seleção por roleta e por meio de seleção por torneio.
Onde a seleção por roleta significa que cada indivíduo da população é representado na roleta por seu índice de aptidão, sendo assim o indivíduo com maior aptidão é dado a ele uma porção maior da roleta e assim sucessivamente.
E o meio de seleção por torneio diz que n indivíduos são escolhidos aleatoriamente para formar uma subpopulação temporária, nesse grupo que foi formado o indivíduo selecionado vai depender de uma probabilidade pré-definida onde o algoritmo irá selecionar o melhor deles para ser o escolhido naquela subpopulação e não na população completa.
Programação Genéticas:
Programação Genética (PG) foi criada por John Koza (koza1992), para geração de programas de computador, é uma área muito promissora de pesquisa no ramo da inteligência artificial.
Podemos dizer que a (PG) é a evolução de um conjunto de programas com o objetivo de aprendizagem por indução (Banzhaf 1998). A ideia da programação genética é ensinar computadores a se programarem.
Ela segue quase que o modelo de algoritmos evolutivos mantendo uma população de programas e escolhendo os melhores para aplicação dos operadores genéticos na modificação e conversão para uma determinada solução.

Como a PG é relativamente complexa e variável, ela é estruturada em uma árvore de sintaxe abstrata composta por funções em seus nós internos e por terminais em suas folhas, ou seja, é definido pelo conjunto de funções terminais (Koza 1992).

domingo, 30 de julho de 2017

Redes Neurais Artificiais

Autores: Carlos Alexandre, Edson Junior, Fadrique Brito, Geraldo Lucas e Heitor Garcia




Redes Neurais Artificiais (RNA) são técnicas de processamentos computacionais que se utilizam de um modelo matemático cujo é inspirado na estrutura neural de organismos inteligentes, adquirindo conhecimento a partir de experiências. Os sistemas assumem comportamentos e estrutura do cérebro humano, porém, claramente, com um conjunto limitado de neurônios.
Explicando brevemente, o sistema nervoso trabalha a partir de um conjunto fortemente complexo de neurônios. Os neurônios se comunicam e emitem impulsos nervosos entre eles, tendo como exemplo um impulso nervoso recebido por um neurônio A, e dado momento, é processado e processado então uma tarefa de ação, o neurônio A dispara uma substância neurotransmissora que flui do corpo celular para o axônio, podendo estar conectado a um dendrito de um outro neurônio B.
Uma RNA é feita através de várias unidades de processamento, que são conectadas através de canais de comunicação estando associadas a determinado peso. Tais unidades fazem processamentos e operações apenas sobre seus dados locais, cujo são recebidas através das suas conexões. As mais diversas interações e ligações entre as unidades de processamento da rede dão a características de comportamento inteligente para um RNA.
As entradas do RNA são similares à área de captação de estímulos, que resultam a uma série de ligações com outras unidades do RNA, ou saídas. Faz-se então a comparação ao sistema biológico, onde a área de captação de estímulos se conecta à diversos neurônios e cada um deles apresenta uma saída.
Em 1943 McCullock e Pitts propuseram um esquema de operação de uma unidade de processamento, que consistem em sinais sendo apresentados à uma entrada, tal sinal é multiplicado por um número, denominado peso, que indica o grau de sua influência na saída da unidade, a partir disto é feito uma soma ponderada dos sinais recebidos para se produzir um nível de atividade, caso esse nível de atividade exceda um certo limite, a unidade de processamento produz então uma determinada resposta de saída.

Esquema de unidade McCullock - Pitts.



Suponha que tenhamos p sinais de entrada X1, X2, ..., Xp e pesos w1, w2, ..., wp e limitador t; com sinais assumindo valores booleanos (0 ou 1) e pesos valores reais.
Neste modelo, o nível de atividade a é dado por:
a = w1X1 + w2X2 + ... + wpXp
A saída y é dada por:
y = 1, se a >= t ou
y = 0, se a < t.
A aprendizagem dos modelos de RNA se dá pela experiência, ou seja, um modelo apresenta uma regra de treinamento, cujo determina pesos a partir dos padrões apresentados. Tendo uma arquitetura organizada em camadas, com unidades que podem estar conectadas à outras unidades da camada adiante. Pode-se citar três grupos onde se classificam as camadas:

  • Camada de Entrada: Onde os padrões são apresentados à rede.
  • Camada Intermediárias (Escondidas): Onde acontece a grande parte do processamento a partir das conexões ponderadas.
  •          Camada de Saída: Onde o resultado final é concluído de apresentado.


O processo de aprendizagem se faz a parte mais importante para o processamento das habilidades de uma RNA. Aprendendo através de iterações com o ambiente, aplicando e ajustando o peso, e tendo então uma espécie de treinamento, onde gradativamente vai aprendendo mais coisas e situações.

O aprendizado é um conjunto de regras claramente definidas para que se encontre a solução de dado problema. Há diversos tipos de algoritmos de aprendizagem específicos para certos modelos de redes neurais artificiais, tendo como diferença entre eles, principalmente, o modelo em que os pesos são alterados.

Um fator importante, é a maneira como uma RNA se interage com o ambiente externo, impactando no seu aprendizado. Sobre essa situação, podemos citar alguns certos modelos de aprendizagem:

  •       Aprendizagem supervisionado: Há um agente externo (uma pessoa) que indica para a rede qual a resposta correta para aquele tipo de problema, tendo-se assim o padrão de resposta desejado para o padrão apresentado de entrada.
  •    Aprendizagem não-supervisionada: Não há um agente externo auxiliando nas respostas corretas para dado problema. Também podendo-se chamar de auto-organização.
  •   Reforço: Quando um agente crítico externo analisa e avalia a resposta de saída da rede à um dado problema de entrada.

Um ciclo, é a apresentação das entradas e saídas de um conjunto de treinamento no processo de aprendizagem. A correção de cada ciclo pode ser feita de duas maneiras:

·         Modo Padrão: Nesse modelo, a correção é feita a cada apresentação independente, do conjunto de treinamentos.  Cada correção de peso específico é baseada somente no erro em questão daquela iteração. Ou seja, para um ciclo de 10 apresentações, teremos então 10 correções.
Modo Batch: Nesse modelo a correção é feito apenas uma vez, para todo o ciclo. Todos os pares (entrada e saída) do ciclo são apresentados, tendo seu erro médio calculado e então faz-se as correções de pesos



quinta-feira, 27 de julho de 2017

Sistemas Baseados em Conhecimento - Gustavo, Leonardo, Leopoldo, Lorenna, Marlon, Murillo.

Um SBC (Sistema Baseado em Conhecimento) se aplica em engenharia, medicina, negócios, ciências entre outras áreas. Para um sistema ser classificado como SBC, o sistema deve ser capaz de questionar o usuário, desenvolver uma linha de raciocínio e até explicar seu próprio raciocínio, entretanto nem todo sistema que possui essas características é um sistema baseado em conhecimento. 
O problema deve estar explicitamente representado na base de conhecimento do sistema, possuindo um mecanismo de conclusão para interpretar a base de conhecimento. “SBCs podem ser classificados como SEs (Sistemas Especialistas) quando o desenvolvimento do mesmo é voltado para aplicações nas quais o conhecimento a ser manipulado restringe-se a um domínio específico e conta com um alto grau de especialização”
Os sistemas baseados em conhecimento estão cada vez mais conquistando espaço entre as tecnologias da informação. Nos últimos anos, softwares comuns são implementados utilizando técnicas de sistemas baseados em conhecimento, como por exemplo, o Windows.
Uma das arestas dos sistemas baseados em conhecimentos são os sistemas especialistas, que como o nome sugere cada sistema é focado em uma área especifica e seu objetivo é realizar sua função da forma mais rápida e mais eficiente possível, em advento a subáreas da IA (Inteligência Artificial). Por exemplo, no ambiente de acirrada competitividade presente nas empresas, sistemas baseados em conhecimentos vem apoia-las estrategicamente de forma a agilizar principalmente, o processo de tomada de decisão e na solução de problemas considerados complexos.
Outro exemplo de sistemas baseados em conhecimentos são os usados por empresas de cartões de credito para tomar decisões rápidas de aprovação de transações individuais feitas por seus clientes. Eles estão mais presentes no dia a dia do que pensamos, em softwares voltados ao consumidor, tais como jogos de xadrez, sistemas de reconhecimento de voz, corretores gramaticais, dentre muitos outros sistemas que usamos diariamente.  
Tecnologias relacionadas a sistemas baseados em conhecimento são usadas até em dispositivos como refrigeradores, ar condicionados, e até mesmo em equipamentos biomédicos de laboratório ou diagnósticos.
Imagem 1 - Representação visual de SBC e SE na IA.

MINERAÇÃO DE TEXTO - Deyvid, Geovane, Ivanilson, Lucas, Rodrigo Ramos, Samuel

MINERAÇÃO DE TEXTO

            Mineração de texto é um processo que utiliza algoritmos capazes de analisar coleções de documentos texto - tais como arquivos PDF, páginas Web, documentos XML e textos  VARCHAR de tabelas relacionais - com o objetivo de extrair conhecimentos necessários e valiosos.

Nos últimos anos a mineração de texto tem atraído o interesse não apenas dos pesquisadores em Ciência da Computação ou Sistemas de Informação, mas também das empresas, que procuram extrair conhecimento a partir de texto livre ou semiestruturado com o objetivo de conquistar um melhor posicionamento no mercado. Aqui se apresenta um panorama geral da área de mineração de texto para alunos e profissionais de informática que desejem estudar, trabalhar ou simplesmente conhecer um pouco mais sobre o assunto.

As tarefas de mineração de texto podem ser entendidas como as diferentes categorias de problemas que podem ser resolvidos através de processos de mineração de texto. Esta seção introduz as mais importantes através de uma abordagem simples e prática: apresentando não apenas as tarefas propriamente ditas, mas também uma série de exemplos de aplicações reais que podem ser solucionadas com o uso das mesmas. Existem dois formatos para isso:

Texto Livre: trata-se de texto escrito em alguma linguagem natural - como Português, Inglês, Italiano, etc. – que contém pouca ou nenhuma marca de estruturação. Alguns exemplos: artigos de revista, capítulos de livro, texto do corpo de um e-mail, arquivos PDF, entre outros. Nesta categoria também podem ser incluídos os campos descritivos de tabelas de bancos de dados relacionais, como CLOB, Memo e VARCHAR, já que eles são criados com o intuito de armazenar texto livre. Em muitos sistemas reais os textos armazenados nestes campos são consideravelmente longos e complexos (ex: um campo CLOB utilizado para armazenar a descrição de um atendimento em um sistema de help desk).
Texto Semiestruturado: documentos que, mesmo sem possuir um esquema rígido para validar seus dados, contêm alguma estrutura. Os dois principais exemplos são os documentos XML, onde as informações encontram-se demarcadas entre tags, e os arquivos JSON, que são compostos por pares atributo/valor.

Técnicas utilizadas
            As principais técnicas utilizadas para fazer a mineração de textos são:
- Processamento de Linguagem Natural: É um método que procura utilizar computadores para melhorar o entendimento da linguagem natural através de técnicas para processar textos rapidamente, utilizando-se de manipulação de strings até linguagem natural de inquéritos (MACHADO et al., 2010).
- Recuperação de Informação: Utiliza métodos e medidas estatísticos ou semânticos para automaticamente processar o texto de documentos para encontrar quais documentos possuem a resposta para a questão (mas não a resposta em si). Embora já fossem utilizadas técnicas deste tipo de forma primitiva em 1975, este método só ganhou notoriedade com a popularização da Internet(MACHADO et al., 2010).
- Extração de Informação: Possui como principal objetivo buscar partes relevantes de um texto em um documento e extrair informações específicas destas partes. Possui um conceito mais limitado da compreensão da linguagem natural(MACHADO et al., 2010).
- Estas técnicas são vastamente utilizadas na mineração de dados, principalmente em redes sociais e em processos de ensino a distância (MACHADO et al., 2010).

Fuzzy - Mariana e Jean

Ao passo que as tecnologias da informação se desenvolve o estudo relacionado se torna cada vez mais não-linear e complicado, onde a linguís...