Aprendizado de máquina e desenvolvimento móvel

Como regra, um cientista de dados tem uma vaga idéia de desenvolvimento móvel, e os desenvolvedores de aplicativos móveis não se envolvem no aprendizado de máquina. Andrei Volodin , engenheiro da Prisma AI, mora na junção desses dois mundos e disse ao podcast do Podlodka o que é.

Aproveitando o momento, Stas Tsyganov (Tutu.ru) e Gleb Novik (Tinkoff Bank), em primeiro lugar, deixaram claro de uma vez por todas que ninguém está treinando redes neurais em dispositivos móveis . E também descobri que no aprendizado de máquina, infelizmente, não há mágicos; discutiram técnicas modernas como aprendizado profundo, aprendizado por reforço e redes de cápsulas.

Como resultado, como Podlodka é um programa de áudio sobre desenvolvimento móvel, eles foram até ela e descobriram como tudo funciona em dispositivos móveis.

A seguir, a versão em texto desta conversa e a entrada do podcast está aqui .

Sobre Andrei Volodin, cocos2d e Fiber2d


GLEB: Por favor, conte-nos um pouco sobre você. O que esta fazendo

ANDREW: Sou desenvolvedor móvel, mas faço muito pouco no desenvolvimento clássico do iOS. Minhas responsabilidades praticamente não incluem trabalhar com o UIKit. Eu sou o desenvolvedor principal do popular mecanismo de jogo Cocos2d no GitHub. No momento, sou engenheiro de GPU na Prisma. Minhas responsabilidades incluem a integração de redes neurais em placas de vídeo e o trabalho com realidade aumentada, em particular, com o kit VR.

GLEB: Legal! Especialmente interessante sobre o cocos2d. Até onde eu sei, esse quadro apareceu há muito tempo.

ANDREW: Sim, por volta de 2009.

GLEB: Você usou desde o começo?

ANDREW: Não. Eu me tornei o principal desenvolvedor apenas em 2015. Antes disso, eu era um colaborador do Core. Apportable, que financiou o desenvolvimento, faliu, as pessoas que receberam o dinheiro para o desenvolvimento foram embora, e eu me tornei o líder. Agora sou administrador do fórum, ajudando os novatos com alguns problemas, as últimas versões foram lançadas por mim. Ou seja, eu sou o principal mantenedor no momento.

GLEB: Mas o cocos2d ainda está vivo?

ANDREW: Provavelmente não, principalmente devido ao fato de estar escrito em Objective-C, e há muito legado. Por exemplo, eu apoio meus brinquedos antigos escritos com seu uso, outros desenvolvedores - meus projetos legados. Dos motores atuais, você pode ouvir sobre o Fiber2d. Este também é o meu projeto.

O Fiber2d é o primeiro mecanismo de jogo Swift a ser portado para o Android. Lançamos um jogo escrito inteiramente em Swift no iOS e no Android. Também sobre isso pode ser encontrado no Github. Este é o próximo marco no desenvolvimento da comunidade cocos2d.

Sobre o aprendizado de máquina nos dedos


GLEB: Vamos começar a avançar gradualmente em direção ao nosso tópico hoje. Hoje falaremos sobre aprendizado de máquina e tudo ao seu redor - conectado e desconectado com telefones celulares. Primeiro, vamos descobrir do que se trata o aprendizado de máquina. Vamos tentar explicar o máximo possível nos dedos, porque nem todos os desenvolvedores de dispositivos móveis estão familiarizados com isso. Você pode nos dizer o que é?

ANDREW: Com base na definição clássica, o aprendizado de máquina é uma pesquisa de padrões em um conjunto de dados . Um exemplo clássico são as redes neurais, que agora são muito populares. Entre eles, existem redes relacionadas à classificação. Um exemplo simples da tarefa de classificação é determinar o que é mostrado na figura: existe algum tipo de imagem e queremos entender o que é: um cachorro, um gato ou outra coisa.

Escrever isso com código padrão é muito difícil, porque não está claro como fazer isso. Portanto, modelos matemáticos são usados, chamados de aprendizado de máquina. Eles se baseiam no fato de que certas leis são extraídas de um grande número de exemplos e, usando essas leis, é possível fazer previsões com certa precisão em novos exemplos que não estavam no conjunto de dados original. Isto é, em poucas palavras.

GLEB: Conseqüentemente, está aprendendo uma história sobre a mudança de um modelo usando um conjunto de dados de treinamento?

ANDREW: Durante o treinamento, o modelo, em regra, permanece constante. Ou seja, você escolhe algum tipo de arquitetura e aprende. Se tomarmos, por exemplo, redes neurais, que não se limitam a todo aprendizado de máquina, inicialmente, grosso modo, todos os pesos são zeros ou outros valores idênticos. À medida que alimentamos nossos dados para a estrutura de aprendizado, os pesos mudam um pouco a cada novo exemplo e, no final, são despejados em uma máquina treinada.

STAS: O objetivo final deste modelo é fornecer rapidamente alguns dados que não são da amostra de treinamento, obter o resultado rapidamente?

