uma introdução suave às linguagens de programação probabilísticas

a programação probabilística está se tornando uma das áreas de desenvolvimento mais ativas no espaço de aprendizado de máquina. Quais são os principais idiomas que devemos conhecer?

Jesus Rodriguez

Siga

Agosto 7, 2020 · 7 min de leitura

Origem: https://devclass.com/2019/07/01/mit-presents-gen-to-get-probabilistic-programming-for-ai-up-and-running/

eu recentemente comecei um novo boletim foco no AI educação. TheSequence é um boletim informativo sem BS( ou seja, sem hype, sem notícias etc) focado em IA que leva 5 minutos para ler. O objetivo é mantê-lo atualizado com projetos de aprendizado de máquina, trabalhos de pesquisa e conceitos. Por favor, experimente inscrevendo-se abaixo:

o pensamento probabilístico é uma ferramenta incrivelmente valiosa para a tomada de decisões. De economistas a jogadores de poker, as pessoas que podem pensar em termos de probabilidades tendem a tomar melhores decisões quando confrontadas com situações incertas. Os campos de Probabilidades e teoria dos jogos foram estabelecidos por séculos e décadas, mas não estão experimentando um renascimento com a rápida evolução da Inteligência artificial(IA). Podemos incorporar probabilidades como um cidadão de primeira classe de código de software? Bem – vindo ao mundo das linguagens de programação probabilística(PPLs)

o uso de estatísticas para superar a incerteza é um dos pilares de um grande segmento do mercado de aprendizado de máquina. O raciocínio probabilístico tem sido considerado um dos fundamentos dos algoritmos de inferência e é representado por todas as principais estruturas e plataformas de aprendizado de máquina. Recentemente, o raciocínio probabilístico tem visto uma grande adoção dentro de gigantes da tecnologia como Uber, Facebook ou Microsoft, ajudando a impulsionar a pesquisa e a agenda tecnológica no espaço. Especificamente, os PPLs se tornaram uma das áreas de desenvolvimento mais ativas no aprendizado de máquina, desencadeando o lançamento de algumas tecnologias novas e interessantes.Conceitualmente, linguagens de programação probabilística (PPLs) são linguagens específicas de domínio que descrevem modelos probabilísticos e a mecânica para realizar inferência nesses modelos. A magia do PPL depende da combinação das capacidades de inferência dos métodos probabilísticos com o poder representacional das linguagens de programação.

em um programa PPL, as suposições são codificadas com distribuições anteriores sobre as variáveis do modelo. Durante a execução, UM programa PPL iniciará um procedimento de inferência para calcular automaticamente as distribuições posteriores dos parâmetros do modelo com base nos dados observados. Em outras palavras, a inferência ajusta a distribuição anterior usando os dados observados para fornecer um modo mais preciso. A saída de um programa PPL é uma distribuição de probabilidade, que permite ao programador visualizar e manipular explicitamente a incerteza associada a um resultado.

para ilustrar a simplicidade dos PPLs, vamos usar um dos problemas mais famosos das estatísticas modernas: um lance tendencioso de moedas. A ideia desse problema é calcular o viés de uma moeda. Vamos supor que xi = 1 Se o resultado do i-th coin toss for head e xi = 0 se for tail. Nosso contexto assume que os lançamentos individuais de moedas são independentes e distribuídos de forma idêntica (IID) e que cada lançamento segue uma distribuição de Bernoulli com o parâmetro θ: P(xi = 1 | θ) = θ e p(xi = 0 | θ) = 1 − θ. A variável latente (ou seja, não observada) θ é o viés da moeda. A tarefa é inferir θ dados os resultados de lançamentos de moedas observados anteriormente, isto é, p(θ | x1, x2, . . . , xN).

a Modelagem de um programa simples como o viés lance de moeda em um propósito geral de programação: linguagem pode resultar em centenas de linhas de código. No entanto, PPLs como Edward expressam esse problema em alguns gostos simples de código:

o Santo Graal: Deep PPL

por décadas, o espaço de aprendizado de máquina foi dividido em dois campos irreconciliáveis: estatísticas e redes neurais. Um campo deu origem a programação probabilística, enquanto o outro estava por trás de movimentos transformacionais, como aprendizado profundo. Recentemente, as duas escolas de pensamento se uniram para combinar aprendizado profundo e modelagem Bayesiana em programas únicos. A expressão final desse esforço é linguagens de programação probabilísticas profundas (PPLs profundos).

Conceitualmente, Profundo PPLs pode expressar Bayesiana redes neurais com probabilística pesos e ponderações. Praticamente falando, os PPLs profundos se materializaram como novas linguagens e bibliotecas probabilísticas que se integram perfeitamente com estruturas populares de aprendizado profundo.

