Aplicação de tecnologias de rede neural: desenvolvimento de software

1. Introdução


Atualmente, é preciso muito esforço para desenvolver software. É gasto muito tempo com o que seria lógico atribuir os metodologistas aos computadores, projetando, escrevendo especificações técnicas, testes, tudo isso é feito por uma pessoa e é feito muito lentamente. Mas isso é possível em princípio? O doutor em ciências técnicas Maxim Shcherbakov, em sua palestra "Redes neurais: matemática e magia", respondeu: "Sim, é possível". É bom ter um assistente automatizado que resolverá o problema simplesmente tendo certos critérios e modelos, mas ele não precisa pagar e fará isso no menor tempo possível, mas que tarefas específicas as redes neurais podem resolver hoje? O desenvolvimento do aprendizado de máquina hoje está dando trancos e barrancos hoje, então amanhã as máquinas poderão substituir uma pessoa em tarefas rotineiras. A elaboração de uma tarefa técnica não é a coisa mais agradável, principalmente devido à necessidade de pintar tudo com grande detalhe e forma (para mais detalhes, consulte o ponto 4). Cada empresa escolhe uma metodologia de desenvolvimento de software específica e raramente a altera. Mas e se a outra metodologia for melhor para o projeto do que a anterior ou a atual não for adequada? Seria lógico substituir, mas qual escolher (mais detalhes no parágrafo 5)? Testes adequados devem levar uma quantidade decente de tempo e pessoas. Bastante caro e longo (mais no parágrafo 6). Uma rede neural reduzirá o custo e acelerará todos esses estágios.

2. Abreviações


NS - Redes Neurais
Software - Software
TK - Termos de Referência
AI - Inteligência Artificial

3. Redes neurais artificiais


O que é inteligência artificial? Grosso modo, esta é uma simulação de uma pessoa usando um computador. O teste de Turing, em certo sentido, responde a essa pergunta. Consiste no fato de que, durante o diálogo, uma pessoa deve decidir quem é a pessoa ou a máquina à sua frente. Atualmente, o teste de Turing é considerado pouco correto e outros métodos de teste de inteligência artificial são usados. Para entender melhor por que esse teste não está totalmente correto, você pode simplesmente entregá-lo. Como um computador sabe que é uma pessoa na frente dele? Ele perguntará quanto 754534 * 32 será e iniciará o cronômetro. Portanto, assim como não podemos resolver a equação com rapidez suficiente, a máquina (por enquanto) não pode simular completamente a comunicação humana com todas as suas sutilezas e características. Nesta visão, uma simulação completa do cérebro por um computador parece impossível. Por enquanto, usamos a inteligência artificial apenas como assistentes em uma área específica.

3.1 Uma Breve História da IA


A história do desenvolvimento da inteligência artificial não é muito divertida e suave. Os primeiros experimentos sobre a criação de inteligência artificial ajudaram algumas empresas a economizar não pequenas quantidades de dinheiro. Por exemplo, a Digital Equipment Corporation, usando inteligência artificial, economizou US $ 10 milhões por ano. Chatbots, sistemas de identificação de bactérias e muito mais também foram desenvolvidos. Depois disso, as empresas de inteligência artificial não foram capazes de cumprir todos os seus altos objetivos e, finalmente, fecharam, por causa disso, tempos difíceis chegaram para a IA e a comunidade começou a olhar para o aprendizado de máquina e as redes neurais. Em 1943, Warren McCallock e Walter Pitts cunharam o termo rede neural artificial. Modelo realizando cálculos usando neurônios biológicos. E depois de 63 anos nas universidades de Toronto e Montreal, eles começaram a ensinar redes neurais profundas com força e força, o que se tornou uma verdadeira revolução para o aprendizado de máquina!

3.2 O princípio da rede neural, seus sucessos e fraquezas


De forma simplificada, o princípio de operação de uma rede neural é encontrar dependências e alterar pesos.Se a ação estiver correta, as escalas responsáveis ​​por essa ação serão fortalecidas e vice-versa. E para ser mais preciso, o princípio é reduzir algumas funções de erro. A descida de gradiente é usada com mais frequência para esse fim.