ANDREW: Sim, mas não se trata apenas de velocidade. Por exemplo, algumas tarefas não puderam ser resolvidas de maneira diferente - digamos, o exemplo de classificação é muito trivial. Antes do lançamento das redes de classificação, não havia soluções para entender o que é mostrado na figura. Ou seja, em algumas áreas isso é uma tecnologia diretamente revolucionária.

Sobre trabalho manual e aprendizado de máquina


STAS: Recentemente, contei à minha avó o que é aprendizado de máquina. Ela inicialmente pensou que o aprendizado de máquina é quando uma máquina ensina alguém. Comecei a explicar a ela que, de fato, estamos tentando ensinar a máquina para que ela execute algum tipo de tarefa.

Apresentei os problemas que o aprendizado de máquina resolve. A maioria deles, antes do acionamento do aprendizado de máquina, era realizada por pessoas. Além disso, esse trabalho não foi considerado pouco qualificado, mas não muito tecnológico, digamos assim. Essas são as operações mais simples que uma pessoa pode executar em grande parte. Você consegue imaginar isso?

ANDREW: Isso também pode ser dito. De fato, agora esse trabalho ainda é necessário, mas apenas para preparar conjuntos de dados para o aprendizado de máquina. De fato, em algumas áreas, por exemplo, na medicina, o aprendizado de máquina torna possível suavizar um pouco as tarefas rotineiras e facilitar um pouco o processo. Mas nem sempre. Eu não diria que o aprendizado de máquina se concentra em facilitar o trabalho burro. Às vezes, faz um trabalho bastante intelectual.

STAS: Você pode dar um exemplo desse trabalho intelectual?

ANDREW: Por exemplo, nosso aplicativo Prisma - muitos provavelmente o usaram (isso não é um anúncio!) Não se pode dizer que esse é um trabalho intelectual e as pessoas geralmente redesenham a imagem em imagens, e a rede neural faz isso - você fornece uma imagem normal e obtém algo novo . Além disso, pode-se argumentar se é bonito ou não, mas o fato é indiscutível de que é algo que uma pessoa não pode fazer ou leva uma quantidade enorme de tempo.

Sobre a história


GLEB: Sim, acho que este é um ótimo exemplo. Provavelmente vale a pena dar uma olhada na história. Há quanto tempo esse tópico é desenvolvido? Parece-me que quase desde o início da programação, há pelo menos muito, muito tempo.

ANDREW: Sim, em geral, a maioria dos conceitos agora aplicados já foi desenvolvida nos anos 90. Naturalmente, novos algoritmos surgiram e a qualidade dos algoritmos então melhorou. E embora haja a sensação de que um interesse repentino no aprendizado de máquina surgiu do nada, na verdade, as pessoas se interessam por isso há muito tempo.

O progresso nos estágios iniciais deveu-se ao fato de serem modelos matemáticos, e a matemática há muito se estabiliza em termos de descobertas.

A explosão atual se deve apenas ao fato de as capacidades de ferro ao nosso redor terem aumentado significativamente , principalmente devido ao uso de placas de vídeo. Devido ao fato de hoje sermos capazes de fazer uma computação paralela enorme, surgiram novas tecnologias - aprendizado de máquina, criptomoeda etc.

Na maioria das vezes, o interesse atual e geralmente a onda atual estão relacionados ao fato de que isso só se tornou possível . Esses cálculos poderiam ser feitos mais cedo, mas catastroficamente longos. Agora leva um tempo bastante razoável e todos começaram a usá-lo.

Sobre ferro


STAS: Atualmente, estou fazendo um curso e, inclusive, preciso treinar todos os tipos de modelos. Treino alguns deles no meu MacBook em funcionamento. Sim, em alguns casos, você precisa esperar, talvez 5 minutos, e os modelos não são os melhores, a precisão média é de cerca de 85%, mas o principal é que eles funcionam. É claro que na batalha você deseja ter essa porcentagem melhor e talvez para produção não seja muito adequado.

ANDREW: Sim, esses modelos provavelmente não são muito interessantes. Provavelmente, isso se deve às previsões mais simples e assim por diante. Na realidade, por exemplo, uma amostra de treinamento pode pesar 90 GB e tudo isso pode levar uma semana para aprender. Empresas como a Nvidia se orgulham de lançar uma nova placa gráfica Tesla especial e você pode treinar o Inception V3 em 24 horas! Isso é considerado um avanço direto, porque antes levava várias semanas.

Quanto mais conjuntos de dados e mais complexa a estrutura do modelo, mais tempo leva para aprender . Mas o desempenho não é o único problema. Em princípio, se você realmente precisar, pode esperar um mês. O problema está relacionado à inferência - como aplicar esta rede neural posteriormente. É necessário que durante o seu uso também mostre bons resultados em termos de desempenho.

STAS: Porque, em particular, quero que tudo funcione em dispositivos móveis e trabalhe rapidamente.

ANDREW: Eu não acho que inicialmente ele começou a se desenvolver com o objetivo de trabalhar em aplicativos móveis. Esse boom começou em algum lugar em 2011 e, mesmo assim, essas foram as soluções de desktop. Mas agora o verdadeiro interesse da comunidade é apoiado pelo fato de que nos iPhones, inclusive, tornou-se possível lançar redes que funcionam em tempo real.

GLEB: Stas, você disse que o resultado final depende da potência da sua placa de vídeo e do sistema em geral. Ou seja, não funciona de outra maneira?

