• Nenhum resultado encontrado

Conceitos Prévios

No documento José Miguel Mota e Cunha (páginas 22-34)

Neste capítulo, serão abordados vários conceitos de modo a facilitar a boa compreensão do leitor na análise deste documento.

Inicialmente, serão explicadas as características de Serverless [4], de modo a abordar as suas vantagens e desvantagens e comparar os vários provedores de modo a justificar a escolha da Amazon Web Services (AWS) [5] como provedor responsável pela alocação deste sistema. Posteriormente, será discutido o conceito de blockchain aplicada a cadeias logísticas e de Ledger Database, de forma a entender quais as vantagens do uso de cada tecnologia e quais os problemas que elas permitem resolver.

Por fim, é possível encontrar uma secção dedicada à aprendizagem computacional. Nesta secção serão abordados todos os algoritmos de aprendizagem computacional referidos ao longo do documentos, de forma a descrever o seu funcionamento e as suas característi-cas. Será também descrito o funcionamento de uma rede neuronal e de uma rede Long Short-Term Memory (LSTM). Por fim serão descritos e comparados diversos algoritmos de otimização de hiperparâmetros.

2.1 Serverless

Serverless é um modelo de execução de computação em nuvem que depende significativa-mente de serviços de terceiros, conhecido como Back end como serviço ou "BaaS", em que o cloud provider gere dinamicamente a alocação dos servidores. Consiste na execução de código personalizado em containers que são acionados por eventos totalmente geridos pelo cloud provider [4].

Uma característica do Serverless é o facto de ser baseado na arquitetura de microsserviços [6]. Com isto, a aplicação terá de ser pensada para ser executada em forma de funções, variando assim dos servidores convencionais.

Pelo facto de estas funções serem executadas num container, e este ser descartado no fim de um determinado tempo sem execução, o Serverless é Stateless [6]. Ou seja, não é possível guardar dados através da utilização de variáveis locais na própria função como nos servidores tradicionais e utilizar esses mesmos dados em execuções futuras da função, pois é provável que essa execução seja num container completamente distinto, fazendo com que esses dados sejam perdidos. Uma forma de contornar este problema, é utilizar uma base de dados de modo a armazenar esses dados temporariamente.

Capítulo 2

Em caso de sobrecarga, vários containers podem ser inicializados, permitindo que tan-tas funções sejam executadas quantan-tas necessárias para atender continuamente a todas as solicitações recebidas. Este facto de serverless ser facilmente escalável é uma vantagem, porém, pode também ser uma desvantagem para programadores mais inexperientes, dado que uma configuração mal feita pode resultar numa factura elevada.

No deploy de uma arquitetura serverless também são encontradas algumas vantagens, tais como a administração do sistema ser praticamente nula e a rápida configuração.

Por outro lado, a principal desvantagens do Serverless é o Cold Start [6]. Pelo facto de o código ser executado em containers, quando é necessário a criação de um novo container para responder a um determinado evento, existe uma latência associada. Posto isto, o container permanece ativo por um período de tempo. No caso de outro evento surgir durante esse período, ele responderá muito mais rápido, conhecido como Warm Start. De forma a perceber qual o melhor provedor Serverless a ser utilizado neste sistema, serão comparados quatro provedores, entre eles a AWS [5], Google Cloud [7], Azure [8] e a IBM Cloud [9].

Nome Linguagens de Programação

AWS Node.js, Python, Go, Java, C++, .NET, PHP, Ruby

Google Node.js, Python

Azure Javascript, C#, F#, Java, Python, PHP, TypeScript, Bater, PowerShell

IBM Node.js, Swift, Java, PHP, Python

Tabela 2.1: Comparação do suporte de linguagens das diversas plataformas [10].

Na tabela 2.1 estão descritas todas as linguagens suportadas por cada um dos provedores Serverless. A Azure é a provedora que suporta uma maior quantidade de linguagens e todas as provedoras dão suporte a Node.js e Python.

Tendo em conta só a linguagem, todas as provedoras seriam uma boa opção dado que a linguagem a ser usada é Python, e todas elas suportam essa linguagem de programação.

Nome Ofertas por mês Preço ($)

AWS 1.000.000 Requests, 400.000 GB/s 0.00001667 por GB/s

Google 2.000.000 Requests, 400.000 GB/s 0.000016 por GB/s

