Andrew Eun "Paixão pelo aprendizado de máquina". Tradução dos capítulos 36-46

Três anos se passaram desde a publicação dos primeiros capítulos do Machine Learning Yearning, de Andrew Ng. Se você se inscreveu no hub "Machine Learning", não há necessidade de apresentá-lo ao autor, e provavelmente você já leu o livro em si há muito tempo, no idioma da fonte original. A tradução da primeira metade do livro para o russo foi feita por alexey_nichnikov ; neste momento, foi publicada em Habré em uma série de artigos .


Apresento a você minha versão da tradução da segunda metade do livro, os capítulos 36-58. Está planejado dividi-lo em dois artigos para facilitar a publicação. Além disso, você pode baixar uma tradução completa desses capítulos, compilada em pdf ; talvez alguém ache esse formato mais conveniente para a leitura.

O primeiro artigo se concentrará no treinamento e teste em diferentes distribuições, bem como nos algoritmos de saída de depuração.

Treinamento e teste em diferentes distribuições



Capítulo 36. Quando você deve treinar e testar em diferentes distribuições



Os usuários do seu aplicativo Cat Photo carregaram 10.000 imagens que você rotulou manualmente como contendo ou não gatos. Você também tem um conjunto maior de 200.000 imagens baixadas da Internet. Como definir treinamento (conjunto de trens), validação (conjunto de desenvolvedores) e seleção de testes (conjunto de testes)?

Como 10.000 imagens de usuários refletem de perto a distribuição de probabilidade real dos dados com os quais você deseja trabalhar com êxito no futuro, você pode usá-lo para suas amostras de validação e teste. Se você treinar um algoritmo de aprendizado profundo exigente no número de exemplos de treinamento, poderá fornecer 200.000 imagens adicionais baixadas da Internet para treinamento. Assim, os dados nas amostras de validação e teste terão diferentes distribuições de probabilidade. Como isso afetará o resultado do seu trabalho?

Em vez de dividir nossos dados em amostras de treinamento, validação e teste, podemos coletar todas as 210.000 imagens disponíveis e embaralhá-las aleatoriamente em amostras de treinamento, validação e teste. Nesse caso, todos os dados entram com a mesma distribuição. Mas eu não recomendo usar esse método, porque aproximadamente 97,6% (205.000 / 210.000) de suas amostras de validação e teste consistirão em imagens baixadas da Internet que não refletem a distribuição real na qual você deseja obter êxito.

Recomendação para a definição de validação e amostras de teste:

  • selecione validação e amostras de teste para refletir os dados que você espera receber no futuro e com os quais deseja trabalhar com êxito.

A maior parte da literatura acadêmica de aprendizado de máquina sugere que o treinamento, a validação e as amostras de teste têm a mesma distribuição. 1 No início do aprendizado de máquina, os dados eram escassos. Normalmente, tínhamos apenas um conjunto de dados com alguma distribuição de probabilidade. Portanto, dividimos aleatoriamente todo o conjunto em amostras de treinamento, validação e teste, assumindo que todos os dados vieram da mesma fonte, que geralmente correspondia à realidade.
1 Existem vários estudos científicos sobre o treinamento e teste de modelos em várias distribuições. Os exemplos incluem Adaptação de Domínio, Transfer Learning e Multitarefa. Mas ainda existe uma enorme lacuna entre teoria e prática. Se você treinar um modelo no conjunto de dados A e testar no conjunto de dados B, que é muito diferente, a sorte poderá ter um enorme impacto no desempenho do seu algoritmo. (Aqui, “sorte” inclui a seleção manual de atributos por um pesquisador para uma tarefa específica, além de outros fatores que ainda não entendemos.) Isso dificulta a realização de um estudo acadêmico sistemático de treinamento e testes em várias distribuições.

Mas na era do big data, agora temos acesso a enormes conjuntos de treinamento, como imagens com gatos da Internet. Mesmo que a amostra de treinamento tenha uma distribuição diferente da distribuição das amostras de validação e teste, ainda queremos usá-la para treinamento, pois isso pode fornecer muitas informações adicionais.

No exemplo com um detector de gato, em vez de colocar todas as 10.000 imagens carregadas pelos usuários nas amostras de validação e teste, poderíamos colocar apenas 5.000 imagens nelas. E os restantes 5.000 exemplos que podemos colocar no conjunto de treinamento. Assim, a amostra de treinamento consistirá em 205.000 exemplos e incluirá dados com a mesma distribuição das amostras de validação e teste, além de 200.000 imagens da Internet. No próximo capítulo, discutiremos por que esse método é útil.

Vejamos um segundo exemplo. Suponha que você esteja criando um sistema de reconhecimento de fala para transcrever endereços para o aplicativo de voz Navigator. Você tem 20.000 exemplos, em cada um dos quais o usuário nomeia algum endereço. Mas você também tem 500.000 outras gravações de áudio nas quais os usuários falam sobre tópicos gratuitos. Você pode obter 10.000 exemplos com endereços para validação e amostras de teste, e os 10.000 exemplos restantes, além de 500.000 exemplos adicionais a serem incluídos no conjunto de treinamento.