Todo mundo já ouviu falar sobre os sucessos das redes neurais. Eles derrotam os campeões do jogo GO, para jogar o que, em teoria, é a única prerrogativa de uma pessoa e é muito complicado para um computador, mas aparentemente isso não é verdade. Não faz muito tempo, em 2015, o AlphaGo venceu o campeão ao vencer quatro dos cinco jogos. Nada mal, né? Dois anos depois, em 2017, a rede neural foi aprimorada e ela derrotou 9 campeões do GO, vencendo sessenta dos sessenta jogos. O pior para os campeões foi que o programa agiu absolutamente aleatoriamente e, no final, venceu de qualquer maneira. Como o Google (desenvolvedores AlphaGo) alcançou esse resultado? Tudo apenas melhorou o AlphaGo treinado com seu antecessor. A própria rede neural encontrou as deficiências e as corrigiu.



As redes neurais também aprenderam a escrever música. Tendo “escutado” as obras-primas dos clássicos do mundo, a rede neural compôs sua própria música e, sem uma boa compreensão do aprendizado de máquina, é quase impossível distinguir a criação humana da criação de máquinas. Na palestra “Redes Neurais: matemática e magia”, eles incluíram um dos trabalhos de computação em computadores e se ofereceram para ouvir dizendo anteriormente que foi criado por um grande músico. Depois de ouvir a platéia, eles perguntaram: "Alguém ficou viciado?" alguns responderam que sim. Acontece que os carros podem fazer? A resposta é bastante difícil. Para entender o porquê, examinaremos o princípio da rede neural usando o exemplo de uma sala com um número muito grande de folhetos com símbolos que não entendemos. Temos um algoritmo de como, onde e qual folha mudar ou nós mesmos construímos esse algoritmo com base no fato de sermos incentivados ou repreendidos por nossas ações. E aqui recebemos uma solicitação de entrada, depois que corremos para mudar as folhas de acordo com nosso algoritmo e obtemos um conjunto de folhas dobradas para a saída, não entendemos o que esses símbolos significam na entrada e o que obtemos na saída, somos uma rede neural. Vamos voltar a fazer música. Acontece que a rede neural não cria o trabalho, é apenas caótica, mas com certas regras vence os acordes sem entender o que está fazendo (lembra a pintura moderna). Um exemplo de música criada por uma rede neural da Yandex:


Eles também aprenderam a desenhar redes neurais usando o mesmo princípio da música.



Como você pode ver, o aprendizado de máquina permite resolver uma enorme variedade de tarefas. Mas como ensiná-los a fazer tudo isso? O segredo está no aprendizado de máquina. Vamos voltar para a sala com as folhas e lembrar que "temos um algoritmo de como, onde e qual folha transferir" nessa situação a rede neural já está treinada. Ela sabe o que e onde colocar, mas havia também uma segunda opção: "nós mesmos construímos esse algoritmo com base no fato de sermos encorajados ou repreendidos por nossas ações"; é essa opção que formula o chamado treinamento da rede neural de reforço. Um certo "professor" incentiva as ações corretas da rede neural, como resultado de que ela se lembra e tenta encontrar uma dependência nas ações corretas ou um "professor" repreende a rede neural por seus erros e ela está cada vez mais tentando encontrar uma dependência nas ações corretas. As redes neurais também são ensinadas usando métodos: com um professor, sem um professor, com um envolvimento parcial do professor. A escolha depende das condições em que a rede neural é treinada.

Usando o treinamento com um professor, devemos enviar um conjunto de dados com as respostas corretas ou outro conjunto de dados de treinamento para a entrada, após o qual a rede neural deve identificar padrões e responder corretamente ao conjunto de dados de teste. Geralmente (o que é lógico), a rede neural é mais frequentemente confundida com a amostra de teste, devido ao “problema de reciclagem”.



Quando uma rede neural processa os mesmos dados muitas vezes, ela se adapta exclusivamente a essa amostra de dados, como resultado, em uma nova amostra em que muitas redes neurais diferentes são confundidas.

Usando o treinamento sem um professor, também enviamos dados, mas não sabemos a resposta correta e a tarefa é realmente encontrar a dependência desses dados. O treinamento parcial de professores é mais frequentemente usado no treinamento de redes neurais capazes de processar som. Podemos encontrar quantos dados quisermos, mas a marcação terá que ser feita manualmente.