Azure 1.000.000 Requests, 400.000 GB/s 0.0000004 por GB/s

IBM 1.000.000 Requests, 400.000 GB/s 0.000017 por GB/s

Tabela 2.2: Comparação das ofertas e preços das diversas plataformas [10].

Na tabela 2.2 estão descritas as ofertas mensais da cada uma das plataformas e o preço cobrado para cada GB/s.

Relativamente às ofertas, são todas muito semelhantes à exceção a Google, que oferece 2 milhões de pedidos contrariamente às restantes plataformas que oferecem um milhão de pedidos.

Os preços cobrados por GB/s são também muito semelhantes em todas as provedoras, porém, segundo a tabela 2.2, a Azure apresenta um preço bastante mais baixo. Essa diferença de preço resulta na cobrança separada para o uso de CPU e de memória. Pelo facto de ser um sistema com uma grande quantidade de dados, é importante

Conceitos Prévios lher um provedor que permita a execução de funções durante uma quantidade de tempo relativamente grande de modo a ser possível tratar esses dados corretamente.

Nome Execuções em Simultâneo Tempo de execução máximo

AWS 1000 15 minutos

Google Ilimitado 10 minutos

Azure Ilimitado para HTTP e 1000 para as

restantes

9 minutos

IBM Ilimitado Ilimitado

Tabela 2.3: Comparação do tempo de execução das diversas plataformas [10].

Na figura 2.3, é possível visualizar a quantidade de execuções simultâneas de cada provedor e, também, o tempo máximo que cada uma dessas funções podem permanecer em execução. Posto isto, podemos dizer que a IBM é a melhor neste requisito, dado que não limita o número de execuções em simultânea, nem o tempo de execução de cada função.

Sendo o tempo de Cold Start um dos maiores problemas do Serverless, é crucial escolher uma plataforma que tenha esse processo o mais rápido possível, de modo a reduzir a latência e melhorar a experiência do utilizador.

Nome Média Máximo

AWS 379ms 20283ms

Google 198ms 60919ms

Azure 4625ms 71809ms

IBM 1776ms 16114ms

Tabela 2.4: Comparação do Cold Start das diversas plataformas [11].

Analisando a tabela 2.4, podemos verificar que a AWS e a Google são as plataformas com menor Cold Start. Porém, ao visualizar os gráficos presentes em [11], podemos perceber que a AWS é a provedora mais constante relativamente ao tempo de Cold Start.

Nome AWS Google Azure IBM

Media 78ms 752ms 652ms 164ms

Tabela 2.5: Comparação do tempo da solicitação à resposta das diversas plataformas [11].

Na tabela 2.5 podemos ver o tempo médio que cada plataforma demora a responder a uma determinada solicitação. Este valor não contém o tempo de execução da função [11]. Com estes resultados podemos visualizar que a AWS apresenta o melhor tempo de resposta comparando com as restantes plataformas.

Apresentadas todas estas características, a plataforma escolhida foi a AWS. Esta escolha baseia-se principalmente no facto de ser a plataforma maioritariamente utilizada pela em-presa, o que permite assim um maior suporte ao longo do desenvolvimento do projeto. Foi também escolhida devido facto de permitir uma execução relativamente longa das funções, o seu constante desempenho no Cold Start e, por fim, devido ao seu tempo de resposta baixo.

Capítulo 2

2.2 Blockchain Aplicada a Cadeias Logísticas

A blockchain [12] consiste numa tecnologia de armazenamento e transmissão de dados transparente e segura, que lista todas as transações entre utilizadores desde a sua cria-ção. As diferentes transações são compartilhadas por esses mesmos utilizadores que se encarregam de verificar e validar todos os dados trocados.

A blockchain é baseado em três princípios:

• Transparência: todos podem consultar todas as transações registadas desde a sua criação;

• Descentralização: é independente de qualquer órgão de controlo central;

• Segurança: as transações são criptografadas e os dados são praticamente invioláveis.

A blockchain pode ser aplicada a muitos desafios das cadeias logísticas, como a manutenção

complexa de registos, contratos, pagamentos e o rastreamento de produtos. Pode ser

vista como a alternativa mais segura e automatizada comparando com as bases de dados centralizadas.

A gestão da cadeia logística inclui o planeamento integrado e a execução de diferentes processos. Isso envolve fluxo de material, fluxo de informações e fluxo de capital financeiro e humano.