Continuaremos assumindo que nossos dados de amostra de validação e teste têm a mesma distribuição. Mas é importante entender e lembrar que diferentes distribuições nas amostras de treinamento e validação / teste levarão a problemas especiais.


Capítulo 37. Como decidir se deseja usar todos os seus dados ou apenas parte



Suponha que a amostra de treinamento do seu detector de gato inclua 10.000 imagens enviadas por usuários. Permita que esses dados tenham a mesma distribuição das amostras de validação e teste e é para essa distribuição que você deseja obter o resultado máximo. Você também tem 20.000 imagens adicionais baixadas da Internet. É necessário incluir todas as 20.000 + 10.000 = 30.000 imagens no conjunto de treinamento ou é melhor eliminar 20.000 imagens da Internet por medo de introduzir erros no algoritmo de aprendizado?

Usando gerações anteriores de algoritmos de aprendizado (como um algoritmo de visão computacional projetado manualmente, seguido de um classificador linear simples), havia um risco real de que a combinação de dados de ambas as fontes pudesse prejudicar os resultados. Assim, alguns engenheiros o alertam contra a inclusão de 20.000 imagens online.

Mas na era moderna de algoritmos de aprendizado poderosos e flexíveis, como grandes redes neurais, esse risco foi reduzido significativamente. Se você puder construir uma rede neural com um número suficientemente grande de camadas ocultas, poderá adicionar com segurança 20.000 imagens da Internet ao seu conjunto de treinamento. A adição de imagens provavelmente aumentará seus resultados.

Essa observação é baseada no fato de que existe alguma correspondência xy que funciona bem para os dois tipos de dados. Em outras palavras, existe algum tipo de sistema que, tendo recebido uma imagem da Internet ou uma imagem de um aplicativo móvel, prevê com segurança um rótulo sem nem mesmo saber a origem da imagem.

A adição de 20.000 imagens adicionais da Internet terá os seguintes efeitos:

  1. Isso dará à sua rede neural mais exemplos de como os gatos se parecem / não se parecem. Isso é útil porque as imagens da Web e as imagens carregadas pelos usuários de um aplicativo móvel têm algumas semelhanças. Sua rede neural pode aplicar parte do conhecimento obtido das imagens on-line às imagens de um aplicativo móvel.
  2. Isso força a rede neural a gastar parte de seus recursos no reconhecimento de propriedades específicas para imagens da Internet (por exemplo, maior resolução, vários métodos de design etc.) Se essas propriedades forem significativamente diferentes das imagens de um aplicativo móvel, isso será "drenado" parte das capacidades representativas da rede neural. Assim, haverá menos oportunidades para o reconhecimento de dados recebidos de um aplicativo móvel, e é isso que deve realmente preocupá-lo. Teoricamente, isso pode prejudicar o desempenho do seu algoritmo.

Para explicar o segundo efeito em outras palavras, podemos nos voltar para um personagem fictício, Sherlock Holmes, que diz que seu cérebro se parece com um sótão que tem uma quantidade limitada de espaço. Ele diz que “com cada adição de conhecimento você esquece o que sabia antes. Portanto, é extremamente importante não permitir que fatos inúteis substituam fatos úteis. ” 2
2 “Etude in Scarlet”, Arthutre Conan Doyle, 1887

Felizmente, se você tem o poder de computação necessário para construir uma rede neural suficientemente grande, ou seja, um “sótão suficientemente grande”, essa “exclusão” descrita acima não é um problema sério. Você tem oportunidades de treinamento suficientes em imagens da Internet e em imagens de um aplicativo móvel, enquanto os dois tipos de dados não competem pela capacidade de reconhecimento. O "cérebro" do seu algoritmo é grande o suficiente para que você não precise se preocupar que de repente não tenha espaço suficiente no sótão.

Mas se você não possui uma rede neural suficientemente grande (ou outro algoritmo de aprendizado muito flexível), preste mais atenção aos dados de treinamento que correspondem à sua validação e amostra de teste.

Se você acha que possui dados que não trazem nenhum benefício, basta excluí-los para acelerar os cálculos. Por exemplo, suponha que suas amostras de validação e teste contenham principalmente fotografias aleatórias de pessoas, lugares, sinais e ponteiros, além de animais. Suponha que você também tenha uma grande coleção de documentos históricos digitalizados:



Esses documentos não contêm nada como um gato. Eles também parecem completamente diferentes dos dados de suas amostras de validação e teste. Não faz sentido incluir esses dados como exemplos negativos, pois nesse caso os benefícios descritos no primeiro efeito serão desprezíveis. Com base nesses dados, sua rede neural não poderá descobrir quase nada que possa ser aplicado à sua validação e amostra de teste. A inclusão desses exemplos levará a uma perda de recursos de computação e a uma diminuição da capacidade representativa da rede neural.


Capítulo 38. Como decidir se deve incluir dados conflitantes