O mais interessante (de acordo com algumas opiniões) é o treinamento por reforço, pois podemos essencialmente ensinar qualquer coisa à rede neural simplesmente observando a ação correta ou incorreta que ela executou. Em 2017, o campeonato de e-sports DOTA 2 foi realizado sob o nome "The International 2017", no qual jogadores profissionais jogaram contra a rede neural OpenAI (embora com algumas restrições). Profissionais não tiveram chance de ganhar. Para treinar essa rede neural, foi utilizado um método de reforço. A rede neural já jogou tantas vezes e aprendeu a vencer sem problemas. Claro, isso não funciona sem problemas, pois o jogo é bastante complicado e você pode enganar a rede neural. Um jogador profissional conseguiu vencer apenas por engano.


Agora que entendemos o básico, podemos discutir o uso de redes neurais como assistentes para programadores.

4. O uso de redes neurais na criação de especificações técnicas


4.1 Princípio


Quem pode precisar de software? Hoje em dia, todos precisam e com finalidades completamente diferentes. Frequentemente, eles próprios não podem criar o software, ou, portanto, não desejam, recorrem a programadores. Mas como você explica ao artista o que você quer? Em princípio, um programador pode elaborar uma tarefa técnica e dizer condicionalmente o que estará no programa, mas nem todos serão completamente claros devido ao uso de termos ou serão mal compreendidos. Que tal desenhar o TK individualmente? É difícil, longo e não tão necessário a esses custos, mas quando é necessário fazer algo difícil e por um longo tempo, por que não atribuir essa tarefa a um computador? Uma rede neural realizará essa tarefa.

4.2 Necessidade


O construtor está longe de programar e de fato longe do computador. Para ele, a linha “Processador Intel Core i5 4200M de 2,5 GHz e superior” não diz nada, e por que então precisa de TK? Vamos ensinar uma rede neural a mudar as linhas de cada um individualmente, com base no que ele faz. Por exemplo, siga a mesma linha do parágrafo 4.3 “Intel Core i5 4200M 2.5 GHz ou superior”, por exemplo, vamos mudar para o nome abreviado e o custo médio deste processador no mercado. Portanto, será mais informativo para o cliente.

4.3 Implementação


Isso pode ser feito usando o método de ensino com um professor. Na entrada, enviamos um conjunto de informações que o contratado pode receber sobre clientes condicionais. Também adicionaremos atalhos e os penduramos nas pessoas, e um programa ficará atrás de cada atalho, o que mudará o texto. A tarefa de classificação padrão é um conjunto de dados e várias opções de resposta. Suponha que uma rede neural tenha determinado que o nível de conhecimento do cliente nessa área não esteja em um nível alto e pendure uma etiqueta apropriada depois que se voltar para o programa que é responsável por essa etiqueta e o texto foi substituído pelo correspondente ao conhecimento do cliente. Isso não está certo, pois a operação de uma rede neural é reduzida apenas para determinar o tipo de cliente e o próprio programa altera o texto.

Que tal substituir o programa responsável pelos atalhos por uma rede neural ( kremlebot ) semelhante à usada para criar resenhas para sites, filmes e geralmente onde as resenhas são usadas. Ensinaremos a rede neural a usar os termos inerentes à etiqueta do cliente em troca dos termos do programa, e em breve o programa reformulará e transmitirá dados ao executor de acordo com a descrição aproximada do cliente. Muito provavelmente, no início, será possível usar as comunicações de rede neural apenas para o ponto "4. Requisitos técnicos para o produto de software", devido ao fato de haver principalmente uma "zona de problema" lá. Item "8. O horário de trabalho ”também pode ser transferido para a rede neural, mas mais sobre isso na cláusula 6.
Mais tarde, quando as tecnologias evoluírem um pouco, será possível transferir todo o projeto da tarefa técnica para os ombros de uma rede neural, ou melhor, para uma cadeia conectada de redes neurais. Como nosso cérebro, os componentes individuais serão responsáveis ​​pelos processos individuais em nosso organismo neural artificial. Tudo isso permitirá destruir a barreira profissional de comunicação (também chamada barreira barreira) entre o cliente e o contratado.

4.4 Conclusão


A implementação disso não é muito complicada, principalmente a primeira rede neural. Você terá que mexer com o segundo, mas no final, ele dará frutos. Esse uso de uma rede neural simplificará a interação entre o cliente e o contratado.