Qualquer cadeia logística [13] progride entregando inicialmente as matérias-primas de um fornecedor a um fabricante e, eventualmente, termina entregando o produto final ao con-sumidor. A implementação adequada da gestão de uma cadeia logística pode resultar em benefícios, como aumento de vendas e receitas e a redução de fraudes e custos indiretos. Além disso, isso também levará à aceleração da produção e distribuição.

No setor automóvel, devido à grande variedade de fornecedores de peças, fabricantes e vendedores, faz com que seja um setor complexo e amplo com um grande números de participantes [13].

Posto isto, o rastreamento de componentes individuais de uma cadeia logística do setor automóvel é complexo, propenso a erros e demorado, sendo necessária uma grande coorde-nação entre fornecedores de vários níveis, logística de terceiros e empresas de transporte. Essa dificuldade faz com que os produtos falsificados sejam um problema significativo para o setor automóvel [13].

Devido à fácil degradação e baixo nível de qualidade, as peças falsificadas não são confiáveis, trazendo uma grande insatisfação aos clientes finais e a preocupação das marcas com a perda da confiança dos clientes [13].

A introdução da blockchain para o setor automóvel prova ser significativamente vantajosa, pois permite que as peças de reposição sejam representadas digitalmente e possibilita a identificação de todo o seu percurso, desde a sua origem até ao consumidor final, garantindo a disponibilidade de informações precisas e em tempo real entre diferentes partes, sendo possível verificar o estado, a quantidade e a localização de peças individuais [13].

Conceitos Prévios

2.3 Ledger Database

A principal diferença de uma Ledger Database para uma base de dados convencional, é o facto desta manter um registo do passado. Isto é, quando um item é atualizado, a nova informação não substitui a informação passada, e sim, é adicionada ao item. Cada atualização é anexada ao registo como uma nova entrada [14].

Uma Ledger Database é baseado em três princípios [14]:

• Imutável: Cada gravação na base de dados é anexada ao passado. É importante garantir que com o tempo essa informação não sofre alterações.

• Transparente: É possível ter acesso ao passado. As informações do log são total-mente consultáveis.

• Verificável: É possível a validação do histórico completo de alterações. Não basta ter acesso aos dados históricos, deve ser possível a verificação da autenticidade desse histórico.

Dadas essas propriedades, uma Ledger Database torna-se um sistema ideal de fonte de dados para registos. Uma possível utilização desta tecnologia, é o desenvolvimento de um registo de proprietário de automóveis, em que a tabela de proprietários é constituído pelo proprietário atual de cada automóvel. Porém, é possível visualizar todos os proprietários de um determinado automóvel através de uma pesquisa no log [14].

Ao estudar o funcionamento de uma Blockchain e de uma Ledger Database, é notável que ambas as estruturas de dados suportam o desenvolvimento de um registo, porém, é importante perceber que vantagem existe na utilização de uma Ledger Database em vez de uma Blockchain neste requisito.

O facto da Ledger Database ser desenvolvida para sistemas de registos e manutenção de histórico, faz com que a sua utilização seja fácil e focada em cumprir tal objetivo. Por outro lado, a Blockchain é uma tecnologia muito poderosa mas que traz uma maior complexidade e limitações desnecessárias, o que para o efeito torna-se prescindível a sua utilização.

2.4 Algoritmos de Aprendizagem Computacional

Nesta secção, irá ser explicado o funcionamento de vários algoritmos de aprendizagem com-putacional, tais como Gradient Boosting (GB), Support Vector Machines (SVM), Naive Bayes (NB), Decision Tree, Random Forest (RF), k-Nearest Neighbors (KNN), Redes Neu-ronais (RN) e LSTM. Por fim, serão explicados diversos algoritmos de otimização de hi-perparâmetros. Esta secção, tem como objetivo descrever todos os algoritmos referidos ao longo do documento, de modo a facilitar a compreensão do leitor.

Aprendizagem Computacional é um sub-campo da Engenharia e da ciência da compu-tação que evoluiu da matemática e estatística. Consiste em fazer com que os computadores adquiram a capacidade de aprender e melhorar automaticamente com a experiência, sem serem explicitamente programados e de forma a conseguirem elaborar uma determinada tarefa [15].

Capítulo 2