Suponha que você queira aprender como prever os preços da habitação em Nova York. Dado o tamanho da casa (entrada x ), você deseja prever o preço (etiqueta de destino y ).

Os preços da habitação em Nova York são muito altos. Suponha que você tenha um segundo conjunto de dados - preços da habitação em Detroit, Michigan, onde os preços da habitação são muito mais baixos. Devo incluir esses dados no meu conjunto de treinamento?

Dado o mesmo tamanho x , o preço de uma casa y é muito diferente dependendo se é em Nova York ou em Detroit. Se você se preocupa apenas em prever preços de imóveis em Nova York, a combinação dos dois conjuntos de dados prejudicará sua produtividade. Nesse caso, seria melhor não usar dados conflitantes do conjunto de Detroit. 3
3 Há uma maneira de resolver o problema de incompatibilidade dos dados de Detroit com os dados de Nova York, a saber, adicionar um recurso adicional a cada exemplo de treinamento, ou seja, indicação da cidade. Dado o valor de entrada de x , que agora indica a cidade, o valor alvo de y agora é determinado exclusivamente. No entanto, na prática, ainda não vejo isso sendo feito com frequência.

Como este exemplo de moradia em Nova York e Detroit difere do nosso exemplo de imagens na Internet de gatos e imagens de um aplicativo móvel?

O exemplo com as imagens de gatos difere em que, dada a imagem de entrada x , é possível prever com segurança o rótulo y , indicando se há um gato nele, mesmo sem saber se recebemos a imagem da Internet ou de um aplicativo móvel. I.e. existe uma função f (x) que reflete de forma confiável a correspondência da entrada x com a saída alvo y , sem ao menos conhecer a fonte de origem de x . Assim, a tarefa de reconhecer imagens da Internet "corresponde" à tarefa de reconhecer imagens de um aplicativo móvel. Isso significa que houve um pequeno sinal de menos (exceto os custos computacionais) da inclusão de todos os dados e algumas vantagens significativas possíveis. Em contraste com o exemplo de dados conflitantes de Nova York e Detroit, nos quais, para o mesmo valor de entrada x (tamanho da casa), o preço é muito diferente dependendo da cidade em que essa casa está localizada.


Capítulo 39. Pesando Dados



Suponha que você tenha 200.000 imagens online e 5.000 imagens de usuários do seu aplicativo móvel. Há uma proporção de 40: 1 entre os tamanhos desses conjuntos de dados. Teoricamente, desde que você construa uma rede neural enorme e a treine por tempo suficiente com todos os 205.000 exemplos disponíveis, não há nada de errado em fazer o algoritmo funcionar bem em imagens da Internet e em imagens móveis.

Mas, na prática, tendo 40 vezes mais imagens da Internet do que imagens de um aplicativo móvel, talvez você precise gastar 40 vezes mais recursos de computação do que quando treinou uma rede para apenas 5.000 imagens.

Se você não possui enormes recursos de computação, pode dar muito menos peso às imagens da Internet como compromisso.

Por exemplo, suponha que sua meta de otimização seja o erro ao quadrado (essa não é uma boa opção para o problema de classificação, mas simplificará nossa explicação). Portanto, seu algoritmo de aprendizado está tentando otimizar:

$$ display $$ \ min_θ \ sum _ {(x, y) ∈MobileImg} (h_θ (x) -y) ^ 2 + \ sum _ {(x, y) ∈InternetImg} (h_θ (x) -y) ^ 2 $$ display $$


A primeira quantia acima é o erro total de 5.000 imagens para celular e a segunda quantia é o erro total de 200.000 imagens da Internet. Em vez disso, você pode otimizar com um parâmetro adicional  beta :

$$ display $$ \ min_θ \ sum _ {(x, y) obileMobileImg} (h_θ (x) -y) ^ 2 + \ beta \ sum _ {(x, y) ∈InternetImg} (h_θ (x) -y) ^ 2 $$ exibir $$


Se você instalar  beta = 1/40, o algoritmo atribuirá peso igual a 5.000 imagens móveis e 200.000 imagens da Internet. Você também pode definir o parâmetro  beta outros valores, possivelmente ajustando-o à amostra de validação.

Atribuindo menor peso às imagens da Internet, você não precisa criar uma rede neural maciça para garantir que o algoritmo lide bem com os dois tipos de tarefas. Esse método de "reponderação" é necessário apenas se você suspeitar que dados adicionais (imagens da Internet) tenham uma distribuição muito diferente dos dados nas amostras de validação e teste ou se houver muito mais dados adicionais do que os dados obtidos com a mesma distribuição como nas amostras de validação e teste (imagens para celular).


Capítulo 40. Generalização da amostra de treinamento para uma amostra de validação



