-
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 específicamente programados. 1
Andrew NG parece preferir dizer:
sem terem sido aparentemente específicmante programados. [2] (https://pt.coursera.org/learn/machine-learning), 3
Aprendizagem de máquina é aplicada em várias atividades, vejamos alguns exemplos, dentre muitos existentes.
-
Sistemas de recomendação 👍 . Utilizados por sítes de venda, como a Amazon, para recomendar compras baseadas nas escolhas dos usuários comparados mútuamente. 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 tambem 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 sintese, são tantos fatores a considerar que fica muito difícl 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, mem 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 específicamente 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 alguem 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 específicamente instruído sobre o que fazer exatamente.
-
Diagnóstico de efermidades, como o câncer 🏥. Muitas doenças graves, se diagnósticadas 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 aquí, 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, - "Alí, 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 é nescessá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 específicamente 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 alí", - "compare estes e decida o que fazer baseado no resultado", - "repita estas operações até que ...", e assim por diante. Não é uma tarefa dificil 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 instuçõ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 côr, 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 bezouro é 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 vêzes ocorrem de forma concorrente, e ainda ocorrem tanto em áras concientes como em áras inconcientes de nosso cérebro. Como resultado disto, podemos estar concientemente tentando falar o nome do objeto que avistamos, e de repente, no meio deste pensamento surge do nada a palavra carro, sem termos conciência do que aconteceu para chegarmos a est 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 artifical. Houve algum sucesso nautilizaçã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 esfôrço de desenvolvimnto, 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 idéia exata de quais são as características selecionadas. Provávelmente, um grande número, e também, uma grande combinação delas. Não nescessáriamente algo evidente como rodas, cantos e parabrisas.
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. Difícilmente vai ser uma linha reta. Mais provávelmente vai ser uma linha bastante irregular, segunid 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 cartezianas, 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 seperaçã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 carteziano.
A equação geral da reta: ** ax + by + c = 0**.
Se você escolher originalmente uma reta que fica exatamente sobre um dos eixos cartezianos, 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 cartezianos 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 tres 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 sacomuito 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 sao precisa ser para podermos realizar a tarefa, temos que ir esticando, esticando. Poderia ser latex? Bom, latex é 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 estrêlas. E as equações? Sim, é possível perfeitamente defimir 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ó umaoperaçã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 cairam 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 vêzes traduções para outros idiomas. é só verificar).
Em uma ocasião o matemático Riemann, dicí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áculo com tres dimensões. Porém, só o que aumenta é o número de operações necessárias, daí a complexidade. As operações em sí são básicamente 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 sôbre, 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 evoluiram e evoluem em sua capacidade de realizar grandes quantidades de cáculos. 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