5. O uso de redes neurais na criação de metodologias ótimas de desenvolvimento de software


Um homem dificilmente aceita algo novo quando já está acostumado. Mesmo que uma pá seja mais conveniente, mais simples, mais fácil, uma pessoa continuará a usar um graveto para cavar um buraco. É muito claramente visto entre gerações. As avós, tendo a oportunidade de pagar um apartamento comum em casa pela Internet, preferem dirigir metade da cidade. Porque Como, em primeiro lugar, são pessoas e, como a maioria das pessoas, não gostam de mudar, em segundo lugar, não querem aprender coisas novas, consideram isso muito difícil para elas e nem tentam se aprofundar. O mesmo vale para metodologias. As empresas, especialmente as grandes, não estão muito dispostas a mudar a metodologia, que já funciona. Mas e se a metodologia selecionada não for ideal ou completamente inadequada para um determinado projeto? É lógico dizer o que precisa ser substituído pelo ideal, mas qual será o escolhido e o que significa ótimo? Aquele que a equipe aceitará facilmente ou aquele que acelerará o desenvolvimento? Quem pode confiar um trabalho responsável? Vamos ver como as redes neurais podem resolver isso.

5.1 Implementação


Provavelmente, para uma rede como essa não se pode gerenciar e precisaremos novamente de uma cadeia de conexões, cada uma das quais será responsável por uma tarefa separada. Nesta situação, temos um conjunto de dados sobre o uso de metodologias e os próprios projetos para os quais foram aplicados. Você também pode adicionar dados sobre os desenvolvedores, mas isso complicará muito tudo, por isso adiaremos por um tempo. Na presença de um conjunto de dados que não tem uma "resposta" significa que usamos o método sem um professor. A própria rede neural encontrará a relação entre o tempo gasto no desenvolvimento e os dados no próprio projeto. Provavelmente, a precisão não será muito alta devido ao fator humano. Será necessária uma segunda rede neural, que analisará os desenvolvedores com base em, por exemplo, correspondência (que exigirá o consentimento deles) ou como eles preferem trabalhar. E adicione atalhos como aqueles que estavam no parágrafo 4 e os retornaremos à primeira rede neural para processamento. Aqui você terá que usar o método com um envolvimento parcial do professor. Teremos que selecionar um grupo de pessoas e identificar seus caracteres (atalhos) por testes e enviar esses dados para a entrada. Agora é necessário determinar com o que a rede neural procurará um relacionamento. Se você aceitar a correspondência, primeiro as pessoas não gostarão, porque os dados pessoais são usados; em segundo lugar, não dará um resultado exato. Em seguida, tentaremos usar dados sobre o trabalho dessas pessoas, mas o problema aqui é a disponibilidade desses dados na rede neural. Transferir correspondência para a entrada não será difícil, mas como coletar e transformar dados sobre o trabalho dessas pessoas? Vamos para o outro lado. Como "personagens", assumimos 8 tipos de papéis identificados pela Dra. Meredith Belbin.



Agora, temos rótulos e características específicas para determinar qual deles deve ser mantido. É bastante difícil levar em consideração o fator humano em vista de seu estocástico, mas, no entanto, alguns padrões são traçados, o que pode ser visto pela rede neural. Suponha que o assunto tenha o primeiro rótulo "Presidente", mas a Assembléia Nacional não o conhecerá. As características dessa personalidade, a rede neural pode extrair dos arquivos pessoais disso, serão suficientes para ela. Com base nos relatórios, também será formado qual rótulo será aplicado a essa pessoa. Como resultado, um atalho será desligado e enviado à primeira rede neural para processamento e localização de relacionamentos. Tudo isso é bastante complicado, mas aumentará significativamente a precisão ao escolher uma metodologia para a rede neural. Nossa cadeia treinou e pode determinar a partir dos dados de entrada qual metodologia será ideal no tempo, levando em consideração as características da equipe de desenvolvimento. Se a equipe usar constantemente a rede neural para selecionar metodologias, passo a passo ela aprenderá cada vez melhor pagando por si mesma e aumentando sua precisão. A partir disso, a rede neural não é a melhor saída devido ao aprendizado prolongado. Vamos ver o que mais o aprendizado de máquina pode fazer por nós.