Suponha que você aplique ML em uma situação em que a amostra de treinamento seja diferente da amostra de validação / teste. Por exemplo, uma amostra de treinamento contém imagens da Internet + imagens para celular e as amostras de validação / teste contêm apenas imagens para celular. No entanto, o algoritmo não funciona muito bem: há um erro muito maior na amostra de validação / teste do que gostaríamos. Aqui estão algumas razões pelas quais esse pode não ser o caso:

  1. O algoritmo não funciona muito bem no conjunto de treinamento. Esse é um problema de alto viés (evitável) da distribuição da amostra de treinamento.
  2. O algoritmo funciona bem no conjunto de treinamento, mas generaliza mal para dados novos (anteriormente não mostrados) obtidos com a mesma distribuição que no conjunto de treinamento. Essa é uma alta variação.
  3. O algoritmo generaliza bem para dados novos (anteriormente não mostrados) obtidos com a mesma distribuição que na amostra de treinamento, mas não para dados da validação / amostra de teste. Chamamos esse problema de incompatibilidade de dados devido ao fato de que os dados da amostra de treinamento estão pouco correlacionados com os dados das amostras de validação / teste.

Por exemplo, suponha que as pessoas alcancem um resultado quase perfeito na tarefa de identificar gatos. E seu algoritmo atingiu:

  • 1% de erros na amostra de treinamento
  • 1,5% de erros nos dados novos (anteriormente não mostrados no algoritmo) com a mesma distribuição que a amostra de treinamento
  • 10% de erros na amostra de validação

Nesse caso, você definitivamente tem um problema de incompatibilidade de dados. Para habilitá-lo, você pode tentar tornar a amostra de treinamento mais semelhante à validação / teste. Discutiremos algumas técnicas dessa técnica posteriormente.

Para diagnosticar até que ponto o algoritmo sofre com cada um dos problemas 1-3 descritos acima, será útil ter um conjunto de dados diferente. Em particular, em vez de fornecer ao algoritmo todos os dados disponíveis para treinamento, você pode dividi-lo em duas partes: a amostra de treinamento real na qual o algoritmo será treinado e um conjunto separado, que chamaremos de validação de treinamento (conjunto "trainig dev" ), que não usaremos em treinamento.

Assim, você tem 4 conjuntos de dados:

  • O conjunto de treinamento (conjunto de treinamento). Esses são os dados nos quais o algoritmo será treinado (por exemplo, imagens da Internet + imagens de um aplicativo móvel). Esses dados não precisam ser coletados com a mesma distribuição, cujo resultado final enfocamos (amostras de validação / teste).
  • Amostra de treinamento e validação (conjunto de "treinamento dev"). Esses dados são obtidos com a mesma distribuição que na amostra de treinamento (por exemplo, imagens da Internet + imagens de um aplicativo móvel). Esse conjunto geralmente é menor que o conjunto de treinamento e deve ser grande o suficiente para avaliar e acompanhar o progresso do nosso algoritmo de treinamento.
  • Amostragem de validação (conjunto de desenvolvedores). Esses dados são coletados com a mesma distribuição que na amostra de teste e devem refletir totalmente a distribuição dos dados nos quais nos esforçamos para obter o máximo aprimoramento (por exemplo, imagens de um aplicativo móvel).
  • Conjunto de teste Esses dados são obtidos com a mesma distribuição que na amostra de validação (por exemplo, imagens de um aplicativo móvel).

Armado com esses quatro conjuntos de dados separados, você pode avaliar:

  • O erro de treinamento (erro de treinamento), avaliando a amostra de treinamento.
  • A capacidade do algoritmo de generalizar para novos dados, com a mesma distribuição que no conjunto de treinamento, avaliando o conjunto de validação de treinamento.
  • A eficiência do algoritmo como um todo para o problema a ser resolvido, avaliando uma validação e (ou) amostra de teste.

A maioria das recomendações fornecidas nos capítulos 5-7 deste livro para a escolha do tamanho da amostra de validação também é aplicável à amostra de treinamento e validação.


Capítulo 41. Determinação de erro de desvio, desvio e incompatibilidade de dados



Suponha que as pessoas alcancem eficiência quase perfeita (erro de ± 0%) nas tarefas de detecção de gatos e, portanto, a taxa de erro ideal é de cerca de 0%.

Suponha que você tenha:

  • 1% de erros na amostra de treinamento
  • 5% de erros na amostra de treinamento e validação
  • 5% de erros na amostra de validação

O que isso nos diz? Você sabe que tem uma alta variação. Os métodos de redução de dispersão descritos anteriormente devem permitir algum progresso.

Agora, suponha que seu algoritmo tenha atingido:

  • 10% de erros na amostra de treinamento
  • 11% de erros na amostra de treinamento e validação
  • 12% de erros na amostra de validação

Isso sugere que você tem um viés evitável alto no conjunto de treinamento. I.e.o algoritmo produz maus resultados no conjunto de treinamento, mas os métodos de redução de deslocamento devem ajudar.

Nos dois exemplos acima, o algoritmo sofre apenas um viés alto (viável evitável) ou apenas uma alta dispersão (variação). Além disso, o algoritmo pode sofrer qualquer combinação de alto viés, alta dispersão e inconsistência de dados. Por exemplo:

  • 10% de erros na amostra de treinamento
  • 11% de erros na amostra de treinamento e validação
  • 20% de erros na amostra de validação