ANDREW: Não é assim, mas não tenho certeza de que o modelo será treinado em uma máquina de baixa potência.

GLEB: A propósito, lembro-me de cinco anos atrás, quando houve apenas um boom nas redes neurais, nossos professores disseram que tudo que é novo é apenas um bom e velho esquecimento. Tudo já estava nos anos 70 e 80 e não deu certo, desde então não deu certo. Provavelmente, eles ainda estavam errados.

ANDREW: Sim. Para algumas tarefas, o aprendizado de máquina agora é muito difícil. Objetivamente, eles podem funcionar.

Sobre o aprendizado profundo


GLEB: Existe uma coisa tão na moda - aprendizado profundo. Qual é a diferença do que falamos sobre isso?

ANDREW: Eu não diria que existem diferenças. Existem apenas alguns subconjuntos de aprendizado de máquina, e há um grande número deles. Você precisa entender que o que é chamado de aprendizado profundo é a parte do aprendizado de máquina que é comumente referida como redes neurais . É chamado de profundo porque existem muitas camadas nas redes neurais e, quanto mais camadas, mais profunda é a rede neural. Disto veio o nome.

Mas existem outros tipos de aprendizado de máquina. Por exemplo, o aprendizado de máquina baseado em árvore tem sido usado com sucesso no rastreamento de faces até agora, porque é muito mais rápido que os neurônios. Também é usado para classificação, exibição de anúncios e muito mais.

Ou seja, o aprendizado profundo não é outra coisa. Na verdade, esse é um subconjunto de aprendizado de máquina que inclui uma tonelada de tudo. Apenas o aprendizado profundo tornou-se o mais popular hoje.

Sobre a teoria das redes neurais


STAS: Eu queria falar um pouco sobre a teoria das redes neurais, vou tentar mais facilmente. Você disse que eles têm muitas camadas. Em teoria, se tivermos uma camada e houver alguns objetos localizados no plano, com a ajuda de uma camada, podemos realmente dividir esse plano em duas partes, certo?

ANDREW: Não, na verdade não.

STAS: O que nos dá um grande número de camadas, se nos dedos?

ANDREW: O que é uma rede neural? Vamos esclarecer. Esta é apenas uma função matemática que aceita um conjunto de números como entrada e também fornece um conjunto de números como saída - é tudo.

O que tem dentro? Agora, as mais populares são as redes convolucionais nas quais a convolução ocorre - existem simplesmente muitas multiplicações de matrizes, os resultados são somados, essas operações são realizadas em cada camada. Além disso, entre as camadas, há a chamada ativação, que apenas permite que as redes neurais sejam profundas.

Como a combinação de transformações lineares é uma transformação linear, após fazer 10 camadas lineares, elas ainda podem ser representadas como uma camada linear. Para que as camadas não colapsem, entre elas existem certas ações matemáticas que tornam a função não linear. Isso é necessário para aumentar o número de parâmetros.

Grosso modo, uma rede neural é apenas uma enorme variedade de números, que de alguma forma se aplicam aos nossos dados, por exemplo, a uma imagem. Mas uma imagem - também um conjunto de números - é apenas uma série de pixels. Quando treinamos a rede, consideramos, por exemplo, 15 milhões de parâmetros (cada número é um parâmetro separado), que pode ser ligeiramente deslocado um pouco para a esquerda, um pouco para a direita com a ajuda de algumas heurísticas. Graças a um número tão grande de parâmetros, são obtidos resultados interessantes.

É necessário um treinamento aprofundado precisamente para que haja muitos desses parâmetros e tudo não se reduz a uma camada.

GLEB: Parece mais ou menos claro.

ANDREW: O aprendizado profundo é um subconjunto do aprendizado de máquina. Mas, por alguma razão, surgiu o hype sobre esse assunto - especialmente há algum tempo, devido a todas as falhas, acho que você pode ouvir sobre o aprendizado profundo. Não sei se é justificado ou não.

GLEB: Eu acho que essa popularidade se deve ao fato de dar resultados impressionantes.

Sobre tarefas


STAS: Com a ajuda de redes neurais, você pode resolver a maioria dos problemas de aprendizado de máquina, certo?

ANDREW: Sim.

STAS: Então, vamos falar sobre quais tarefas podem ser resolvidas usando métodos de aprendizado de máquina?

ANDREW: Na verdade, esse é um tópico delicado, porque, na realidade, você precisa parar de idealizar e romantizar o que está acontecendo. Como eu disse, não há inteligência artificial lá. Este é um modelo puramente matemático e uma função matemática que multiplica algo, etc.

Pelo lado, parece que agora o aprendizado de máquina parou um pouco em determinadas categorias de tarefas. Por exemplo, classificação (um exemplo sobre o qual falamos no início), rastreamento de objetos e sua segmentação. O último está no aplicativo Sticky AI - ele seleciona uma pessoa e o fundo é removido. Também existe segmentação médica biológica quando, por exemplo, são detectadas células cancerígenas. Existem redes generativas que aprendem com números aleatórios e, em seguida, podem criar algo novo. Existem tarefas de transferência de estilo e outras.