5.2 Conclusão


Uma rede neural não é adequada para essa tarefa devido ao grande número de fatores humanos e ao treinamento longo e caro.

6. Teste de software usando redes neurais


Somos todos seres humanos e tendemos a cometer erros. Kevin Mitnik disse uma vez: “As pessoas são o elo mais fraco da segurança. Pessoas, não tecnologia. ” Com o desenvolvimento de tecnologias de desenvolvimento de software, os mesmos problemas sempre permanecem. Deficiências, bugs, erros. Tudo isso aparece devido à preguiça humana, desatenção ou não conhecimento. Depurar e testar resolve esse problema.

6.1 -


Os testes levam até sessenta por cento do tempo total.Este é o estágio mais longo do desenvolvimento de software. Isso ocorre devido à complexidade da automação desse estágio, devido à falta de estocástica nos auto-testadores e à complexidade de sua criação. A melhor opção é o teste manual, porque nenhum programa (no momento) pode substituir completamente uma pessoa. Longo e difícil de implementar? Novamente usamos a ajuda de uma rede neural. Primeiro você precisa entender o que significa testar com uma rede neural. É imediatamente necessário entender que a criação de um testador universal não funciona. Você precisará criar para cada tarefa generalizada separadamente, por exemplo, uma rede neural que testa sites. Primeiro, vamos tentar descobrir seu princípio de operação e se o seu uso nessa direção é possível.O que enviamos para a entrada? O que esperamos sair? A amostra de treinamento consistirá em locais comprovados nos quais a rede neural será treinada. Deixando nosso amigo vryatli livremente obter o resultado desejado, restringimos o NS em termos de objetos que podem estar presentes no site, todos os tipos de botões, barras, caixas de seleção e ações que a rede neural pode executar. Enquanto a rede neural está se divertindo e se lembrando do que acontece com uma ação dessas, e com isso, e procurando vício, criamos o site com mais bugs de tudo o que existe e configuramos a rede neural para enviar uma mensagem se o evento não atender às suas expectativas. Ao enviar este site para a entrada, receberemos mensagens sobre possíveis erros, automatizando assim o processo de criação da Folha de Aceitação.Deixando nosso amigo vryatli livremente obter o resultado desejado, restringimos o NS em termos de objetos que podem estar presentes no site, todos os tipos de botões, barras, caixas de seleção e ações que a rede neural pode executar. Enquanto a rede neural está se divertindo e se lembrando do que acontece com uma ação dessas, e com isso, e procurando vício, criamos o site com mais bugs dentre tudo o que temos e configuramos a rede neural para enviar uma mensagem se o evento não atender às suas expectativas. Ao enviar este site para a entrada, receberemos mensagens sobre possíveis erros, automatizando assim o processo de criação da Folha de Aceitação.Deixando nosso amigo vryatli livremente obter o resultado desejado, restringimos o NS em termos de objetos que podem estar presentes no site, todos os tipos de botões, barras, caixas de seleção e ações que a rede neural pode executar. Enquanto a rede neural está se divertindo e lembrando o que acontece com uma ação dessas, e com isso, e procurando vício, criamos o site com mais bugs dentre tudo o que temos e configuramos a rede neural para enviar uma mensagem se o evento não atender às suas expectativas. Ao enviar este site para a entrada, receberemos mensagens sobre possíveis erros, automatizando assim o processo de criação da Folha de Aceitação.que uma rede neural pode executar. Enquanto a rede neural está se divertindo e se lembrando do que acontece com uma ação dessas, e com isso, e procurando vício, criamos o site com mais bugs de tudo o que existe e configuramos a rede neural para enviar uma mensagem se o evento não atender às suas expectativas. Ao enviar este site para a entrada, receberemos mensagens sobre possíveis erros, automatizando assim o processo de criação da Folha de Aceitação.que uma rede neural pode executar. Enquanto a rede neural está se divertindo e se lembrando do que acontece com uma ação dessas, e com isso, e procurando vício, criamos o site com mais bugs de tudo o que existe e configuramos a rede neural para enviar uma mensagem se o evento não atender às suas expectativas. Ao enviar este site para a entrada, receberemos mensagens sobre possíveis erros, automatizando assim o processo de criação da Folha de Aceitação.