Esse algoritmo sofre viés alto (viável evitável) e incompatibilidade de dados e, ao mesmo tempo, não apresenta problemas com alta dispersão na amostra de treinamento.

Pode ser mais fácil entender como os diferentes tipos de erros se relacionam escrevendo-os na tabela a seguir:


Continuando com o exemplo do detector de imagem de gato, você pode ver que existem duas distribuições de dados diferentes (distribuição A e distribuição B) ao longo do eixo X. No eixo Y, temos três tipos de erros: erro humano, erro nos exemplos a partir dos quais o algoritmo foi treinado e erro nos exemplos nos quais o algoritmo não foi treinado. Podemos preencher as células da tabela com os vários tipos de erros que identificamos no capítulo anterior.

Se desejar, também é possível preencher as duas células restantes nesta tabela: você pode preencher o campo no canto superior direito (“A eficiência é acessível para pessoas em imagens de um aplicativo móvel”), pedindo a alguém para marcar as imagens de gatos de um aplicativo móvel e depois medir seu erro . Você pode preencher o campo a seguir, capturando imagens de gatos de um aplicativo móvel (distribuição B) e colocando uma pequena parte deles no conjunto de treinamento, para que a rede neural também aprenda com ele. Então você mede o erro do modelo treinado nesse subconjunto de dados. O preenchimento desses dois campos adicionais pode às vezes fornecer uma compreensão adicional de como o algoritmo funciona em duas distribuições diferentes (distribuição A e B) de dados.

Para entender quais tipos de erros o algoritmo mais sofre, é possível determinar melhor se você deve se concentrar na redução do viés, na variação ou na inconsistência dos dados.


Capítulo 42. Resolvendo erro de incompatibilidade de dados



Suponha que você tenha desenvolvido um sistema de reconhecimento de fala que funcione muito bem em uma amostra de treinamento e em uma amostra de validação de treinamento. No entanto, o algoritmo não funciona bem na sua amostra de validação: você tem um problema de incompatibilidade de dados. O que você pode fazer?

Eu recomendo que você: (i) tente entender quais propriedades diferem nos dados das amostras de treinamento e validação; (ii) tente encontrar mais dados de treinamento que melhor correspondam aos exemplos da amostra de validação com a qual seu algoritmo tem problemas. 4
4 « » (domain adaptation) — . , , .

Por exemplo, suponha que você esteja executando uma análise de erro de validação para um sistema de reconhecimento de fala: você passa manualmente por 100 exemplos e tenta entender onde o algoritmo comete erros. Você descobrirá que seu sistema não funciona bem, porque a maioria das gravações de áudio da amostra de validação foi feita enquanto estava dentro do carro, enquanto a maioria dos exemplos da amostra de treinamento foi gravada no contexto de silêncio. O ruído do motor e da estrada prejudica drasticamente o desempenho do seu sistema de reconhecimento de fala. Nesse caso, você pode tentar obter mais exemplos de treinamento contendo gravações de áudio feitas no carro. O objetivo da análise de erros é entender as diferenças significativas entre as amostras de treinamento e validação, que levam à incompatibilidade de dados.

Se sua amostra de treinamento e validação de treinamento incluir o som gravado no carro, verifique também a eficácia do seu sistema neste conjunto de dados. Se funciona bem em exemplos "automotivos" de uma amostra de treinamento, mas não em exemplos "automotivos" de uma amostra de validação de treinamento, isso confirma mais uma vez a hipótese de que obter mais exemplos "automotivos" ajudará. Por isso, no capítulo anterior, discutimos a possibilidade de incluir em seu conjunto de treinamento um conjunto de alguns dados com a mesma distribuição que nas amostras de validação / teste. Isso permite comparar a eficácia do sistema com exemplos “automotivos” no conjunto de treinamento versus exemplos semelhantes de amostras de validação / teste.

Infelizmente, não há garantias nesta questão. Por exemplo, se você não tiver a oportunidade de obter mais dados de treinamento que correspondam melhor aos dados da amostra de validação, talvez não tenha um caminho claro para melhorar a eficiência.


Capítulo 43. Sintetizando Dados Artificiais



Seu sistema de reconhecimento de fala precisa de mais dados que soem como se as gravações de áudio desses exemplos fossem feitas em um carro. Em vez de coletar muitos dados durante a condução, pode haver uma maneira mais fácil de obter esses dados: gerando-os artificialmente.

Suponha que você receba um grande número de gravações de áudio com ruído na estrada / carro. Você pode baixar esses dados de vários sites. Suponha que você também tenha um grande conjunto de treinamento, nos exemplos dos quais as pessoas conversam em uma sala silenciosa. Se você fizer uma gravação de áudio de uma pessoa que fala e "adicionar" os sons do ruído do carro / estrada, você receberá uma gravação de áudio que soa como se essa pessoa estivesse falando em um carro barulhento. Usando esse processo, você pode sintetizar uma enorme quantidade de dados que soa como se fossem coletados dentro de um carro.

