Fique à frente com estratégias financeiras práticas, dicas, notícias e tendências.
Redes neurais para iniciantes Pt.1
O mundo do desenvolvimento de software está passando por algumas mudanças fundamentais com o ressurgimento de várias técnicas de IA. O impacto mais significativo veio na forma de aprendizado de máquin
abril 9, 2019
O mundo do desenvolvimento de software está passando por algumas mudanças fundamentais com o ressurgimento de várias técnicas de IA. O impacto mais significativo veio na forma de aprendizado de máquina e, mais especificamente, de um subconjunto de aprendizado de máquina chamado aprendizado profundo. O ML é simplesmente uma forma de IA que permite que um sistema "aprenda" ou seja "treinado" a partir de dados, e não por meio de programação explícita. É importante observar que essas técnicas não são novas. O termo IA foi cunhado pela primeira vez por John McCarthy em 1956 e é definido como a capacidade de uma máquina de imitar o comportamento humano inteligente. Isso não deve ser confundido com o fato de uma máquina ter inteligência real ou ser capaz de imitar genericamente um ser humano real. Os sistemas de IA são projetados para imitar capacidades humanas específicas. Por exemplo: entender a linguagem, resolver problemas específicos, reconhecer sons/imagens e categorizá-los, fazer previsões etc. Cada um desses recursos é muito poderoso, mas não reflete a inteligência "real".
Há vários tipos diferentes de IA que foram pesquisados ao longo dos anos, e a maioria foi deixada de lado com o renascimento do aprendizado de máquina. Na década de 90, as duas subcategorias de IA mais pesquisadas eram ML e sistemas especializados. Os sistemas especializados são uma técnica em que um sistema é programado com um conjunto de regras em vez de ser explicitamente codificado. As regras eram processadas por um "mecanismo de regras/inferência" e podiam ser dimensionadas para lidar com dezenas de milhares de eventos por segundo, mesmo em um hardware modesto. O problema é que as regras reais ainda precisavam ser definidas por especialistas no assunto e eram limitadas pela capacidade do especialista de descobrir todas as situações possíveis. Na verdade, não se trata de IA, mas de uma aproximação dela.
O aprendizado de máquina, por outro lado, é uma técnica em que o software (modelo) aprende com os dados em vez de ser criado/codificado ou definido pelos desenvolvedores de software. A técnica específica de ML que estou descrevendo neste documento é conhecida como Deep Learning ou Redes Neurais. Gostaria de salientar que essa técnica NÃO é nova e foi originalmente desenvolvida nos anos 60, 70 e 80. De fato, o avanço que tornou as redes neurais utilizáveis foi chamado de retropropagação e descoberto/publicado em 1986. Infelizmente, embora as técnicas fundamentais para implementar redes neurais fossem bem compreendidas, elas não eram realmente úteis naquela época devido aos enormes recursos de processamento e tamanhos de conjuntos de dados necessários para treinar as redes. A única solução comercial de que me lembro foi um produto da Computer Associates, nos anos 90, chamado Neugents (parte de seu pacote de gerenciamento de sistemas). As redes neurais foram abandonadas pelo setor comercial e pela maior parte do setor acadêmico, com apenas algumas universidades continuando a fazer pesquisas nesse campo, principalmente aqui no Canadá.
Voltemos às redes neurais, que, na verdade, não são muito complicadas.
Começando pelo básico, uma rede neural é uma coleção de neurônios unidos em camadas em cascata. A rede começa com uma camada de entrada, passa por camadas ocultas e os resultados finalmente passam pela camada de saída. Antes de me aprofundar nos detalhes dessa estrutura, precisamos começar com o que se entende por neurônio (não nos referimos a uma célula viva real).
Um neurônio é um elemento de computação que recebe várias entradas e calcula uma única saída. Aqui está um exemplo simples:
Este neurônio tem 2 entradas.
Cada entrada é multiplicada pelo peso.
As entradas ponderadas são então somadas e um valor de polarização é adicionado a elas.
Por fim, o valor ilimitado é passado por uma função de ativação (sigmoide, por exemplo) para reduzi-lo a um intervalo previsível (por exemplo, 0 a 1).
Aqui está um exemplo de um único neurônio em ação:
Entrada 1 = 5, Entrada 2 = 8, W1 = 1 e W2 = 0,5, finalmente nosso Bias é 3
Nossa saída tem a seguinte aparência
Af( ( 5 * 1 ) + ( 8 * .5 ) + 3 )
Af( 12 ) = 0,999
Vamos tentar novamente com um conjunto diferente de inputs, pesos e bias:
Input 1 =-10, Input 2 = 10, W1 = 0,2, W2 = 0,1, Bias = 0,5
Saída = Af( (-10 + 0,2) + ( 2 X 0,1) + 0,5)
Saída = Af( -8,1 ) = 3,034
Um único neurônio por si só é essencialmente inútil, a não ser como um exercício matemático interessante, mas se colocarmos vários neurônios juntos em camadas, podemos ter uma rede neural na forma de:
Essa é uma rede neural extremamente simplista com 2 entradas, uma única camada oculta de neurônios e, finalmente, um único neurônio de saída. As redes neurais podem ter qualquer número de entradas, camadas e qualquer número de neurônios nessas camadas. Essa flexibilidade é o único problema sério das redes neurais. Como o projetista da rede sabe qual é o número ideal de camadas e de neurônios dentro dessas camadas? Existem algumas diretrizes sobre por onde começar, mas a realidade é que descobrir isso é uma questão de tentativa e erro. Atualmente, há muitas pesquisas muito promissoras em andamento para ajudar nesse sentido, mas estamos apenas começando a descobrir essa parte.
Então, como escolher os pesos e as tendências corretas para cada neurônio e como ele "aprende"?
Ótimo tópico para a próxima edição.


Inscreva-se no blog