Aplicação Web. Método de reforço. Cenoura e palito.

É difícil prever a precisão da versão do teste anterior, pois a rede neural pode não aprender corretamente e esperar um resultado ilógico. Existe uma segunda opção que é mais longa, mas mais precisa e universal. A rede neural simplesmente monitorará as ações dos testadores, assim aprendendo usando o método reforçado. Ele receberá uma grande quantidade de dados encontrando uma conexão neles e os reproduzindo. A rede neural deve registrar não apenas as ações no site, mas também em que momento o testador registrará uma mensagem sobre o bug para encontrar a conexão. Aqui já temos uma versão mais precisa do testador independente. Mas, ao mesmo tempo, existe e existe um fator humano que não é uma tarefa fácil de descrever por função; portanto, é difícil para as redes neurais fornecer estocticidade humana.

6.2


Ao testar o software, nós, como a seção anterior, podemos usar o método com reforços. Um método extremamente universal que permite ensinar uma rede neural quase tudo. Colocamos uma rede neural para monitorar o grande número de testadores. Dividiremos suas funções em testes funcionais e não funcionais. A rede neural responsável pelo teste funcional será baseada nos termos de referência. Para o treinamento dela, usaremos um conjunto de TK e bugs encontrados pelos programadores nesses programas. Aqui você também pode usar a rede neural do parágrafo 5 para adicionar atalhos aos dados fornecidos à entrada. Assim, o NS poderá notificar possíveis bugs ou erros, além de melhorar constantemente a si próprio ao longo do tempo e se ajustar a uma equipe de desenvolvimento específica.Para testes não funcionais, você pode usar programas convencionais, pois a rede neural aqui será apenas uma complicação.

6.3 Conclusão


Uma rede neural é boa para testar sites, mas ao mesmo tempo, leva muito tempo para ser treinada. A mesma coisa acontece com os testes de software, mas um pouco pior e mais difícil de implementar os próprios testes.

7. Conclusão


Em resumo, podemos dizer que o uso de redes neurais para o desenvolvimento de software acelerará o processo, mas não em todos os casos. Todos os itens acima, é claro, funcionam apenas na teoria, na prática tudo pode não ser tão otimista, mas o trabalho é estudar a possibilidade, pelo menos na teoria, de acelerar o desenvolvimento de software usando uma rede neural. Meu resultado final do estudo é a resposta: e não apenas na teoria, mas com abordagens e análises individuais de uma pessoa como pessoa, haverá grandes problemas que atualmente são difíceis de superar. Para o uso completo das redes neurais como assistentes, é necessário um longo treinamento, que mais tarde será recompensado. A rede neural é mais adequada para criar especificações técnicas, ou melhor, para simplificar a interação entre o contratado e o cliente.Uma rede neural destrói a barreira da comunicação, o que acelera e facilita todo o processo. Também vale a pena notar que a possibilidade de usar redes neurais em testes também é extremamente útil. Uma rede neural pode prever um possível bug do que acelerar o teste. Isso não irá acelerar drasticamente o processo, mas facilitará um pouco. Infelizmente, redes neurais não são muito eficazes na seleção de metodologias. Uma rede neural não pode começar a entender os sentimentos das pessoas; portanto, ela pode apenas escolher uma metodologia baseada em dados estatísticos.Infelizmente, redes neurais não são muito eficazes na seleção de metodologias. Uma rede neural não pode começar a entender os sentimentos das pessoas; portanto, ela pode apenas escolher uma metodologia baseada em dados estatísticos.Infelizmente, redes neurais não são muito eficazes na seleção de metodologias. Uma rede neural não pode começar a entender os sentimentos das pessoas; portanto, ela pode apenas escolher uma metodologia baseada em dados estatísticos.

As redes neurais estão se desenvolvendo aos trancos e barrancos e quem sabe com que rapidez os mesmos andróides humanóides aparecerão em nossas casas que ( destruir toda a humanidade ) melhorarão nossas vidas.


(Android Sofia)

Referências

Nikolenko, S. Deep Learning: imersão no mundo das redes neurais / S. Nikolenko, A. Kadurin, E. Arkhangelskaya - São Petersburgo - Deep Learning. - SPb: Peter, 2018 - 480 p .: III. - (Série "Biblioteca do programador").

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


All Articles