Visão geral
- Introdução
- Qual é o problema de atribuição na DoorDash?
- O que é a aprendizagem por reforço?
- Atribuição aprendida por reforço
- Avançar
- Conclusão
Introdução
A DoorDash realizou recentemente a nossa décima terceira hackathon. As hackathons são a nossa oportunidade de explorar novas tecnologias e ideias lunares; ajudam-nos a mantermo-nos actualizados com o mundo e a pensar 10x. Na DoorDash, estamos constantemente a pensar em formas de melhorar a experiência do cliente, desde a redução dos tempos de entrega até ao aumento da eficiência do Dasher. Os algoritmos e a inteligência artificial ajudam a estabelecer as bases para experiências agradáveis para os clientes e, para esta hackathon, queríamos ver se técnicas mais avançadas poderiam melhorar ainda mais o nosso produto. A nossa equipa de seis pessoas aplicou uma técnica de inteligência artificial chamada aprendizagem por reforço ao problema de atribuição da DoorDash, superando o nosso algoritmo de produção num ambiente de simulação com velocidades de entrega mais rápidas e maior eficiência do Dasher. Nesta publicação, descreveremos o que isso significa e como o conseguimos.
Qual é o problema de atribuição na DoorDash?
A DoorDash fornece uma plataforma em tempo real para satisfazer a procura de bens comerciais por parte dos consumidores através de uma frota Dasher flexível. Na DoorDash, a equipa de logística concentra-se na magia que acontece nos bastidores, desde o momento em que um consumidor submete uma encomenda até ao momento em que recebe essa encomenda à sua porta, incluindo tudo, desde a previsão da oferta/procura até à monitorização automatizada da entrega. O problema da atribuição é uma área específica da logística que lida com a seguinte questão: qual Dasher deve cumprir qual entrega? O nosso objetivo é fazer atribuições Dasher-entrega que produzam velocidades de entrega rápidas e uma eficiência Dasher saudável, onde a eficiência é o número de entregas realizadas pelo Dasher por unidade de tempo. Ao tomar estas decisões, temos de considerar muitos factores, incluindo, mas não se limitando a:
- Tempos cotados pelos consumidores
- Estimativa dos prazos de entrega das encomendas
- Estimativas de viagens
- Encaminhamento (para atribuições de vários fornecimentos)
- Utilização do Dasher (percentagem de tempo que um Dasher está a trabalhar ativamente numa entrega durante um turno inteiro)
O algoritmo de atribuição da DoorDash foi criado ao longo dos anos para ter em conta todos estes factores e muito mais, de modo a servir melhor os consumidores, os comerciantes e os distribuidores. No entanto, dada a amplitude do problema de atribuição e o facto de não termos verdades básicas sobre quais são as melhores atribuições, as melhorias no algoritmo nem sempre são fáceis. Quando se realizou a Hackathon XIII, perguntámo-nos: "Será que um algoritmo de atribuição artificialmente inteligente poderia aprender a melhorar-se a si próprio?
O que é a aprendizagem por reforço?
A aprendizagem por reforço é um dos algoritmos de inteligência artificial mais populares e poderosos da atualidade. Alguns exemplos de aprendizagem por reforço chegaram à atualidade, como o AlphaGo, o programa de computador com aprendizagem por reforço que derrotou o melhor jogador de Go do mundo. Em suma, o objetivo da aprendizagem por reforço é aprender a melhor ação tendo em conta um estado do ambiente, de modo a maximizar as recompensas globais. Eis os conceitos fundamentais da aprendizagem por reforço, resumidos na Figura 2.
Estado: O estado atual do ambiente. Representa toda a informação necessária para escolher uma ação.
Ação: O conjunto de todos os movimentos possíveis num estado.
Recompensa: O feedback resultante da ação. Note-se que as recompensas podem ser imediatas ou atrasadas.
Política: A estratégia utilizada para escolher uma ação em cada estado.
Agente: A entidade que realiza acções e tenta aprender a melhor política.
Ambiente: O mundo com o qual o agente interage.
Eis um exemplo de aplicação para ilustrar estes conceitos. Imaginemos que estamos a conceber um robô de entregas e a ensiná-lo a recolher objectos de entrega evitando os peões. Neste caso, o robô é um agente que tenta aprender a política óptima, ou seja, a ação óptima em cada estado. Os estados podem ser a área em que o robô está a operar, com os artigos e os peões em vários locais, e as acções podem ser mover-se para a esquerda, para a direita, para a frente ou para trás. O robô recebe uma recompensa positiva quando apanha um objeto, uma recompensa negativa quando choca com um peão e nenhuma recompensa caso contrário. Com estas definições, o robô pode aprender a política óptima para apanhar todos os objectos de forma a maximizar a recompensa.
O objetivo da aprendizagem por reforço é encontrar a política óptima. Isto não é trivial, uma vez que, ao contrário dos processos de decisão de Markov, as recompensas e as probabilidades de transição entre estados são desconhecidas, como se pode ver na Figura 3. Por esta razão, existem muitas técnicas para obter esta informação (com base em modelos) ou para obter diretamente a política óptima (sem modelos), tais como Monte Carlo, Bootstrap e SARSA. O mais utilizado é o Q-learning, que é um método sem modelo e sem política que nos pode dar diretamente uma estimativa da função Q para encontrar a política óptima.
Vale a pena mencionar que, para utilizar o Q-learning, precisamos de recolher dados seguindo uma política de exploração. Quando estamos mais preocupados em aprender sobre o mundo do que em maximizar a utilidade, podemos escolher uma política de não-exploração, só de exploração, que explora o espaço de ação escolhendo sempre uma ação aleatória. Quando nos preocupamos mais com a utilidade, precisamos de equilibrar a exploração e o aproveitamento, para que possamos colher os benefícios do que aprendemos e, ao mesmo tempo, não ficarmos cegos às oportunidades que ainda não encontrámos. Uma abordagem comum no segundo caso é o algoritmo epsilon-greedy, que explora com probabilidade epsilon e explora com probabilidade 1-epsilon.
Na prática, quando há um grande número de estados, o espaço de estados é caracterizado e a aproximação de funções é utilizada para determinar a função Q. Isto faz com que a função Q seja um modelo em vez de uma tabela de pesquisa. Muitas vezes, a criação manual de características é difícil, pelo que são utilizados modelos de aprendizagem profunda, como redes neurais totalmente ligadas ou convolucionais, para representar a função Q. Esta abordagem é conhecida como Deep Q-Network (DQN) e é muito útil quando a dimensionalidade das características é elevada e o volume de dados também é elevado.
Atribuição aprendida por reforço
Agora vamos discutir como aplicámos a aprendizagem por reforço ao problema de atribuição do DoorDash. Para formular o problema de atribuição de uma forma adequada à aprendizagem por reforço, estabelecemos as seguintes definições.
Estado: As entregas pendentes e os Dashers em funcionamento, uma vez que representam o estado atual do mundo de uma perspetiva de atribuição. Note-se que isto significa que o espaço de estados é praticamente infinito, uma vez que as entregas e os Dashers podem ter individualmente muitas características diferentes (local/hora de recolha, local/hora de entrega, etc.) e podem existir muitas combinações diferentes de entregas e Dashers.
Ação: A escolha mais natural é a atribuição de Dashers às entregas. No entanto, mesmo com apenas 15 entregas e 15 Dashers, o número total de combinações excede um trilião! Por conseguinte, para reduzir significativamente o espaço de ação, definimos as acções como sendo diferentes variantes do algoritmo de atribuição com diferentes parâmetros. Isto pode ser considerado como uma afinação inteligente de parâmetros, em que o modelo aprende quais os melhores parâmetros para um determinado estado de entregas e Dashers.
Recompensa: Combinação de velocidades de entrega e eficiência do Dasher. Queremos que as entregas cheguem aos clientes o mais rapidamente possível, utilizando os Dashers da forma mais eficiente possível. Isto traduz-se na maximização das velocidades de entrega e na maximização da eficiência do Dasher. A recompensa também inclui uma penalização por entregas não entregues, para garantir que todas as entregas são efetivamente atribuídas aos Dashers e entregues aos consumidores.
Com estes conceitos definidos para se adequarem à aprendizagem por reforço, precisávamos agora de implementar os dois componentes-chave para efetuar efetivamente a aprendizagem por reforço, o ambiente e o agente.
Ambiente: Precisamos de um sistema que possa produzir estados (entregas e Dashers) e recompensas (velocidades de entrega e eficiências Dasher), bem como receber acções (variantes do algoritmo de atribuição) e, subsequentemente, atualizar os estados e as recompensas. O nosso sistema de atribuição de produção é adequado, mas corremos o risco de prejudicar as nossas entregas e clientes reais, uma vez que o agente pode escolher más acções à medida que aprende através de uma política de exploração. Felizmente, já temos um simulador para o nosso sistema de atribuição que pode receber um algoritmo de atribuição e produzir atribuições simuladas que reflectem o nosso sistema de produção. Este simulador de atribuição é utilizado para obter resultados offline antes de efetuar experiências online para o sistema de atribuição. Por conseguinte, utilizámos este simulador como ambiente, permitindo-nos treinar o nosso modelo de aprendizagem por reforço em estados/acções/recompensas que são exactos para o nosso sistema de produção sem afetar os nossos clientes.
Agente: Escolhemos uma rede neural profunda como agente, uma vez que faz sentido utilizar um modelo para a função Q e caraterizar os estados em vectores de elevada dimensão, dado o nosso espaço de estados infinito. Mais detalhes sobre esta caraterização e modelo serão abordados na próxima secção.
Um resumo de alto nível da nossa formulação do problema pode ser encontrado na Figura 4. Em resumo, o simulador de atribuição produz o estado, que o agente utiliza para escolher uma variante do algoritmo de atribuição. O simulador de atribuição executa o algoritmo escolhido e produz o novo estado e a recompensa, que são passados de volta para o agente. Este ciclo repete-se num intervalo de tempo predefinido.
Para a implementação efectiva, envolvemos o simulador de atribuição do DoorDash num ambiente OpenAI Gym e utilizámos o Keras RL para o agente e a formação, uma vez que as duas bibliotecas são compatíveis desde o início.
Agente de profundidade
Como mencionado anteriormente, utilizámos uma rede neural profunda como agente. Recorde-se que o agente mapeia pares de estado e ação para recompensas. Concretamente, a rede recebe como entrada o estado (representado por diferentes características) e prevê o valor Q para cada ação, como se pode ver na Figura 5.
Para o nosso problema, as características geradas a partir dos estados têm como objetivo captar a informação sobre as entregas e os Dashers que são úteis para prever o valor Q, que são as velocidades de entrega futuras e a eficiência dos Dashers. Alguns exemplos destas características são as distâncias entre a recolha e a entrega, o rácio entre as entregas e os Dashers e os tempos estimados de preparação das encomendas.
O modelo em si é uma rede multicamada densa/completamente conectada. Foram experimentados alguns parâmetros de modelo diferentes, mas a afinação mais exaustiva dos hiperparâmetros e a exploração da arquitetura serão feitas em trabalhos futuros.
Este modelo é treinado utilizando o algoritmo Q-learning profundo, tal como apresentado por Mnih et al. no seu artigo Deep Reinforcement Learning. Os detalhes podem ser encontrados no artigo, mas a ideia geral é que o ambiente e o agente são usados para gerar estados, acções e recompensas que são armazenados como experiências. Estas experiências são depois utilizadas para criar amostras de treino, que o modelo utiliza para otimizar em direção ao valor Q máximo.
Resultados
A avaliação foi efectuada através de atribuições para um dia de dados numa região. Começámos por obter resultados de base, executando o simulador de atribuição com o algoritmo de atribuição de produção predefinido e obtendo as velocidades médias de entrega e as eficiências Dasher.
Em seguida, para avaliar se o nosso modelo se saiu melhor, pedimos ao nosso modelo que escolhesse o melhor algoritmo de atribuição a utilizar para cada estado nesse mesmo dia e obtivemos as novas velocidades médias de entrega e eficiências Dasher. Estes resultados mostram que o modelo de reforço aprendido alcançou, em média, uma melhoria de 6 segundos na velocidade de entrega e uma melhoria de 1,5 segundos na eficiência do Dasher em todas as entregas. Isto não parece muito, mas quando estão em causa milhões de entregas, estes segundos rapidamente se acumulam. Estes resultados provam que a aprendizagem por reforço pode ajudar no problema da atribuição.
Avançar
Fizemos alguns progressos durante a hackathon, mas há sempre mais para fazer. Eis algumas formas de melhorar o agente:
- Mais afinação de hiperparâmetros, por exemplo, taxa de aprendizagem, tamanho das camadas ocultas.
- Adicionar mais características, ou seja, gerar mais características a partir dos estados.
- Estruturação de características sob a forma de uma grelha 3D, colocando entregas/anilhas na grelha com base na latitude e longitude. A analogia é uma imagem, que tem uma altura, uma largura e uma profundidade. Podemos então experimentar redes neurais convolucionais, que são populares para tarefas baseadas em imagens, como agente.
Conclusão
Vimos como a aplicação da aprendizagem por reforço ao problema de atribuição na DoorDash produziu um algoritmo de atribuição melhorado. Acreditamos que a aprendizagem por reforço é uma ferramenta poderosa que podemos utilizar para melhorar a nossa plataforma de logística a pedido, e estamos entusiasmados com a oportunidade de agradar ainda mais aos nossos clientes utilizando inteligência artificial avançada.
Gostaríamos de conhecer as suas aplicações de produção da aprendizagem por reforço. Se a resolução deste tipo de problemas o entusiasma, junte-se à nossa equipa!
Agradecimentos
Obrigado a toda a equipa da hackathon por ter trabalhado neste projeto: Anne Zhou, Gary Ren, Ivy Wang, Richard Hwang, Sifeng Lin, Yixin Tang. E obrigado ao comité da hackathon por organizar outra hackathon divertida!