Aprendizagem computacional pode ser essencialmente de dois tipos:

• Supervisionada: Consiste na aprendizagem de um mapeamento entre um conjunto de entradas e um conjuntos de saídas, com base em pares de entrada-saída conhecidos. Para tal, é necessário fornecer dados devidamente etiquetados [16].

• Não supervisionada: Ajuda a encontrar padrões anteriormente desconhecidos num conjunto de dados sem rotulação previamente feita. Isto é, não são necessários dados com os dados de entrada devidamente mapeados com a saída correspondente [16]. • Aprendizagem por reforço: é um método de aprendizagem computacional em

que o agente aprende a executar certas ações que o levam à recompensa máxima, num determinado ambiente. Este conhecimento é adquirido por meio de repetidas tentativas de modo a maximizar a recompensa [17].

Os problemas de aprendizagem supervisionada podem ser agrupados em dois tipos de problemas:

• Classificação: É usado principalmente quando a variável de saída do problema é uma categoria discreta, como ”vermelho” ou ”azul” [18].

• Regressão: É usado principalmente quando a variável de saída do problema é um valor real ou contínuo, como por exemplo, o salário ou peso de uma pessoa [18].

2.4.1 Gradient Boosting

GB é uma técnica de aprendizagem computacional que pode ser usado tanto para problemas de regressão, como para problemas de classificação. A produção do seu modelo de previsão consiste no uso do conjunto de modelos mais fracos, geralmente árvores de decisão [19]. O algoritmo começa por treinar uma árvore de decisão na qual cada observação recebe um peso igual. Depois de avaliar a primeira árvore, os pesos das observações difíceis de classificar são aumentados e os pesos das fáceis de classificar são diminuídos.

A segunda árvore é cultivada nesses dados ponderados, resultando num novo modelo que é baseado na Árvore 1 + Árvore 2. Em seguida, é calculado o erro de classificação desse novo modelo e é feita uma terceira árvore para prever os resíduos revistos. Esse processo é repetido para um número especificado de iterações. As previsões do modelo do conjunto final são a soma ponderada das previsões feitas pelos modelos de árvore anteriores [19].

2.4.2 Support Vector Machines

SVM é um algoritmo supervisionado, que pode ser usado em classificação e regressão. Em modos gerais, consiste em encontrar um hiperplano, numa dimensão k, que tenha a margem máxima, ou seja, a distância máxima entre os pontos de dados das duas classes. A maximização da distância da margem fornece algum reforço para que os pontos de dados futuros possam ser classificados com mais confiança [20].

Na figura 2.1 é possível visualizar alguns dos hiperplanos possíveis para separar as duas classes numa dimensão 2D. Na figura 2.2 está representado o hiperplano ótimo, de forma a maximizar a separação entre as duas classes, isto é, ter as margens máximas entre o hiperplano e as classes.

Conceitos Prévios

Figura 2.1: Hiperplanos possíveis [20]. Figura 2.2: Hiperplano ótimo [20].

2.4.3 Naive Bayes

NB é uma modelo probabilístico de aprendizagem computacional usado para tarefas de classificação, sendo o seu cerne baseado no teorema de Bayes [21].

P (A | B) = P (B | A) P (A)

P (B) (2.1)

Em termos gerais, usando o teorema de Bayes representado pela equação 2.1, é possível encontrar a probabilidade de A acontecer, dado que B ocorreu, sendo B a evidência e A a hipótese. Posto isto, os recursos que entram no modelo são independentes, ou seja, alterar o valor de um recurso, não influencia diretamente ou altera o valor de qualquer um dos outros recursos usados no algoritmo.

Por ser um modelo probabilístico, o algoritmo pode ser facilmente codificado e as previsões feitas muito rapidamente. Por esse motivo, é facilmente escalável e é um algoritmo bastante usado em aplicações com a necessidade de respostas quase instantâneas às solicitações do utilizador.

2.4.4 Árvores de Decisão

Em geral, as árvores de decisão são construídas por meio de uma abordagem algorítmica que identifica maneiras de dividir um conjunto de dados com base em diferentes condições. É um dos métodos mais amplamente utilizados e práticos de aprendizagem supervisionada. As árvores de decisão são um método de aprendizagem supervisionada não paramétrico usado para tarefas de classificação e regressão. O objetivo é criar um modelo que prediga o valor de uma variável de destino, aprendendo regras simples de decisão inferidas a partir dos dados fornecidos [22].