Em geral, existem várias circunstâncias em que a geração de dados artificiais permite criar um grande conjunto de dados que corresponde razoavelmente à amostra de validação. Vamos dar um detector de imagem de gato como um segundo exemplo. Você notou que as imagens na amostra de validação têm muito mais desfoque ao se mover, porque geralmente são obtidas de usuários de telefones celulares que movem o telefone levemente durante a filmagem. Você pode tirar imagens nítidas da Internet do conjunto de treinamento e adicionar imitação de desfoque de movimento, tornando-as mais semelhantes às imagens no conjunto de validação.

Lembre-se de que a síntese de dados artificiais tem seus próprios problemas: às vezes é mais fácil criar dados sintéticos que parecem realistas para uma pessoa do que criar dados que parecem realistas para um computador. Por exemplo, suponha que você tenha 1000 horas de gravações de fala em um conjunto de treinamento, mas apenas 1 hora de ruído no carro. Se você usar repetidamente a mesma hora de ruído do carro com outras peças além das 1000 horas originais do conjunto de treinamento, receberá um conjunto de dados sintético no qual o mesmo ruído do carro é repetido repetidamente. Embora a pessoa que está ouvindo esse som provavelmente não consiga nomear seus recursos - todos os ruídos do carro soam iguais para a maioria de nós, é possível que o algoritmo de aprendizado seja treinado novamente por 1 hora de ruído no carro. Desta maneirapode mal generalizar para novas gravações de áudio nas quais o ruído do carro soa diferente.

Como alternativa, suponha que você tenha 1000 horas únicas de ruído no carro, mas apenas 10 carros diferentes foram usados ​​para gravá-los. Nesse caso, o algoritmo pode treinar novamente os registros desses 10 carros e mostrar um desempenho ruim ao testar registros de outro carro. Infelizmente, esses problemas são difíceis de detectar.


Tomemos outro exemplo, suponha que você crie um sistema de visão por computador para reconhecer carros. Suponha que você esteja colaborando com uma empresa de videogame que possui vários modelos de carros feitos com gráficos de computador. Para treinar seu algoritmo, use esses modelos para gerar imagens sintéticas de carros. Mesmo que as imagens sintetizadas pareçam muito realistas, essa abordagem (sugerida de forma independente por muitas pessoas) provavelmente não funcionará bem. Um videogame pode ter aproximadamente 20 modelos de carros. Criar um modelo 3D de carro de alta qualidade é muito caro. Se você estivesse jogando, provavelmente não perceberia que vê os mesmos carros repetidamente, talvez apenas em cores diferentes. I.e.Esses dados parecem muito realistas para você. Mas comparado com a variedade de todos os carros na estrada e, portanto, com o conjunto que você provavelmente verá na amostra de validação / teste, este conjunto de 20 modelos sintetizados captura apenas uma pequena fração de toda a variedade global de carros. Portanto, se seus 100.000 exemplos de treinamento forem baseados inteiramente nesses 20 carros, seu sistema será treinado novamente por esses modelos específicos e não poderá generalizar bem as amostras de validação / teste que incluem outros modelos de carros.

Ao sintetizar dados, considere se você está realmente gerando um conjunto representativo de exemplos. Tente não fornecer propriedades de dados sintetizadas que
permita que o algoritmo de aprendizado diferencie um exemplo sintetizado de um não sintetizado, como nos casos em que todos os dados sintetizados são obtidos com base em um dos 20 modelos de carros ou todos os sons sintetizados são obtidos com apenas 1 hora de ruído do carro. Seguir este conselho pode ser muito difícil.

Ao trabalhar na síntese de dados, às vezes, nossa equipe levava semanas para criar dados com detalhes próximos o suficiente para que a distribuição real dos dados sintetizados tivesse um efeito significativo. Mas se você conseguir os detalhes certos, de repente, você terá acesso a um conjunto de treinamento muito maior do que antes.

Algoritmos de saída de depuração


Capítulo 44. Referência de Otimização



Imagine que você está desenvolvendo um sistema de reconhecimento de fala. Seu sistema funciona usando o áudio A como entrada e calcula uma pontuação A (S) para cada sentença de saída possível S. Por exemplo, você pode tentar avaliar a pontuação A (S) = P (S | A), ou seja, a probabilidade de a sentença S ser a transcrição correta da saída, uma vez que o áudio foi enviado para a entrada A.

Dado o método de cálculo da pontuação A (S), você precisa encontrar uma sentença em inglês com a classificação máxima:

Output=argmaxSScoreA(S)


Como calcular o "arg max" do exemplo acima? Existem 50.000 palavras em inglês; nesse caso, existem (50.000) N frases possíveis com tamanho N. Isso é demais para listar.

Portanto, você precisa aplicar um algoritmo de pesquisa aproximado para tentar encontrar o valor de S que otimiza (maximiza) a pontuação da Pontuação A (S). Um exemplo desse algoritmo é a pesquisa por feixe, que salva apenas os K melhores candidatos no processo de pesquisa. (Para os fins deste capítulo, você não precisa entender os detalhes da operação de busca de raios.) Esses algoritmos não garantem a localização do valor de S, o que maximiza a pontuação da pontuação A (S).