No momento, porém, não há plataforma e infraestrutura convenientes para o uso de aprendizado de máquina. Por exemplo, você tem um problema que você, como pessoa, pode resolver facilmente, mas como programador, você não pode resolvê-lo devido à sua complexidade e porque não pode simplesmente escrever um algoritmo imperativo. Mas, ao mesmo tempo, também não é possível treinar uma rede neural principalmente porque há um problema com a falta de dados. Para treinar um neurônio, você precisa de grandes conjuntos de dados com muitos exemplos, além de muito formalizados, descritos em um determinado regulamento, etc. Além disso, você precisa da arquitetura dessa rede neural.

Ou seja, primeiro você precisa formalizar os dados de entrada na forma de números , criar a arquitetura do modelo e formalizar os dados de saída na forma de números, de alguma forma interpretá-los. Para fazer isso, você precisa de um aparato matemático bastante poderoso e, em geral, de um entendimento de como tudo funciona. Portanto, agora me parece que o uso de neurônios fora de empresas especializadas como a nossa está diminuindo um pouco.

Algumas tarefas que não foram resolvidas antes, os neurônios aprenderam a resolver muito bem. Mas não existe tal coisa que os neurônios venham e resolvam todo o espectro de problemas não resolvidos.

GLEB: Em quais áreas você vê problemas globais para os quais as redes neurais geralmente não são adequadas?

ANDREW: É difícil responder imediatamente. Estamos diante de tarefas nas quais estamos trabalhando e nas quais não é possível treinar uma rede neural. Por exemplo, agora a indústria de jogos está muito interessada em aprender, e até existem alguns neurônios que possuem inteligência artificial. Mas, por exemplo, isso ainda não é usado em jogos AAA, porque, mesmo assim, no momento é impossível treinar a inteligência artificial de um soldado abstrato para se comportar como uma pessoa, para que pareça natural. É dificil

Sobre o Dota


STAS: Você já ouviu falar que a inteligência artificial já está ganhando no Dota?

ANDREW: Sim, mas ainda é um pouco diferente. Dota é um jogo bastante matemático, pode ser descrito. Não quero ofender ninguém, mas isso é, de fato, como damas - o jogo é o mesmo. Existem certas regras, e você apenas joga com elas.

Mas, ao mesmo tempo, ainda há dificuldades para criar algum tipo de comportamento natural, associado principalmente a uma pequena quantidade de dados e a um pequeno número de engenheiros que podem fazer isso.

Por exemplo, no Google, os engenheiros estão usando redes neurais para treinar um modelo humano 3D a andar - apenas para fazê-lo se mover. Sempre parece horrível, as pessoas não andam assim.

Sobre o TensorFlow


STAS: Você disse que agora, de fato, não há uma maneira fácil e barata de resolver problemas de aprendizado de máquina sem entender o aprendizado de máquina. De qualquer forma, acontece que isso deve ser atrapalhado. Eu gostaria de saber sobre o TensorFlow. Parece que o Google está tentando garantir que mesmo pessoas que não sejam muito versadas nisso e que não tenham um histórico muito grande possam resolver alguns problemas simples. Diga-me o que é o TensorFlow e como você acha que é possível?

ANDREW: Venha em ordem. TensorFlow na verdade não é a coisa mais fácil de todas . Essa é uma das mais conhecidas estruturas de aprendizado - uma estrutura de aprendizado de uso geral, não necessariamente um neurônio. Essa não é a estrutura de nível mais alto disponível. Há, por exemplo, Keras, que é uma abstração de nível superior no TensorFlow. Lá você pode fazer o mesmo com muito menos código.

Tarefas típicas são resolvidas de maneira simples, porque, em particular, o Github já está cheio de exemplos e repositórios. Digamos, se sua empresa faz uma pesquisa de imagens por uma livraria, então, em princípio, está tudo bem com você. Você acessa o Github, há exemplos de como você pode tirar recursos da imagem, escrever uma pesquisa por recursos - está pronto!

De fato, este é o caso de um grande número de tarefas. , . - , , , , , , TensorFlow — . , .

: , Google , ?

: , , , . , , , . , , .



: , . ? -, .

: . — « , , ». , .

: , , , , . ? , , 15 - iOS , - . , . , .

: — , , - . — — . . , , R&D , : «, !» — - , , , 0,5%: «, , !» . , .

: , , - , , . ? . , — , 70%. , , . , . , , .

: , , , . , . , - , . .

: , .



: , . .



: , ? , , , — ?

: , , . , .

-, , . , computer science. , .

. , 500 Python, . . . , . , , .

, . - , . , .

: , Python - , , C++? , .

: , . - learning , , TensorFlow, TensorFlow. ,

— , TensorFlow. TensorFlow — 1 — , , .

. , iOS . , learning , , Caffe, Torch, TensorFlow ., .

, , , . R&D - , . . () : « !» — , . C++.

:

  • , . , .
  • .



: . , , .

: , ? , ?

: , . , — . : , , : «, , — », - . , , -, - . , . .

. , , , .

: Google , Google Street Maps. , .

: , - .

Data Scientist


: . , — , , ?

: , .

: , , , , data scientist'. , - . . , , . — !

, . , -, . .

: hype train.

: , , data scientist . , .

: , . - data scientist'?

: . , . , , , Git- . Data scientist - , . , code review, unit- — . , .