3 PPLs profundos que você precisa saber sobre

o campo das linguagens de programação probabilística(PPLs) tem explodido com pesquisa e inovação nos últimos anos. A maioria dessas inovações veio da combinação de PPLs e métodos de aprendizagem profunda para construir redes neurais que possam lidar com a incerteza de forma eficiente. Gigantes da tecnologia como Google, Microsoft ou Uber foram responsáveis por expandir os limites de PPLs profundos em cenários de grande escala. Esses esforços se traduziram em pilhas de PPLs profundas completamente novas que estão se tornando cada vez mais populares na comunidade de aprendizado de máquina. Vamos explorar alguns dos avanços mais recentes no espaço PPL profundo.Edward é uma linguagem de programação probabilística completa de Turing (PPL) escrita em Python. Edward foi originalmente defendido pela equipe do Google Brain, mas agora tem uma extensa lista de colaboradores. O artigo de pesquisa original de Edward foi publicado em Março de 2017 e desde então a pilha tem visto muita adoção dentro da comunidade de aprendizado de máquina. Edward funde três campos: estatística Bayesiana e aprendizado de máquina, aprendizado profundo e programação probabilística. A biblioteca se integra perfeitamente a estruturas de aprendizado profundo, como Keras e TensorFlow.

Pyro

Pyro é uma linguagem de programação probabilística profunda (PPL) lançada pela Uber AI Labs. Pyro é construído sobre PyTorch e é baseado em quatro princípios fundamentais:

  • Universal: Pyro é um PPL universal – pode representar qualquer distribuição de probabilidade computável. Como? Partindo de uma linguagem universal com iteração e recursão (código Python arbitrário) e, em seguida, adicionando amostragem aleatória, observação e inferência.
  • escalável: Pyro escala para grandes conjuntos de dados com pouca sobrecarga acima do código escrito à mão. Como? Ao construir técnicas modernas de otimização de caixa preta, que usam mini-lotes de dados, para aproximar a inferência.
  • mínimo: Pyro é ágil e sustentável. Como? Pyro é implementado com um pequeno núcleo de abstrações poderosas e compostáveis. Sempre que possível, o trabalho pesado é delegado ao PyTorch e outras bibliotecas.
  • flexível: Pyro visa a automação quando você quer e controlar quando você precisa. Como? O Pyro usa abstrações de alto nível para expressar modelos generativos e de inferência, permitindo que os especialistas personalizem facilmente a inferência.

assim como outros PPLs, Pyro combina profunda dos modelos de aprendizagem e inferência estatística usando uma sintaxe simples, como ilustrado na seguinte código:

Infer.Net

Microsoft recentemente código aberto Infer.Net um framework que simplifica probabilística programação .Net desenvolvedores. A Microsoft Research tem trabalhado em inferir.Net desde 2004, mas tem sido apenas recentemente, com o surgimento da aprendizagem profunda, que a estrutura se tornou realmente popular. Infer.Net fornece alguns diferenciais fortes que o tornam uma escolha forte para os desenvolvedores que se aventuram no espaço PPL profundo:

  • linguagem de Modelagem Rica ” Suporte para variáveis univariadas e multivariadas, contínuas e discretas. Os modelos podem ser construídos a partir de uma ampla gama de fatores, incluindo operações aritméticas, álgebra linear, restrições de alcance e positividade, operadores booleanos, Dirichlet-Discrete, Gaussian e muitos outros.
  • algoritmos de inferência múltipla” algoritmos integrados incluem propagação de expectativa, propagação de crença (um caso especial de EP), passagem de mensagem variacional e amostragem de Gibbs.
  • projetado para inferência em grande escala: Infer.NET compila modelos em código-fonte de inferência que podem ser executados independentemente sem sobrecarga. Também pode ser integrado diretamente ao seu aplicativo.
  • Usuário-extensível: distribuições de probabilidade, fatores, operações de mensagens e algoritmos de inferência podem ser adicionados pelo Usuário. Inferir.A NET usa uma arquitetura de plug-in que a torna aberta e adaptável.

vamos olhar para o nosso exemplo Coin toss em Infer.Net

o campo do PPL profundo está se tornando um importante bloco fundamental do ecossistema de aprendizado de máquina. Pyro, Edward e Infer.Net são apenas três exemplos recentes de PPLs profundos, mas não os únicos relevantes. A interseção de estruturas de aprendizagem profunda e PPL oferece uma grande pegada incrível para inovação e novos casos de uso provavelmente ultrapassarão os limites dos PPLs profundos em um futuro próximo.

Deixe uma resposta

O seu endereço de email não será publicado.