Imagine que, em uma fita de áudio, alguém dissesse "Adoro aprendizado de máquina". Mas, em vez da transcrição correta, seu sistema gera o erro "Eu amo robôs". Há duas razões possíveis para o que pode dar errado:

  1. Problemas no algoritmo de busca . O algoritmo de busca de vigas encontrou incorretamente o valor de S, o que maximiza a pontuação A (S).
  2. Um problema objetivo com a função de avaliação . Nossa estimativa do escore A (S) = P (S | A) não foi precisa. Em particular, a pontuação A (S) selecionada não permitiu reconhecer corretamente a transcrição correta "Adoro aprendizado de máquina".

Dependendo de qual delas foi a causa do erro do sistema, você deve priorizar de forma diferente para esforços adicionais. No primeiro caso, você deve trabalhar para melhorar o algoritmo de pesquisa; no segundo caso, trabalhar em um algoritmo de aprendizado que calcule uma pontuação da Pontuação A (S).

Diante de uma situação semelhante, alguns pesquisadores decidem aleatoriamente trabalhar em um algoritmo de busca, enquanto outros optam aleatoriamente por trabalhar na melhoria da aprendizagem da função de classificação Score A (S). Mas até você descobrir as verdadeiras causas de um erro no sistema, todos os seus esforços podem ser desperdiçados. Como tomar uma decisão mais sistemática sobre o que vale a pena trabalhar?

Vamos sairserá a transcrição da saída ("Eu amo robôs"). Seja S * a transcrição correta ("Adoro aprendizado de máquina"). Para entender qual dos dois problemas listados acima está enfrentando, é possível realizar um teste de verificação de otimização: primeiro calcule as pontuações para a Pontuação A (S *) e para a Pontuação A (S fora ). Em seguida, verifique qual das duas classificações será mais importante. Existem duas probabilidades:

  1. Score A (S*) > Score A (S out ), .. ().

    S*. S out . , S, Score A (S). , . , (beam search).
  2. Score A (S*) ≤ Score A (S out ), .. ().

    , Score A (.): S out . . Score A (S) S.

Nossa discussão tocou em um único exemplo. Para colocar o teste de controle de otimização em prática, você deve verificar os erros da sua amostra de validação. Para cada erro, você deve verificar se a estimativa para a transcrição esperada (correta) é superior à estimativa da transcrição (incorreta) de saída, ou seja, Escore A (S *)> Escore A (S out ). Cada exemplo da amostra de validação para a qual essa desigualdade persiste será marcado como um erro causado pelo algoritmo de otimização. Cada exemplo para o qual essa desigualdade não persistir será considerado um erro devido ao método incorreto de calcular a Pontuação A (.).

Por exemplo, você descobre que 95% dos erros são causados ​​pelo trabalho da função de avaliação ao calcular a Pontuação A(.) e apenas 5% dos erros são causados ​​pelo algoritmo de otimização. Agora você sabe que não importa o quanto melhore sua função de otimização, na realidade, ajudará a eliminar não mais que 5% dos erros. Portanto, você deve se concentrar em melhorar o método de cálculo da Pontuação A (.).


Capítulo 45. Procedimento Geral de Teste de Controle de Otimização



Você pode aplicar o teste de controle de otimização ao obter x como entrada, sabe como calcular a Pontuação X (y), que indica quão bem a saída y corresponde ao x fornecido na entrada. Além disso, você usa o algoritmo de pesquisa aproximado para encontrar arg max Y Score X (y), mas suspeita que o algoritmo de pesquisa esteja errado ao encontrar o máximo. No exemplo anterior, com um sistema de reconhecimento de fala, x = A era uma gravação de áudio e y = S era uma transcrição de saída.

Suponha que y * seja o valor de saída correto, mas o algoritmo retornará você. Então, o principal é verificar como a Pontuação X (y *) e a Pontuação X (y out ) estão relacionadas. Se a primeira estimativa for maior que a segunda, a causa do erro está no algoritmo de otimização; caso contrário, a falha está na função de cálculo da pontuação Score X (y).

Vejamos outro exemplo. Suponha que você esteja criando um sistema de tradução automática do chinês para o inglês. Seu sistema funciona recebendo uma frase C como entrada, calcula a pontuação C (E) para cada versão possível da tradução E. Por exemplo, você pode usar a pontuação C (E) = P (E | C), ou seja, a probabilidade de a transferência ser E, considerando que a sentença C foi enviada.

Seu mecanismo de tradução automática está tentando calcular:

Saída=arg maxEPontuaçãoC(E)



No entanto, o conjunto de todas as sentenças E possíveis em inglês é tão grande que você precisa contar com um algoritmo heurístico de pesquisa.