: , , .

: , , - , , Kaffe 2, PyTorch — ! : « Data scientist TensorFlow».

GPU-


. , , , Swift, UI-kit, . , , .

, - , . , . , , . enterprise.

- , , , . , , . , .

: , . GPU - . , — . , Junior GPU . , , .



: — .

: , ?

: , , - .

: — ?

: , , -, - .

: , ?

: . , , , , . Macbook Air. — - , , .

, Nvidia Titan , . , .



: ? , Nvidia , . , , . ?

: print , . NIPS, , , . , , . - , — , .

. ONNX , . . , . , , . , - , . .



: , . , , , ?

: , . , . , . , — , ..

, . , . — , , . . , , . , , .

reinforcement training


: . , , , , AlphaGo. , , , reinforcement training.

: Reinforcement training — . , . , , , . , , . , . Reinforcement training , , , , : « !»

, AlphaGo — , . , . , , . , . AlphaGo , reinforcement training, , .

, , , , .

: , 10 170 — . , AlphaGo . , . , , , . — , - !

, , , . , , . , !



STAS: Quero perguntar sobre algoritmos genéticos. Segundo a descrição, parece que os algoritmos genéticos também podem ser atribuídos ao aprendizado por reforço. Como eu os imagino, há uma geração, pegamos cada sujeito em uma geração, realizamos alguma tarefa, avaliamos suas ações e, a partir dessas estimativas, selecionamos as melhores. Em seguida, cruzamos suas propriedades específicas, criamos uma nova geração, adicionamos um pouco de mutação e agora temos uma nova geração. E repetimos essas operações, tentando aumentar a utilidade final de cada membro específico desta geração. Isso parece fazer sentido. Isso é considerado treinamento de reforço ou não?

ANDREW: Não, os algoritmos genéticos ainda são um pouco diferentes.

STAS: Eles se relacionam com o aprendizado de máquina?

ANDREW: Eu não diria isso. Não aceito agora, mas passamos pelos algoritmos genéticos da universidade, como todo mundo, e parece-me que isso é um pouco mais simples e mais desregulado ou algo assim - em suma, imperativo. Ou seja, é sabido antecipadamente que o que será inserido, será produzido. No aprendizado de máquina, no entanto, as coisas são um pouco diferentes - há alguma probabilidade, precisão de previsões e tudo nesse espírito.

Talvez eu seja corrigido por pessoas que entendem melhor a terminologia do que eu, mas do alto da minha cabeça eu diria que não.

STAS: Acontece que algoritmos genéticos não são usados ​​para resolver os problemas mais reais?

ANDREW: Sim, eles são principalmente mais algorítmicos e, na prática, raramente os encontrei.

Sobre redes de cápsulas


GLEB: Há outro subconjunto de aprendizado de máquina - as chamadas redes de cápsulas. Novamente, não vamos muito fundo. Diga-me em poucas palavras o que é e por que existe essa tendência agora?

ANDREW: Este é realmente um tópico super novo, com apenas alguns meses de idade. Jeffrey Hinton divulgou um artigo e disse que as redes convolucionais atuais são um caminho para lugar nenhum, e oferecemos uma nova visão de como isso se desenvolverá. A comunidade aceitou essa afirmação ambiguamente e dividiu-se em dois campos: alguns dizem que é um exagero, outros - uma grande coisa e tudo isso.

Mas se você explica diretamente, como funcionam as redes de convolução? Tomemos, por exemplo, neurônios que trabalham com imagens. Há uma convolução - uma coluna de matrizes que percorre a imagem com algum passo, como se a estivesse digitalizando. A cada iteração de tal etapa, toda essa convolução é aplicada a essa peça, e cada convolução se transforma em um novo pixel condicional, mas com uma dimensão muito maior, essa operação é repetida para todas as grades.

Mas o problema das redes convolucionais é que todos os dados que chegam à primeira camada chegam ao fim - talvez não na íntegra, mas todos afetam e atingem o estágio final. Grosso modo, se você precisar determinar alguma parte da imagem, por exemplo, um gato, não precisará digitalizar a imagem inteira. Em algum momento, é suficiente localizar a zona onde o gato provavelmente está localizado e considerá-lo apenas como uma pessoa.

É assim que as redes de cápsulas funcionam. Não me comprometerei a explicar habilmente o interior deles, mas pelo que entendi: há certas árvores dentro das redes de cápsulas e cada cápsula subsequente recebe apenas os dados relevantes para a entrada. Ou seja, através deles não passa tudo o que aceitamos inicialmente para a entrada e, a cada nova camada (não sei como isso pode ser dito na terminologia de redes capsulares), apenas os dados realmente necessários são processados ​​- apenas dados importantes . Essa é a principal diferença entre redes convolucionais e capsulares.

GLEB: Parece interessante, mas eu não entendo direito - são apenas as imagens em questão?

ANDREW: Não, é isso. Eu usei as imagens apenas para explicar. A idéia principal é a seguinte: não vamos direcionar todos os dados e todos os recursos, mas apenas aqueles que são relevantes para a próxima camada.

Mais sobre jogos


STAS: Ouvi dizer que depois que os caras do AlphaGo vão derrotar todos no StarCraft?

