Uploaded by Higor Marques

machine-learning-yearning.en.pt

advertisement
Traduzido do Inglês para o Português - www.onlinedoctranslator.com
O desejo de aprendizado de máquina é um
projeto deeplearning.ai.
© 2018 Andrew Ng. Todos os direitos reservados.
Página 2
Rascunho de aprendizado de máquina
André Ng
Índice
1 Por que estratégia de aprendizado de máquina
2 Como usar este livro para ajudar sua equipe
3 Pré-requisitos e Notação
4 A escala impulsiona o progresso do aprendizado de máquina
5 Seus conjuntos de desenvolvimento e teste
6 Seus conjuntos de desenvolvimento e teste devem vir da mesma distribuição
7 Qual deve ser o tamanho dos conjuntos de desenvolvimento/teste?
8 Estabeleça uma métrica de avaliação de número único para sua equipe otimizar
9 Otimizando e satisfazendo métricas
10 Ter um conjunto de desenvolvimento e uma métrica acelera as iterações
11 Quando alterar conjuntos e métricas de desenvolvimento/teste
12 Conclusões: Configurando conjuntos de desenvolvimento e teste
13 Construa seu primeiro sistema rapidamente e depois repita
14 Análise de erros: veja exemplos de conjuntos de desenvolvedores para avaliar ideias
15 Avaliando múltiplas ideias em paralelo durante a análise de erros
16 Limpando exemplos de conjuntos de testes e desenvolvedores com rótulos incorretos
17 Se você tiver um conjunto de desenvolvimento grande, divida-o em dois subconjuntos, dos quais apenas um será examinado
18 Qual deve ser o tamanho dos conjuntos de desenvolvimento Eyeball e Blackbox?
19 Conclusões: análise básica de erros
20 Viés e Variância: As duas grandes fontes de erro
21 exemplos de preconceito e variação
22 Comparando com a taxa de erro ideal
23 Lidando com preconceitos e variações
24 Compensação entre polarização e variância
25 técnicas para reduzir preconceitos evitáveis
Página 3
Rascunho de aprendizado de máquina
André Ng
26 Análise de erros no conjunto de treinamento
27 Técnicas para reduzir a variância
28 Diagnosticando viés e variância: curvas de aprendizado
29 Plotando erro de treinamento
30 Interpretando curvas de aprendizagem: Alto viés
31 Interpretando curvas de aprendizagem: Outros casos
32 Traçando curvas de aprendizado
33 Por que comparamos o desempenho em nível humano
34 Como definir o desempenho em nível humano
35 Superando o desempenho de nível humano
36 Quando você deve treinar e testar em diferentes distribuições
37 Como decidir se deseja usar todos os seus dados
38 Como decidir se deve incluir dados inconsistentes
39 Dados de ponderação
40 Generalizando do conjunto de treinamento para o conjunto de desenvolvimento
41 Identificando Erros de Viés, Variância e Incompatibilidade de Dados
42 Resolvendo a incompatibilidade de dados
43 Síntese de dados artificiais
44 O teste de verificação de otimização
45 Forma geral de teste de verificação de otimização
46 Exemplo de aprendizagem por reforço
47 A ascensão da aprendizagem de ponta a ponta
48 Mais exemplos de aprendizagem ponta a ponta
49 Prós e contras da aprendizagem ponta a ponta
50 Escolhendo componentes de pipeline: Disponibilidade de dados
51 Escolhendo componentes do pipeline: simplicidade da tarefa
Página 4
Rascunho de aprendizado de máquina
André Ng
52 Aprendendo diretamente com resultados ricos
53 Análise de erros por peças
54 Atribuindo erro a uma parte
55 Caso geral de atribuição de erro
56 Análise de erros por partes e comparação com o desempenho em nível humano
57 Identificando um pipeline de ML falho
58 Construindo uma equipe de super-heróis - Faça com que seus companheiros leiam isto
Página 5
Rascunho de aprendizado de máquina
André Ng
1 Por que estratégia de aprendizado de máquina
O aprendizado de máquina é a base de inúmeras aplicações importantes, incluindo pesquisa na web,
antispam de e-mail, reconhecimento de fala, recomendações de produtos e muito mais. Presumo que você ou
sua equipe estejam trabalhando em um aplicativo de aprendizado de máquina e que queiram progredir
rapidamente. Este livro irá ajudá-lo a fazer isso.
Exemplo: Construindo uma startup de imagem de gato
Digamos que você esteja construindo uma startup que fornecerá um fluxo interminável de fotos de gatos para os amantes de gatos.
Você usa uma rede neural para construir um sistema de visão computacional para detectar gatos em fotos.
Mas, tragicamente, a precisão do seu algoritmo de aprendizagem ainda não é boa o suficiente. Você está sob
uma pressão tremenda para melhorar seu detector de gatos. O que você faz?
Sua equipe tem muitas ideias, como:
• Obtenha mais dados: colete mais fotos de gatos.
• Colete um conjunto de treinamento mais diversificado. Por exemplo, fotos de gatos em posições inusitadas;
gatos com coloração incomum; fotos tiradas com diversas configurações de câmera; ….
• Treine o algoritmo por mais tempo, executando mais iterações de gradiente descendente.
• Experimente uma rede neural maior, com mais camadas/unidades/parâmetros ocultos.
Página 6
Rascunho de aprendizado de máquina
André Ng
• Experimente uma rede neural menor.
• Tente adicionar regularização (como regularização L2).
• Alterar a arquitetura da rede neural (função de ativação, número de unidades ocultas, etc.)
• …
Se você escolher bem entre essas direções possíveis, você construirá a plataforma líder de imagens de
gatos e levará sua empresa ao sucesso. Se você escolher mal, poderá perder meses. Como você
procede?
Este livro lhe dirá como. A maioria dos problemas de aprendizado de máquina deixa pistas que
indicam o que é útil tentar e o que não é útil. Aprender a ler essas pistas economizará meses ou
anos de desenvolvimento.
Página 7
Rascunho de aprendizado de máquina
André Ng
2 Como usar este livro para ajudar sua equipe
Depois de terminar este livro, você terá um conhecimento profundo de como definir a direção técnica
para um projeto de aprendizado de máquina.
Mas seus colegas de equipe podem não entender por que você está recomendando uma direção específica.
Talvez você queira que sua equipe defina uma métrica de avaliação de número único, mas eles não estão
convencidos. Como você os convence?
É por isso que reduzi os capítulos: para que você possa imprimi-los e fazer com que seus colegas de equipe
leiam apenas uma ou duas páginas que você precisa que eles saibam.
Algumas mudanças na priorização podem ter um efeito enorme na produtividade da sua equipe. Ao ajudar sua
equipe com algumas dessas mudanças, espero que você possa se tornar o super-herói de sua equipe!
Página 8
Rascunho de aprendizado de máquina
André Ng
3 Pré-requisitos e Notação
Se você fez um curso de aprendizado de máquina, como meu MOOC de aprendizado de máquina no
Coursera, ou se tem experiência na aplicação de aprendizado supervisionado, você será capaz de
entender este texto.
Presumo que você esteja familiarizado comaprendizagem supervisionada: aprendendo uma função que mapeia
de x para y, usando exemplos de treinamento rotulados (x,y). Algoritmos de aprendizagem supervisionada incluem
regressão linear, regressão logística e redes neurais. Existem muitas formas de aprendizado de máquina, mas a
maior parte do valor prático do aprendizado de máquina hoje vem do aprendizado supervisionado.
Frequentemente me referirei às redes neurais (também conhecidas como “aprendizado profundo”). Você só precisará de
um conhecimento básico do que são para seguir este texto.
Se você não está familiarizado com os conceitos mencionados aqui, assista aos vídeos das três
primeiras semanas do curso de Machine Learning no Coursera emhttp://ml-class.org
Página 9
Rascunho de aprendizado de máquina
André Ng
4 A escala impulsiona o progresso do aprendizado de máquina
Muitas das ideias de aprendizagem profunda (redes neurais) existem há décadas. Por que essas ideias
estão decolando agora?
Dois dos maiores impulsionadores do progresso recente foram:
• Disponibilidade de dados. As pessoas agora passam mais tempo em dispositivos digitais (laptops, dispositivos móveis).
Suas atividades digitais geram enormes quantidades de dados que podemos alimentar em nossos algoritmos de
aprendizagem.
• Escala computacional. Começamos há apenas alguns anos para sermos capazes de treinar redes neurais
grandes o suficiente para aproveitar as vantagens dos enormes conjuntos de dados que temos agora.
Em detalhes, mesmo quando você acumula mais dados, geralmente o desempenho de algoritmos de
aprendizagem mais antigos, como a regressão logística, “platôs”. Isso significa que sua curva de aprendizado
“se achata” e o algoritmo para de melhorar mesmo quando você fornece mais dados:
Era como se os algoritmos mais antigos não soubessem o que fazer com todos os dados que temos agora.
Se você treinar uma pequena rede neutra (NN) na mesma tarefa de aprendizagem supervisionada, poderá obter um
desempenho um pouco melhor:
Página 10
Rascunho de aprendizado de máquina
André Ng
Aqui, por “NN pequeno” queremos dizer uma rede neural com apenas um pequeno número de unidades/
camadas/parâmetros ocultos. Finalmente, se você treinar redes neurais cada vez maiores, poderá obter um
desempenho ainda melhor:1
Assim, você obtém o melhor desempenho quando (i) treina uma rede neural muito grande, de forma que
fique na curva verde acima; (ii) Possui uma grande quantidade de dados.
Muitos outros detalhes, como a arquitetura da rede neural, também são importantes e tem havido
muita inovação aqui. Mas uma das maneiras mais confiáveis de melhorar o desempenho de um
algoritmo hoje ainda é (i) treinar uma rede maior e (ii) obter mais dados.
Este diagrama mostra o desempenho das NNs melhor no regime de pequenos conjuntos de dados. Este efeito é menos
1
consistente do que o efeito do bom desempenho das NNs no regime de grandes conjuntos de dados. No regime de
pequenos dados, dependendo de como os recursos são projetados manualmente, os algoritmos tradicionais podem ou
não ter um desempenho melhor. Por exemplo, se você tiver 20 exemplos de treinamento, pode não importar muito se
você usa regressão logística ou uma rede neural; a engenharia manual dos recursos terá um efeito maior do que a
escolha do algoritmo. Mas se você tiver 1 milhão de exemplos, eu preferiria a rede neural.
Página 11
Rascunho de aprendizado de máquina
André Ng
O processo de como realizar (i) e (ii) é surpreendentemente complexo. Este livro discutirá detalhadamente os
detalhes. Começaremos com estratégias gerais que são úteis tanto para algoritmos de aprendizagem tradicionais
quanto para redes neurais, e desenvolveremos as estratégias mais modernas para a construção de sistemas de
aprendizagem profunda.
Página 12
Rascunho de aprendizado de máquina
André Ng
Configurando
Desenvolvimento e
conjuntos de teste
Página 13
Rascunho de aprendizado de máquina
André Ng
5 Seus conjuntos de desenvolvimento e teste
Voltemos ao nosso exemplo anterior de fotos de gatos: você executa um aplicativo móvel e os usuários estão enviando
fotos de muitas coisas diferentes para seu aplicativo. Você deseja encontrar automaticamente as fotos dos gatos.
Sua equipe recebe um grande conjunto de treinamento baixando fotos de gatos (exemplos positivos) e de não gatos
(exemplos negativos) de diferentes sites. Eles dividiram o conjunto de dados 70%/30% em conjuntos de treinamento e
teste. Usando esses dados, eles constroem um detector de gatos que funciona bem nos conjuntos de treinamento e
teste.
Mas quando você implanta esse classificador no aplicativo móvel, descobre que o desempenho é
muito ruim!
O que aconteceu?
Você descobre que as fotos que os usuários estão enviando têm uma aparência diferente das imagens do site
que compõem seu conjunto de treinamento: os usuários estão enviando fotos tiradas com telefones celulares,
que tendem a ter resolução mais baixa, mais desfocadas e com pouca iluminação. Como seus conjuntos de
treinamento/teste foram feitos de imagens de sites, seu algoritmo não generalizou bem para a distribuição real
de seu interesse: imagens de telefones celulares.
Antes da era moderna do big data, era uma regra comum no aprendizado de máquina usar uma divisão aleatória
de 70%/30% para formar seus conjuntos de treinamento e teste. Esta prática pode funcionar, mas é uma má ideia
em cada vez mais aplicações onde a distribuição de treinamento (imagens de sites em
Página 14
Rascunho de aprendizado de máquina
André Ng
nosso exemplo acima) é diferente da distribuição que lhe interessa (imagens de telefones
celulares).
Geralmente definimos:
•
Conjunto de treinamento -No qual você executa seu algoritmo de aprendizagem.
•
Conjunto de desenvolvimento (desenvolvimento) -Que você usa para ajustar parâmetros, selecionar
recursos e tomar outras decisões em relação ao algoritmo de aprendizagem. Às vezes também chamado de
conjunto de validação cruzada hold-out.
•
Conjunto de testes-que você usa para avaliar o desempenho do algoritmo, mas não para tomar
qualquer decisão sobre qual algoritmo ou parâmetros de aprendizagem usar.
Depois de definir um conjunto de desenvolvimento (conjunto de desenvolvimento) e um conjunto de testes, sua equipe tentará várias
ideias, como diferentes parâmetros de algoritmo de aprendizagem, para ver o que funciona melhor. Os conjuntos de
desenvolvimento e teste permitem que sua equipe veja rapidamente o desempenho do seu algoritmo.
Em outras palavras,o objetivo dos conjuntos de desenvolvimento e teste é direcionar sua equipe para as
mudanças mais importantes a serem feitas no sistema de aprendizado de máquina.
Então, você deve fazer o seguinte:
Escolha conjuntos de desenvolvimento e teste para refletir os dados que você espera obter no futuro e deseja
ter um bom desempenho.
Em outras palavras, seu conjunto de teste não deve ser simplesmente 30% dos dados disponíveis, especialmente se você espera
que seus dados futuros (imagens de telefones celulares) sejam de natureza diferente de seu conjunto de treinamento (imagens
de sites).
Se você ainda não lançou seu aplicativo móvel, talvez ainda não tenha nenhum usuário e, portanto, não
consiga obter dados que reflitam com precisão o que você precisa fazer no futuro. Mas você ainda pode
tentar aproximar isso. Por exemplo, peça a seus amigos para tirar fotos de gatos no celular e enviá-las
para você. Depois que seu aplicativo for iniciado, você poderá atualizar seus conjuntos de
desenvolvimento/teste usando dados reais do usuário.
Se você realmente não tem como obter dados que se aproximem do que espera obter no
futuro, talvez possa começar usando imagens de sites. Mas você deve estar ciente do risco
de isso levar a um sistema que não generaliza bem.
É necessário julgamento para decidir quanto investir no desenvolvimento de ótimos conjuntos de desenvolvimento e
teste. Mas não presuma que sua distribuição de treinamento é igual à distribuição de testes. Tente escolher o teste
Página 15
Rascunho de aprendizado de máquina
André Ng
exemplos que refletem aquilo em que você deseja ter um bom desempenho, em vez de quaisquer dados que
você tenha para treinamento.
Página 16
Rascunho de aprendizado de máquina
André Ng
6 Seus conjuntos de desenvolvimento e teste devem vir da
mesma distribuição
Você tem os dados de imagem do seu aplicativo de gato segmentados em quatro regiões, com base em seus maiores mercados: (i)
EUA, (ii) China, (iii) Índia e (iv) Outros. Para criar um conjunto de desenvolvimento e um conjunto de teste, digamos que colocamos os
EUA e a Índia no conjunto de desenvolvimento; China e Outros no conjunto de testes. Em outras palavras, podemos atribuir
aleatoriamente dois desses segmentos ao conjunto de desenvolvimento e os outros dois ao conjunto de teste, certo?
Depois de definir os conjuntos de desenvolvimento e teste, sua equipe se concentrará em melhorar o desempenho do conjunto de
desenvolvimento. Assim, o conjunto de desenvolvedores deve refletir a tarefa que você mais deseja melhorar: ter um bom desempenho
em todas as quatro geografias, e não apenas em duas.
Há um segundo problema em ter diferentes distribuições de conjuntos de desenvolvimento e de teste: há uma chance de
que sua equipe construa algo que funcione bem no conjunto de desenvolvimento, apenas para descobrir que o
desempenho é ruim no conjunto de teste. Já vi esse resultado em muita frustração e esforço desperdiçado. Evite deixar
isso acontecer com você.
Por exemplo, suponha que sua equipe desenvolva um sistema que funcione bem no conjunto de desenvolvimento, mas não no
conjunto de testes. Se seus conjuntos de desenvolvimento e teste tivessem vindo da mesma distribuição, você teria um
diagnóstico muito claro do que deu errado: você ajustou demais o conjunto de desenvolvimento. A cura óbvia é obter mais
dados do conjunto de desenvolvedores.
Mas se os conjuntos de desenvolvimento e teste vierem de distribuições diferentes, suas opções serão
menos claras. Várias coisas poderiam ter dado errado:
1.Você se ajustou demais ao conjunto de desenvolvedores.
2.O conjunto de teste é mais difícil que o conjunto de desenvolvimento. Portanto, seu algoritmo pode estar funcionando
tão bem quanto o esperado e nenhuma melhoria significativa é possível.
Página 17
Rascunho de aprendizado de máquina
André Ng
3.O conjunto de testes não é necessariamente mais difícil, mas apenas diferente do conjunto de desenvolvimento. Então, o que funciona bem no
conjunto de desenvolvimento simplesmente não funciona bem no conjunto de teste. Nesse caso, muito do seu trabalho para melhorar o
desempenho do conjunto de desenvolvedores pode ser um esforço desperdiçado.
Trabalhar em aplicativos de aprendizado de máquina já é bastante difícil. Ter conjuntos de desenvolvimento e testes
incompatíveis introduz incerteza adicional sobre se a melhoria na distribuição do conjunto de desenvolvimento também
melhora o desempenho do conjunto de testes. Ter conjuntos de desenvolvimento e teste incompatíveis torna mais difícil
descobrir o que está ou não funcionando e, portanto, torna mais difícil priorizar o que trabalhar.
Se você estiver trabalhando em um problema de benchmark de terceiros, o criador deles pode ter especificado
conjuntos de desenvolvimento e teste provenientes de distribuições diferentes. A sorte, e não a habilidade, terá um
impacto maior no seu desempenho nesses benchmarks em comparação com se os conjuntos de desenvolvimento e
teste vierem da mesma distribuição. É um importante problema de pesquisa desenvolver algoritmos de
aprendizagem que sejam treinados em uma distribuição e generalizem bem para outra. Mas se o seu objetivo é
progredir em um aplicativo específico de aprendizado de máquina, em vez de progredir na pesquisa, recomendo
tentar escolher conjuntos de desenvolvimento e teste extraídos da mesma distribuição. Isso tornará sua equipe
mais eficiente.
Página 18
Rascunho de aprendizado de máquina
André Ng
7 Qual deve ser o tamanho dos conjuntos de desenvolvimento/teste?
O conjunto de desenvolvimento deve ser grande o suficiente para detectar diferenças entre os algoritmos que você está
testando. Por exemplo, se o classificador A tiver uma precisão de 90,0% e o classificador B tiver uma precisão de 90,1%,
então um conjunto de desenvolvimento de 100 exemplos não seria capaz de detectar essa diferença de 0,1%. Comparado
a outros problemas de aprendizado de máquina que vi, um conjunto de desenvolvedores de 100 exemplos é pequeno.
Conjuntos de desenvolvimento com tamanhos de 1.000 a 10.000 exemplos são comuns. Com 10.000 exemplos, você terá
boas chances de detectar uma melhoria de 0,1%.2
Para aplicações maduras e importantes – por exemplo, publicidade, pesquisa na web e recomendações de
produtos – também tenho visto equipes altamente motivadas para obter uma melhoria de até 0,01%, uma
vez que isso tem um impacto direto nos lucros da empresa. Neste caso, o conjunto de desenvolvimento
poderia ser muito maior que 10.000, para detectar melhorias ainda menores.
E quanto ao tamanho do conjunto de teste? Deve ser grande o suficiente para proporcionar alta confiança no
desempenho geral do seu sistema. Uma heurística popular era usar 30% dos seus dados para o conjunto de testes.
Isso funciona bem quando você tem um número modesto de exemplos – digamos, 100 a 10.000 exemplos. Mas na
era do big data, onde agora temos problemas de aprendizado de máquina com, às vezes, mais de um bilhão de
exemplos, a fração de dados alocados para conjuntos de desenvolvimento/teste tem diminuído, mesmo que o
número absoluto de exemplos nos conjuntos de desenvolvimento/teste tenha diminuído. vem crescendo. Não há
necessidade de ter conjuntos de desenvolvimento/teste excessivamente grandes além do necessário para avaliar o
desempenho de seus algoritmos.
Em teoria, também se poderia testar se uma alteração em um algoritmo faz uma diferença estatisticamente significativa no conjunto de
2
desenvolvimento. Na prática, a maioria das equipes não se preocupa com isso (a menos que estejam publicando trabalhos de pesquisa
acadêmica), e geralmente não considero os testes de significância estatística úteis para medir o progresso intermediário.
Página 19
Rascunho de aprendizado de máquina
André Ng
8 Estabeleça uma métrica de avaliação de número
único para sua equipe otimizar
A precisão da classificação é um exemplo demétrica de avaliação de número único: você executa seu
classificador no conjunto de desenvolvimento (ou conjunto de teste) e recebe de volta um único número sobre
qual fração de exemplos ele classificou corretamente. De acordo com essa métrica, se o classificador A obtiver
97% de precisão e o classificador B obtiver 90% de precisão, então consideramos o classificador A superior.
Em contraste, Precisão e Recall3não é uma métrica de avaliação de número único: fornece dois números
para avaliar seu classificador. Ter métricas de avaliação de vários números torna mais difícil comparar
algoritmos. Suponha que seus algoritmos tenham o seguinte desempenho:
Precisão
Classificador
Lembrar
A
95%
90%
B
98%
85%
Aqui, nenhum dos classificadores é obviamente superior, portanto não o orienta imediatamente na
escolha de um.
Classificador
A
Precisão
95%
Lembrar
Pontuação F1
90%
92,4%
Durante o desenvolvimento, sua equipe testará muitas ideias sobre arquitetura de algoritmo,
parâmetros de modelo, escolha de recursos, etc.métrica de avaliação de número únicocomo a
precisão, permite classificar todos os seus modelos de acordo com seu desempenho nessa métrica e
decidir rapidamente o que funciona melhor.
Se você realmente se preocupa com precisão e recall, recomendo usar uma das formas
padrão de combiná-los em um único número. Por exemplo, pode-se calcular a média de
precisão e recall para obter um único número. Alternativamente, você pode calcular o “F1
A precisão de um classificador de gato é a fração de imagens no conjunto de desenvolvimento (ou teste) rotuladas como gatos que
3
realmente são gatos. Sua recuperação é a porcentagem de todas as imagens de gatos no conjunto de desenvolvimento (ou teste) que
foram corretamente rotuladas como gatos. Freqüentemente, há uma compensação entre alta precisão e alto recall.
Página 20
Rascunho de aprendizado de máquina
André Ng
pontuação”, que é uma forma modificada de calcular a média e funciona melhor do que simplesmente
calcular a média.4
Classificador
Precisão
Lembrar
Pontuação F1
A
95%
90%
92,4%
B
98%
85%
91,0%
Ter uma métrica de avaliação de número único acelera sua capacidade de tomar uma decisão ao
selecionar entre um grande número de classificadores. Dá uma classificação clara de preferência
entre todos eles e, portanto, uma direção clara para o progresso.
Como exemplo final, suponha que você esteja monitorando separadamente a precisão do seu classificador
de gatos em quatro mercados principais: (i) EUA, (ii) China, (iii) Índia e (iv) Outros. Isso fornece quatro
métricas. Ao calcular uma média ou média ponderada desses quatro números, você obtém uma única
métrica numérica. Calcular uma média ou média ponderada é uma das maneiras mais comuns de combinar
várias métricas em uma.
Se você quiser saber mais sobre a pontuação da F1, consulte https://en.wikipedia.org/wiki/F1_score .
4
É a “média harmônica” entre Precisão e Recall e é calculada como 2/((1/Precisão)+(1/Recall)).
Página 21
Rascunho de aprendizado de máquina
André Ng
9 Otimizando e satisfazendo métricas
Esta é outra maneira de combinar múltiplas métricas de avaliação.
Suponha que você se preocupe tanto com a precisão quanto com o tempo de execução de um algoritmo de aprendizagem. Você
precisa escolher entre estes três classificadores:
Classificador
Precisão
Tempo de execução
A
90%
80ms
B
92%
95ms
C
95%
1.500ms
Não parece natural derivar uma única métrica colocando a precisão e o tempo de execução em
uma única fórmula, como:
Precisão - 0,5*Tempo de execução
Aqui está o que você pode fazer: Primeiro, defina o que é um tempo de execução “aceitável”. Digamos que
qualquer coisa que rode em 100ms seja aceitável. Em seguida, maximize a precisão, desde que seu classificador
atenda aos critérios de tempo de execução. Aqui, o tempo de execução é uma “métrica satisfatória” – seu
classificador só precisa ser “bom o suficiente” nessa métrica, no sentido de que deve levar no máximo 100 ms. A
precisão é a “métrica de otimização”.
Se você estiver negociando N critérios diferentes, como tamanho do arquivo binário do modelo (o que é
importante para aplicativos móveis, já que os usuários não desejam baixar aplicativos grandes), tempo de
execução e precisão, considere definir N-1 dos critérios como métricas “satisfatórias”. Ou seja, você simplesmente
exige que eles atendam a um determinado valor. Em seguida, defina a última como a métrica de “otimização”. Por
exemplo, defina um limite para o que é aceitável para o tamanho do arquivo binário e o tempo de execução e
tente otimizar a precisão dadas essas restrições.
Como exemplo final, suponha que você esteja construindo um dispositivo de hardware que usa um microfone
para ouvir o usuário dizendo uma determinada “palavra de ativação”, que então faz com que o sistema seja
ativado. Os exemplos incluem Amazon Echo ouvindo “Alexa”; Apple Siri ouvindo “Ei Siri”; Android ouvindo “Ok
Google”; e aplicativos Baidu ouvindo “Hello Baidu”. Você se preocupa tanto com a taxa de falsos positivos – a
frequência com que o sistema acorda mesmo quando ninguém disse a palavra de ativação – quanto com a
taxa de falsos negativos – com que frequência ele não acorda quando alguém diz a palavra de ativação. Um
objetivo razoável para o desempenho deste sistema é
Página 22
Rascunho de aprendizado de máquina
André Ng
minimizar a taxa de falsos negativos (métrica de otimização), desde que não haja mais do que um falso
positivo a cada 24 horas de operação (métrica de satisfação).
Assim que sua equipe estiver alinhada com a métrica de avaliação para otimizar, eles poderão progredir mais
rapidamente.
Página 23
Rascunho de aprendizado de máquina
André Ng
10 Ter um conjunto de desenvolvimento e uma métrica acelera as
iterações
É muito difícil saber antecipadamente qual abordagem funcionará melhor para um novo problema. Mesmo
pesquisadores experientes em aprendizado de máquina geralmente experimentam dezenas de ideias antes de
descobrirem algo satisfatório. Ao construir um sistema de aprendizado de máquina, frequentemente:
1.Comece com algunsideiasobre como construir o sistema.
2.Implemente a ideia emcódigo.
3.Realize umexperimentaro que me diz o quão bem a ideia funcionou. (Normalmente, minhas primeiras
ideias não funcionam!) Com base nesses aprendizados, volte para gerar mais ideias e continue iterando.
Este é um processo iterativo. Quanto mais rápido você contornar esse ciclo, mais rápido progredirá. É por isso
que ter conjuntos de desenvolvimento/teste e uma métrica é importante: cada vez que você tenta uma ideia,
medir o desempenho dela no conjunto de desenvolvimento permite que você decida rapidamente se está indo na
direção certa.
Por outro lado, suponha que você não tenha um conjunto de desenvolvimento e uma métrica específicos. Portanto,
cada vez que sua equipe desenvolve um novo classificador de gatos, você precisa incorporá-lo ao seu aplicativo e
brincar com o aplicativo por algumas horas para ter uma ideia se o novo classificador é uma melhoria. Isso seria
incrivelmente lento! Além disso, se sua equipe melhorar a precisão do classificador de 95,0% para 95,1%, talvez você
não consiga detectar essa melhoria de 0,1% ao brincar com o aplicativo. No entanto, muito progresso no seu
sistema será feito acumulando gradualmente dezenas dessas melhorias de 0,1%. Ter um conjunto de
desenvolvimento e uma métrica permite detectar rapidamente quais ideias estão proporcionando pequenas (ou
grandes) melhorias com sucesso e, portanto, permite que você decida rapidamente quais ideias continuar
refinando e quais descartar.
Página 24
Rascunho de aprendizado de máquina
André Ng
11 Quando alterar conjuntos e métricas de desenvolvimento/teste
Ao iniciar um novo projeto, tento escolher rapidamente conjuntos de desenvolvimento/teste, pois isso dá à
equipe um objetivo bem definido.
Normalmente peço às minhas equipes que criem um conjunto inicial de desenvolvimento/teste e uma métrica
inicial em menos de uma semana – raramente mais. É melhor inventar algo imperfeito e agir rapidamente, em vez
de pensar demais. Mas este cronograma de uma semana não se aplica a inscrições maduras. Por exemplo, o antispam é um aplicativo maduro de aprendizado profundo. Já vi equipes trabalhando em sistemas já maduros
gastarem meses para adquirir conjuntos de desenvolvimento/teste ainda melhores.
Se mais tarde você perceber que seu conjunto ou métrica inicial de desenvolvimento/teste errou o alvo, altere-os rapidamente.
Por exemplo, se o seu conjunto de desenvolvimento + métrica classifica o classificador A acima do classificador B, mas sua equipe
acha que o classificador B é realmente superior para o seu produto, então isso pode ser um sinal de que você precisa alterar seus
conjuntos de desenvolvimento/teste ou sua métrica de avaliação .
Existem três causas principais possíveis para o conjunto de desenvolvimento/métrica classificar incorretamente o classificador A
superior:
1. A distribuição real na qual você precisa ter um bom desempenho é diferente dos conjuntos de desenvolvimento/teste.
Suponha que seu conjunto inicial de desenvolvimento/teste tivesse principalmente fotos de gatos adultos. Você envia seu aplicativo para
gatos e descobre que os usuários estão enviando muito mais imagens de gatinhos do que o esperado. Portanto, a distribuição do conjunto
de desenvolvimento/teste não é representativa da distribuição real na qual você precisa se sair bem. Nesse caso, atualize seus conjuntos
de desenvolvimento/teste para serem mais representativos.
Página 25
Rascunho de aprendizado de máquina
André Ng
2. Você se ajustou demais ao conjunto de desenvolvimento.
O processo de avaliação repetida de ideias no conjunto de desenvolvimento faz com que seu algoritmo gradualmente se “ajuste demais”
ao conjunto de desenvolvimento. Quando terminar de desenvolver, você avaliará seu sistema no conjunto de testes. Se você achar que o
desempenho do seu conjunto de desenvolvimento é muito melhor do que o desempenho do conjunto de testes, é um sinal de que você
se ajustou demais ao conjunto de desenvolvimento. Nesse caso, obtenha um novo conjunto de desenvolvimento.
Se precisar acompanhar o progresso da sua equipe, você também pode avaliar seu sistema regularmente – digamos,
uma vez por semana ou uma vez por mês – no conjunto de testes. Mas não use o conjunto de testes para tomar qualquer
decisão em relação ao algoritmo, inclusive se deve reverter para o sistema da semana anterior. Se você fizer isso, você
começará a se ajustar demais ao conjunto de testes e não poderá mais contar com isso para fornecer uma estimativa
completamente imparcial do desempenho do seu sistema (o que seria necessário se você estivesse publicando artigos de
pesquisa ou talvez usando esta métrica para tomar decisões de negócios importantes).
3. A métrica mede algo diferente do que o projeto precisa otimizar.
Suponha que, para seu aplicativo cat, sua métrica seja a precisão da classificação. Essa métrica atualmente
classifica o classificador A como superior ao classificador B. Mas suponha que você experimente os dois algoritmos
e descubra que o classificador A está permitindo a passagem de imagens pornográficas ocasionais. Embora o
classificador A seja mais preciso, a má impressão deixada por uma imagem pornográfica ocasional significa que
seu desempenho é inaceitável. O que você faz?
Aqui, a métrica não consegue identificar o fato de que o Algoritmo B é de fato melhor que o Algoritmo A para
o seu produto. Portanto, você não pode mais confiar na métrica para escolher o melhor algoritmo. É hora de
mudar as métricas de avaliação. Por exemplo, você pode alterar a métrica para penalizar fortemente a
transmissão de imagens pornográficas. Eu recomendaria fortemente escolher uma nova métrica e usá-la para
definir explicitamente uma nova meta para a equipe, em vez de prosseguir por muito tempo sem uma
métrica confiável e voltar a escolher manualmente entre os classificadores.
É bastante comum alterar conjuntos de desenvolvimento/teste ou métricas de avaliação durante um projeto. Ter um
conjunto inicial de desenvolvimento/teste e uma métrica ajuda você a iterar rapidamente. Se você descobrir que os
conjuntos ou métricas de desenvolvimento/teste não estão mais apontando a direção certa para sua equipe, não é grande
coisa! Basta alterá-los e garantir que sua equipe conheça a nova direção.
Página 26
Rascunho de aprendizado de máquina
André Ng
12 Conclusões: Configurando conjuntos de desenvolvimento
e teste
•
Escolha conjuntos de desenvolvimento e teste de uma distribuição que reflita quais dados você espera obter no
futuro e deseja ter um bom desempenho. Isso pode não ser igual à distribuição dos seus dados de treinamento.
•
Escolha conjuntos de desenvolvimento e teste da mesma distribuição, se possível.
•
Escolha uma métrica de avaliação de número único para sua equipe otimizar. Se houver vários
objetivos importantes para você, considere combiná-los em uma única fórmula (como calcular a
média de várias métricas de erro) ou definir métricas de satisfação e otimização.
•
O aprendizado de máquina é um processo altamente iterativo: você pode tentar dezenas de ideias
antes de encontrar uma que lhe satisfaça.
•
Ter conjuntos de desenvolvimento/teste e uma métrica de avaliação de número único ajuda a avaliar algoritmos
rapidamente e, portanto, a iterar com mais rapidez.
•
Ao iniciar um novo aplicativo, tente estabelecer conjuntos de desenvolvimento/teste e uma métrica
rapidamente, digamos, em menos de uma semana. Pode ser normal demorar mais em aplicativos maduros.
•
A antiga heurística de uma divisão de treinamento/teste de 70%/30% não se aplica a problemas onde você tem muitos
dados; os conjuntos de desenvolvimento e teste podem representar muito menos que 30% dos dados.
•
Seu conjunto de desenvolvimento deve ser grande o suficiente para detectar mudanças significativas na precisão do
seu algoritmo, mas não necessariamente muito maior. Seu conjunto de testes deve ser grande o suficiente para
fornecer uma estimativa confiável do desempenho final do seu sistema.
•
Se seu conjunto de desenvolvimento e métrica não estão mais apontando a direção certa para sua equipe, altere-os rapidamente: (i)
Se você ajustou demais o conjunto de desenvolvimento, obtenha mais dados do conjunto de desenvolvimento. (ii) Se a distribuição
real de seu interesse for diferente da distribuição do conjunto de desenvolvimento/teste, obtenha novos dados do conjunto de
desenvolvimento/teste. (iii) Se sua métrica não mede mais o que é mais importante para você, mude a métrica.
Página 27
Rascunho de aprendizado de máquina
André Ng
Erro Básico
Análise
Página 28
Rascunho de aprendizado de máquina
André Ng
13 Construa seu primeiro sistema rapidamente e depois repita
Você deseja construir um novo sistema anti-spam de e-mail. Sua equipe tem várias ideias:
•
Colete um enorme conjunto de treinamento de e-mails de spam. Por exemplo, configure um “honeypot”: envie
deliberadamente endereços de e-mail falsos para spammers conhecidos, para que você possa coletar automaticamente as
mensagens de spam que eles enviam para esses endereços.
•
Desenvolva recursos para compreender o conteúdo do texto do e-mail.
•
Desenvolva recursos para entender os recursos do envelope/cabeçalho do e-mail para mostrar por qual
conjunto de servidores da Internet a mensagem passou.
•
e mais.
Embora eu tenha trabalhado extensivamente com anti-spam, ainda teria dificuldade em escolher uma
dessas direções. É ainda mais difícil se você não for um especialista na área de aplicação.
Portanto, não comece tentando projetar e construir o sistema perfeito. Em vez disso, crie e treine um
sistema básico rapidamente – talvez em apenas alguns dias.5Mesmo que o sistema básico esteja longe de
ser o “melhor” sistema que você pode construir, é valioso examinar como o sistema básico funciona: você
encontrará rapidamente pistas que mostram as direções mais promissoras nas quais investir seu tempo.
Os próximos capítulos mostrarão como ler essas pistas.
Este conselho destina-se a leitores que desejam construir aplicações de IA, e não àqueles cujo objetivo é
5
publicar artigos acadêmicos. Mais tarde retornarei ao tema da pesquisa.
Página 29
Rascunho de aprendizado de máquina
André Ng
14 Análise de erros: veja exemplos de conjuntos de desenvolvedores
para avaliar ideias
Ao brincar com seu aplicativo para gatos, você percebe vários exemplos em que ele confunde cães com
gatos. Alguns cães parecem gatos!
Um membro da equipe propõe a incorporação de software de terceiros que fará com que o sistema funcione melhor
com imagens de cães. Essas mudanças levarão um mês e o membro da equipe está entusiasmado. Você deveria
pedir a eles para irem em frente?
Antes de investir um mês nesta tarefa, recomendo que você primeiro estime o quanto isso
realmente melhorará a precisão do sistema. Então você pode decidir de forma mais racional se
vale a pena o mês de desenvolvimento ou se é melhor usar esse tempo em outras tarefas.
Em detalhes, aqui está o que você pode fazer:
1.Reúna uma amostra de 100 exemplos de conjuntos de desenvolvimento que seu sistemaclassificado incorretamente. Ou seja,
exemplos em que seu sistema cometeu um erro.
2.Observe esses exemplos manualmente e conte que fração deles são imagens de cães.
O processo de observar exemplos mal classificados é chamadoanálise de erro. Neste exemplo, se você descobrir
que apenas 5% das imagens classificadas incorretamente são cães, não importa o quanto você melhore o
desempenho do seu algoritmo em imagens de cães, você não se livrará de mais de 5% dos seus erros. Por outras
palavras, 5% é um “tecto” (ou seja, o montante máximo possível) para o quanto o projecto proposto poderia ajudar.
Assim, se o seu sistema geral estiver atualmente com 90% de precisão (10% de erro), essa melhoria provavelmente
resultará em, na melhor das hipóteses, 90,5% de precisão (ou 9,5% de erro, que é 5% menos erro do que o erro
original de 10%).
Página 30
Rascunho de aprendizado de máquina
André Ng
Por outro lado, se você descobrir que 50% dos erros são cometidos por cães, poderá ter mais certeza de
que o projeto proposto terá um grande impacto. Poderia aumentar a precisão de 90% para 95% (uma
redução relativa de 50% no erro, de 10% para 5%).
Este procedimento simples de contagem de análise de erros oferece uma maneira rápida de
estimar o valor possível da incorporação de software de terceiros para imagens de cães. Fornece
uma base quantitativa para decidir se deve fazer este investimento.
A análise de erros muitas vezes pode ajudá-lo a descobrir o quão promissoras são as diferentes direções. Já vi
muitos engenheiros relutantes em realizar análises de erros. Muitas vezes parece mais emocionante
simplesmente entrar em ação e implementar alguma ideia, em vez de questionar se a ideia vale o
investimento de tempo. Este é um erro comum: pode fazer com que sua equipe gaste um mês e depois
perceba que isso resultou em poucos benefícios.
Examinar manualmente 100 exemplos não demora muito. Mesmo se você tirar um minuto por imagem, você
terminará em menos de duas horas. Essas duas horas podem economizar um mês de esforço desperdiçado.
Análise de Erros refere-se ao processo de examinar exemplos de conjuntos de desenvolvedores que seu algoritmo
classificou incorretamente, para que você possa entender as causas subjacentes dos erros. Isso pode ajudá-lo a
priorizar projetos – como neste exemplo – e inspirar novos rumos, que discutiremos a seguir. Os próximos capítulos
também apresentarão as melhores práticas para a realização de análises de erros.
Página 31
Rascunho de aprendizado de máquina
André Ng
15 Avaliando múltiplas ideias em paralelo durante a
análise de erros
Sua equipe tem várias ideias para melhorar o detector de gatos:
• Resolva o problema de reconhecimento do seu algoritmocãescomo gatos.
• Resolva o problema de reconhecimento do seu algoritmoótimos gatos(leões, panteras, etc.) como gatos domésticos (animais de
estimação).
• Melhorar o desempenho do sistema em embaçadoimagens.
• …
Você pode avaliar com eficiência todas essas ideias em paralelo. Normalmente crio uma planilha e a preencho enquanto examino
cerca de 100 imagens de conjuntos de desenvolvedores classificadas incorretamente. Também anoto comentários que podem me
ajudar a lembrar exemplos específicos. Para ilustrar esse processo, vejamos uma planilha que você pode produzir com um
pequeno conjunto de quatro exemplos de desenvolvimento:
Imagem
Grande gato
Cachorro
1
✔
Comentários
Cor incomum do pitbull
2
✔
3
✔
4
% Do total
Embaçado
✔
✔
25%
50%
Leão; foto tirada em
zoológico em dia chuvoso
Pantera atrás da árvore
50%
A imagem nº 3 acima tem as colunas Great Cat e Blurry marcadas. Além disso, como é
possível que um exemplo seja associado a múltiplas categorias, as percentagens na
parte inferior podem não totalizar 100%.
Embora você possa primeiro formular as categorias (Cachorro, Gato grande, Desfocado) e depois categorizar
os exemplos manualmente, na prática, depois de começar a examinar os exemplos, você provavelmente se
sentirá inspirado a propor novas categorias de erros. Por exemplo, digamos que você passe por uma dúzia de
imagens e perceba que muitos erros ocorrem com fotos filtradas pelo Instagram. Você pode voltar e adicionar
uma nova coluna “Instagram” à planilha. Observar manualmente exemplos que o algoritmo classificou
incorretamente e perguntar como/se você, como humano, poderia ter rotulado o
Página 32
Rascunho de aprendizado de máquina
André Ng
imaginar corretamente muitas vezes irá inspirá-lo a criar novas categorias de erros e
soluções.
As categorias de erros mais úteis serão aquelas que você tem uma ideia para melhorar. Por exemplo, a
categoria Instagram será mais útil para adicionar se você tiver uma ideia de “desfazer” os filtros do
Instagram e recuperar a imagem original. Mas você não precisa se restringir apenas às categorias de
erros que sabe como melhorar; o objetivo deste processo é desenvolver sua intuição sobre as áreas
mais promissoras nas quais focar.
A análise de erros é um processo iterativo. Não se preocupe se começar sem nenhuma categoria em mente.
Depois de observar algumas imagens, você poderá ter algumas ideias para categorias de erros. Depois de
categorizar manualmente algumas imagens, você pode pensar em novas categorias e reexaminar as imagens
à luz das novas categorias, e assim por diante.
Suponha que você termine de realizar a análise de erros em 100 exemplos de conjuntos de desenvolvedores classificados incorretamente e obtenha
o seguinte:
Imagem
Cachorro
1
Grande gato
✔
Cor normal do pitbull
2
✔
3
✔
4
…
% Do total
Comentários
Embaçado
✔
✔
…
…
8%
43%
Leão; foto tirada
no zoológico em dia chuvoso
Pantera atrás da árvore
…
...
61%
Agora você sabe que trabalhar em um projeto para solucionar os erros do Cachorro pode eliminar no máximo 8% dos
erros. Trabalhar em erros de imagem de gato grande ou desfocado pode ajudar a eliminar mais erros. Portanto, você
pode escolher uma das duas últimas categorias para focar. Se sua equipe tiver pessoas suficientes para seguir diversas
direções em paralelo, você também pode pedir a alguns engenheiros para trabalharem em Grandes Gatos e outros para
trabalharem em imagens desfocadas.
A análise de erros não produz uma fórmula matemática rígida que diga qual deve ser a tarefa de maior
prioridade. Você também deve levar em consideração quanto progresso espera fazer nas diferentes
categorias e a quantidade de trabalho necessária para enfrentar cada uma delas.
Página 33
Rascunho de aprendizado de máquina
André Ng
16 Limpando exemplos de conjuntos de testes e desenvolvedores com
rótulos incorretos
Durante a análise de erros, você pode notar que alguns exemplos em seu conjunto de desenvolvimento estão rotulados
incorretamente. Quando digo “rotuladas incorretamente” aqui, quero dizer que as imagens já foram rotuladas incorretamente
por um rotulador humano antes mesmo de o algoritmo as encontrar. Ou seja, o rótulo da classe em um exemplo(x,y) tem um
valor incorreto paravocê. Por exemplo, talvez algumas imagens que não sejam gatos sejam erroneamente rotuladas como
contendo um gato e vice-versa. Se você suspeitar que a fração de imagens com rótulos incorretos é significativa, adicione uma
categoria para controlar a fração de exemplos com rótulos incorretos:
Imagem
Cachorro
Grande gato
Embaçado
Rotulado incorretamente
Comentários
✔
Rotulador perdeu gato
✔
Desenho de um gato; não é
…
98
99
✔
100
% Do total
no fundo
8%
43%
61%
um gato de verdade.
6%
Você deve corrigir os rótulos em seu conjunto de desenvolvimento? Lembre-se de que o objetivo do conjunto de desenvolvimento é ajudálo a avaliar algoritmos rapidamente para que você possa saber se o Algoritmo A ou B é melhor. Se a fração do conjunto de
desenvolvimento que está rotulada incorretamente impedir sua capacidade de fazer esses julgamentos, então vale a pena gastar tempo
para corrigir os rótulos do conjunto de desenvolvimento rotulados incorretamente.
Por exemplo, suponha que o desempenho do seu classificador seja:
•
•
•
Precisão geral no conjunto de desenvolvimento. 90% (erro geral de 10%).
Erros devido a exemplos mal rotulados……. 0,6% (6% dos erros do conjunto de desenvolvimento).
Erros devido a outras causas………………… 9,4% (94% dos erros do conjunto de desenvolvimento)
Aqui, a imprecisão de 0,6% devido à rotulagem incorreta pode não ser significativa o suficiente em relação aos 9,4% de
erros que você poderia estar melhorando. Não há mal nenhum em corrigir manualmente as imagens incorretamente
rotuladas no conjunto de desenvolvimento, mas não é crucial fazer isso: pode ser bom não saber se o seu sistema tem um
erro geral de 10% ou 9,4%.
Suponha que você continue melhorando o classificador de gatos e alcance o seguinte desempenho:
Página 34
Rascunho de aprendizado de máquina
André Ng
•
•
•
Precisão geral no conjunto de desenvolvimento. 98,0% (erro geral de 2,0%).
Erros devido a exemplos mal rotulados……. 0,6%. (30% dos erros do conjunto de desenvolvimento.)
Erros devido a outras causas………………… 1,4% (70% dos erros do conjunto de desenvolvimento)
30% dos seus erros são devidos às imagens do conjunto de desenvolvedores rotuladas incorretamente, adicionando erros
significativos às suas estimativas de precisão. Agora vale a pena melhorar a qualidade dos rótulos no conjunto de
desenvolvimento. Lidar com os exemplos mal rotulados ajudará você a descobrir se o erro de um classificador está mais próximo
de 1,4% ou 2% – uma diferença relativa significativa.
Não é incomum começar a tolerar alguns exemplos de conjuntos de desenvolvimento/teste mal rotulados, só mais tarde
mudar de idéia à medida que seu sistema melhora, de modo que a fração de exemplos mal rotulados cresça em relação
ao conjunto total de erros.
O último capítulo explicou como você pode melhorar categorias de erros como Cachorro, Grande Gato e
Desfocado por meio de melhorias algorítmicas. Você aprendeu neste capítulo que também pode trabalhar na
categoria rotulados incorretamente – melhorando os rótulos dos dados.
Qualquer que seja o processo aplicado para corrigir os rótulos do conjunto de desenvolvimento, lembre-se de aplicá-lo também aos
rótulos do conjunto de testes para que seus conjuntos de desenvolvimento e teste continuem a ser extraídos da mesma distribuição. Fixar
seus conjuntos de desenvolvimento e de teste juntos evitaria o problema que discutimos no Capítulo 6, onde sua equipe otimiza o
desempenho do conjunto de desenvolvimento apenas para perceber mais tarde que eles estão sendo julgados com base em um critério
diferente com base em um conjunto de testes diferente.
Se você decidir melhorar a qualidade do rótulo, considere verificar novamente os rótulos dos exemplos que seu sistema
classificou incorretamente, bem como os rótulos dos exemplos que ele classificou corretamente. É possível que tanto o
rótulo original quanto o seu algoritmo de aprendizagem estivessem errados em um exemplo. Se você corrigir apenas os
rótulos dos exemplos que seu sistema classificou incorretamente, poderá introduzir preconceitos em sua avaliação. Se
você tiver 1.000 exemplos de conjuntos de desenvolvimento e seu classificador tiver 98,0% de precisão, será mais fácil
examinar os 20 exemplos classificados incorretamente do que examinar todos os 980 exemplos classificados
corretamente. Como na prática é mais fácil verificar apenas os exemplos classificados incorretamente, o preconceito se
insinua em alguns conjuntos de desenvolvimento. Esse viés é aceitável se você estiver interessado apenas em desenvolver
um produto ou aplicativo, mas seria um problema se você planeja usar o resultado em um trabalho de pesquisa acadêmica
ou precisa de uma medida completamente imparcial da precisão do conjunto de testes.
Página 35
Rascunho de aprendizado de máquina
André Ng
17 Se você tiver um conjunto de desenvolvimento grande, divida-o em
dois subconjuntos, dos quais apenas um será examinado
Suponha que você tenha um grande conjunto de desenvolvimento de 5.000 exemplos nos quais há uma taxa de erro de 20%.
Portanto, seu algoritmo está classificando incorretamente cerca de 1.000 imagens de desenvolvimento. Leva muito tempo para
examinar manualmente 1.000 imagens, então podemos decidir não usar todas elas na análise de erros.
Nesse caso, eu dividiria explicitamente o conjunto de desenvolvimento em dois subconjuntos, um dos quais
você olha e outro não. Você superajustará mais rapidamente a parte que está olhando manualmente. Você
pode usar a parte que não está visualizando manualmente para ajustar os parâmetros.
Vamos continuar nosso exemplo acima, no qual o algoritmo está classificando incorretamente 1.000 de 5.000 exemplos de
conjuntos de desenvolvimento. Suponha que queiramos examinar manualmente cerca de 100 erros para análise de erros (10% dos
erros). Você deve selecionar aleatoriamente 10% do conjunto de desenvolvimento e colocá-lo no que chamaremos deConjunto de
desenvolvimento de globo ocularpara nos lembrarmos de que estamos olhando para isso com nossos olhos. (Para um projeto
sobre reconhecimento de fala, no qual você ouviria clipes de áudio, talvez você chamasse esse conjunto de conjunto de
desenvolvimento Ear). O conjunto de desenvolvimento Eyeball tem, portanto, 500 exemplos, dos quais esperaríamos que nosso
algoritmo classificasse incorretamente cerca de 100.
O segundo subconjunto do conjunto de desenvolvimento, chamadoConjunto de desenvolvimento Blackbox,
terá os 4.500 exemplos restantes. Você pode usar o conjunto de desenvolvimento Blackbox para avaliar
classificadores automaticamente medindo suas taxas de erro. Você também pode usá-lo para selecionar
algoritmos ou ajustar hiperparâmetros. No entanto, você deve evitar olhar para ele com os olhos. Usamos o termo
“Blackbox” porque usaremos apenas este subconjunto de dados para obter avaliações “Blackbox” dos
classificadores.
Página 36
Rascunho de aprendizado de máquina
André Ng
Por que separamos explicitamente o conjunto de desenvolvimento em conjuntos de desenvolvimento Eyeball e Blackbox? Como você ganhará
intuição sobre os exemplos no conjunto de desenvolvimento Eyeball, você começará a ajustar o conjunto de desenvolvimento Eyeball mais
rapidamente. Se você observar que o desempenho no conjunto de desenvolvimento Eyeball está melhorando muito mais rapidamente do que o
desempenho no conjunto de desenvolvimento Blackbox, você superajustou o conjunto de desenvolvimento Eyeball. Nesse caso, pode ser
necessário descartá-lo e encontrar um novo conjunto de desenvolvimento Eyeball movendo mais exemplos do conjunto de desenvolvimento
Blackbox para o conjunto de desenvolvimento Eyeball ou adquirindo novos dados rotulados.
Dividir explicitamente seu conjunto de desenvolvimento em conjuntos de desenvolvimento Eyeball e Blackbox permite que você saiba
quando seu processo de análise de erro manual está fazendo com que você ajuste demais a parte Eyeball de seus dados.
Página 37
Rascunho de aprendizado de máquina
André Ng
18 Qual deve ser o tamanho dos conjuntos de desenvolvimento Eyeball
e Blackbox?
Seu conjunto de desenvolvimento Eyeball deve ser grande o suficiente para dar uma ideia das principais categorias de erros do
seu algoritmo. Se você estiver trabalhando em uma tarefa que os humanos realizam bem (como reconhecer gatos em imagens),
aqui estão algumas diretrizes básicas:
• Um conjunto de desenvolvimento ocular em que seu classificador comete 10 erros seria considerado
muito pequeno. Com apenas 10 erros, é difícil estimar com precisão o impacto das diferentes categorias
de erros. Mas se você tiver poucos dados e não puder investir mais no conjunto de desenvolvimento do
Eyeball, é melhor do que nada e ajudará na priorização do projeto.
• Se o seu classificador cometer cerca de 20 erros em exemplos de desenvolvimento ocular, você começará a ter uma
noção aproximada das principais fontes de erros.
• Com cerca de 50 erros, você teria uma boa noção das principais fontes de erros.
• Com cerca de 100 erros, você teria uma noção muito boa das principais fontes de erros. Já vi
pessoas analisarem manualmente ainda mais erros – às vezes até 500. Não há mal nenhum
nisso, desde que você tenha dados suficientes.
Digamos que seu classificador tenha uma taxa de erro de 5%. Para garantir que você tenha cerca de 100 exemplos classificados
incorretamente no conjunto de desenvolvimento Eyeball, o conjunto de desenvolvimento Eyeball teria que ter cerca de 2.000 exemplos
(já que 0,05 * 2.000 = 100). Quanto menor a taxa de erro do seu classificador, maior será o seu conjunto de desenvolvimento Eyeball
precisa ser para obter um conjunto grande o suficiente de erros para analisar.
Se você estiver trabalhando em uma tarefa que nem mesmo os humanos conseguem realizar bem, o exercício de examinar
um conjunto de desenvolvedores do Eyeball não será tão útil porque é mais difícil descobrir por que o algoritmo não
classificou um exemplo corretamente. Nesse caso, você pode omitir um conjunto de desenvolvimento Eyeball.
Discutiremos diretrizes para tais problemas em um capítulo posterior.
Página 38
Rascunho de aprendizado de máquina
André Ng
Que tal o conjunto de desenvolvedores Blackbox? Dissemos anteriormente que conjuntos de desenvolvimento com cerca de 1.000
a 10.000 exemplos são comuns. Para refinar essa afirmação, um conjunto de desenvolvimento Blackbox de 1.000 a 10.000
exemplos geralmente fornecerá dados suficientes para ajustar hiperparâmetros e selecionar entre modelos, embora haja pouco
dano em ter ainda mais dados. Um conjunto de desenvolvimento Blackbox de 100 seria pequeno, mas ainda assim útil.
Se você tiver um conjunto de desenvolvimento pequeno, talvez não tenha dados suficientes para dividir em conjuntos de desenvolvimento Eyeball e
Blackbox, ambos grandes o suficiente para atender a seus propósitos. Em vez disso, todo o seu conjunto de desenvolvimento pode ter que ser usado
como o conjunto de desenvolvimento Eyeball - ou seja, você examinaria manualmente todos os dados do conjunto de desenvolvimento.
Entre os conjuntos de desenvolvimento Eyeball e Blackbox, considero o conjunto de desenvolvimento Eyeball mais importante
(supondo que você esteja trabalhando em um problema que os humanos podem resolver bem e que examinar os exemplos o
ajude a obter insights). Se você tiver apenas um conjunto de desenvolvimento Eyeball, poderá realizar análises de erros, seleção de
modelo e ajuste de hiperparâmetros, tudo nesse conjunto. A desvantagem de ter apenas um conjunto de desenvolvimento Eyeball
é que o risco de superajuste do conjunto de desenvolvimento é maior.
Se você tiver acesso suficiente aos dados, o tamanho do conjunto de desenvolvimento do Eyeball será
determinado principalmente por quantos exemplos você tiver tempo para analisar manualmente. Por exemplo,
raramente vi alguém analisar manualmente mais de 1.000 erros.
Página 39
Rascunho de aprendizado de máquina
André Ng
19 Conclusões: análise básica de erros
•
Quando você inicia um novo projeto, principalmente se for em uma área na qual você não é especialista,
é difícil adivinhar corretamente os rumos mais promissores.
•
Portanto, não comece tentando projetar e construir o sistema perfeito. Em vez disso, construa e treine um
sistema básico o mais rápido possível – talvez em alguns dias. Em seguida, use a análise de erros para ajudálo a identificar as direções mais promissoras e melhorar iterativamente seu algoritmo a partir daí.
•
Realize a análise de erros examinando manualmente cerca de 100 exemplos de conjuntos de desenvolvimento que o
algoritmo classifica incorretamente e contando as principais categorias de erros. Use essas informações para priorizar
quais tipos de erros devem ser corrigidos.
•
Considere dividir o conjunto de desenvolvimento em um conjunto de desenvolvimento Eyeball, que você examinará manualmente, e
um conjunto de desenvolvimento Blackbox, que você não examinará manualmente. Se o desempenho no conjunto de
desenvolvimento Eyeball for muito melhor do que o conjunto de desenvolvimento Blackbox, você superajustou o conjunto de
desenvolvimento Eyeball e deve considerar adquirir mais dados para ele.
•
O conjunto de desenvolvimento Eyeball deve ser grande o suficiente para que seu algoritmo classifique incorretamente exemplos
suficientes para você analisar. Um conjunto de desenvolvimento Blackbox de 1.000 a 10.000 exemplos é suficiente para muitas
aplicações.
•
Se o seu conjunto de desenvolvimento não for grande o suficiente para ser dividido dessa forma, basta usar todo o conjunto de desenvolvimento como
um conjunto de desenvolvimento Eyeball para análise manual de erros, seleção de modelo e ajuste de hiperparâmetros.
Página 40
Rascunho de aprendizado de máquina
André Ng
Viés e Variância
Página 41
Rascunho de aprendizado de máquina
André Ng
20 Viés e Variância: As duas grandes fontes de
erro
Suponha que todos os seus conjuntos de treinamento, desenvolvimento e teste venham da mesma distribuição. Então
você deve sempre tentar obter mais dados de treinamento, pois isso só pode melhorar o desempenho, certo?
Embora ter mais dados não possa prejudicar, infelizmente nem sempre ajuda tanto quanto você
espera. Pode ser uma perda de tempo trabalhar para obter mais dados. Então, como você decide
quando adicionar dados e quando não se preocupar?
Existem duas fontes principais de erro no aprendizado de máquina: viés e variância. Entendê-los
ajudará você a decidir se adicionar dados, bem como outras táticas para melhorar o desempenho, é um
bom uso do tempo.
Suponha que você queira construir um reconhecedor de gatos com 5% de erro. No momento, seu conjunto de treinamento tem uma taxa
de erro de 15% e seu conjunto de desenvolvimento tem uma taxa de erro de 16%. Neste caso, adicionar dados de treinamento
provavelmente não ajudará muito. Você deve se concentrar em outras mudanças. Na verdade, adicionar mais exemplos ao seu conjunto
de treinamento apenas torna mais difícil para o seu algoritmo ter um bom desempenho no conjunto de treinamento. (Explicaremos o
porquê em um capítulo posterior.)
Se sua taxa de erro no conjunto de treinamento for de 15% (ou 85% de precisão), mas sua meta for de 5% de erro
(95% de precisão), então o primeiro problema a resolver é melhorar o desempenho do seu algoritmo em seu
treinamento. definir. O desempenho do seu conjunto de desenvolvimento/teste geralmente é pior do que o
desempenho do seu conjunto de treinamento. Portanto, se você está obtendo 85% de precisão nos exemplos que
seu algoritmo viu, não há como obter 95% de precisão em exemplos que seu algoritmo nem viu.
Suponha, como acima, que seu algoritmo tenha 16% de erro (84% de precisão) no conjunto de desenvolvimento. Dividimos
o erro de 16% em dois componentes:
• Primeiro, a taxa de erro do algoritmo no conjunto de treinamento. Neste exemplo, é 15%. Pensamos nisso
informalmente como o algoritmopreconceito.
• Em segundo lugar, quão pior o algoritmo se sai no conjunto de desenvolvimento (ou teste) do que no conjunto de treinamento. Neste
exemplo, o desempenho é 1% pior no conjunto de desenvolvimento do que no conjunto de treinamento. Pensamos nisso
informalmente como o algoritmovariação.6
O campo das estatísticas tem definições mais formais de viés e variância com as quais não nos preocuparemos. Aproximadamente, o
6
viés é a taxa de erro do seu algoritmo no seu conjunto de treinamento quando você tem um conjunto de treinamento muito grande. A
variância é o quão pior você foi no conjunto de teste em comparação com o conjunto de treinamento em
Página 42
Rascunho de aprendizado de máquina
André Ng
Algumas mudanças em um algoritmo de aprendizagem podem resolver o primeiro componente do erro –preconceito—
e melhorar seu desempenho no conjunto de treinamento. Algumas mudanças abordam o segundo componente—
variação—e ajude-o a generalizar melhor do conjunto de treinamento para os conjuntos de desenvolvimento/teste.7
Para selecionar as mudanças mais promissoras, é extremamente útil entender qual desses dois componentes do erro é
mais urgente de resolver.
Desenvolver uma boa intuição sobre preconceito e variância o ajudará a escolher mudanças eficazes para seu
algoritmo.
esta configuração. Quando sua métrica de erro é o erro quadrático médio, você pode escrever fórmulas
especificando essas duas quantidades e provar que Erro Total = Viés + Variância. Mas para os nossos propósitos
de decidir como progredir num problema de ML, a definição mais informal de preconceito e variância dada aqui
será suficiente.
Existem também alguns métodos que podem reduzir simultaneamente o viés e a variância, fazendo grandes
7
mudanças na arquitetura do sistema. Mas estes tendem a ser mais difíceis de identificar e implementar.
Página 43
Rascunho de aprendizado de máquina
André Ng
21 exemplos de preconceito e variação
Considere nossa tarefa de classificação de gatos. Um classificador “ideal” (como um humano) pode alcançar um
desempenho quase perfeito nesta tarefa.
Suponha que seu algoritmo tenha o seguinte desempenho:
• Erro de treinamento = 1%
• Erro de desenvolvimento = 11%
Que problema isso tem? Aplicando as definições do capítulo anterior, estimamos o viés em 1% e a variância
em 10% (=11%-1%). Assim, temalta variação. O classificador tem um erro de treinamento muito baixo, mas
não consegue generalizar para o conjunto de desenvolvimento. Isso também é chamadosobreajuste.
Agora considere isto:
• Erro de treinamento = 15%
• Erro de desenvolvimento = 16%
Estimamos o viés em 15% e a variância em 1%. Este classificador não se ajusta bem ao conjunto de treinamento
com 15% de erro, mas seu erro no conjunto de desenvolvimento é pouco maior que o erro de treinamento.
Este classificador, portanto, temalto preconceito, mas baixa variância. Dizemos que este algoritmo é
adaptação.
Agora, considere isto:
• Erro de treinamento = 15%
• Erro de desenvolvimento = 30%
Estimamos o viés em 15% e a variância em 15%. Este classificador temalto viés e alta variância: Ele está
indo mal no conjunto de treinamento e, portanto, tem alto viés, e seu desempenho no conjunto de
desenvolvimento é ainda pior, portanto, também tem alta variância. A terminologia overfitting/underfitting
é difícil de aplicar aqui, uma vez que o classificador é simultaneamente overfitting e underfitting.
Página 44
Rascunho de aprendizado de máquina
André Ng
Finalmente, considere isto:
• Erro de treinamento = 0,5%
• Erro de desenvolvimento = 1%
Este classificador está indo bem, pois tem baixo viés e baixa variância. Parabéns por alcançar esse
ótimo desempenho!
Página 45
Rascunho de aprendizado de máquina
André Ng
22 Comparando com a taxa de erro ideal
Em nosso exemplo de reconhecimento de gatos, a taxa de erro “ideal” – isto é, aquela que pode ser alcançada por um
classificador “ideal” – é de quase 0%. Um ser humano olhando para uma foto seria capaz de reconhecer quase o tempo
todo se ela contém um gato; assim, podemos esperar por uma máquina que funcione igualmente bem.
Outros problemas são mais difíceis. Por exemplo, suponha que você esteja construindo um sistema de
reconhecimento de fala e descubra que 14% dos clipes de áudio têm tanto ruído de fundo ou são tão ininteligíveis
que mesmo um ser humano não consegue reconhecer o que foi dito. Neste caso, mesmo o sistema de
reconhecimento de fala mais “ótimo” pode apresentar erros em torno de 14%.
Suponha que neste problema de reconhecimento de fala seu algoritmo atinja:
• Erro de treinamento = 15%
• Erro de desenvolvimento = 30%
O desempenho do conjunto de treinamento já está próximo da taxa de erro ideal de 14%. Assim, não há muito
espaço para melhorias em termos de viés ou em termos de desempenho do conjunto de treinamento. No entanto,
este algoritmo não está generalizando bem para o conjunto de desenvolvedores; portanto, há amplo espaço para
melhorias nos erros devido à variância.
Este exemplo é semelhante ao terceiro exemplo do capítulo anterior, que também teve um erro de treinamento de 15% e
um erro de desenvolvimento de 30%. Se a taxa de erro ideal for de aproximadamente 0%, então um erro de treinamento
de 15% deixa muito espaço para melhorias. Isto sugere que mudanças para reduzir preconceitos podem ser frutíferas.
Mas se a taxa de erro ideal for 14%, então o mesmo desempenho do conjunto de treinamento nos diz que há pouco
espaço para melhorias no viés do classificador.
Para problemas onde a taxa de erro ideal está longe de zero, aqui está uma análise mais detalhada do erro de um
algoritmo. Continuando com nosso exemplo de reconhecimento de fala acima, o erro total do conjunto de
desenvolvimento de 30% pode ser dividido da seguinte forma (uma análise semelhante pode ser aplicada ao erro do
conjunto de teste):
• Taxa de erro ideal (“viés inevitável”) : 14%. Suponha que decidíssemos que, mesmo com o melhor sistema
de fala possível no mundo, ainda sofreríamos um erro de 14%. Podemos pensar nisso como a parte
“inevitável” do viés de um algoritmo de aprendizagem.
Página 46
Rascunho de aprendizado de máquina
André Ng
• Viés evitável: 1%. Isto é calculado como a diferença entre o erro de treinamento e a
taxa de erro ideal.8
• Variância : 15%. A diferença entre o erro de desenvolvimento e o erro de treinamento.
Para relacionar isso com nossas definições anteriores, Viés e Viés Evitável estão relacionados da seguinte forma:9
Viés = Taxa de erro ideal (“viés inevitável”) + Viés evitável
O “viés evitável” reflete o quão pior o desempenho do seu algoritmo no conjunto de treinamento do
que o “classificador ideal”.
O conceito de variância permanece o mesmo de antes. Em teoria, sempre podemos reduzir a variância a
quase zero treinando em um conjunto de treinamento massivo. Assim, toda variação é “evitável” com um
conjunto de dados suficientemente grande, portanto não existe “variância inevitável”.
Considere mais um exemplo, onde a taxa de erro ideal é de 14%, e temos:
• Erro de treinamento = 15%
• Erro de desenvolvimento = 16%
Enquanto no capítulo anterior chamamos isso de classificador de alto viés, agora diríamos que
o erro do viés evitável é de 1% e o erro da variância é de cerca de 1%. Assim, o algoritmo já
está indo bem, com pouco espaço para melhorias. É apenas 2% pior que a taxa de erro ideal.
Vemos nestes exemplos que conhecer a taxa de erro ideal é útil para orientar nossos próximos passos.
Nas estatísticas, a taxa de erro ideal também é chamadaTaxa de erro de Bayes, ou taxa de Bayes.
Como sabemos qual é a taxa de erro ideal? Para tarefas nas quais os humanos são razoavelmente bons,
como reconhecer imagens ou transcrever clipes de áudio, você pode pedir a um humano que forneça
rótulos e depois medir a precisão dos rótulos humanos em relação ao seu conjunto de treinamento. Isso
daria uma estimativa da taxa de erro ideal. Se você está trabalhando em um problema que até
Se esse número for negativo, você está se saindo melhor no conjunto de treinamento do que na taxa de erro ideal. Isso significa
8
que você está ajustando demais o conjunto de treinamento e o algoritmo memorizou demais o conjunto de treinamento. Você
deve se concentrar em métodos de redução de variância em vez de métodos adicionais de redução de viés.
Essas definições são escolhidas para transmitir informações sobre como melhorar seu algoritmo de aprendizagem. Essas
9
definições são diferentes de como os estatísticos definem Viés e Variância. Tecnicamente, o que defino aqui como
“preconceito” deveria ser chamado de “Erro que atribuímos ao preconceito”; e “Viés evitável” deveria ser “erro que
atribuímos ao viés do algoritmo de aprendizagem que está acima da taxa de erro ideal”.
Página 47
Rascunho de aprendizado de máquina
André Ng
os humanos têm dificuldade em resolver (por exemplo, prever que filme recomendar ou que anúncio
mostrar a um usuário), pode ser difícil estimar a taxa de erro ideal.
Na seção “Comparando com o desempenho em nível humano (capítulos 33 a 35), discutirei com mais detalhes o
processo de comparação do desempenho de um algoritmo de aprendizagem com o desempenho em nível
humano.
Nos últimos capítulos, você aprendeu como estimar tendências e variâncias evitáveis/inevitáveis
observando as taxas de erro dos conjuntos de treinamento e desenvolvimento. O próximo capítulo
discutirá como você pode usar os insights de tal análise para priorizar técnicas que reduzem o viés
versus técnicas que reduzem a variância. Existem técnicas muito diferentes que você deve aplicar
dependendo se o problema atual do seu projeto é um viés alto (evitável) ou uma variância alta. Leia!
Página 48
Rascunho de aprendizado de máquina
André Ng
23 Lidando com preconceitos e variações
Aqui está a fórmula mais simples para lidar com questões de preconceito e variação:
• Se você tiver um viés evitável alto, aumente o tamanho do seu modelo (por exemplo, aumente o tamanho
da sua rede neural adicionando camadas/neurônios).
• Se você tiver uma variação alta, adicione dados ao seu conjunto de treinamento.
Se você conseguir aumentar o tamanho da rede neural e aumentar os dados de treinamento sem limites, será
possível se sair muito bem em muitos problemas de aprendizado.
Na prática, aumentar o tamanho do seu modelo acabará por causar problemas computacionais porque
o treinamento de modelos muito grandes é lento. Você também pode esgotar sua capacidade de
adquirir mais dados de treinamento. (Mesmo na internet, há apenas um número finito de fotos de
gatos!)
Diferentes arquiteturas de modelos – por exemplo, diferentes arquiteturas de redes neurais – terão diferentes
quantidades de tendência/variância para o seu problema. Muitas pesquisas recentes de aprendizado profundo
desenvolveram muitas arquiteturas de modelos inovadores. Portanto, se você estiver utilizando redes neurais, a
literatura acadêmica pode ser uma grande fonte de inspiração. Existem também muitas implementações de código
aberto excelentes no GitHub. Mas os resultados da tentativa de novas arquiteturas são menos previsíveis do que a
simples fórmula de aumentar o tamanho do modelo e adicionar dados.
Aumentar o tamanho do modelo geralmente reduz o viés, mas também pode aumentar a variância e o risco de
overfitting. No entanto, esse problema de overfitting geralmente surge apenas quando você não está usando a
regularização. Se você incluir um método de regularização bem projetado, geralmente poderá aumentar com
segurança o tamanho do modelo sem aumentar o sobreajuste.
Suponha que você esteja aplicando aprendizado profundo, com regularização ou abandono L2, com o parâmetro de
regularização que apresenta melhor desempenho no conjunto de desenvolvimento. Se você aumentar o tamanho do
modelo, normalmente seu desempenho permanecerá o mesmo ou melhorará; é improvável que piore significativamente.
A única razão para evitar o uso de um modelo maior é o aumento do custo computacional.
Página 49
Rascunho de aprendizado de máquina
André Ng
24 Compensação entre polarização e variância
Você deve ter ouvido falar da “compensação entre preconceito e variância”. Das alterações que você poderia fazer
na maioria dos algoritmos de aprendizagem, há algumas que reduzem os erros de polarização, mas ao custo de
aumentar a variância e vice-versa. Isso cria uma “compensação” entre viés e variância.
Por exemplo, aumentar o tamanho do seu modelo – adicionar neurônios/camadas em uma rede neural ou
adicionar recursos de entrada – geralmente reduz o viés, mas pode aumentar a variância. Alternativamente,
adicionar regularização geralmente aumenta o viés, mas reduz a variância.
Na era moderna, muitas vezes temos acesso a dados abundantes e podemos usar redes
neurais muito grandes (aprendizado profundo). Portanto, há menos trocas e agora há mais
opções para reduzir o viés sem prejudicar a variância e vice-versa.
Por exemplo, geralmente você pode aumentar o tamanho de uma rede neural e ajustar o método de
regularização para reduzir o viés sem aumentar visivelmente a variância. Ao adicionar dados de treinamento,
geralmente você também pode reduzir a variação sem afetar o viés.
Se você selecionar uma arquitetura de modelo adequada à sua tarefa, também poderá reduzir o
viés e a variação simultaneamente. Selecionar tal arquitetura pode ser difícil.
Nos próximos capítulos, discutiremos técnicas específicas adicionais para lidar com viés e
variância.
Página 50
Rascunho de aprendizado de máquina
André Ng
25 técnicas para reduzir preconceitos evitáveis
Se o seu algoritmo de aprendizagem sofre de um alto viés evitável, você pode tentar as seguintes
técnicas:
• Aumentar o tamanho do modelo(como número de neurônios/camadas): Esta técnica reduz o viés, pois
deve permitir que você se ajuste melhor ao conjunto de treinamento. Se você achar que isso aumenta a
variância, use a regularização, que geralmente eliminará o aumento da variância.
• Modifique recursos de entrada com base em insights de análise de erros: digamos que sua análise de
erros inspire você a criar recursos adicionais que ajudem o algoritmo a eliminar uma categoria específica
de erros. (Discutiremos isso mais detalhadamente no próximo capítulo.) Esses novos recursos podem
ajudar tanto no viés quanto na variância. Em teoria, adicionar mais recursos poderia aumentar a variância;
mas se você achar que esse é o caso, use a regularização, que geralmente eliminará o aumento na
variância.
• Reduzir ou eliminar a regularização (Regularização L2, regularização L1, abandono): Isso
reduzirá o viés evitável, mas aumentará a variância.
• Modificar arquitetura do modelo(como arquitetura de rede neural) para que seja mais
adequado ao seu problema: Esta técnica pode afetar tanto o viés quanto a variância.
Um método que não é útil:
• Adicione mais dados de treinamento: Esta técnica ajuda com problemas de variância, mas geralmente não
tem efeito significativo no viés.
Página 51
Rascunho de aprendizado de máquina
André Ng
26 Análise de erros no conjunto de treinamento
Seu algoritmo deve ter um bom desempenho no conjunto de treinamento antes que você possa esperar que ele tenha um bom desempenho nos
conjuntos de desenvolvimento/teste.
Além das técnicas descritas anteriormente para lidar com o alto viés, às vezes também realizo uma análise de erro no
dados de treinamento, seguindo um protocolo semelhante à análise de erros no conjunto de desenvolvimento Eyeball.
Isso pode ser útil se o seu algoritmo tiver alto viés – ou seja, se não estiver se ajustando bem ao conjunto de
treinamento.
Por exemplo, suponha que você esteja construindo um sistema de reconhecimento de fala para um aplicativo e tenha coletado
um conjunto de treinamento de clipes de áudio de voluntários. Se o seu sistema não estiver indo bem no conjunto de
treinamento, você pode considerar ouvir um conjunto de cerca de 100 exemplos nos quais o algoritmo está indo mal para
entender as principais categorias de erros do conjunto de treinamento. Semelhante à análise de erros do conjunto de
desenvolvimento, você pode contar os erros em diferentes categorias:
Fundo alto
Clipe de áudio
barulho
1
✔
2
✔
3
4
% Do total
O usuário falou
rapidamente
Longe de
microfone
Barulho do carro
✔
✔
✔
✔
75%
Comentários
Barulho do restaurante
Usuário gritando
na sala de estar?
Cafeteria
25%
50%
Neste exemplo, você pode perceber que seu algoritmo está tendo dificuldades particularmente com exemplos de
treinamento que apresentam muito ruído de fundo. Assim, você pode se concentrar em técnicas que permitam
ajustar melhor os exemplos de treinamento com ruído de fundo.
Você também pode verificar se é possível para uma pessoa transcrever esses clipes de áudio, dado o
mesmo áudio de entrada do seu algoritmo de aprendizagem. Se houver tanto ruído de fundo que seja
simplesmente impossível para alguém entender o que foi dito, então pode não ser razoável esperar que
qualquer algoritmo reconheça corretamente tais declarações. Discutiremos os benefícios de comparar
seu algoritmo com o desempenho de nível humano em uma seção posterior.
Página 52
Rascunho de aprendizado de máquina
André Ng
27 Técnicas para reduzir a variância
Se o seu algoritmo de aprendizagem sofre de alta variação, você pode tentar as seguintes
técnicas:
• Adicione mais dados de treinamento: esta é a maneira mais simples e confiável de lidar com a variação, desde
que você tenha acesso a um número significativamente maior de dados e poder computacional suficiente para
processá-los.
• Adicionar regularização (Regularização L2, regularização L1, abandono): Esta técnica
reduz a variância, mas aumenta o viés.
• Adicionar parada antecipada (ou seja, interromper a descida do gradiente mais cedo, com base no erro do conjunto de
desenvolvimento): Esta técnica reduz a variância, mas aumenta o viés. A parada antecipada se comporta de maneira muito
parecida com os métodos de regularização, e alguns autores a chamam de técnica de regularização.
• Seleção de recursos para diminuir o número/tipo de recursos de entrada: Essa técnica pode ajudar
com problemas de variância, mas também pode aumentar o viés. É improvável que reduzir ligeiramente o
número de recursos (digamos, passar de 1.000 para 900) tenha um grande efeito no viés. Reduzi-lo
significativamente (digamos, passar de 1.000 recursos para 100 – uma redução de 10x) tem mais
probabilidade de ter um efeito significativo, desde que você não exclua muitos recursos úteis. No
aprendizado profundo moderno, quando os dados são abundantes, houve uma mudança na seleção de
recursos, e agora é mais provável que forneçamos todos os recursos que temos ao algoritmo e deixemos o
algoritmo decidir quais usar com base nos dados . Mas quando o seu conjunto de treinamento é pequeno,
a seleção de recursos pode ser muito útil.
• Diminuir o tamanho do modelo(como número de neurônios/camadas): Use com cuidado. Esta
técnica poderia diminuir a variância, ao mesmo tempo que possivelmente aumentaria o viés. No
entanto, não recomendo esta técnica para lidar com a variação. Adicionar regularização geralmente
proporciona melhor desempenho de classificação. A vantagem de reduzir o tamanho do modelo é
reduzir o custo computacional e, assim, acelerar a rapidez com que você pode treinar modelos. Se
acelerar o treinamento do modelo for útil, considere diminuir o tamanho do modelo. Mas se o seu
objetivo é reduzir a variância e você não está preocupado com o custo computacional, considere
adicionar a regularização.
Aqui estão duas táticas adicionais, repetidas do capítulo anterior sobre como lidar com o preconceito:
• Modifique recursos de entrada com base em insights de análise de erros: digamos que sua análise de
erros inspire você a criar recursos adicionais que ajudem o algoritmo a eliminar uma categoria específica de
erros. Esses novos recursos podem ajudar tanto no preconceito quanto na variação. Em
Página 53
Rascunho de aprendizado de máquina
André Ng
teoria, adicionar mais recursos poderia aumentar a variância; mas se você achar que esse é o
caso, use a regularização, que geralmente eliminará o aumento na variância.
• Modificar arquitetura do modelo(como arquitetura de rede neural) para que seja mais
adequado ao seu problema: Esta técnica pode afetar tanto o viés quanto a variância.
Página 54
Rascunho de aprendizado de máquina
André Ng
Curvas de aprendizagem
Página 55
Rascunho de aprendizado de máquina
André Ng
28 Diagnosticando viés e variância: curvas de
aprendizado
Vimos algumas maneiras de estimar quanto erro pode ser atribuído ao viés evitável versus variância.
Fizemos isso estimando a taxa de erro ideal e calculando o conjunto de treinamento do algoritmo e os
erros do conjunto de desenvolvimento. Vamos discutir uma técnica ainda mais informativa: traçar uma
curva de aprendizado.
Uma curva de aprendizado representa o erro do conjunto de desenvolvimento em relação ao número de exemplos de
treinamento. Para plotá-lo, você executaria seu algoritmo usando diferentes tamanhos de conjuntos de treinamento. Por
exemplo, se você tiver 1.000 exemplos, poderá treinar cópias separadas do algoritmo em 100, 200, 300,…, 1.000 exemplos. Então
você poderia traçar como o erro do conjunto de desenvolvimento varia com o tamanho do conjunto de treinamento. Aqui está
um exemplo:
À medida que o tamanho do conjunto de treinamento aumenta, o erro do conjunto de desenvolvimento deve diminuir.
Freqüentemente teremos alguma “taxa de erro desejada” que esperamos que nosso algoritmo de aprendizagem
acabe alcançando. Por exemplo:
• Se esperarmos um desempenho de nível humano, então a taxa de erro humano poderia ser a “taxa de erro
desejada”.
• Se nosso algoritmo de aprendizado servir algum produto (como entregar fotos de gatos), poderemos ter uma
intuição sobre qual nível de desempenho é necessário para proporcionar aos usuários uma ótima experiência.
Página 56
Rascunho de aprendizado de máquina
André Ng
• Se você trabalha em um aplicativo importante há muito tempo, então pode ter uma
intuição sobre quanto progresso pode razoavelmente fazer no próximo trimestre/
ano.
Adicione o nível de desempenho desejado à sua curva de aprendizado:
Você pode extrapolar visualmente a curva vermelha de “erro de desenvolvimento” para adivinhar o quanto mais
próximo você poderia chegar do nível de desempenho desejado adicionando mais dados. No exemplo acima, parece
plausível que duplicar o tamanho do conjunto de treinamento possa permitir alcançar o desempenho desejado.
Mas se a curva de erro de desenvolvimento tiver “estagnado” (ou seja, achatado), então você pode dizer imediatamente
que adicionar mais dados não o levará ao seu objetivo:
Observar a curva de aprendizado pode, portanto, ajudá-lo a evitar passar meses coletando o dobro de
dados de treinamento, apenas para perceber que isso não ajuda.
Página 57
Rascunho de aprendizado de máquina
André Ng
Uma desvantagem desse processo é que, se você observar apenas a curva de erro do desenvolvedor, pode
ser difícil extrapolar e prever exatamente para onde irá a curva vermelha se você tiver mais dados. Há um
gráfico adicional que pode ajudá-lo a estimar o impacto da adição de mais dados: o erro de treinamento.
Página 58
Rascunho de aprendizado de máquina
André Ng
29 Plotando erro de treinamento
O erro do conjunto de desenvolvimento (e conjunto de teste) deve diminuir à medida que o tamanho do conjunto de treinamento aumenta. Mas o erro do seu
conjunto de treinamento geralmenteaumentaà medida que o tamanho do conjunto de treinamento aumenta.
Vamos ilustrar esse efeito com um exemplo. Suponha que seu conjunto de treinamento tenha apenas 2 exemplos: uma imagem
de gato e uma imagem de não gato. Então é fácil para os algoritmos de aprendizagem “memorizar” ambos os exemplos no
conjunto de treinamento e obter 0% de erro no conjunto de treinamento. Mesmo que um ou ambos os exemplos de treinamento
tenham sido rotulados incorretamente, ainda é fácil para o algoritmo memorizar ambos os rótulos.
Agora suponha que seu conjunto de treinamento tenha 100 exemplos. Talvez até alguns exemplos estejam mal rotulados ou
sejam ambíguos – algumas imagens são muito desfocadas, por isso mesmo os humanos não conseguem dizer se existe um gato.
Talvez o algoritmo de aprendizagem ainda consiga “memorizar” a maior parte ou todo o conjunto de treinamento, mas agora é
mais difícil obter 100% de precisão. Ao aumentar o conjunto de treinamento de 2 para 100 exemplos, você descobrirá que a
precisão do conjunto de treinamento cairá ligeiramente.
Finalmente, suponha que seu conjunto de treinamento tenha 10.000 exemplos. Neste caso, torna-se ainda mais difícil para o
algoritmo ajustar perfeitamente todos os 10.000 exemplos, especialmente se alguns forem ambíguos ou mal rotulados. Assim,
seu algoritmo de aprendizado terá um desempenho ainda pior neste conjunto de treinamento.
Vamos adicionar um gráfico de erro de treinamento aos nossos números anteriores:
Você pode ver que a curva azul de “erro de treinamento” aumenta com o tamanho do conjunto de treinamento. Além disso, seu algoritmo
geralmente funciona melhor no conjunto de treinamento do que no conjunto de desenvolvimento; portanto, a curva de erro de
desenvolvimento vermelha geralmente fica estritamente acima da curva de erro de treinamento azul.
Vamos discutir a seguir como interpretar esses gráficos.
Página 59
Rascunho de aprendizado de máquina
André Ng
30 Interpretando curvas de aprendizagem: Alto viés
Suponha que sua curva de erro de desenvolvimento seja assim:
Dissemos anteriormente que, se sua curva de erro de desenvolvimento estabilizar, é improvável que você alcance o
desempenho desejado apenas adicionando dados.
Mas é difícil saber exatamente como será uma extrapolação da curva vermelha de erro de desenvolvimento. Se o conjunto de
desenvolvimento fosse pequeno, você teria ainda menos certeza porque as curvas poderiam ser barulhentas.
Suponha que adicionemos a curva de erro de treinamento a este gráfico e obtenhamos o seguinte:
Agora, você pode ter certeza absoluta de que adicionar mais dados não será, por si só, suficiente. Por que é que?
Lembre-se de nossas duas observações:
Página 60
Rascunho de aprendizado de máquina
André Ng
• À medida que adicionamos mais dados de treinamento, o erro de treinamento só pode piorar. Assim, a curva de
erro de treinamento azul só pode permanecer a mesma ou subir e, portanto, só pode se afastar ainda mais do
nível (linha verde) de desempenho desejado.
• A curva de erro de desenvolvimento vermelha geralmente é maior que o erro de treinamento azul. Portanto,
quase não há como adicionar mais dados permitir que a curva vermelha de erro de desenvolvimento caia para o
nível de desempenho desejado, mesmo quando o erro de treinamento é superior ao nível de desempenho
desejado.
Examinar a curva de erro de desenvolvimento e a curva de erro de treinamento no mesmo gráfico nos permite
extrapolar a curva de erro de desenvolvimento com mais segurança.
Suponha, para efeitos de discussão, que o desempenho desejado seja a nossa estimativa da taxa de erro
ideal. A figura acima é então o exemplo padrão de “livro didático” de como é uma curva de aprendizado
com alto viés evitável: No maior tamanho do conjunto de treinamento – presumivelmente
correspondendo a todos os dados de treinamento que temos – há uma grande lacuna entre o erro de
treinamento e o desempenho desejado, indicando grande viés evitável. Além disso, a lacuna entre as
curvas de treinamento e desenvolvimento é pequena, indicando pequena variância.
Anteriormente, medimos o erro de treinamento e de desenvolvimento apenas no ponto mais à direita deste gráfico, o
que corresponde ao uso de todos os dados de treinamento disponíveis. Traçar a curva de aprendizado completa nos dá
uma imagem mais abrangente do desempenho dos algoritmos em diferentes tamanhos de conjuntos de treinamento.
Página 61
Rascunho de aprendizado de máquina
André Ng
31 Interpretando curvas de aprendizagem: Outros casos
Considere esta curva de aprendizado:
Este gráfico indica alto viés, alta variância ou ambos?
A curva de erro de treinamento azul é relativamente baixa e a curva de erro de desenvolvimento vermelha é muito maior do
que o erro de treinamento azul. Assim, o viés é pequeno, mas a variância é grande. Adicionar mais dados de treinamento
provavelmente ajudará a diminuir a lacuna entre o erro de desenvolvimento e o erro de treinamento.
Agora, considere isto:
Desta vez, o erro de treinamento é grande, pois é muito superior ao nível de desempenho desejado. O erro de
desenvolvimento também é muito maior que o erro de treinamento. Portanto, você tem um viés significativo e
uma variação significativa. Você terá que encontrar uma maneira de reduzir o preconceito e a variação em seu
algoritmo.
Página 62
Rascunho de aprendizado de máquina
André Ng
32 Traçando curvas de aprendizado
Suponha que você tenha um conjunto de treinamento muito pequeno de 100 exemplos. Você treina seu algoritmo usando um
subconjunto escolhido aleatoriamente de 10 exemplos, depois 20 exemplos, depois 30, até 100, aumentando o número de
exemplos em intervalos de dez. Em seguida, você usa esses 10 pontos de dados para traçar sua curva de aprendizado. Você pode
descobrir que a curva parece um pouco barulhenta (o que significa que os valores são maiores/inferiores do que o esperado) nos
tamanhos menores dos conjuntos de treinamento.
Ao treinar com apenas 10 exemplos escolhidos aleatoriamente, você pode ter azar e ter um conjunto de treinamento
particularmente “ruim”, como um com muitos exemplos ambíguos/mal rotulados. Ou você pode ter sorte e conseguir um
conjunto de treinamento particularmente “bom”. Ter um pequeno conjunto de treinamento significa que os erros de
desenvolvimento e treinamento podem flutuar aleatoriamente.
Se seu aplicativo de aprendizado de máquina for fortemente direcionado para uma classe (como uma
tarefa de classificação de gatos em que a fração de exemplos negativos é muito maior do que exemplos
positivos) ou se tiver um grande número de classes (como reconhecer 100 espécies animais diferentes) ,
então a chance de selecionar um conjunto de treinamento especialmente “não representativo” ou ruim
também é maior. Por exemplo, se 80% dos seus exemplos são exemplos negativos (y=0) e apenas 20% são
exemplos positivos (y=1), então há uma chance de que um conjunto de treinamento de 10 exemplos
contenha apenas exemplos negativos, tornando assim é muito difícil para o algoritmo aprender algo
significativo.
Se o ruído na curva de treinamento dificulta a visualização das verdadeiras tendências, aqui estão duas soluções:
• Em vez de treinar apenas um modelo em 10 exemplos, selecione vários (digamos 3-10) diferentes conjuntos
de treinamento de 10 exemplos escolhidos aleatoriamente por amostragem com substituição10
do seu conjunto original de 100. Treine um modelo diferente em cada um deles e calcule o erro do conjunto de treinamento
e desenvolvimento de cada um dos modelos resultantes. Calcule e represente graficamente o erro médio de treinamento e
o erro médio do conjunto de desenvolvimento.
• Se o seu conjunto de treinamento for direcionado para uma classe, ou se tiver muitas classes, escolha um
subconjunto “equilibrado” em vez de 10 exemplos de treinamento aleatoriamente do conjunto de 100. Por
exemplo, você pode ter certeza de que 2/10 do exemplos são exemplos positivos e 8/10 são
Aqui está o que amostragemcom substituiçãosignifica: você escolheria aleatoriamente 10 exemplos diferentes entre 100 para formar seu primeiro
10
conjunto de treinamento. Então, para formar o segundo conjunto de treinamento, você escolheria novamente 10 exemplos, mas sem levar em
conta o que foi escolhido no primeiro conjunto de treinamento. Assim, é possível que um exemplo específico apareça tanto no primeiro quanto no
segundo conjunto de treinamento. Em contraste, se você estivesse amostrandoSem substituição, o segundo conjunto de treinamento seria
escolhido apenas entre os 90 exemplos que não foram escolhidos na primeira vez. Na prática, a amostragem com ou sem reposição não deveria
fazer grande diferença, mas a primeira é uma prática comum.
Página 63
Rascunho de aprendizado de máquina
André Ng
negativo. De forma mais geral, você pode garantir que a fração de exemplos de cada classe seja o mais
próxima possível da fração geral no conjunto de treinamento original.
Eu não me preocuparia com nenhuma dessas técnicas, a menos que você já tenha tentado traçar curvas de aprendizado
e concluído que as curvas são muito barulhentas para ver as tendências subjacentes. Se o seu conjunto de treinamento
for grande – digamos, mais de 10.000 exemplos – e a distribuição das aulas não for muito distorcida, você provavelmente
não precisará dessas técnicas.
Por fim, traçar uma curva de aprendizado pode ser caro do ponto de vista computacional: por exemplo, você pode
ter que treinar dez modelos com 1.000, depois 2.000, até 10.000 exemplos. O treinamento de modelos com
pequenos conjuntos de dados é muito mais rápido do que o treinamento de modelos com grandes conjuntos de
dados. Assim, em vez de espaçar uniformemente os tamanhos dos conjuntos de treinamento em uma escala linear
como acima, você pode treinar modelos com 1.000, 2.000, 4.000, 6.000 e 10.000 exemplos. Isso ainda deve lhe dar
uma noção clara das tendências nas curvas de aprendizado. É claro que esta técnica só é relevante se o custo
computacional de treinamento de todos os modelos adicionais for significativo.
Página 64
Rascunho de aprendizado de máquina
André Ng
Comparando à
nível humano
desempenho
Página 65
Rascunho de aprendizado de máquina
André Ng
33 Por que comparamos o desempenho em
nível humano
Muitos sistemas de aprendizado de máquina visam automatizar coisas que os humanos fazem bem. Os exemplos
incluem reconhecimento de imagem, reconhecimento de fala e classificação de spam de e-mail. Os algoritmos de
aprendizagem também melhoraram tanto que agora estamos ultrapassando o desempenho do nível humano em
cada vez mais dessas tarefas.
Além disso, há vários motivos pelos quais construir um sistema de ML é mais fácil se você estiver tentando realizar uma tarefa que as
pessoas possam realizar bem:
1. Facilidade de obtenção de dados de rotuladores humanos. Por exemplo, como as pessoas
reconhecem bem as imagens de gatos, é fácil fornecer rótulos de alta precisão para o seu algoritmo
de aprendizagem.
2. A análise de erros pode basear-se na intuição humana. Suponha que um algoritmo de reconhecimento de
fala tenha um desempenho pior do que o reconhecimento em nível humano. Digamos que transcreva
incorretamente um clipe de áudio como “Esta receita pede umpêrade maçãs”, confundindo “par” com “pêra”.
Você pode recorrer à intuição humana e tentar entender quais informações uma pessoa usa para obter a
transcrição correta e usar esse conhecimento para modificar o algoritmo de aprendizagem.
3. Use o desempenho de nível humano para estimar a taxa de erro ideal e também definir uma “taxa de
erro desejada”.Suponha que seu algoritmo atinja 10% de erro em uma tarefa, mas uma pessoa atinja 2% de
erro. Então sabemos que a taxa de erro ideal é de 2% ou menos e o viés evitável é de pelo menos 8%.
Portanto, você deve tentar técnicas de redução de preconceito.
Embora o item 3 possa não parecer importante, acho que ter uma taxa de erro alvo razoável e
alcançável ajuda a acelerar o progresso de uma equipe. Saber que seu algoritmo tem um alto viés
evitável é extremamente valioso e abre um menu de opções para experimentar.
Existem algumas tarefas nas quais nem mesmo os humanos são bons. Por exemplo, escolher um livro para
recomendar a você; ou escolher um anúncio para mostrar a um usuário em um site; ou prever o mercado de
ações. Os computadores já superam o desempenho da maioria das pessoas nessas tarefas. Com esses
aplicativos, encontramos os seguintes problemas:
•
É mais difícil obter rótulos. Por exemplo, é difícil para os rotuladores humanos anotar em um
banco de dados de usuários a recomendação de livro “ideal”. Se você opera um site ou aplicativo
que vende livros, poderá obter dados mostrando os livros aos usuários e vendo o que eles
compram. Se você não opera esse site, precisará encontrar maneiras mais criativas de obter dados.
Página 66
Rascunho de aprendizado de máquina
André Ng
•
A intuição humana é mais difícil de contar. Por exemplo, praticamente ninguém pode prever o
mercado de ações. Portanto, se nosso algoritmo de previsão de ações não for melhor do que adivinhações
aleatórias, será difícil descobrir como melhorá-lo.
•
É difícil saber qual é a taxa de erro ideal e a taxa de erro razoável desejada. Suponha que
você já tenha um sistema de recomendação de livros que esteja indo muito bem. Como você
sabe o quanto mais pode melhorar sem uma linha de base humana?
Página 67
Rascunho de aprendizado de máquina
André Ng
34 Como definir o desempenho em nível humano
Suponha que você esteja trabalhando em um aplicativo de imagens médicas que faz diagnósticos
automaticamente a partir de imagens de raios X. Uma pessoa típica, sem formação médica anterior, além de
algum treinamento básico, atinge 15% de erro nesta tarefa. Um médico júnior atinge 10% de erro. Um
médico experiente atinge 5% de erro. E uma pequena equipe de médicos que discute e debate cada imagem
chega a 2% de erro. Qual dessas taxas de erro define “desempenho em nível humano”?
Nesse caso, eu usaria 2% como proxy de desempenho em nível humano para nossa taxa de erro ideal. Você
também pode definir 2% como o nível de desempenho desejado porque todos os três motivos do capítulo anterior
para comparação com o desempenho em nível humano se aplicam:
• Facilidade de obtenção de dados rotulados de rotuladores humanos. Você pode solicitar que uma equipe de
médicos forneça rótulos com uma taxa de erro de 2%.
• A análise de erros pode basear-se na intuição humana. Ao discutir imagens com uma equipe de
médicos, você pode aproveitar suas intuições.
• Use o desempenho de nível humano para estimar a taxa de erro ideal e também definir a “taxa
de erro desejada” alcançável.É razoável usar um erro de 2% como estimativa da taxa de erro ideal. A
taxa de erro ideal pode ser ainda inferior a 2%, mas não pode ser superior, pois é possível que uma
equipe de médicos atinja 2% de erro. Em contrapartida, não é razoável utilizar 5% ou 10% como
estimativa da taxa de erro óptima, uma vez que sabemos que estas estimativas são necessariamente
demasiado elevadas.
Quando se trata de obter dados rotulados, talvez você não queira discutir cada imagem com uma
equipe inteira de médicos, pois seu tempo é caro. Talvez você possa fazer com que um único médico
júnior rotule a grande maioria dos casos e leve apenas os casos mais difíceis aos médicos mais
experientes ou à equipe de médicos.
Se o seu sistema está atualmente com 40% de erro, então não importa muito se você usa um médico júnior
(erro de 10%) ou um médico experiente (erro de 5%) para rotular seus dados e fornecer intuições. Mas se o
seu sistema já estiver com 10% de erro, definir a referência de nível humano como 2% fornecerá ferramentas
melhores para continuar melhorando seu sistema.
Página 68
Rascunho de aprendizado de máquina
André Ng
35 Superando o desempenho de nível humano
Você está trabalhando no reconhecimento de fala e possui um conjunto de dados de clipes de áudio. Suponha que seu
conjunto de dados tenha muitos clipes de áudio barulhentos, de modo que até mesmo os humanos tenham 10% de erro.
Suponha que seu sistema já atinja 8% de erro. Você consegue usar qualquer uma das três técnicas descritas no Capítulo
33 para continuar progredindo rapidamente?
Se você conseguir identificar um subconjunto de dados em que os humanos superam significativamente o seu sistema,
ainda poderá usar essas técnicas para impulsionar o progresso rápido. Por exemplo, suponha que seu sistema seja muito
melhor do que o das pessoas no reconhecimento de fala em áudio barulhento, mas os humanos ainda sejam melhores na
transcrição da fala falada muito rapidamente.
Para o subconjunto de dados com fala falada rapidamente:
1.Você ainda pode obter transcrições de humanos com qualidade superior à saída do seu
algoritmo.
2.Você pode recorrer à intuição humana para entender por que eles ouviram corretamente uma
expressão falada rapidamente e o seu sistema não.
3.Você pode usar o desempenho de nível humano na fala falada rapidamente como uma meta de desempenho
desejada.
De forma mais geral, desde que existam exemplos de desenvolvimento em que os humanos estão certos e seu
algoritmo está errado, muitas das técnicas descritas anteriormente serão aplicadas. Isso é verdade mesmo que, na
média de todo o conjunto de desenvolvimento/teste, seu desempenho já esteja ultrapassando o desempenho de
nível humano.
Existem muitas aplicações importantes de aprendizado de máquina em que as máquinas superam o desempenho
do nível humano. Por exemplo, as máquinas são melhores para prever classificações de filmes, quanto tempo leva
para um carro de entrega chegar a algum lugar ou aprovar pedidos de empréstimo. Apenas um subconjunto de
técnicas se aplica quando os humanos têm dificuldade em identificar exemplos em que o algoritmo está claramente
errando. Consequentemente, o progresso é geralmente mais lento em problemas onde as máquinas já
ultrapassam o desempenho do nível humano, enquanto o progresso é mais rápido quando as máquinas ainda
estão a tentar alcançar os humanos.
Página 69
Rascunho de aprendizado de máquina
André Ng
Treinando e
testando em diferentes
distribuições
Página 70
Rascunho de aprendizado de máquina
André Ng
36 Quando você deve treinar e testar em
diferentes distribuições
Os usuários do seu aplicativo de fotos de gatos enviaram 10.000 imagens, que você rotulou manualmente
como contendo gatos ou não. Você também tem um conjunto maior de 200.000 imagens baixadas da
Internet. Como você deve definir conjuntos de treinamento/desenvolvimento/teste?
Como as 10.000 imagens do usuário refletem de perto a distribuição de probabilidade real dos dados nos quais você deseja
ter um bom desempenho, você pode usar isso para seus conjuntos de desenvolvimento e teste. Se você estiver treinando um
algoritmo de aprendizado profundo que consome muitos dados, poderá fornecer a ele 200.000 imagens adicionais da
Internet para treinamento. Assim, seus conjuntos de treinamento e desenvolvimento/teste vêm de diferentes distribuições de
probabilidade. Como isso afeta seu trabalho?
Em vez de particionar nossos dados em conjuntos de treinamento/desenvolvimento/teste, poderíamos pegar todas as 210.000
imagens que temos e embaralhá-las aleatoriamente em conjuntos de treinamento/desenvolvimento/teste. Neste caso, todos os
dados vêm da mesma distribuição. Mas eu não recomendo esse método, porque cerca de 205.000/210.000 ≈ 97,6% dos seus dados
de desenvolvimento/teste viriam de imagens da Internet, o que não reflete a distribuição real na qual você deseja ter um bom
desempenho. Lembre-se de nossa recomendação sobre a escolha de conjuntos de desenvolvimento/teste:
Escolha conjuntos de desenvolvimento e teste para refletir os dados que você espera obter no futuro e deseja
ter um bom desempenho.
A maior parte da literatura acadêmica sobre aprendizado de máquina assume que o conjunto de treinamento, o conjunto de
desenvolvimento e o conjunto de teste vêm todos da mesma distribuição.11Nos primeiros dias do aprendizado de máquina, os
dados eram escassos. Normalmente tínhamos apenas um conjunto de dados extraído de alguma distribuição de probabilidade.
Portanto, dividiríamos aleatoriamente esses dados em conjuntos de treinamento/desenvolvimento/teste, e a suposição de que
todos os dados vinham da mesma fonte geralmente era satisfeita.
Existem algumas pesquisas acadêmicas sobre treinamento e testes em diferentes distribuições. Os exemplos incluem
11
“adaptação de domínio”, “aprendizagem por transferência” e “aprendizagem multitarefa”. Mas ainda existe uma enorme
lacuna entre teoria e prática. Se você treinar no conjunto de dados A e testar em algum tipo de dados muito diferente B, a
sorte poderá ter um grande efeito no desempenho do seu algoritmo. (Aqui, “sorte” inclui os recursos projetados
manualmente pelo pesquisador para a tarefa específica, bem como outros fatores que ainda não entendemos.) Isso torna
difícil realizar o estudo acadêmico de treinamento e teste em diferentes distribuições em uma forma sistemática.
Página 71
Rascunho de aprendizado de máquina
André Ng
Mas na era do big data, agora temos acesso a enormes conjuntos de treinamento, como imagens de gatos na Internet.
Mesmo que o conjunto de treinamento venha de uma distribuição diferente do conjunto de desenvolvimento/teste, ainda
queremos usá-lo para aprendizado, pois ele pode fornecer muitas informações.
Para o exemplo do detector de gatos, em vez de colocar todas as 10.000 imagens enviadas pelo usuário nos conjuntos
de desenvolvimento/teste, poderíamos colocar 5.000 nos conjuntos de desenvolvimento/teste. Podemos colocar os
5.000 exemplos restantes enviados pelos usuários no conjunto de treinamento. Dessa forma, seu conjunto de
treinamento de 205.000 exemplos contém alguns dados provenientes de sua distribuição de desenvolvimento/teste
junto com as 200.000 imagens da Internet. Discutiremos em um capítulo posterior por que esse método é útil.
Vamos considerar um segundo exemplo. Suponha que você esteja construindo um sistema de reconhecimento de
fala para transcrever endereços de ruas para um aplicativo móvel de mapa/navegação controlado por voz. Você
tem 20.000 exemplos de usuários falando endereços. Mas você também tem 500.000 exemplos de outros clipes de
áudio com usuários falando sobre outros tópicos. Você pode pegar 10.000 exemplos de endereços para os
conjuntos de desenvolvimento/teste e usar os 10.000 restantes, mais os 500.000 exemplos adicionais, para
treinamento.
Continuaremos assumindo que seus dados de desenvolvimento e seus dados de teste vêm da mesma
distribuição. Mas é importante entender que diferentes distribuições de treinamento e desenvolvimento/
teste oferecem alguns desafios especiais.
Página 72
Rascunho de aprendizado de máquina
André Ng
37 Como decidir se deseja usar todos os seus dados
Suponha que o conjunto de treinamento do seu detector de gatos inclua 10.000 imagens enviadas pelo usuário. Esses
dados vêm da mesma distribuição de um conjunto de desenvolvimento/teste separado e representam a distribuição na
qual você deseja ter um bom desempenho. Você também tem 20.000 imagens adicionais baixadas da Internet. Você deve
fornecer todas as 20.000 + 10.000 = 30.000 imagens ao seu algoritmo de aprendizagem como conjunto de treinamento ou
descartar as 20.000 imagens da Internet por medo de distorcer seu algoritmo de aprendizagem?
Ao usar gerações anteriores de algoritmos de aprendizagem (como recursos de visão computacional
projetados à mão, seguidos por um classificador linear simples), havia um risco real de que a fusão dos dois
tipos de dados causasse um desempenho pior. Assim, alguns engenheiros irão alertá-lo contra a inclusão das
20.000 imagens da internet.
Mas na era moderna de algoritmos de aprendizagem poderosos e flexíveis – como grandes redes neurais – esse
risco diminuiu bastante. Se você puder construir uma rede neural com um número grande o suficiente de unidades/
camadas ocultas, poderá adicionar com segurança as 20.000 imagens ao seu conjunto de treinamento. É mais
provável que adicionar as imagens aumente seu desempenho.
Esta observação se baseia no fato de que existe algum mapeamento x -> y que funciona bem para
ambos os tipos de dados. Em outras palavras, existe algum sistema que insere uma imagem da
Internet ou de um aplicativo móvel e prevê o rótulo com segurança, mesmo sem saber a origem da
imagem.
Adicionar 20.000 imagens adicionais tem os seguintes efeitos:
1.Ele fornece à sua rede neural mais exemplos de como os gatos são ou não. Isso é útil, pois as imagens da Internet
e as imagens de aplicativos móveis enviadas pelo usuário compartilham algumas semelhanças. Sua rede neural
pode aplicar parte do conhecimento adquirido em imagens da Internet em imagens de aplicativos móveis.
2.Isso força a rede neural a gastar parte de sua capacidade para aprender sobre propriedades específicas de
imagens da Internet (como resolução mais alta, distribuições diferentes de como as imagens são
enquadradas, etc.). Se essas propriedades diferirem muito das imagens de aplicativos móveis, ela irá
“esgotar” parte da capacidade representacional da rede neural. Assim, há menos capacidade de
reconhecimento de dados extraídos da distribuição de imagens de aplicativos móveis, que é o que
realmente importa para você. Teoricamente, isso poderia prejudicar o desempenho dos seus algoritmos.
Página 73
Rascunho de aprendizado de máquina
André Ng
Para descrever o segundo efeito em termos diferentes, podemos recorrer ao personagem fictício
Sherlock Holmes, que diz que seu cérebro é como um sótão; ele tem apenas uma quantidade
finita de espaço. Ele diz que “a cada acréscimo de conhecimento, você esquece algo que sabia
antes. É da maior importância, portanto, não permitir que fatos inúteis excluam os úteis.”12
Felizmente, se você tiver a capacidade computacional necessária para construir uma rede neural grande o suficiente –
ou seja, um sótão grande o suficiente – então isso não será uma preocupação séria. Você tem capacidade suficiente
para aprender tanto com a Internet quanto com imagens de aplicativos móveis, sem que os dois tipos de dados
concorram por capacidade. O “cérebro” do seu algoritmo é grande o suficiente para que você não precise se preocupar
em ficar sem espaço no sótão.
Mas se você não tiver uma rede neural grande o suficiente (ou outro algoritmo de aprendizado altamente flexível), deverá
prestar mais atenção aos dados de treinamento que correspondem à distribuição do conjunto de desenvolvimento/teste.
Se você acha que tem dados que não trazem nenhum benefício, você deve simplesmente omitir esses dados por motivos
computacionais. Por exemplo, suponha que seus conjuntos de desenvolvimento/teste contenham principalmente imagens
casuais de pessoas, lugares, pontos de referência, animais. Suponha que você também tenha uma grande coleção de
documentos históricos digitalizados:
Esses documentos não contêm nada parecido com um gato. Eles também parecem completamente diferentes da
sua distribuição de desenvolvimento/teste. Não faz sentido incluir esses dados como exemplos negativos, porque
o benefício do primeiro efeito acima é insignificante – não há quase nada que sua rede neural possa aprender com
esses dados que possa aplicar à distribuição do seu conjunto de desenvolvimento/teste. Incluí-los desperdiçaria
recursos computacionais e capacidade de representação da rede neural.
12
Um estudo em escarlate por Arthur Conan Doyle
Página 74
Rascunho de aprendizado de máquina
André Ng
38 Como decidir se deve incluir dados
inconsistentes
Suponha que você queira aprender a prever os preços das moradias na cidade de Nova York. Dado o tamanho de
uma casa (característica de entrada x), você deseja prever o preço (rótulo alvo y).
Os preços da habitação na cidade de Nova York são muito altos. Suponha que você tenha um segundo conjunto de dados
de preços de moradias em Detroit, Michigan, onde os preços de moradias são muito mais baixos. Você deve incluir esses
dados em seu conjunto de treinamento?
Dado o mesmo tamanho x, o preço de uma casa y é muito diferente dependendo se ela está na cidade de
Nova York ou em Detroit. Se você se preocupa apenas em prever os preços das moradias na cidade de Nova
York, juntar os dois conjuntos de dados prejudicará seu desempenho. Neste caso, seria melhor deixar de fora
os dados inconsistentes de Detroit.13
Qual a diferença entre este exemplo de Nova York x Detroit e o exemplo de aplicativo móvel x imagens de
gatos da Internet?
O exemplo da imagem do gato é diferente porque, dada uma imagem de entrada x, pode-se prever com
segurança o rótulo y indicando se existe um gato, mesmo sem saber se a imagem é uma imagem da Internet
ou de um aplicativo móvel. Ou seja, existe uma função f(x) que mapeia de forma confiável da entrada x para a
saída alvo y, mesmo sem conhecer a origem de x. Assim, a tarefa de reconhecimento de imagens da internet
é “consistente” com a tarefa de reconhecimento de imagens de aplicativos móveis. Isso significa que houve
poucas desvantagens (além do custo computacional) em incluir todos os dados, e algumas possíveis
vantagens significativas. Em contraste, os dados da cidade de Nova Iorque e de Detroit, Michigan, não são
consistentes. Dado o mesmo x (tamanho da casa), o preço é muito diferente dependendo de onde fica a casa.
Existe uma maneira de resolver o problema de os dados de Detroit serem inconsistentes com os dados da cidade de
13
Nova York, que é adicionar um recurso extra a cada exemplo de treinamento que indica a cidade. Dada uma entrada x –
que agora especifica a cidade – o valor alvo de y agora é inequívoco. Porém, na prática não vejo isso sendo feito com
frequência.
Página 75
Rascunho de aprendizado de máquina
André Ng
39 Dados de ponderação
Suponha que você tenha 200.000 imagens da Internet e 5.000 imagens de usuários de seu aplicativo móvel. Há uma
proporção de 40:1 entre o tamanho desses conjuntos de dados. Em teoria, desde que você construa uma enorme rede
neural e treine-a por tempo suficiente em todas as 205.000 imagens, não há mal nenhum em tentar fazer com que o
algoritmo tenha um bom desempenho tanto em imagens da Internet quanto em imagens móveis.
Mas, na prática, ter 40 vezes mais imagens da Internet do que imagens de aplicativos móveis pode significar que você
precisará gastar 40 vezes (ou mais) mais recursos computacionais para modelar ambas, em comparação com se você
treinasse apenas com 5.000 imagens.
Se você não tiver grandes recursos computacionais, poderá dar às imagens da Internet um peso muito
menor como meio-termo.
Por exemplo, suponha que seu objetivo de otimização seja um erro quadrático (esta não é uma boa escolha para
uma tarefa de classificação, mas simplificará nossa explicação). Assim, nosso algoritmo de aprendizagem tenta
otimizar:
A primeira soma acima é superior a 5.000 imagens de celular e a segunda soma é superior a
200.000 imagens de internet. Em vez disso, você pode otimizar com um parâmetro adicional :
Se você definir =1/40, o algoritmo daria peso igual às 5.000 imagens de celular e às 200.000 imagens de
internet. Você também pode definir o parâmetro para outros valores, talvez ajustando o conjunto de
desenvolvimento.
Ao ponderar menos as imagens adicionais da Internet, você não precisa construir uma rede neural tão grande para
garantir que o algoritmo funcione bem em ambos os tipos de tarefas. Este tipo de reponderação é necessário apenas
quando você suspeita que os dados adicionais (imagens da Internet) têm uma distribuição muito diferente do conjunto de
desenvolvimento/teste, ou se os dados adicionais são muito maiores que os dados que vieram da mesma distribuição que
o conjunto de desenvolvimento/teste (imagens móveis).
Página 76
Rascunho de aprendizado de máquina
André Ng
40 Generalizando do conjunto de treinamento para o conjunto de
desenvolvimento
Suponha que você esteja aplicando ML em um ambiente onde o treinamento e as distribuições de desenvolvimento/teste são
diferentes. Digamos que o conjunto de treinamento contenha imagens da Internet + imagens móveis e os conjuntos de
desenvolvimento/teste contenham apenas imagens móveis. No entanto, o algoritmo não está funcionando bem: ele tem um erro
de conjunto de desenvolvimento/teste muito maior do que você gostaria. Aqui estão algumas possibilidades do que pode estar
errado:
1.Não funciona bem no conjunto de treinamento. Este é o problema do alto viés (evitável) na distribuição do
conjunto de treinamento.
2.Funciona bem no conjunto de treinamento, mas não generaliza bem para dados inéditos extraído
da mesma distribuição do conjunto de treinamento. Esta é uma variação alta.
3.Ele generaliza bem para novos dados extraídos da mesma distribuição do conjunto de treinamento, mas não para dados extraídos da
distribuição do conjunto de desenvolvimento/teste. Chamamos esse problemaincompatibilidade de dados, pois é porque os
dados do conjunto de treinamento não correspondem aos dados do conjunto de desenvolvimento/teste.
Por exemplo, suponha que os humanos alcancem um desempenho quase perfeito na tarefa de reconhecimento
de gatos. Seu algoritmo consegue isso:
• Erro de 1% no conjunto de treinamento
• Erro de 1,5% em dados extraídos da mesma distribuição do conjunto de treinamento que o algoritmo
não viu
• Erro de 10% no conjunto de desenvolvimento
Nesse caso, você claramente tem um problema de incompatibilidade de dados. Para resolver isso, você pode tentar tornar os
dados de treinamento mais semelhantes aos dados de desenvolvimento/teste. Discutiremos algumas técnicas para isso mais
tarde.
Para diagnosticar até que ponto um algoritmo sofre de cada um dos problemas 1 a 3 acima, será útil ter outro
conjunto de dados. Especificamente, em vez de fornecer ao algoritmo todos os dados de treinamento disponíveis,
você pode dividi-lo em dois subconjuntos: o conjunto de treinamento real no qual o algoritmo treinará e um
conjunto separado, que chamaremos de conjunto “Desenvolvedor de treinamento”, que iremos não vai treinar.
Agora você tem quatro subconjuntos de dados:
Página 77
Rascunho de aprendizado de máquina
André Ng
•
Conjunto de treinamento. Estes são os dados com os quais o algoritmo aprenderá (por exemplo, imagens da
Internet + imagens móveis). Isso não precisa ser extraído da mesma distribuição com a qual realmente nos
importamos (a distribuição do conjunto de desenvolvimento/teste).
•
Conjunto de desenvolvimento de treinamento: esses dados são extraídos da mesma distribuição do conjunto de
treinamento (por exemplo, imagens da Internet + imagens móveis). Geralmente é menor que o conjunto de treinamento;
ele só precisa ser grande o suficiente para avaliar e acompanhar o progresso do nosso algoritmo de aprendizagem.
•
Conjunto de desenvolvimento: é extraído da mesma distribuição do conjunto de teste e reflete a distribuição de
dados nos quais nos preocupamos em ter um bom desempenho. (Por exemplo, imagens móveis.)
•
Conjunto de teste: é extraído da mesma distribuição do conjunto de desenvolvimento. (Por exemplo, imagens móveis.)
Armado com esses quatro conjuntos de dados separados, agora você pode avaliar:
•
Erro de treinamento, avaliando no conjunto de treinamento.
•
A capacidade do algoritmo de generalizar para novos dados extraídos da distribuição do conjunto de treinamento, avaliando no
conjunto de desenvolvimento de treinamento.
•
O desempenho do algoritmo na tarefa de seu interesse, avaliando os conjuntos de desenvolvimento e/ou
teste.
A maioria das diretrizes nos Capítulos 5 a 7 para escolher o tamanho do conjunto de desenvolvimento também se aplica ao conjunto de
desenvolvimento de treinamento.
Página 78
Rascunho de aprendizado de máquina
André Ng
41 Identificando Erros de Viés, Variância e
Incompatibilidade de Dados
Suponha que os humanos alcancem um desempenho quase perfeito (≈0% de erro) na tarefa de detecção de gatos e,
portanto, a taxa de erro ideal seja de cerca de 0%. Suponha que você tenha:
• Erro de 1% no conjunto de treinamento.
• Erro de 5% no conjunto de desenvolvimento de treinamento.
• Erro de 5% no conjunto de desenvolvimento.
O que isso diz a você? Aqui, você sabe que tem uma variância alta. As técnicas de redução de
variância descritas anteriormente devem permitir que você progrida.
Agora, suponha que seu algoritmo atinja:
• Erro de 10% no conjunto de treinamento.
• Erro de 11% no conjunto de desenvolvimento de treinamento.
• Erro de 12% no conjunto de desenvolvimento.
Isso indica que você tem um alto viés evitável no conjunto de treinamento. Ou seja, o algoritmo está indo mal
no conjunto de treinamento. As técnicas de redução de preconceito devem ajudar.
Nos dois exemplos acima, o algoritmo sofreu apenas um alto viés evitável ou alta variância. É
possível que um algoritmo sofra de qualquer subconjunto de alto viés evitável, alta variância e
incompatibilidade de dados. Por exemplo:
• Erro de 10% no conjunto de treinamento.
• Erro de 11% no conjunto de desenvolvimento de treinamento.
• Erro de 20% no conjunto de desenvolvimento.
Este algoritmo sofre de um alto viés evitável e de incompatibilidade de dados. No entanto, não
sofre de grande variação na distribuição do conjunto de treinamento.
Pode ser mais fácil entender como os diferentes tipos de erros se relacionam entre si,
desenhando-os como entradas em uma tabela:
Página 79
Rascunho de aprendizado de máquina
André Ng
Continuando com o exemplo do detector de imagem de gato, você pode ver que existem duas
distribuições diferentes de dados no eixo x. No eixo y, temos três tipos de erro: erro de nível
humano, erro em exemplos nos quais o algoritmo treinou e erro em exemplos nos quais o
algoritmo não treinou. Podemos preencher as caixas com os diferentes tipos de erros que
identificamos no capítulo anterior.
Se desejar, você também pode preencher as duas caixas restantes nesta tabela: Você pode preencher a caixa
superior direita (Desempenho de nível humano em imagens móveis) pedindo a alguns humanos que rotulem os
dados de suas imagens móveis de gatos e meçam seus erros. Você pode preencher a próxima caixa pegando as
imagens do gato móvel (Distribuição B) e colocando uma pequena fração no conjunto de treinamento para que a
rede neural também aprenda com elas. Em seguida, você mede o erro do modelo aprendido nesse subconjunto de
dados. O preenchimento dessas duas entradas adicionais pode, às vezes, fornecer informações adicionais sobre o
que o algoritmo está fazendo nas duas distribuições diferentes (Distribuição A e B) de dados.
Ao compreender quais tipos de erros o algoritmo mais sofre, você estará em melhor posição para decidir se
deve se concentrar na redução do viés, na redução da variância ou na redução da incompatibilidade de dados.
Página 80
Rascunho de aprendizado de máquina
André Ng
42 Resolvendo a incompatibilidade de dados
Suponha que você tenha desenvolvido um sistema de reconhecimento de fala que funcione muito bem no conjunto de treinamento e no conjunto
de desenvolvimento de treinamento. No entanto, o desempenho é ruim no seu conjunto de desenvolvimento: você tem um problema de
incompatibilidade de dados. O que você pode fazer?
Eu recomendo que você: (i) Tente entender quais propriedades dos dados diferem entre o treinamento e as distribuições do
conjunto de desenvolvimento. (ii) Tente encontrar mais dados de treinamento que correspondam melhor aos exemplos do
conjunto de desenvolvimento com os quais seu algoritmo tem problemas.14
Por exemplo, suponha que você realize uma análise de erros no conjunto de desenvolvedores de reconhecimento
de voz: você analisa manualmente 100 exemplos e tenta entender onde o algoritmo está cometendo erros. Você
descobre que seu sistema funciona mal porque a maioria dos clipes de áudio no conjunto de desenvolvimento foi
tirada dentro de um carro, enquanto a maioria dos exemplos de treinamento foi gravada em um fundo silencioso.
O ruído do motor e da estrada pioram drasticamente o desempenho do seu sistema de fala. Nesse caso, você pode
tentar adquirir mais dados de treinamento, incluindo clipes de áudio gravados em um carro. O objetivo da análise
de erros é compreender as diferenças significativas entre o conjunto de treinamento e o conjunto de
desenvolvimento, que é o que leva à incompatibilidade de dados.
Se o seu treinamento e conjuntos de desenvolvimento de treinamento incluírem áudio gravado dentro de um carro, você
também deverá verificar novamente o desempenho do seu sistema nesse subconjunto de dados. Se estiver indo bem com os
dados do carro no conjunto de treinamento, mas não com os dados do carro no conjunto de desenvolvimento de treinamento,
isso validará ainda mais a hipótese de que obter mais dados do carro ajudaria. É por isso que discutimos a possibilidade de
incluir em seu conjunto de treinamento alguns dados extraídos da mesma distribuição de seu conjunto de desenvolvimento/
teste no capítulo anterior. Isso permite que você compare seu desempenho nos dados do carro no conjunto de treinamento com
o conjunto de desenvolvimento/teste.
Infelizmente, não há garantias neste processo. Por exemplo, se você não tiver como obter mais dados de
treinamento que correspondam melhor aos dados do conjunto de desenvolvedores, talvez não tenha um
caminho claro para melhorar o desempenho.
Há também algumas pesquisas sobre “adaptação de domínio” – como treinar um algoritmo em uma distribuição e
14
generalizá-lo para uma distribuição diferente. Esses métodos são normalmente aplicáveis apenas em tipos
especiais de problemas e são muito menos usados do que as ideias descritas neste capítulo.
Página 81
Rascunho de aprendizado de máquina
André Ng
43 Síntese de dados artificiais
Seu sistema de fala precisa de mais dados que soem como se tivessem sido obtidos de dentro de um carro. Em vez
de coletar muitos dados enquanto você dirige, pode haver uma maneira mais fácil de obter esses dados:
sintetizando-os artificialmente.
Suponha que você obtenha uma grande quantidade de clipes de áudio de ruído de carro/estrada. Você pode baixar esses
dados de vários sites. Suponha que você também tenha um grande grupo de treinamento de pessoas falando em uma sala
silenciosa. Se você pegar um clipe de áudio de uma pessoa falando e “adicionar” a ele um clipe de áudio de ruído de carro/
estrada, você obterá um clipe de áudio que soa como se essa pessoa estivesse falando em um carro barulhento. Usando
esse processo, você pode “sintetizar” enormes quantidades de dados que parecem ter sido coletados dentro de um carro.
De forma mais geral, há várias circunstâncias em que a síntese artificial de dados permite criar um enorme conjunto de
dados que corresponda razoavelmente ao conjunto de desenvolvimento. Vamos usar o detector de imagens de gatos
como segundo exemplo. Você percebe que as imagens do conjunto de desenvolvedores têm muito mais desfoque de
movimento porque tendem a vir de usuários de celulares que movem levemente o telefone enquanto tiram a foto. Você
pode obter imagens não desfocadas do conjunto de treinamento de imagens da Internet e adicionar desfoque de
movimento simulado a elas, tornando-as mais semelhantes ao conjunto de desenvolvimento.
Tenha em mente que a síntese artificial de dados tem os seus desafios: por vezes é mais fácil criar dados
sintéticos que pareçam realistas para uma pessoa do que criar dados que pareçam realistas para um
computador. Por exemplo, suponha que você tenha 1.000 horas de dados de treinamento de fala, mas apenas
1 hora de ruído de carro. Se você usar repetidamente a mesma 1 hora de ruído do carro com porções
diferentes das 1.000 horas originais de dados de treinamento, você terminará com um conjunto de dados
sintético onde o mesmo ruído do carro é repetido continuamente. Embora uma pessoa que ouça este áudio
provavelmente não seja capaz de dizer – todo ruído de carro soa igual para a maioria de nós – é possível que
um algoritmo de aprendizagem se “ajuste demais” ao ruído de 1 hora do carro. Assim, poderia generalizar mal
para um novo clipe de áudio onde o ruído do carro soa diferente.
Alternativamente, suponha que você tenha 1.000 horas únicas de ruído de carro, mas tudo isso foi obtido de
apenas 10 carros diferentes. Nesse caso, é possível que um algoritmo se “ajuste demais” a esses 10 carros e tenha
um desempenho ruim se for testado no áudio de um carro diferente. Infelizmente, esses problemas podem ser
difíceis de detectar.
Página 82
Rascunho de aprendizado de máquina
André Ng
Para dar mais um exemplo, suponha que você esteja construindo um sistema de visão computacional para
reconhecer carros. Suponha que você faça parceria com uma empresa de videogame que possui modelos de
computação gráfica de vários carros. Para treinar seu algoritmo, você usa os modelos para gerar imagens sintéticas
de carros. Mesmo que as imagens sintetizadas pareçam muito realistas, esta abordagem (que foi proposta de
forma independente por muitas pessoas) provavelmente não funcionará bem. O videogame pode ter cerca de 20
designs de carros em todo o videogame. É muito caro construir um modelo 3D de um carro; se você estivesse
jogando, provavelmente não notaria que está vendo os mesmos carros repetidamente, talvez apenas pintados de
forma diferente. Ou seja, esses dados parecem muito realistas para você. Mas comparado ao conjunto de todos os
carros nas estradas – e, portanto, ao que você provavelmente verá nos conjuntos de desenvolvimento/teste – este
conjunto de 20 carros sintetizados captura apenas uma fração minúscula da distribuição mundial de carros.
Portanto, se todos os seus 100.000 exemplos de treinamento vierem desses 20 carros, seu sistema se “ajustará
demais” a esses 20 designs de carros específicos e não conseguirá generalizar bem para conjuntos de
desenvolvimento/teste que incluam outros designs de carros.
Ao sintetizar dados, pense se você está realmente sintetizando um conjunto representativo de
exemplos. Tente evitar fornecer aos dados sintetizados propriedades que possibilitem a um algoritmo
de aprendizagem distinguir exemplos sintetizados de exemplos não sintetizados - como se todos os
dados sintetizados viessem de um dos 20 designs de carros ou todo o áudio sintetizado viesse de
apenas 1 hora. do barulho do carro. Este conselho pode ser difícil de seguir.
Ao trabalhar na síntese de dados, minhas equipes às vezes levam semanas até produzirmos dados com
detalhes suficientemente próximos da distribuição real para que os dados sintetizados tenham um efeito
significativo. Mas se você conseguir acertar os detalhes, poderá acessar repentinamente um conjunto de
treinamento muito maior do que antes.
Página 83
Rascunho de aprendizado de máquina
André Ng
Depuração
inferência
algoritmos
Página 84
Rascunho de aprendizado de máquina
André Ng
44 O teste de verificação de otimização
Suponha que você esteja construindo um sistema de reconhecimento de fala. Seu sistema funciona
inserindo um clipe de áudioUm, e calculando alguma pontuaçãoUm( S) para cada frase de saída possívelS.
Por exemplo, você pode tentar estimar a pontuaçãoUm( S) =P( S| Um), a probabilidade de que a transcrição
de saída correta seja a sentençaS, dado que o áudio de entrada foiA.
Dada uma maneira de calcular a pontuaçãoUm( S), você ainda precisa encontrar a frase em inglêsSque o
maximiza:
Como você calcula o “arg max” acima? Se a língua inglesa tem 50.000 palavras, então existem
(50.000) Npossíveis sentenças de comprimentoN-
muitos para serem enumerados exaustivamente.
Então, você precisa aplicar um algoritmo de busca aproximado, para tentar encontrar o valor deSque otimiza
(maximiza) a pontuaçãoUm( S). Um exemplo de algoritmo de pesquisa é “beam search”, que mantém apenasK
principais candidatos durante o processo de pesquisa. (Para os propósitos deste capítulo, você não precisa
entender os detalhes da pesquisa de feixe.) Algoritmos como esse não garantem encontrar o valor de Sque
maximiza a pontuaçãoUm( S).
Suponha que um clipe de áudioUmregistra alguém dizendo “Eu adoro aprendizado de máquina”. Mas
em vez de gerar a transcrição correta, seu sistema exibe o incorreto “Eu amo robôs”. Existem agora
duas possibilidades para o que deu errado:
1.Problema de algoritmo de pesquisa . O algoritmo de pesquisa aproximada (pesquisa de feixe) não conseguiu
encontrar o valor deSque maximiza a pontuaçãoUm( S).
2.Problema objetivo (função de pontuação). Nossas estimativas para pontuação Um( S) =P( S| Um) eram
imprecisos. Em particular, a nossa escolha de Pontuação Um( S) não conseguiu reconhecer que “Eu adoro
aprendizado de máquina” é a transcrição correta.
Dependendo de qual delas foi a causa da falha, você deve priorizar seus esforços de maneira muito
diferente. Se o problema for o número 1, você deve trabalhar para melhorar o algoritmo de pesquisa. Se o
problema for o número 2, você deve trabalhar no algoritmo de aprendizagem que estima a pontuaçãoUm( S).
Diante dessa situação, alguns pesquisadores decidirão aleatoriamente trabalhar no algoritmo de busca; outros
trabalharão aleatoriamente em uma maneira melhor de aprender os valores da pontuaçãoUm(S). Mas, a menos
que você saiba qual delas é a causa subjacente do erro, seus esforços poderão ser desperdiçados. Como você
pode decidir de forma mais sistemática no que trabalhar?
Página 85
Rascunho de aprendizado de máquina
André Ng
Deixe Sforaseja a transcrição de saída (“Eu amo robôs”). Seja S* a transcrição correta (“Eu adoro
aprendizado de máquina”). Para entender se o problema é #1 ou #2 acima, você pode executar oTeste
de verificação de otimização : Primeiro, calcule a pontuaçãoUm( S*) e pontuação Um( Sfora). Em seguida,
verifique se a pontuaçãoUm( S* ) >PontuaçãoUm( Sfora). Existem duas possibilidades:
Caso 1: Pontuação Um(S*) > Pontuação Um(Sfora)
Neste caso, seu algoritmo de aprendizagem deu corretamente a S* uma pontuação mais alta do que S fora. No
entanto, nosso algoritmo de busca aproximado escolheu S foraem vez de S*. Isso indica que seu algoritmo de
busca aproximado não está conseguindo escolher o valor de S que maximiza
PontuaçãoUm( S). Nesse caso, o teste de Verificação de Otimização informa que você tem um problema
de algoritmo de busca e deve focar nisso. Por exemplo, você pode tentar aumentar a largura do feixe de
busca do feixe.
Caso 2: Pontuação Um(S*) ≤ Pontuação Um(Sfora)
Nesse caso, você sabe que a maneira como está calculando a pontuaçãoUm(.) é o culpado: falha em atribuir uma
pontuação estritamente mais alta à saída correta S* do que o incorretoSfora. O teste de verificação de otimização
informa que você tem um problema de função objetiva (pontuação). Portanto, você deve se concentrar em melhorar
a forma como aprende ou aproxima a pontuaçãoUm( S) para frases diferentesS.
Nossa discussão se concentrou em um único exemplo. Para aplicar o teste de verificação de otimização na prática,
você deve examinar os erros em seu conjunto de desenvolvimento. Para cada erro, você testaria se a pontuaçãoUm
(S*) > Pontuação Um(Sfora). Cada exemplo de desenvolvimento para o qual esta desigualdade é válida será marcado
como um erro causado pelo algoritmo de otimização. Cada exemplo para o qual isso não se aplica (Pontuação Um
(S*) ≤ Pontuação Um(Sfora)) é contado como um erro devido à maneira como você está calculando a pontuação Um(.).
Por exemplo, suponha que você descubra que 95% dos erros foram devidos à função de pontuação Score Um
(.), e apenas 5% devido ao algoritmo de otimização. Agora você sabe que não importa o quanto melhore seu
procedimento de otimização, você eliminaria realisticamente apenas cerca de 5% de nossos erros. Portanto,
você deve se concentrar em melhorar a forma como estima a pontuaçãoUm(.).
Página 86
Rascunho de aprendizado de máquina
André Ng
45 Forma geral de teste de verificação de
otimização
Você pode aplicar o teste de verificação de otimização quando, com alguma informaçãox, você sabe como calcular a
pontuaçãox( sim) que indica quão boa é uma respostavocêé para uma entradax. Além disso, você está usando um
algoritmo aproximado para tentar encontrar arg max vocêPontuaçãox( sim) ,mas suspeite que o algoritmo de busca
às vezes não consegue encontrar o máximo. Em nosso exemplo anterior de reconhecimento de fala,x = UMAera um
clipe de áudio ey = Sfoi a transcrição de saída.
Suponha que y* seja a saída “correta”, mas o algoritmo produz y fora. Então o teste principal é medir
se a pontuaçãox(s*) > Pontuação x(vocêfora). Se esta desigualdade se mantiver, culparemos o
algoritmo de otimização pelo erro. Consulte o capítulo anterior para ter certeza de que entendeu a
lógica por trás disso. Caso contrário, culpamos o cálculo da pontuaçãox(s).
Vejamos mais um exemplo. Suponha que você esteja construindo um sistema de tradução
automática de chinês para inglês. Seu sistema funciona inserindo uma frase em chinêsC, e
calculando alguma pontuaçãoC( E) para cada tradução possívelE. Por exemplo, você pode usar
Pontuação C( E) = P( E| C), a probabilidade da tradução ser E dado que a sentença de entrada eraC.
Seu algoritmo traduz frases tentando calcular:
No entanto, o conjunto de todas as sentenças possíveis em inglêsEé muito grande, então você depende de um algoritmo de
pesquisa heurística.
Suponha que seu algoritmo produza uma tradução incorretaEforaem vez de alguma tradução corretaE*.
Em seguida, o teste de verificação de otimização solicitará que você calcule se a pontuaçãoC( E*) >
PontuaçãoC( Eó fora). Se esta desigualdade for válida, então a pontuaçãoC(.) reconheceu corretamente E*
como uma saída superior a Efora; portanto, você atribuiria esse erro ao algoritmo de pesquisa
aproximado. Caso contrário, você atribui esse erro ao cálculo da pontuaçãoC(.).
É um “padrão de design” muito comum em IA aprender primeiro uma função de pontuação
aproximada Pontuação x(.), então use um algoritmo de maximização aproximado. Se você conseguir
identificar esse padrão, poderá usar o teste de verificação de otimização para entender a origem dos
erros.
Página 87
Rascunho de aprendizado de máquina
André Ng
46 Exemplo de aprendizagem por reforço
Suponha que você esteja usando aprendizado de máquina para ensinar um helicóptero a realizar manobras complexas.
Aqui está uma foto de lapso de tempo de um helicóptero controlado por computador executando um pouso com o
motor desligado.
Isso é chamado de manobra de “autorotação”. Ele permite que helicópteros pousem mesmo que seu motor falhe
inesperadamente. Os pilotos humanos praticam esta manobra como parte do seu treinamento. Seu objetivo é usar um
algoritmo de aprendizagem para pilotar o helicóptero através de uma trajetóriaTisso termina em um pouso seguro.
Para aplicar o aprendizado por reforço, você deve desenvolver uma “função de recompensa”R (.) que dá uma
pontuação que mede quão boa é cada trajetória possível Té. Por exemplo, seTresulta na queda do
helicóptero, então talvez a recompensa sejaR(T) = -1.000 – uma enorme recompensa negativa. Uma trajetória
Tresultando em um pouso seguro pode resultar em um resultado positivoR(T) com o valor exato
dependendo de quão suave foi o pouso. A função de recompensaR (.) é normalmente escolhido à mão para
quantificar quão desejáveis são diferentes trajetórias.Tsão. Ele tem que avaliar o quão difícil foi o pouso, se o
helicóptero pousou exatamente no local desejado, quão difícil foi a descida para os passageiros e assim por
diante. Não é fácil projetar boas funções de recompensa.
Página 88
Rascunho de aprendizado de máquina
André Ng
Dada uma função de recompensaR(T), o trabalho do algoritmo de aprendizagem por reforço é controlar o
helicóptero para que ele atinja o máximoTR(T).H
no entanto, algoritmos de aprendizagem por reforço
fazer muitas aproximações e pode não conseguir alcançar esta maximização.
Suponha que você tenha escolhido alguma recompensaR(.) e executei seu algoritmo de aprendizagem. No entanto,
seu desempenho parece muito pior do que o do piloto humano – os pousos são mais acidentados e parecem
menos seguros do que um piloto humano consegue. Como você pode saber se a falha está no algoritmo de
aprendizagem por reforço - que está tentando realizar uma trajetória que atinge o máximoT R(T)-
ou se a falha for da função de recompensa - que tenta medir e também
especificar a compensação ideal entre os solavancos do percurso e a precisão do local de pouso?
Para aplicar o teste de verificação de otimização, vamosThumanoseja a trajetória alcançada pelo
piloto humano, e deixeTforaseja a trajetória alcançada pelo algoritmo. De acordo com nossa
descrição acima,Thumanoé uma trajetória superior aTfora. Assim, o teste chave é o seguinte: É
verdade queR ( Thumano)>R ( Tfora)?
Caso 1: Se esta desigualdade for válida, então a função de recompensaR (.) está classificando corretamenteT
como superior aTfora. Mas nosso algoritmo de aprendizagem por reforço está encontrando o inferiorTó fora.
humano
Isso sugere que vale a pena trabalhar para melhorar nosso algoritmo de aprendizagem por reforço.
Caso 2: A desigualdade não é válida: R ( Thumano) ≤R ( Tfora). Isso significaR (.) atribui uma pontuação pior para T
mesmo que seja a trajetória superior. Você deve trabalhar para melhorarR (.) para melhor capturar as
humano
compensações que correspondem a um bom pouso.
Muitos aplicativos de aprendizado de máquina têm esse “padrão” de otimização de uma função de
pontuação aproximada Pontuação x(.) usando um algoritmo de busca aproximado. Às vezes, não há entrada
especificadax, então isso se reduz a apenas Score(.). Em nosso exemplo acima, a função de pontuação era a
função de recompensa Score( T)=R( T), e o algoritmo de otimização foi o algoritmo de aprendizagem por
reforço tentando executar uma boa trajetóriaT.
Uma diferença entre este e os exemplos anteriores é que, em vez de comparar com um resultado
“ótimo”, você estava comparando com o desempenho em nível humano.Thumano.Nós assumimosThumanoé
muito bom, mesmo que não seja o ideal. Em geral, contanto que você tenha algum y* (neste exemplo, T
humano
) que é uma saída superior ao desempenho do seu algoritmo de aprendizagem atual – mesmo que
não seja a saída “ideal” – então o teste de Verificação de Otimização pode indicar se é mais promissor
melhorar o algoritmo de otimização ou a função de pontuação.
Página 89
Rascunho de aprendizado de máquina
André Ng
De ponta a ponta
aprendizagem profunda
Página 90
Rascunho de aprendizado de máquina
André Ng
47 A ascensão da aprendizagem de ponta a ponta
Suponha que você queira construir um sistema para examinar análises de produtos on-line e informar
automaticamente se o redator gostou ou não daquele produto. Por exemplo, você espera reconhecer a seguinte
avaliação como altamente positiva:
Este é um ótimo esfregão!
e o seguinte como altamente negativo:
Este esfregão é de baixa qualidade - me arrependo de comprá-lo.
O problema de reconhecer opiniões positivas versus negativas é chamado de “classificação de sentimento”. Para
construir este sistema, você pode construir um “pipeline” de dois componentes:
1. Analisador: Sistema que anota o texto com informações que identificam as palavras mais
importantes.15Por exemplo, você pode usar o analisador para rotular todos os adjetivos e
substantivos. Você obteria, portanto, o seguinte texto anotado:
Este é um ótimoAdjetivoesfregãoSubstantivo!
2. Classificador de sentimento: um algoritmo de aprendizagem que toma como entrada o texto anotado
e prevê o sentimento geral. A anotação do analisador pode ajudar muito esse algoritmo de
aprendizado: ao dar aos adjetivos um peso maior, seu algoritmo será capaz de aprimorar
rapidamente as palavras importantes, como “ótimo”, e ignorar palavras menos importantes, como
“isto”.
Podemos visualizar seu “pipeline” de dois componentes da seguinte forma:
Tem havido uma tendência recente de substituição dos sistemas de pipeline por um único algoritmo de aprendizagem.
Umalgoritmo de aprendizagem ponta a pontapara esta tarefa simplesmente pegaria como entrada o texto original
e bruto “Este é um ótimo esfregão!”, e tentaria reconhecer diretamente o sentimento:
Um analisador fornece uma anotação do texto muito mais rica do que esta, mas esta descrição simplificada será suficiente
15
para explicar o aprendizado profundo de ponta a ponta.
Página 91
Rascunho de aprendizado de máquina
André Ng
As redes neurais são comumente usadas em sistemas de aprendizagem ponta a ponta. O termo “ponta a ponta” refere-se
ao fato de que estamos pedindo ao algoritmo de aprendizagem para ir diretamente da entrada para a saída desejada. Ou
seja, o algoritmo de aprendizagem conecta diretamente a “extremidade de entrada” do sistema à “extremidade de saída”.
Em problemas onde os dados são abundantes, os sistemas ponta a ponta têm sido notavelmente
bem-sucedidos. Mas nem sempre são uma boa escolha. Os próximos capítulos darão mais exemplos
de sistemas ponta a ponta, bem como conselhos sobre quando você deve ou não usá-los.
Página 92
Rascunho de aprendizado de máquina
André Ng
48 Mais exemplos de aprendizagem ponta a ponta
Suponha que você queira construir um sistema de reconhecimento de fala. Você pode construir um sistema com três
componentes:
Os componentes funcionam da seguinte forma:
1.Recursos de computação: extraia recursos projetados manualmente, como recursos MFCC (coeficientes
cepstrum de frequência Mel), que tentam capturar o conteúdo de um enunciado enquanto
desconsideram propriedades menos relevantes, como o tom do locutor.
2.Reconhecedor de fonemas: alguns linguistas acreditam que existem unidades básicas de som
chamadas “fonemas”. Por exemplo, o som inicial “k” em “keep” é o mesmo fonema que o som
“c” em “cake”. Este sistema tenta reconhecer os fonemas no clipe de áudio.
3.Reconhecedor final: pegue a sequência de fonemas reconhecidos e tente juntá-los
em uma transcrição de saída.
Em contraste, um sistema ponta a ponta pode inserir um clipe de áudio e tentar gerar a transcrição
diretamente:
Até agora, descrevemos apenas “pipelines” de aprendizado de máquina que são completamente lineares: a saída
é passada sequencialmente de um estágio para o próximo. Pipelines podem ser mais complexos. Por exemplo,
aqui está uma arquitetura simples para um carro autônomo:
Página 93
Rascunho de aprendizado de máquina
André Ng
Possui três componentes: um detecta outros carros usando as imagens da câmera; um detecta pedestres; em
seguida, um componente final planeja um caminho para nosso próprio carro que evite carros e pedestres.
Nem todos os componentes de um pipeline precisam ser aprendidos. Por exemplo, a literatura sobre “planejamento do
movimento do robô” possui numerosos algoritmos para a etapa final de planejamento do caminho do carro. Muitos desses
algoritmos não envolvem aprendizagem.
Em contraste, uma abordagem ponta a ponta pode tentar receber as entradas do sensor e gerar
diretamente a direção da direção:
Embora a aprendizagem ponta a ponta tenha tido muitos sucessos, nem sempre é a melhor abordagem. Por
exemplo, o reconhecimento de fala ponta a ponta funciona bem. Mas sou cético quanto ao aprendizado de ponta
a ponta para direção autônoma. Os próximos capítulos explicam o porquê.
Página 94
Rascunho de aprendizado de máquina
André Ng
49 Prós e contras da aprendizagem ponta a ponta
Considere o mesmo pipeline de fala do nosso exemplo anterior:
Muitas partes deste pipeline foram “projetadas manualmente”:
•
MFCCs são um conjunto de recursos de áudio projetados à mão. Embora forneçam um resumo
razoável da entrada de áudio, eles também simplificam o sinal de entrada, descartando algumas
informações.
•
Os fonemas são uma invenção dos linguistas. Eles são uma representação imperfeita dos sons da
fala. Na medida em que os fonemas são uma aproximação pobre da realidade, forçar um
algoritmo a usar uma representação de fonemas limitará o desempenho do sistema de fala.
Esses componentes projetados manualmente limitam o desempenho potencial do sistema de fala. No entanto,
permitir componentes projetados manualmente também traz algumas vantagens:
•
Os recursos do MFCC são robustos para algumas propriedades da fala que não afetam o conteúdo, como
o tom do orador. Assim, eles ajudam a simplificar o problema do algoritmo de aprendizagem.
•
Na medida em que os fonemas são uma representação razoável da fala, eles também podem ajudar o algoritmo
de aprendizagem a compreender os componentes sonoros básicos e, portanto, melhorar o seu desempenho.
Ter mais componentes projetados manualmente geralmente permite que um sistema de fala aprenda com menos
dados. O conhecimento projetado manualmente, capturado por MFCCs e fonemas, “suplementa” o conhecimento
que nosso algoritmo adquire a partir dos dados. Quando não temos muitos dados, esse conhecimento é útil.
Agora, considere o sistema ponta a ponta:
Página 95
Rascunho de aprendizado de máquina
André Ng
Este sistema carece de conhecimento de engenharia manual. Assim, quando o conjunto de treinamento é pequeno, ele pode
ter um desempenho pior do que o pipeline projetado manualmente.
No entanto, quando o conjunto de treinamento é grande, ele não é prejudicado pelas limitações de um MFCC ou de
uma representação baseada em fonemas. Se o algoritmo de aprendizagem for uma rede neural grande o suficiente
e for treinado com dados de treinamento suficientes, ele terá potencial para funcionar muito bem e talvez até se
aproximar da taxa de erro ideal.
Os sistemas de aprendizagem ponta a ponta tendem a funcionar bem quando há muitos dados rotulados para “ambas as
extremidades” – a extremidade de entrada e a extremidade de saída. Neste exemplo, exigimos um grande conjunto de
dados de pares (áudio, transcrição). Quando este tipo de dados não estiver disponível, aborde a aprendizagem de ponta a
ponta com muito cuidado.
Se você estiver trabalhando em um problema de aprendizado de máquina em que o conjunto de treinamento é muito
pequeno, a maior parte do conhecimento do seu algoritmo terá que vir do seu insight humano. Ou seja, dos seus
componentes de “engenharia manual”.
Se você optar por não usar um sistema ponta a ponta, terá que decidir quais são as etapas do seu
pipeline e como elas devem ser conectadas. Nos próximos capítulos, daremos algumas sugestões
para projetar tais pipelines.
Página 96
Rascunho de aprendizado de máquina
André Ng
50 Escolhendo componentes de pipeline:
Disponibilidade de dados
Ao construir um sistema de pipeline completo, quais são os bons candidatos para os componentes do
pipeline? A maneira como você projeta o pipeline terá um grande impacto no desempenho geral do
sistema. Um fator importante é se você pode coletar dados facilmente para treinar cada um dos
componentes.
Por exemplo, considere esta arquitetura de direção autônoma:
Você pode usar o aprendizado de máquina para detectar carros e pedestres. Além disso, não é difícil obter dados para
estes: existem numerosos conjuntos de dados de visão computacional com um grande número de carros e pedestres
rotulados. Você também pode usar crowdsourcing (como Amazon Mechanical Turk) para obter conjuntos de dados ainda
maiores. Portanto, é relativamente fácil obter dados de treinamento para construir um detector de automóveis e um
detector de pedestres.
Em contraste, considere uma abordagem pura de ponta a ponta:
Para treinar este sistema, precisaríamos de um grande conjunto de dados de pares (imagem, direção de
direção). É muito demorado e caro fazer com que as pessoas dirijam carros e registrem a direção da direção
para coletar esses dados. Você precisa de uma frota de carros especialmente instrumentados e de muita
condução para cobrir uma ampla gama de cenários possíveis. Isso torna um sistema ponta a ponta difícil de
treinar. É muito mais fácil obter um grande conjunto de dados de imagens rotuladas de carros ou pedestres.
De forma mais geral, se houver muitos dados disponíveis para treinar “módulos intermediários” de um pipeline
(como um detector de carros ou um detector de pedestres), então você pode considerar usar um
Página 97
Rascunho de aprendizado de máquina
André Ng
pipeline com vários estágios. Essa estrutura poderia ser superior porque você poderia usar todos os dados
disponíveis para treinar os módulos intermediários.
Até que mais dados de ponta a ponta estejam disponíveis, acredito que a abordagem não ponta a ponta é
significativamente mais promissora para a condução autônoma: sua arquitetura corresponde melhor à
disponibilidade de dados.
Página 98
Rascunho de aprendizado de máquina
André Ng
51 Escolhendo componentes do pipeline:
simplicidade da tarefa
Além da disponibilidade de dados, você também deve considerar um segundo fator ao escolher os componentes
de um pipeline: quão simples são as tarefas resolvidas pelos componentes individuais? Você deve tentar
escolher componentes de pipeline que sejam individualmente fáceis de construir ou aprender. Mas o que
significa um componente ser “fácil” de aprender?
Considere estas tarefas de aprendizado de máquina, listadas em ordem crescente de dificuldade:
1.Classificando se uma imagem está superexposta (como no exemplo acima)
2. Classificar se uma imagem foi tirada em ambiente interno ou externo
3. Classificando se uma imagem contém um gato
4. Classificar se uma imagem contém um gato com pelo preto e branco
5. Classificar se uma imagem contém um gato siamês (uma raça específica de gato)
Cada uma delas é uma tarefa de classificação de imagem binária: você precisa inserir uma imagem e gerar 0 ou
1. Mas as tarefas anteriores na lista parecem muito “mais fáceis” para uma rede neural aprender. Você poderá
aprender as tarefas mais fáceis com menos exemplos de treinamento.
O aprendizado de máquina ainda não possui uma boa definição formal do que torna uma tarefa fácil ou difícil.
Com o surgimento do aprendizado profundo e das redes neurais multicamadas, às vezes dizemos que uma
16
tarefa é “fácil” se puder ser realizada com menos etapas de computação (correspondendo a uma rede neural
superficial) e “difícil” se exigir mais computação. etapas (exigindo uma rede neural mais profunda). Mas estas
são definições informais.
A teoria da informação tem o conceito de “Complexidade de Kolmogorov”, que diz que a complexidade de uma função aprendida é o
16
comprimento do menor programa de computador que pode produzir essa função. No entanto, este conceito teórico encontrou poucas
aplicações práticas em IA. Veja também: https://en.wikipedia.org/wiki/Kolmogorov_complexity
Página 99
Rascunho de aprendizado de máquina
André Ng
Se você for capaz de realizar uma tarefa complexa e dividi-la em subtarefas mais simples, ao codificar
explicitamente as etapas das subtarefas, você estará fornecendo ao algoritmo conhecimento prévio que pode
ajudá-lo a aprender uma tarefa com mais eficiência.
Suponha que você esteja construindo um detector de gatos siameses. Esta é a arquitetura pura de ponta a ponta:
Por outro lado, você pode usar alternativamente um pipeline com duas etapas:
A primeira etapa (detector de gatos) detecta todos os gatos na imagem.
Página 100
Rascunho de aprendizado de máquina
André Ng
A segunda etapa então passa imagens recortadas de cada um dos gatos detectados (um de cada vez) para um
classificador de espécies de gatos e, finalmente, gera 1 se algum dos gatos detectados for um gato siamês.
Em comparação com o treinamento de um classificador puramente ponta a ponta usando apenas rótulos 0/1, cada um
dos dois componentes do pipeline – o detector de gatos e o classificador de raças de gatos – parece muito mais fácil de
aprender e exigirá significativamente menos dados.17
Se você estiver familiarizado com algoritmos práticos de detecção de objetos, reconhecerá que eles não aprendem apenas com rótulos
17
de imagem 0/1, mas são treinados com caixas delimitadoras fornecidas como parte dos dados de treinamento. Uma discussão sobre
eles está além do escopo deste capítulo. Veja a especialização Deep Learning no Coursera ( http://deeplearning.ai ) se quiser saber mais
sobre esses algoritmos.
Página 101
Rascunho de aprendizado de máquina
André Ng
Como exemplo final, vamos revisitar o pipeline de condução autônoma.
Ao usar esse pipeline, você informa ao algoritmo que existem três etapas principais para dirigir: (1) Detectar
outros carros, (2) Detectar pedestres e (3) Planejar um caminho para seu carro. Além disso, cada uma delas é uma
função relativamente mais simples – e pode, portanto, ser aprendida com menos dados – do que a abordagem
puramente ponta a ponta.
Em resumo, ao decidir quais devem ser os componentes de um pipeline, tente construir um pipeline onde cada
componente seja uma função relativamente “simples” que possa, portanto, ser aprendida apenas com uma
quantidade modesta de dados.
Página 102
Rascunho de aprendizado de máquina
André Ng
52 Aprendendo diretamente com resultados ricos
Um algoritmo de classificação de imagem inserirá uma imagemxe produza um número inteiro indicando a
categoria do objeto. Em vez disso, um algoritmo pode produzir uma frase inteira descrevendo a imagem?
Por exemplo:
x=
você= “Um ônibus amarelo dirigindo por uma estrada
com árvores verdes e grama verde no
fundo."
Aplicações tradicionais de aprendizagem supervisionada aprenderam uma funçãoh: X→ S, onde a saída você
geralmente era um número inteiro ou um número real. Por exemplo:
X
Problema
S
Classificação de spam
E-mail
Spam/Não é spam (0/1)
Reconhecimento de imagem
Imagem
Rótulo inteiro
Previsão do preço da habitação
Características da casa
Preço em dólares
Recomendação de produto
Recursos do produto e do usuário
Chance de compra
Um dos desenvolvimentos mais interessantes no aprendizado profundo de ponta a ponta é que ele nos permite
aprender diretamentevocêque são muito mais complexos que um número. No exemplo de legenda de imagem
acima, você pode fazer com que uma rede neural insira uma imagem ( x) e gerar diretamente uma legenda ( você).
Página 103
Rascunho de aprendizado de máquina
André Ng
Aqui estão mais exemplos:
X
Problema
S
Citação de exemplo
Legendagem de imagens
Imagem
Texto
Mao et al., 2014
Maquina de tradução
texto em inglês
Texto francês
Suskever et al., 2014
Resposta a perguntas
Par (Texto, Pergunta)
Texto de resposta
Bordes et al., 2015
Reconhecimento de fala
Áudio
Transcrição
Hannun et al., 2015
TTS
Características do texto
Áudio
van der Oord et al., 2016
Esta é uma tendência acelerada no aprendizado profundo: quando você tem os pares rotulados corretos
(entrada, saída), às vezes você pode aprender de ponta a ponta, mesmo quando a saída é uma frase, uma
imagem, áudio ou outras saídas que são mais ricas. do que um único número.
Página 104
Rascunho de aprendizado de máquina
André Ng
Erro de análise
por partes
Página 105
Rascunho de aprendizado de máquina
André Ng
53 Análise de erros por peças
Suponha que seu sistema seja criado usando um pipeline complexo de aprendizado de máquina e você
queira melhorar o desempenho do sistema. Qual parte do pipeline você deve trabalhar para melhorar?
Ao atribuir erros a partes específicas do pipeline, você pode decidir como priorizar seu trabalho.
Vamos usar nosso exemplo de classificador de gato siamês:
A primeira parte, o detector de gatos, detecta gatos e os recorta da imagem. A segunda parte, o
classificador da raça do gato, decide se é um gato siamês. É possível passar anos trabalhando na
melhoria de qualquer um desses dois componentes do pipeline. Como você decide em quais
componentes focar?
Ao realizaranálise de erros por partes , você pode tentar atribuir cada erro cometido pelo algoritmo a
uma (ou às vezes a ambas) das duas partes do pipeline. Por exemplo, o algoritmo classifica
erroneamente esta imagem como não contendo um gato siamês (y=0), embora o rótulo correto seja
y=1.
Vamos examinar manualmente o que as duas etapas do algoritmo fizeram. Suponha que o detector de gatos
siameses tenha detectado um gato da seguinte forma:
Página 106
Rascunho de aprendizado de máquina
André Ng
Isso significa que o classificador da raça do gato recebe a seguinte imagem:
O classificador de raça de gato classifica corretamente esta imagem como não contendo um gato siamês.
Assim, o classificador de raça de gato é inocente: foi dado a partir de uma pilha de pedras e gerou um rótulo
bastante razoável y = 0. Na verdade, um humano classificando a imagem recortada acima também teria
previsto y=0. Assim, você pode atribuir claramente esse erro ao detector de gatos.
Se, por outro lado, o detector de gatos tivesse gerado a seguinte caixa delimitadora:
então você concluiria que o detector de gatos fez seu trabalho e que o culpado foi o
classificador da raça do gato.
Digamos que você passe por 100 imagens de conjuntos de desenvolvedores classificadas incorretamente e descubra que 90 dos
erros são atribuíveis ao detector de gatos e apenas 10 erros são atribuíveis ao classificador de raça de gatos. Você pode concluir
com segurança que deve concentrar mais atenção no aprimoramento do detector de gatos.
Página 107
Rascunho de aprendizado de máquina
André Ng
Além disso, você também encontrou convenientemente 90 exemplos em que o detector de gatos gerou
caixas delimitadoras incorretas. Você pode usar esses 90 exemplos para realizar um nível mais profundo
de análise de erros no detector de gatos e ver como melhorá-lo.
Nossa descrição de como você atribui erro a uma parte do pipeline tem sido informal até agora: você
olha a saída de cada uma das partes e vê se consegue decidir qual delas cometeu um erro. Este
método informal pode ser tudo que você precisa. Mas no próximo capítulo você também verá uma
maneira mais formal de atribuir erros.
Página 108
Rascunho de aprendizado de máquina
André Ng
54 Atribuindo erro a uma parte
Vamos continuar usando este exemplo:
Suponha que o detector de gatos tenha gerado esta caixa delimitadora:
O classificador de raça de gato recebe, portanto, esta imagem recortada, e então gera
incorretamente y = 0, ou que não há gato na imagem.
O detector de gatos fez mal o seu trabalho. No entanto, um ser humano altamente qualificado ainda poderia
reconhecer o gato siamês pela imagem mal cortada. Então, atribuímos esse erro ao detector de gatos, ao
classificador de raças de gatos, ou a ambos? É ambíguo.
Se o número de casos ambíguos como esses for pequeno, você poderá tomar a decisão que desejar e
obter um resultado semelhante. Mas aqui está um teste mais formal que permite atribuir o erro de forma
mais definitiva a exatamente uma parte:
1. Substitua a saída do detector de gatos por uma caixa delimitadora etiquetada à mão.
Página 109
Rascunho de aprendizado de máquina
André Ng
2.Execute a imagem recortada correspondente através do classificador de raça de gato. Se o classificador de
raça de gato ainda o classificar incorretamente, atribua o erro ao classificador de raça de gato. Caso
contrário, atribua o erro ao detector de gatos.
Em outras palavras, execute um experimento no qual você fornece ao classificador de raça de gato uma entrada “perfeita”.
Existem dois casos:
● Caso 1: Mesmo com uma caixa delimitadora “perfeita”, o classificador de raça de gato ainda gera
incorretamente y = 0. Neste caso, claramente o culpado é o classificador da raça do gato.
● Caso 2: Dada uma caixa delimitadora “perfeita”, o classificador de raça agora produz corretamente
y=1. Isso mostra que se apenas o detector de gatos tivesse fornecido uma caixa delimitadora mais
perfeita, então a saída geral do sistema teria sido correta. Portanto, atribua o erro ao detector de
gatos.
Ao realizar esta análise nas imagens do conjunto de desenvolvimento classificadas incorretamente, agora
você pode atribuir inequivocamente cada erro a um componente. Isso permite estimar a fração de erros
devido a cada componente do pipeline e, portanto, decidir onde concentrar sua atenção.
Página 110
Rascunho de aprendizado de máquina
André Ng
55 Caso geral de atribuição de erro
Aqui estão as etapas gerais para atribuição de erros. Suponha que o pipeline tenha três etapas A, B
e C, onde A alimenta diretamente B e B alimenta diretamente C.
Para cada erro que o sistema comete no conjunto de desenvolvimento:
1. Tente modificar manualmente a saída de A para ser uma saída “perfeita” (por exemplo, a caixa
delimitadora “perfeita” para o gato) e execute o restante do pipeline B, C nesta saída. Se o algoritmo
agora fornecer uma saída correta, isso mostra que, se apenas A tivesse fornecido uma saída melhor, a
saída geral do algoritmo teria sido correta; portanto, você pode atribuir esse erro ao componente A.
Caso contrário, vá para a Etapa 2.
2. Tente modificar manualmente a saída de B para ser a saída “perfeita” para B. Se o algoritmo
agora fornecer uma saída correta, atribua o erro ao componente B. Caso contrário, vá para a
Etapa 3.
3. Atribua o erro ao componente C.
Vejamos um exemplo mais complexo:
Seu carro autônomo usa esse pipeline. Como você usa a análise de erros por partes para decidir
em quais componentes focar?
Você pode mapear os três componentes para A, B, C da seguinte forma:
R: Detectar carros
B: Detectar pedestres
C: Planeje o caminho para o carro
Página 111
Rascunho de aprendizado de máquina
André Ng
Seguindo o procedimento descrito acima, suponha que você teste seu carro em uma pista fechada e
encontre um caso em que o carro escolhe uma direção de direção mais irregular do que um motorista
experiente faria. No mundo da direção autônoma, esse caso é geralmente chamado decenário. Você então:
1. Tente modificar manualmente a saída de A (detecção de carros) para que seja uma saída “perfeita” (por
exemplo, entre manualmente e diga onde estão os outros carros). Execute o restante do pipeline B, C como
antes, mas permita que C (caminho do plano) use a saída agora perfeita de A. Se o algoritmo planeja agora
um caminho muito melhor para o carro, então isso mostra que, se apenas A tivesse dado um resultado
melhor, o resultado geral do algoritmo teria sido melhor; Assim, você pode atribuir esse erro ao
componente A. Caso contrário, vá para a Etapa 2.
2. Tente modificar manualmente a saída B (detectar pedestres) para ser a saída “perfeita” para
B. Se o algoritmo agora fornecer uma saída correta, atribua o erro ao componente
B. Caso contrário, vá para a Etapa 3.
3. Atribua o erro ao componente C.
Os componentes de um pipeline de ML devem ser ordenados de acordo com um gráfico acíclico direcionado
(DAG), o que significa que você deve ser capaz de calculá-los em uma ordem fixa da esquerda para a direita,
e os componentes posteriores devem depender apenas das saídas dos componentes anteriores. Contanto
que o mapeamento dos componentes para a ordem A-> B-> C siga a ordem DAG, a análise de erros estará
correta. Você pode obter resultados ligeiramente diferentes se trocar A e B:
R: Detectar pedestres (anteriormenteDetectar carros) B:
Detectar carros (anteriormenteDetectar pedestres) C: Planeje o
caminho para o carro
Mas os resultados desta análise ainda seriam válidos e dariam uma boa orientação sobre onde concentrar a
sua atenção.
Página 112
Rascunho de aprendizado de máquina
André Ng
56 Análise de erros por partes e comparação com o
desempenho em nível humano
Realizar análise de erros em um algoritmo de aprendizagem é como usar a ciência de dados para analisar os
erros de um sistema de ML a fim de obter insights sobre o que fazer a seguir. Em sua forma mais básica, a
análise de erros por partes nos diz qual(is) desempenho(s) de componente(s) vale(m) o maior esforço para
melhorar.
Digamos que você tenha um conjunto de dados sobre clientes que compram coisas em um site. Um cientista
de dados pode ter muitas maneiras diferentes de analisar os dados. Ela pode tirar muitas conclusões
diferentes sobre se o site deve aumentar os preços, sobre o valor vitalício dos clientes adquiridos através de
diferentes campanhas de marketing e assim por diante. Não existe uma maneira “certa” de analisar um
conjunto de dados e há muitos insights úteis possíveis que podem ser obtidos. Da mesma forma, não existe
uma maneira “certa” de realizar a análise de erros. Nestes capítulos, você aprendeu muitos dos padrões de
design mais comuns para obter insights úteis sobre seu sistema de ML, mas também deve se sentir à vontade
para experimentar outras maneiras de analisar erros.
Vamos voltar ao aplicativo de direção autônoma, onde um algoritmo de detecção de carros fornece a localização
(e talvez a velocidade) dos carros próximos, um algoritmo de detecção de pedestres fornece a localização dos
pedestres próximos e essas duas saídas são finalmente usadas para planejar um caminho. para o carro.
Para depurar esse pipeline, em vez de seguir rigorosamente o procedimento visto no capítulo
anterior, você poderia perguntar de maneira mais informal:
1. Qual é a distância entre o componente Detectar carros e o desempenho de nível humano na detecção de
carros?
2. Qual é a distância entre o componente Detectar pedestres e o desempenho em nível humano?
Página 113
Rascunho de aprendizado de máquina
André Ng
3. Qual é a distância entre o desempenho geral do sistema e o desempenho a nível humano? Aqui, o desempenho
no nível humano pressupõe que o ser humano tenha que planejar um caminho para o carro, considerando
apenas as saídas dos dois componentes anteriores do pipeline (em vez do acesso às imagens da câmera). Em
outras palavras, como o desempenho do componente do caminho do plano se compara ao desempenho de
um ser humano, quando o ser humano recebe apenas a mesma entrada?
Se você achar que um dos componentes está longe do desempenho de nível humano, agora você tem um bom
argumento para se concentrar na melhoria do desempenho desse componente.
Muitos processos de análise de erros funcionam melhor quando tentamos automatizar algo que os humanos
podem fazer e, assim, podemos comparar o desempenho em nível humano. A maioria dos nossos exemplos
anteriores tinha esta suposição implícita. Se você estiver construindo um sistema de ML em que o resultado final ou
alguns dos componentes intermediários façam coisas que nem mesmo os humanos conseguem fazer bem, alguns
desses procedimentos não se aplicarão.
Esta é outra vantagem de trabalhar em problemas que humanos podem resolver – você tem ferramentas de
análise de erros mais poderosas e, assim, pode priorizar o trabalho da sua equipe com mais eficiência.
Página 114
Rascunho de aprendizado de máquina
André Ng
57 Identificando um pipeline de ML falho
E se cada componente individual do seu pipeline de ML estiver apresentando desempenho de nível
humano ou quase humano, mas o pipeline geral estiver muito aquém do nível humano? Isso
geralmente significa que o pipeline tem falhas e precisa ser redesenhado. A análise de erros
também pode ajudá-lo a entender se você precisa redesenhar seu pipeline.
No capítulo anterior, colocamos a questão de saber se o desempenho de cada um dos três componentes
está no nível humano. Suponha que a resposta a todas as três perguntas seja sim. Aquilo é:
1. O componente Detectar carros tem desempenho (aproximadamente) de nível humano para detectar carros a
partir das imagens da câmera.
2. O componente Detectar pedestres tem desempenho (aproximadamente) de nível humano para
detectar carros a partir das imagens da câmera.
3.Comparado a um ser humano que precisa planejar um caminho para o carro com base apenas nas
saídas dos dois componentes do pipeline anteriores (em vez do acesso às imagens da câmera), o
desempenho do componente Caminho do plano está em um nível semelhante.
No entanto, o desempenho geral do seu carro autônomo está significativamente abaixo do desempenho do nível
humano. Ou seja, os humanos com acesso às imagens da câmera podem planejar caminhos significativamente
melhores para o carro. Que conclusão você pode tirar?
A única conclusão possível é que o pipeline de ML é falho. Nesse caso, o componente Planejar caminho está
funcionando tão bem quanto podedadas as suas entradas, mas as entradas não contêm informações suficientes.
Você deve se perguntar quais outras informações, além das saídas dos dois componentes anteriores do pipeline,
são necessárias para planejar muito bem os caminhos para um carro dirigir. Em outras palavras, de que outras
informações um motorista humano qualificado precisa?
Página 115
Rascunho de aprendizado de máquina
André Ng
Por exemplo, suponha que você perceba que um motorista humano também precisa saber a localização das
marcações da pista. Isso sugere que você deve redesenhar o pipeline da seguinte maneira18:
Em última análise, se você não acha que seu pipeline como um todo alcançará desempenho de nível humano,
mesmo que cada componente individual tenha desempenho de nível humano (lembre-se de que você está
comparando a um ser humano que recebe a mesma informação que o componente), então o pipeline está falho e
deve ser redesenhado.
18No exemplo de direção autônoma acima, em teoria, esse problema poderia ser resolvido alimentando também a imagem bruta da câmera no
componente de planejamento. No entanto, isso violaria o princípio de design de “simplicidade de tarefa” descrito no Capítulo 51, porque o módulo
de planejamento de caminho agora precisa inserir uma imagem bruta e tem uma tarefa muito complexa para resolver. É por isso que adicionar um
componente Detectar marcações de pista é uma escolha melhor - ele ajuda a obter informações importantes e anteriormente ausentes sobre
marcações de pista para o módulo de planejamento de caminho, mas evita tornar qualquer módulo específico excessivamente complexo para
construir/treinar.
Página 116
Rascunho de aprendizado de máquina
André Ng
Conclusão
Página 117
Rascunho de aprendizado de máquina
André Ng
58 Construindo uma equipe de super-heróis - Faça com que
seus companheiros leiam isto
Parabéns por terminar este livro!
No Capítulo 2, falamos sobre como este livro pode ajudá-lo a se tornar o super-herói de sua
equipe.
A única coisa melhor do que ser um super-herói é fazer parte de uma equipe de super-heróis. Espero que
você dê cópias deste livro para seus amigos e colegas de equipe e ajude a criar outros super-heróis!
Página 118
Rascunho de aprendizado de máquina
André Ng
Download