Suponha que seu algoritmo produza a tradução errada E com mais frequência do que uma tradução correta E *. Em seguida, o teste de controle de otimização permitirá calcular a desigualdade Escore C (E *)> Escore C (E out ). Se estiver salvo, a Pontuação C (.) Reconhece corretamente E * como a melhor saída E, portanto, você atribuirá esse erro ao compartilhamento do algoritmo de pesquisa aproximado, caso contrário, à função de cálculo Pontuação C (.).

Este é um padrão muito geral no AI: primeiro, treinamos a função de estimativa aproximada Score x (.), Depois usamos o algoritmo de maximização aproximado. Se você se lembrar desse padrão, poderá usar o teste de controle de otimização para encontrar a fonte dos erros.


Capítulo 46. Exemplo de aprendizado por reforço




Suponha que você use o aprendizado de máquina para ensinar um helicóptero a executar manobras complexas. Acima está uma imagem de lapso de tempo de um helicóptero controlado por um computador que pousa com o motor desligado.

Essa manobra é chamada de pouso na autorotação. Ele permite que o helicóptero aterre, mesmo se o motor travar repentinamente. Pilotos humanos praticam essa manobra como parte de seu treinamento. Seu objetivo é usar o algoritmo de aprendizado de máquina para que o helicóptero possa voar ao longo de uma trajetória T e aterrissar com segurança no final.

Para aplicar o treinamento de reforço, você deve desenvolver uma “função de recompensa” R (.) Que produza uma estimativa que mostre quão boa cada trajetória possível de T. foi, por exemplo, se a trajetória T levou a um acidente de helicóptero, deixe a recompensa R (T) = - 1000, ou seja, tem um grande valor negativo. A trajetória T, que terminou com um pouso bem-sucedido, terá uma estimativa positiva de R (T), que reflete com precisão a dependência de quão suave o pouso foi. A função de recompensa R (.) Geralmente é selecionada manualmente para quantificar o quanto as várias trajetórias de T. são desejáveis. Deve compensar vários fatores: o quanto ela tremeu durante o pouso, se o helicóptero aterrissou exatamente no lugar certo, o quão difícil foi a descida para os passageiros e assim por diante. Não é fácil desenvolver bons recursos de recompensa.

Dada a função de recompensa R (T), a tarefa do algoritmo de aprendizado por reforço é controlar o helicóptero de modo a atingir o máximo de TR (T). No entanto, os algoritmos de aprendizado por reforço fazem muitas aproximações e podem não ter sucesso em alcançar essa maximização.

Suponha que você defina uma função R (.) Reward e execute seu algoritmo de aprendizado. No entanto, sua eficácia é muito pior do que a de um piloto humano - treme muito durante o pouso e parece menos seguro. Como determinar se o erro está relacionado ao algoritmo de aprendizado por reforço que está tentando seguir a trajetória max TR (T), ou o erro está relacionado à função de recompensa que está tentando medir e determinar a relação ideal entre o choque aceitável durante o pouso e a precisão do local de pouso?

Aplicamos o teste de controle de otimização. Seja T humano o caminho seguido pelo piloto e T seja o caminho escolhido pelo algoritmo. Seguindo a descrição acima, concordamos que a trajetória de T humano é melhor que T out , então a questão-chave do teste será se R (T humano )> R (T out ) corresponde à realidade.

Opção 1: se essa desigualdade persistir, a função de recompensa R (.) Estima corretamente a trajetória de T humano . Mas o algoritmo de aprendizado por reforço escolheu a trajetória com pior classificação T out . Isso significa que vale a pena trabalhar para melhorar nosso algoritmo de aprendizado por reforço.

Opção 2: essa desigualdade não é preservada, ou seja, R (T humano ) ≤ R (T out ). Isso significa que a função de recompensa R (.) Atribuiu o pior resultado para T humano , embora essa seja de longe a melhor trajetória. Você deve trabalhar para melhorar R (.) Para encontrar a melhor proporção de fatores que correspondem a um bom ajuste.

Muitos aplicativos de aprendizado de máquina possuem esse "modelo" para otimizar a função Pontuação x (.), Usando o algoritmo de pesquisa aproximado. Às vezes, não temos exatamente a entrada x fornecida, portanto a otimização é reduzida apenas à função de avaliação Pontuação (.). No exemplo acima, a função de recompensa era a função de recompensa Score (T) = R (T), e o algoritmo de otimização era o algoritmo de aprendizado por reforço tentando calcular uma boa trajetória T.

A única diferença entre este exemplo e os anteriores é que, em vez de comparar com o resultado “ideal”, o comparamos com a eficiência humana para o T humano . Assumimos que a trajetória humana T seja razoavelmente boa, mesmo que não seja ótima. Em geral, desde que você tenha algum y * (T humano neste exemplo), que é a melhor saída em termos de eficiência para o seu algoritmo de aprendizado atual (mesmo que não seja "ideal"), o teste de controle de otimização pode mostrar se haverá mais prometendo melhorar o algoritmo de otimização ou a função de avaliação.


[ Continuação ]

Source: https://habr.com/ru/post/pt485070/


All Articles