ANDREW: Forçado a decepcioná-lo, mas eu realmente não sigo isso. Não é que o eSports tenha sido interessante para mim, mas já está ficando claro o que o futuro está. Por exemplo, já existem startups treinadas para jogar Dota. Eles, como personal trainer, analisam como você joga e dizem onde você não é bom o suficiente, eles têm seus próprios dados treinados em partidas de esportes eletrônicos. Existem startups de apostas que prevêem quem vencerá e muito mais.

Muitas pessoas estão trabalhando nesta área agora, principalmente porque muito dinheiro está girando nela. Mas, pessoalmente, isso é completamente desinteressante para mim, então não acompanho as notícias e tendências, infelizmente.

STAS: O que você acha que é a dificuldade de criar uma boa inteligência artificial especificamente para jogos estratégicos? Entendo corretamente que basicamente esse é um número muito grande de opções?

ANDREW: Sim. De fato, já discutimos esse ponto quando expliquei que a inteligência artificial ainda não é usada em jogos AAA, mas ao mesmo tempo está no AlphaGo e, possivelmente, em outro lugar.

O jogo de ir com toda a sua complexidade consiste no fato de que a cada passo você simplesmente coloca um chip para delinear uma pedra, e o jogo StarCraft é uma coisa muito complexa. Lá você pode enviar suas unidades ao longo de um número praticamente ilimitado de trajetórias, construir diferentes conjuntos de suas construções, etc. Tudo isso é um parâmetro.

Além disso, a dificuldade está no fato de que as redes neurais nem sempre pensam como uma pessoa. Quando, por exemplo, construímos uma unidade, lembramos disso. Mas muitos neurônios funcionam todas as vezes. Obviamente, existem redes recursivas que lembram suas realizações passadas. Eles são usados ​​principalmente para tradução e informações textuais, quando, à medida que a sentença é gerada, o neurônio usa cada vez mais dados.

Existem enormes dificuldades com o fato de que toda a quantidade de informações e opções precisa ser formalizada, ou seja, encontrar um conjunto de dados para treinamento, para que ele ainda responda adequadamente às ações do seu oponente, que também pode ser um milhão, ao contrário de jogar um jogo de ou xadrez.

STAS: Entendo - existem muitos parâmetros.

GLEB: Mas eu não entendo o quê, é claro que o DotA tem menos parâmetros, mas ainda é o mesmo no sentido em que foi enviado para qualquer lugar etc.

STAS: Aqui, Andrei se reduziu ao fato de que, em primeiro lugar, você tem uma unidade e o número de opções é muito menor.

ANDREW: Para ser sincero, nunca joguei um segundo Dota na minha vida, mas no original, até onde eu sei, esse é um jogo super determinístico. Existem 3 corredores e torres que precisam ser destruídos.

GLEB: Sim, mas no StarCraft, apesar de não jogar, também existem algumas maneiras e as mesmas unidades. Você diz que existem muitos deles, mas é mais provável que eles sejam sempre conduzidos em lotes. Ou seja, aproximadamente a mesma coisa acontece.

STAS: Você ainda precisa organizar corretamente cada unidade separadamente durante a batalha. No momento em que não são levados em um pacote, mas começam a ser organizados, há imediatamente mais parâmetros.

ANDREW: Seu problema é que você pensa nessas categorias: coloque uma unidade, etc., mas esquece o tempo todo que um neurônio é apenas uma matriz - números que se multiplicam. Lá você deve formalizar, por exemplo, coisas como tarefas. Digamos que exista um mapa para o StarCraft e que haja algum tipo de tarefa - não importa se você derrota um jogador ou outra coisa. Tudo isso precisa ser apresentado na forma de primitivas matemáticas, e isso é precisamente o mais difícil.

Se realmente fosse inteligência artificial, a diferença entre Dota e StarCraft seria mínima. StarCraft pode ser um pouco mais complicado em mecânica, mas ainda assim. Mas, devido ao fato de operarmos com números, é mais difícil formalizar.

Sobre redes de aprendizagem mútua


STAS: Tenho a última pergunta que quero fazer antes de irmos para o nosso celular. Não sei como é chamado corretamente, mas há uma maneira em que uma rede neural segue outra e tenta encontrar padrões.

ANDREW: Não vou me comprometer a explicar agora como funciona, mas sei com certeza que existem algoritmos super legais que às vezes ouço no trabalho quando duas redes neurais aprendem à custa uma da outra. Essa área de especialização já é completamente inacessível para mim, mas tudo parece legal. Tanto quanto eu sei, isso é usado para redes generativas. Infelizmente, não posso dizer mais nada.

STAS: Bom. Você deu as palavras-chave mais importantes, o resto é Gleb e os leitores facilmente pesquisam no Google.

Sobre telefones celulares (Apple)


GLEB: Vamos para os telefones celulares que estamos acessando há muito tempo. Primeiro de tudo, o que podemos fazer quando falamos sobre aprendizado de máquina em dispositivos móveis?

ANDREW: A propósito, você tem um podcast para desenvolvedores de iOS?

GLEB: Não somos um podcast para iOS. Sim Stas?

STAS: Sim, para desenvolvedores móveis. Por que a pergunta?

