• Nenhum resultado encontrado

CRIAÇÃO DA REDE NEURAL ARTIFICIAL

4. TESTE DE MODELOS

4.2. CRIAÇÃO DA REDE NEURAL ARTIFICIAL

O propósito do presente capítulo é o de conseguir realizar a predição exibida ao longo do Capítulo 3, porém excluindo os dados como choke, vazão de água e vazão de gás para gerar as curvas utilizados nos casos clássicos de regressão no capítulo 3.

Alguns pontos fundamentais a serem informados aqui é que as informações de produção advêm do poço 15/9-F-11 H, e uma vez que o algoritmo se mostre treinado, o objetivo seria de aplicá-lo a em comparação com as curvas de declínio de J. J. Arps (1945) para comparação.

Em relação ao código, todos os seus parâmetros serão explicados, assim como o raciocínio por trás da escolha e os problemas enfrentados durante o desenvolvimento, passo a passo, porém o código em si não será exibido.

O primeiro ponto é a função de otimização utilizada. De modo a determinar o tipo de otimização mais apropriado para o projeto, realizou-se um estudo da literatura à procura do algoritmo que fosse o mais indicado para otimizar a função perda a ser calculada. Karpathy (2017) revela que 23% dos artigos científicos publicados nos últimos cinco anos, considerando até o ano de publicação do artigo, mencionavam o algoritmo de otimização Adam, nome derivado de Adaptive Moment Estimation para aplicações de deep learning, o que serviu como ponto de partida para escolhê-lo como otimizador. Bushaev (2018) afirma que Adam é um método que computa taxas de aprendizado individuais para diferentes parâmetros de entrada.

Um conceito fundamental para explicar o algoritmo é o termo “momento”: 𝑚𝑛 = 𝐸[𝑋𝑛] (30)

O momento mn de uma variável qualquer X qualquer representa o Valor Esperado

E(x) dessa mesma variável elevada à potência de n. O algoritmo utiliza estimativas de primeiro e segundo momento de gradientes para adaptar a taxa de aprendizado para cada peso na ANN (BUSHAEV, 2018). O cálculo padrão desses dois momentos, é dado pelas equações a seguir:

𝑚𝑡 = 𝛽1𝑚𝑡−1+ (1 − 𝛽1)𝑔𝑡 (31)

𝑣𝑡 = 𝛽2𝑣𝑡−1+ (1 − 𝛽2)𝑔𝑡2 (32)

Nessa formulação, as variáveis mt e vt representam médias móveis, g é o

gradiente e o par β1 e β2 são hiper-parâmetros inerentes à equação, que raramente são

alterados (BUSHAEV, 2018). A primeira estimativa para ambos os valores é dada pelas equações: 𝑚̂𝑡= 𝑚𝑡 1−𝛽1𝑡 (33) 𝑣̂𝑡= 𝑣𝑡 1−𝛽2𝑡 (34)

O passo seguinte é de realizar a substituição dos momentos na equação típica de otimização:

𝑤𝑡 = 𝑤𝑡−1− 𝜂 ∗ 𝑚̂𝑡

√𝑣̂+𝜀𝑡

(35)

A segunda motivação por trás de usar o Adam neste caso é principalmente relacionada à eficiência, porque segundo Kingma e Bai (2015), Adam tem um custo computacional de treinamento menor do que em outros algoritmos (Figura 32):

Figura 32: Comparação do custo de treinamento de Adam perante outros algoritmos.

Fonte: Kingma e Bai (2015) (adaptado).

A seguir escolheram-se os parâmetros para as camadas. A especificação é que para toda série de informações disponíveis, podem existir camadas ocultas (“Hidden

Layers”), que não são diretamente influenciadas pelo input do usuário, porém processam a informação recebida anteriormente e multiplicam pelos pesos atribuídos para externar um resultado (Figura 33):

Figura 33: Exemplo de Dense Layers.

Fonte: Amini (2019) (adaptado).

Inicialmente não é conhecido o número exato de camadas ocultas que resolva problema de forma mais eficiente, restando a única saída possível de criar várias camadas com diferentes unidades de processamento que consigam realizar o cálculo. Optou-se inicialmente por quatro camadas ocultas, realizar a simulação, coletar os dados de resposta e diminuir o número de camadas ocultas até que os resultados fossem comprometidos. Com esse raciocínio, atingiu-se o valor de duas camadas ocultas.

Ambas as camadas ocultas são conectadas densamente (densely connected) entre elas, isto é, os neurônios de entrada inserem informações em todas elas. Cada camada conta com sessenta e quatro (64) neurônios com função de ativação sigmóide, e a última camada é uma de output, com apenas um neurônio.

Para o erro utilizou-se o Erro Quadrático Médio (EQM), também por ser definido como a metodologia padrão em aplicações de deep learning, e não por algum motivo específico. A metodologia foi introduzida brevemente na equação 25.

O tipo de ANN a ser criada é o modelo de LSTM, abreviação para Long Short- Term Memory. A célula LSTM consegue lidar com dois vetores e ilustrativamente tem o seguinte funcionamento (Figura 34):

Figura 34: Célula LSTM típica.

Fonte: Géron (2017) (adaptado).

Antes de detalhar o funcionamento de uma LSTM, é necessário indicar algumas variáveis importantes do processo:

1) O hidden state da iteração anterior (h(t-1)): esta variável armazena o resultado

de saída da iteração anterior;

2) Novo input (x(t)): esta variável armazena a informação a ser utilizada na

iteração atual pela LSTM;

3) Output do forget gate (f(t)): esta variável é o resultado obtido após a

concatenação [h(t-1) + x(t)] passarem pela função sigmoide e selecionar os

dados a serem mantidos dos que foram filtrados;

4) Resultado do input gate (it): resultado da concatenação de [h(t-1) + x(t)] após

passar pela forget gate mediante uma sigmoide;

5) Candidato (𝑐̆t): esta variável ajuda a regular a LSTM passando o resultado

da concatenação de [h(t-1) + x(t)] mediante uma função tangente hiperbólica,

alocando os resultados entre -1 e 1. Também é um hidden state baseado na iteração atual de input com o estado anterior e contém possíveis valores de serem adicionados no estado da célula;

6) Estado anterior da célula (c(t-1)): esta variável atua como o meio de

transferência de informação entre os gates de decisão para serem adicionados ou removidos dependendo dos resultados (NGUYEN, 2018);

7) Estado atual da célula (c(t)): esta variável atua como meio de transferência de

informação entre os gates de decisão para serem adicionados ou removidos dependendo dos resultados, porém é referente à iteração atual;

8) Estado oculto (ht): esta variável é o resultado a alimentar a próxima iteração

da LSTM;

Em relação aos processos matemáticos que ocorrem dentro do modelo LSTM, tem-se em resumo os seguintes procedimentos:

1) Concatena-se [h(t-1) + x(t)] e se geram quatro cópias para serem inseridas em

gates diferentes ao longo do processo;

2) Multiplica-se membro a membro o resultado da concatenação anterior utilizando uma função sigmoide pela primeira forget gate, gerando a variável f(t);

3) A segunda e a terceira cópia da concatenação [h(t-1) + x(t)] são multiplicadas

respectivamente por uma função sigmoide e a tangente hiperbólica, gerando respectivamente as variáveis it e 𝑐̆t;

4) Multiplica-se termo a termo as variáveis it e 𝑐̆t;

5) Multiplica-se termo a termo as variáveis f(t) e c(t-1);

6) Soma-se termo a termo o resultado das operações de 4) e 5);

7) Gera-se uma cópia de ct que é então inserida em uma função sigmoide;

8) O resultado da operação 7) é multiplicada termo a termo com a variável σt,

gerando a variável ht;

9) A variável ct é transmitida para a nova iteração da LSTM e a variável ht

também.

Uma vez montada a LSTM e parametrizado, resta então o último passo que é separar os dados em dados para treinamento do modelo e teste da previsão. Para isto, tem-se apenas duas informações disponíveis: vazão diária de óleo e o dia do registro, numerado de 1 até aproximadamente 5.000 dias. Salienta-se que para cálculo de declínio se utiliza somente os dados de vazão a partir do pico de produção, então esse critério também foi utilizado na filtragem de dados, resultando na extração de 2240 dados anteriores à vazão máxima. A soma dos dados de treinamento e teste de previsão totalizam 100% dos dados disponíveis já excluindo as informações anteriores ao pico de produção. Além disso, ainda ocorre a existência de um segundo pico de produção no

dia 4377. Contabilizar esse pico pode resultar em problemas de cálculo para a ANN, então eles também foram excluídos dos dados de entrada (Figura 35):

Figura 35: Dados do poço de referência a serem utilizados.

Fonte: Elaboração própria baseada nos dados do Campo.

Para o treinamento, é informado ao modelo tanto a vazão de óleo quanto o dia de registro no qual ocorreu a produção, assim o LSTM varia os pesos de forma a alcançar o melhor resultado possível, com o menor erro. Para a parcela de teste do modelo, informa-se somente o período, e o trabalho da ANN é retornar uma previsão da vazão. Em relação à divisão entre dados de treinamento e dados de teste, novamente, não há um número correto previamente definido para retornar o melhor resultado possível; o modelo irá responder com diferentes resultados dependendo da parcela atribuída para treinamento, portanto optou-se por variar desde 80% até 67% os dados de treinamento e realizar o teste da previsão com o remanescente das informações (Figura 36).

Figura 36: Variação do percentual para treinamento do dataset e suas predições.

Fonte: Elaboração Própria baseada nos dados do Campo.

Escolheu-se para trabalhar o exemplo de 80% do dataset por retornar um resultado mais aproximado da realidade (Figura 37), pelo fato de ter um Erro Quadrático Médio (EQM) de 43.424,67, e também pelo fato de ser a mesma fração utilizada por Cao et al. (2016) no seu desenvolvimento:

Figura 37: Comparação entre resultado LSTM e vazão real.

Fonte: Elaboração própria baseada nos dados do Campo.

0 100 200 300 400 500 600 700 800 900 1 15 29 43 57 71 85 99 113 127 141 155 169 183 197 211 225 239 253 267 281 295 309 323 337 351 m ³ d e ó le o /d ia Período (Dias)

Comparação entre Vazão Real e Prevista

Como é possível ver, em comparação com a realidade, o modelo demonstrou ser extremamente confiável, visto que há uma superposição entre ambas as curvas em diversos momentos.

Documentos relacionados