-
Notifications
You must be signed in to change notification settings - Fork 1
Inicio

Aprendizagem de máquina, também chamada de aprendizagem automática, de acordo com Arthur Samuel em 1959,
dota computadores com a habilidade de aprender sem terem sido especificamente programados. 1
Andrew NG parece preferir dizer:
sem terem sido aparentemente especificamente programados. [2] (https://pt.coursera.org/learn/machine-learning), 3
Vamos tentar desenvolver um pouco a idéia por trás da aprendizagem de máquina, que faz parte da área chamada de inteligncia artificial (AI, do ingls, IA).
O estado de um objeto em um dado momento é definido por seus dados. Existem vários tipos de dados, como, numéricos, palavras, outros objetos, símbolos. Nos interessam aquí os dados simbólicos. Na verdade, podemos definir codigos para traduzir simbolos em outros simbolos. Computadores utilizam apenas alfabeto binário.
Nós realizamos tranformações em objetos através da aplicação de funções. Funções mapeiam simbolos em outros simbolos. Uma fórmula é uma função. Tomemos por exemplo o famoso teorema de Pitágoras, que relaciona os lados de um triângulo retângulo qualquer. Ao arbritar dois lados, podemos aplicar a fórmula obtendo o terceiro. Neste momento teremos definido um triângulo retângulo em um modelo simbólico. Obtivemos um objeto a partir da aplicação da fórmula em alguns dados. Esta é uma ação típica que somos capazes de realizar por ter aprendido a fórmula.
Coloque-se agora um pouco no lugar de Pitágoras antes de haver desnvolvido seu teorema. Ele possuia dados, valores de triângulos retangulos. Mas não havia a função que relacionava estes dados. Sua tarefa, foi portanto, obter a função a partir dos dados. Uma fórmula é composta de uma ou mais operações, que tranformam os dados.
Podemos dizer que a ação de um programa de aprendizagem automática é desenvolver novas fórmulas, a partir de dados. Uma abordagem pode ser a de criar uma função que opera em todos os dados disponÃveis de vários objetos. Se eles forem triângulos retangulos, que seja criada uma função que opera em todos os catetos. Estas operaçoes podem ser inicialmente quaisquer operações, desconhecemos as operações verdadeiras.
Num passo seguinte, aplicamos nosa fórmula a dados de catetos. Muito provávelmente esta fórmula criada ao acaso vai errar. Neste momento verificamos o quão errado a fórmula está, comparado o valor da hipotenusa calculada com o valor da hipotenusa verdadeira. Desta diferença obtemos o valor de erro. este valor pode ser usado para realizar um refinamento na formula, e aÃ, repetimos o processo, tentando obter um erro cada vez menor, até que teremos uma fórmula exata. Será que Pitágoras poderia ter sido um programa de computador?
Aprendizagem de máquina é aplicada em várias atividades, vejamos alguns exemplos, dentre muitos existentes.
-
Sistemas de recomendação 👍 . Utilizados por sites de venda, como a Amazon, para recomendar compras baseadas nas escolhas dos usuários comparados mutuamente. Ou em serviços de stream, como o Netflix ou o Prime. Observem a complexidade de considerar que, ao classificar o filme A como um bom filme, o usuário deverá gostar também do filme B. Ora, apesar de podermos classificar um filme pelo gênero (ação, romance, etc), a qualidade de um filme é determinada por fatores muito mais profundos. Pode ser a música do filme, o estilo do diretor, os atores, seus desempenhos, o estilo da narrativa. E ainda é preciso classificar usuários como de gosto semelhantes, e desta forma poder recomendar um filme que o usuário A gostou para o usuário B. Em sÃntese, são tantos fatores a considerar que fica muito difÃcil criar uma formula cheia de calculo.
-
Carros semi e auto dirigÃveis 🚗. Empresas como o Google, Tesla, Uber, para mencionar algumas, já estão testando, na prática em em tempo real, carros semi ou auto dirigÃveis, em algumas cidades. Dirigir é uma atividade complexa, que precisa levar em consideração um grande número de fatores. Um programa de computador que deseja aprender a dirigir, de maneira semelhante a como uma pessoa aprende, deve ser capaz de levar em consideração a observação visual da estrada, deve prever as ações de outros motoristas, deve observar a sinalização, deve considerar informações sonoras. A lista de fatores que influenciam cada ação de acelerar, reduzir, parar, controlar o volante, etc, é muito grande. Imagine se tivéssemos que ensinar uma pessoa a dirigir, mas que esta pessoa nunca andou de carro, nem mesmo sabe o que é um carro. E se tivéssemos que ensinar dentro de uma sala, sem prática, sem imagens, só descrevendo o que pode acontecer, o que deve ser feito diante de cada evento ... Seria uma tarefa talvez impossÃvel. Em termos de computação, isto seria programar especificamente para a realização de uma tarefa. Por outro lado, na verdade as pessoas aprendem inicialmente observando alguma outra pessoa dirigir. Depois, começam a praticar, em geral em um local especialmente seguro, e cometem erros, e aprendem com estes erros. O equivalente disto para um programa de computador seria aprender observando filmes de alguém dirigindo, e depois simular o ato de dirigir começando em um ambiente virtual, até conseguir igualar, e se possÃvel ter desempenho melhor, do que os motoristas observados. Isto seria um programa aprendendo algo sem ter sido especificamente instruÃdo sobre o que fazer exatamente.
-
Diagnóstico de enfermidades, como o câncer 🏥. Muitas doenças graves, se diagnosticadas a tempo, podem ser tratadas com mais eficiência, evitando danos mais graves e óbitos precoces. Recentemente uma série de televisão chamada House fez bastante sucesso. Mostrava as atividades de uma equipe especializada em diagnóstico de um grande hospital. O foco da série era a grande dificuldade de diagnosticar certas patologias. Isso exige grande capacidade do especialista. Por mais que estude, pelas limitações humanas, um médico não consegue aprender tudo que seria bom saber. Um programa de computador capaz de aprender, na presença de dados históricos, pode atingir nÃveis de conhecimentos sem precedentes. Programas de aprendizagem automática têm ultrapassado a eficiência de pessoas em várias abordagens.
-
Detecção de atividades fraudulentas na Internet 😈. Sites de serviços, como bancos, sites de venda, são muito visados por fraudadores. Programas que podem aprender a identificar ações fraudulentas possuem grande demanda.
-
Jogos 🎲. Programas de aprendizagem automática têm apresentado resultados expressivos aprendendo jogos, como xadrez e go. Mas são utilizados com sucesso em jogos de computador, onde a informação deve ser obtida através de imagens. Jogos exigem uma forma de aprendizagem especial, diferente de, por exemplo, aprender a classificar uma imagem, onde só existe uma classificação certa, as outras são erradas. No jogo existe o cenário e um conjunto de ações disponÃveis. O jogador, seja pessoa ou máquina, tem um objetivo, ganhar o jogo. O problema é que quase nunca existe apenas uma ação certa. O jogador pode ir em frente, virar a esquerda, virar a direita ... e isso não faz diferença imediata. Só após executar um numero nem sempre pequeno de ações, as consequências começam a aparecer. Para aprender a jogar, um programa tem que ser capaz de experimentar e avaliar o resultado de longas tomadas de decisão.
Podemos dizer que a aprendizagem de máquina se situa na fronteira da computação e da estatÃstica. A estatÃstica é a ciência especializada em coletar, observar, classificar e determinar ações pela análise de dados. Utiliza bastante os conhecimentos de probabilidade para isso.
Aprender por observação demanda quantidades muito grandes de dados históricos, que mostrem claramente o que deve ser feito, com exemplos tanto de sucessos, como de fracassos.
Uma observação aqui, com relação a graduação de engenharia da computação, é que naturalmente são cursos que estudam computação e estatÃstica, com uma noção de matemática básica bastante completa.
Olhe por exemplo uma criança pequena. Alguém aponta um objeto para ela e diz algo como: "Olhe, um au-au!", ou então, - "Ali, um carro!", e assim por diante. Algum tempo depois, a criança começa a mencionar o nome dos objetos quando os vê. A criança aprendeu o nome dos objetos e é capaz de classificá-los com sucesso até certo ponto.
Alguns aspectos do processo de aprendizagem podem ser destacados:
- Mostrar e rotular. Alguém apenas precisa mostrar e rotular (informar o nome) do objeto.
- Sem destaque para as caracterÃsticas. Não é necessário ensinar quais as caracterÃsticas do objeto que devem ser usadas na classificação, funciona mesmo assim. Não se tenta explicar a uma criança pequena o que é um carro, como ele funciona, o que é o motor, combustÃvel, dizer que tem rodas, como funcionam as rodas ... espera-se que ela aprenda apenas vendo e ouvindo o nome.
- Aprendizagem capaz de ser generalizada. A criança consegue, após o devido tempo, classificar com relativo sucesso objetos diferentes da mesma classe. Não é necessário ensinar separadamente cada carro, como o carro da famÃlia dela, o do vizinho, o de cada pessoa. Ela vai generalizando, sendo capaz de saber que é um carro, sem ter sido especificamente instruÃda a isso, várias marcas e modelos de carro, com tamanho, forma e cores diferentes. Mesmo havendo diferenças, ela reconhece e classifica os objetos como carros, identifica como au-au cachorros diferentes, de raça, de aparência diferente.
Código de computador são conjuntos de instruções. As instruções são estritas e simples, são operações matemáticas aplicadas a dados numéricos, como por exemplo - "some isto e armazene ali", - "compare estes e decida o que fazer baseado no resultado", - "repita estas operações até que ...", e assim por diante. Não é uma tarefa difÃcil ensinar uma criança a reconhecer um carro, é só apontar e dar o nome. Mas talvez não seja tão fácil ensinar um computador a fazer o mesmo através de instruções especÃficas de computador. Estes aspectos serão aprofundados e discutidos na evolução deste texto. Mas por ora, podemos considerar a dificuldade que terÃamos de expressar as propriedades (ou caracterÃsticas) dos componentes de um carro que permitissem seu correto reconhecimento e classificação: Tem que ter esta cor, tem que ter esta forma, etc, e ao dizermos isto para alguém que nunca viu um carro, a pessoa chega a conclusão que um besouro é um carro! Se apenas pensarmos sobre isso veremos que não é uma tarefa fácil. Porque talvez possamos dizer que somos capazes de reconhecer um carro, mas não sabemos bem descrever como o fazemos. Uma das razões pode ser especulada de algumas pesquisas de ponta sobe o funcionamento do cérebro humano. Estas pesquisas afirmam que nossos cérebros não processam informações com uma única e linear série de operações, mas, ao invés disto, utiliza vária áreas de processamento separadas, algumas bem especializadas em fazer determinados tipos de operações, diferentes de outras. e mais, estas operações à s vezes ocorrem de forma concorrente, e ainda ocorrem tanto em áreas conscientes como em áreas inconscientes de nosso cérebro. Como resultado disto, podemos estar conscientemente tentando falar o nome do objeto que avistamos, e de repente, no meio deste pensamento surge do nada a palavra carro, sem termos consciência do que aconteceu para chegarmos a esta conclusão. E tudo isto tão rápido, que sem refletir já estamos pensando em outra coisa. Podemos resumir em: Sabemos fazer, mas não sabemos como fazemos!
Cientistas da computação vê tentando várias abordagens para realizar reconhecimento de objetos, no campos mais geral da inteligência artificial. Houve algum sucesso na utilização de segmentação de um objeto em suas caracterÃsticas (propriedades), mas com pouco efeito generalizado. Ã� aà que o aprendizado automático tem recebido esforço de desenvolvimento, e tem apresentado alguns resultados promissores. Vamos aprender que um algoritmo de reconhecimento realiza seu trabalho selecionando algumas caracterÃsticas. Mas,à medida que evoluem, nós não temos ideia exata de quais são as caracterÃsticas selecionadas. Provavelmente, um grande número, e também, uma grande combinação delas. Não necessariamente algo evidente como rodas, cantos e para-brisas.
Para classificar, reconhecer objetos, precisamos ser capazes de compará-los, e isto equivale a separá-los. Pegue por exemplo duas cidades. Você separa o que pertence a uma cidade do que pertence a outra desenhando um mapa das cidades onde existe uma linha fronteiriça entre elas. Que sejam Vassouras e Barra do PiraÃ. Desta forma, as pessoas que moram de um lado da fronteira pertencem a Vassouras e quem mora do outro pertencem a Barra do PiraÃ. O problema é que, mesmo em duas dimensões, desenhar fronteira pode ser complicado. Dificilmente vai ser uma linha reta. Mais provável mente vai ser uma linha bastante irregular, seguindo preferencialmente detalhes de fenômenos geográficos, como rios, montanhas. E ainda, fenômenos demográficos, como casas, ruas, estradas e propriedades rurais. Mas vamos começar da forma mais simples possÃvel.
Em uma dimensão só existe o ponto.
Em duas dimensões passamos a ter o plano. Podemos colocar dois pontos sobre um plano de estabelecer suas posições com coordenadas cartesianas. Em seguida, podemos definir uma linha reta, novamente com coordenadas cartesianas, de tal forma que ela separe os dois pontos. Algo como: Deste lado está o ponto A, e deste outro está o ponto B.
Vamos ilustrar um pouco melhor a separação de pontos com uma linha reta. Imagine um gráfico cartesiano (em azul), como na Figura 1. Imagine a ocorrência de dois grupos de valores, os pontos verdes e os vermelhos.
Então, você traça uma linha preta para separar os dois grupos de valores, como na Figura 2.
� preciso girar o sentido da linha separadora para uma posição mais adequada, veja a Figura 3.
Você vê que apenas girar não é suficiente para a melhor separação. Deslocar a linha separadora permite melhor resultado, como mostra a Figura 4.
| Figura 1 | Figura 2 | Figura 3 | Figura 4 |
|---|---|---|---|
| [[https://github.com/duodecimo/duodecimoMachineLearning/blob/master/images/cartesianClustersSeparation01.png | width=200px | height=200px | align=center |
Para posicionar a reta convenientemente separando os pontos de cores diferentes, precisamos em primeiro lugar definir uma equação de uma reta no plano cartesiano.
A equação geral da reta: ** ax + by + c = 0**.
Se você escolher originalmente uma reta que fica exatamente sobre um dos eixos cartesianos, para deslocá-la de forma que separe os pontos de cores diferentes, você deseja fazer dois tipos de operação geométrica, rotação e translação. Rotação, com diz o nome, faz a reta rodar mudando de ângulo com relação aos eixos cartesianos X e Y. Alterar os valores das constantes a e b na equação geral da reta causa rotação. Mas só mudando a rotação, a reta sempre passa sempre pela origem, ou seja, pelos pontos x=0 e y=0. Para transladar a reta, alteramos a constante c. Se c é diferente de zero, a reta não passa pela origem.
Continuemos pensando. Se os objetos estão em dois grupamentos distintos, uma reta pode separá-los. A medida em que se misturarem, podemos precisar de uma linha curva. Na verdade, a reta pode ser considerada como um caso especial de uma curva, no sentido que poderÃamos definir uma reta com a equação da curva.
Outra possibilidade é traçar retas e curvas para separar três ou mais tipos de objetos. Vamos usar o termo linhas. Dadas linhas suficientes, podemos separar qualquer quantidade de objetos diferentes num plano.
Linhas não são suficientes para separar objetos em três dimensões. Para prosseguir com este pensamento, vamos propor utilizar sacos. Só que não podemos pegar os objetos e simplesmente colocar em sacos diferentes, um para cada tipo de objeto. Ao fazer isso, estarÃamos mudando a posição dos objetos. O que queremos é mudar a posição dos sacos. Vamos então imaginar um saco muito especial: tem que ser flexÃvel, de forma que possamos ir esticando e fazendo a boca dele envolver cada objeto do tipo que ele separa, quando a boca do saco passar por todos os objetos, damos um nó fechando-a. Com sacos suficientes, podemos separar qualquer quantidade de objetos em um espaço de três dimensões. Mas, qual o material para este tipo de saco? Afinal, quanto mais tipos de objetos e quão mais espalhados eles tiverem, mais flexÃvel o saco precisa ser para podermos realizar a tarefa, temos que ir esticando, esticando. Poderia ser látex? Bom, látex é flexÃvel, mas tem limites. Se esticar demais, pode rasgar. Como só estamos imaginando, vamos então imaginar um novo tipo de material: espacex, feito de espaço, de tecido temporal. Esticando nossos sacos de espacex tranquilamente poderÃamos separar todos os objetos. Mesmo se forem os planetas e as estrelas. E as equações? Sim, é possÃvel perfeitamente definir uma equação com três dimensões para o saco de espacex que permita verificar, dadas as coordenadas espaciais em três dimensões de um objeto, em qual saco ele está. Ã� só uma operação geométrica. Claro que pode ficar muito complexa, mas pode perfeitamente ser calculado.
Agora que começa a ficar interessante. Nós vemos o mundo em três dimensões, pelo menos aparentemente. Para preparar a imaginação, seria bastante útil ler o livro Flatland: A Romance of Many Dimensions by Edwin Abbott Abbott. (Estamos informando o link em inglês no Project Gutenberg que é um site onde podemos encontrar livros que caÃram no domÃnio público, sem restrições e sem custo. Os livros são oferecidos em muitos formatos, como texto, html, para leitores como kindle ou epub. Existem à s vezes traduções para outros idiomas. é só verificar).
Em uma ocasião o matemático Riemann, discÃpulo de Gauss, um dos maiores matemáticos de todos os tempos, demonstrou em um artigo o cálculo da diagonal do cubo com quatro dimensões, denominado de tesseract.

Na verdade, podemos com calculos geométricos calcular e verificar em quais sacos de espacex se encontram objetos definidos em quatro dimensões. Apenas o cálculo é bem mais complexo que o cálculo com três dimensões. Porém, só o que aumenta é o número de operações necessárias, daà a complexidade. As operações em si são basicamente as mesmas.
Finalizando o exercÃcio de imaginação, o cálculo pode ser feito para sacos de espacex em quantas dimensões desejarmos. Na verdade, a verdadeira dificuldade com que precisamos lidar para realizar a separação de dados perfeita, em múltiplas dimensões (considere que as informações que podemos obter sobre, por exemplo, um filme, como gênero, subgêneros, atores, opiniões, crÃtica, duração, ano em que foi feito, prêmios, etc, cada uma é uma dimensão), a verdadeira dificuldade é a quantidade de operações que temos que realizar.
Os computadores evoluÃram e evoluem em sua capacidade de realizar grandes quantidades de cálculos. Discutiremos a seguir como a evolução dos computadores impacta a capacidade de maior aprendizagem dos programas de aprendizagem automática.
Aprendizagem de Máquina - Duodécimo Fernandes