ANDREW: Só porque a situação é muito diferente. A Apple, em virtude de sempre ter sido boa em integrar software e hardware, e ser famosa por isso, é muito elegantemente enganchada em um trem de hype treinado por máquina.

Em 2014, a Apple lançou a API de gráficos do Metal. Tudo foi costurado nele, por exemplo, sombreadores de computador etc. Tudo isso permitiu, com o advento do iOS 10, incluir na estrutura do Metal Performance Shaders muitas camadas, ativações e outros operadores de redes neurais, em particular redes neurais convolucionais.

Isso deu um grande impulso, porque, em regra, os cálculos em uma placa de vídeo são muitas vezes mais rápidos que em um processador central. Quando a Apple teve a oportunidade de ler em placas de vídeo móveis, e rapidamente, não havia necessidade de escrever seus próprios operadores matemáticos e assim por diante. Ele disparou diretamente muito forte. E um ano depois, eles lançaram o CoreML (falaremos sobre isso um pouco mais tarde).

A Apple tinha uma base muito boa. Não sei se eles tiveram essa visão, ou se coincidiram, mas agora são líderes objetivamente no setor de aprendizado de máquina em dispositivos móveis.

Sobre telefones celulares (Android)


O que funciona relativamente legal e excelente em tempo real no iOS, infelizmente, não funciona tão bem no Android. Isso se deve não apenas ao fato de o Android ser uma merda. Existem outros fatores - primeiro, o fato de o Android ter uma infraestrutura muito diversificada: existem dispositivos fracos, outros fortes - você não consegue entender tudo.

Se o Metal é suportado em todos os dispositivos iOS, no Android já é mais complicado - em algum lugar o OpenGL é suportado em uma versão, em outro lugar, em algum lugar em que não é suportado. Em algum lugar existe Vulkan, em algum lugar não. Todos os fabricantes têm seus próprios drivers, que, é claro, não são otimizados de forma alguma, mas simplesmente suportam minimamente o padrão. Até acontece que você roda algumas redes neurais no Android na GPU, e elas funcionam em velocidade da mesma maneira que na CPU, porque trabalhar com memória compartilhada é muito ineficiente e tudo mais.

No Android, as coisas estão ruins agora. Isso é bastante surpreendente, porque o Google é um dos líderes, mas um pouco cedendo a esse respeito. No Android, há claramente uma falta de implementação de alta qualidade dos recursos do aprendizado de máquina moderno.

Para nós, por exemplo, mesmo no aplicativo, nem todos os recursos funcionam da mesma maneira. O que funciona mais rápido no iOS é mais lento no Android, mesmo em dispositivos de potência comparável. Nesse sentido, no momento, o Android como plataforma está caindo.

Sobre o CoreML


STAS: Como eles disseram sobre o CoreML, provavelmente seria correto dizer sobre o TensorFlow Lite.

ANDREW: O CoreML é na verdade um azarão. Quando ele saiu no ano passado, todo mundo primeiro disse: "Uau, legal!" Mas então ficou claro que este é apenas um pequeno invólucro sobre o Metal. As empresas que estão seriamente envolvidas em aprendizado de máquina, incluindo a nossa, há muito tempo têm suas próprias soluções. Por exemplo, nossas soluções de teste mostraram melhores resultados que o CoreML em termos de velocidade e outros parâmetros.

Mas o principal problema com o CoreML era que ele não podia ser personalizado. Às vezes acontece que você precisa de uma camada complexa em uma rede neural, que não é, por exemplo, no Metal, e precisa escrevê-la. No CoreML, não era possível incorporar suas camadas, e você precisava fazer o downgrade para o Metal para o nível mais baixo e escrever tudo sozinho.

Recentemente, o CoreML adicionou isso, e agora essa estrutura se tornou mais interessante. Se você é um desenvolvedor que não tem nada relacionado ao aprendizado de máquina na empresa ou no aplicativo, pode executar algum neurônio em duas linhas e executá-lo rapidamente na GPU. Os resultados, que mostram testes de desempenho para CoreML, são comparáveis ​​a soluções personalizadas e bare metal.

Ou seja, o CoreML funciona muito bem. Está um pouco úmido, tem bugs, mas todos os meses está melhorando. A Apple está lançando ativamente atualizações - não da maneira como estamos acostumados, que as atualizações dos frameworks da Apple são lançadas uma vez por ano ou nas versões semi-principais do iOS. O CoreML está sendo atualizado ativamente; nesse sentido, tudo está ótimo.

O TensorFlow Lite fornece um conversor no CoreML, o CatBoost também suporta um conversor no CoreML. Em suma, a Apple fez tudo certo de novo. Eles lançaram um conversor de código aberto e disseram: "Vamos escrever todos os conversores no CoreML" - e muitas estruturas de aprendizado suportam isso.

No início, houve algum ceticismo em relação ao CoreML, na última WWDC a pergunta mais comum para os desenvolvedores do CoreML foi: “Por que você não permite o download de modelos da Internet? Por que você não os deixa criptografar? Foi possível obter esses modelos e, ao que parece, roubar propriedade intelectual.

Agora, tudo foi reparado, acrescentou funcionalidade e, no momento, o CoreML é definitivamente a plataforma líder nesse sentido.

STAS: Você pode falar sobre isso com mais detalhes? Acontece que agora você não pode mais armazenar o modelo, apenas carregá-lo de algum lugar?