As regras de decisão geralmente estão na forma de instruções if-then-else. Quanto mais profunda a árvore, mais complexas são as regras que ajustam o modelo.

Capítulo 2

Figura 2.3: Árvore de decisão para o conceito Play Ténis [22]

Na figura 2.3 está representado uma árvore de decisão capaz de decidir através de umas dadas condições meteorológicas se é possível ou não a realização de um jogo de ténis. Este problema é denominado ”Play Tennis”, originalmente proposto por Tom Mitchell no seu famoso livro ”Machine learning” [23].

Ao analisar a figura 2.3 é possível visualizar que cada nó representa um atributo ou recurso, e que a ramificação de cada nó representa o resultado desse nó. Finalmente, são as folhas da árvore onde a decisão final é tomada.

Se os recursos forem contínuos, os nós internos podem testar o valor do mesmo em relação a um limite. Um exemplo disso é a humidade em que a condição em vez de ser classificada em alta ou baixa, pode ser substituída por maior ou menor do que 75% de humidade [22]. Esta árvore de decisão foi obtida aplicando aos dados os conceitos de entropy and infor-mation gain. Os dados utilizados consistem em 14 jogos consecutivos, em que cada um contém a informação da realização do jogo e as respetivas condições meteorológicas [23].

2.4.5 Random Forest

O algoritmo RF, como o próprio nome indica, consiste num grande número de árvores de decisão individuais que funcionam como um conjunto. Cada árvore individual faz uma previsão de uma classe, e a classe que obtiver mais votos torna-se a previsão final [24].

Figura 2.4: Representação de um modelo RF [24].

Conceitos Prévios Na figura 2.4 encontra-se um exemplo de RF de forma a melhorar a sua compreensão. Neste exemplo existem 9 árvores, e cada uma delas é responsável por dar uma previsão. Como 6 das nove árvores deram previsão 1 contra as 3 árvores que deram previsão de 0, a previsão final deste modelo é 1.

A baixa correlação entre as árvores é a chave do sucesso deste algoritmo, pois podem produzir previsões em conjunto mais precisas do que as previsões individuais. A razão para esse efeito é que o conjunto das árvores protege-se de erros individuais. Enquanto algumas árvores podem estar erradas, muitas outras estão certas, então, como um grupo, as árvores podem-se mover na direção correta [24].

2.4.6 k-Nearest Neighbors

O algoritmo KNN é um algoritmo supervisionado que pressupõe que objetos semelhantes existem nas proximidades [25].

Figura 2.5: Representação de um modelo KNN [25].

Ao observar a figura 2.5 podemos visualizar que na maioria das vezes, pontos de dados semelhantes estão próximos um do outro. O algoritmo KNN depende da veracidade dessa premissa para que o algoritmo seja útil. Posto isto, o KNN recorre à matemática para calcular a distância entre os pontos de um gráfico [25].

Existem diversas formas de calcular a distância entre pontos, dependendo do problema que se pretende resolver. No entanto, a distância em linha reta (também chamada de distância euclidiana) é uma das escolhas mais populares [25].

2.4.7 Redes Neuronais

Uma RN é uma rede com uma ou múltiplas camadas de neurónios que são usadas para fazer classificações, previsões, entre outros [26].

Na figura 2.6 está representado um diagrama de uma RN simples. Nela é possível ver a representação do conjunto de entradas (Input ) responsável por fazer a ligação entre o input e a camada oculta (Hidden), uma camadas oculta (Hidden) constituída por quatro neurónios, e por fim, uma camada de saída (Output ) com dois neurónios.

Capítulo 2

Figura 2.6: Diagrama de uma Rede Neuronal [27].

As setas que conectam os pontos mostram como todos os neurónios estão interligados e como os dados transitam da camada de entrada até a camada de saída.

Essas conexões são compostas por pesos, de forma a poder ativar ou não o neurónio a que está ligado, dependendo da sua função de ativação.

Ao longo do treino da RN os pesos das conexões são ajustados de forma a minimizar a função de custo, ou seja, minimizar o erro das previsões da rede.

2.4.7.1 Long Short-Term Memory

No documento José Miguel Mota e Cunha (páginas 22-34)

Documentos relacionados