ANDREW: Sim, já é possível. Anteriormente, quando perguntamos sobre isso, os desenvolvedores sorriram e disseram: "Basta olhar para os cabeçalhos". Realmente havia designers que podiam transferir arquivos e tudo se encaixava.

Mas os modelos CoreML são bastante interessantes. Na verdade, são binários comuns que armazenam pesos, mas, além disso, são arquivos rápidos gerados, que criam classes implícitas. Você usa essas classes em seu aplicativo e os compiladores compilam esse modelo em alguns arquivos.

Agora, usando certos hacks e abordagens, é possível tornar esse modelo portátil. Você pode proteger sua propriedade intelectual por criptografia e diminuir o peso do aplicativo.

Em geral, o CoreML agora está se movendo na direção certa. Nem tudo pode ser feito legalmente do ponto de vista da App Review, nem tudo pode ser feito facilmente, sem hacks, mas é notável como os desenvolvedores melhoram a estrutura.

STAS: Legal! Eu queria acrescentar que o CoreML se parece com uma solução típica. Em termos relativos, é conveniente quando você deseja fazer algo simples usando o aprendizado de máquina em seu aplicativo. Parece que, se essa é uma tarefa típica, a Apple tentou tornar toda essa rota o mais simples possível, se você encontrar um modelo pronto, conjunto de dados e muito mais. Esta é apenas uma história sobre um problema típico, porque para eles, provavelmente, tudo já está pronto.

ANDREW: Para tarefas típicas, isso geralmente é super! Sem hipérbole - são necessárias duas linhas de código para executar o modelo. Nesse sentido, sim, é muito legal, especialmente para desenvolvedores independentes ou empresas que não possuem um departamento de P&D na equipe, mas também desejam adicionar algo interessante.

Mas isso não é tão interessante, porque as tarefas típicas foram resolvidas no Github e no Metal - você pode copiar esse código para si mesmo e colocá-lo no farm - embora um pouco mais complicado.

É importante que agora essa estrutura esteja se movendo não apenas para as tarefas clássicas do dia-a-dia, mas também para soluções integradas. Isso é muito legal!

Sobre o treinamento em telefones celulares


GLEB: Você diz que após o advento do Metal, tornou-se possível treinar modelos em telefones celulares?

ANDREW: Não, o treinamento em telefones celulares nunca foi possível. Não faz sentido, você só pode executá-lo. Se eu disse, fiz uma reserva. Nos telefones celulares, é claro, ninguém ensina nada.

STAS: Também não ouvi nada sobre o treinamento em um telefone celular.

GLEB: Eu também não ouvi, mas pensei nisso. Obviamente, parece intuitivamente que isso é uma coisa estranha. Mas definitivamente não há tarefas interessantes, quando isso seria relevante?

ANDREW: É difícil imaginá-los. Se houver algo assim, apenas o aprendizado distribuído. Existem até artigos científicos sobre como fazer isso, mas pelo que entendi, você está perguntando como aprender com os dados coletados no mesmo telefone? Só que, mesmo que você colete tanto (o que não acontecerá), levará tanto tempo para aprender que isso nunca terminará, e ninguém portará o código de treinamento para plataformas móveis, por que? O treinamento sempre acontece nos servidores e a inferência nos dispositivos.

STAS: Mas, no final das contas, acontece assim. Se você é uma empresa, deseja ter algo assim, precisa de dados e pode coletá-los dos seus usuários, ou seja, carregá-los periodicamente.

ANDREW: Sim, mas funciona um pouco diferente. Você coleta dados de todos os usuários em um único local para o servidor quente, treina lá e envia o modelo finalizado. Mas não é para que todos em casa ensinem alguma coisa.

STAS: Por outro lado, o telefone celular esquentaria - e no inverno seria relevante, mas por muito, provavelmente, muito tempo.

Sobre telefones celulares e o futuro


GLEB: Existem outras coisas interessantes em termos de aplicação de aprendizado de máquina em dispositivos móveis? Conversamos sobre o que já temos agora. Seria interessante olhar um pouco para o futuro - para que geralmente gostaríamos de receber em nossas plataformas móveis alguns superalimentos e super soluções.

: , , performance — , , . , - , .

. , style- , . .

CoreML . , , . , , : , , — , Android, iOS, . , , iOS Android.

, , , , — Android, iOS, Github . - — Uber , Horovod. Apple — , . , , , , — .

, . , , , — , , - . , .



: , , ? , , ? .

: , — (M. Bishop. Pattern Recognition and Machine Learning. Christopher. Springer. 2006), - . , , 3D , , - . . , — , — .

, , , . , -, , Andrew Ng Coursera. , .

, , , — MNIST. Hello World, .

, , , , - , . - , , , .

: ?

: advanced- Andrew Ng! , , Kaggle, , . , , — Data Scientist.

— , , , . , — R&D . , . . , , .

. , Kaggle, - — 90% .

Sumário


: . , , , , .

  • , — . , , — .
  • .
  • .
  • - .
  • , , , .
  • , . , , , - - !
  • — , , CoreML — , .

, .

, AppsConf 2018 , 8 9 .

80 , Call for Papers — 3 . , , .

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


All Articles