← Python · tijolo 02

Tijolo 2 — a sigmoid

espremer para 0 e 1

A sigmoid: o quanto o neurônio acende

O tijolo 1 terminava com um buraco: a continha do neurônio deu 0.7, mas podia ter dado 15 ou -3. Não tem limite. A sigmoid é a peça que espreme qualquer número para dentro da faixa 0 a 1.

import math

def sigmoid(x):
    return 1 / (1 + math.exp(-x))

A curva, medida

sigmoid(-10)  ->  0.0000
sigmoid(-2)   ->  0.1192
sigmoid(-0.7) ->  0.3318
sigmoid(0)    ->  0.5000
sigmoid(0.7)  ->  0.6682
sigmoid(2)    ->  0.8808
sigmoid(10)   ->  1.0000

Três coisas para reparar nessa tabela:

Os dois tijolos encaixados

bruto = neuronio([1, 0], [0.5, 0.8], 0.2)
print("Neurônio:", bruto)
print("Sigmoid do neurônio:", sigmoid(bruto))
Neurônio: 0.7
Sigmoid do neurônio: 0.6681877721681662

O neurônio fez a conta e deu 0.7; a sigmoid disse "este neurônio está 67% aceso". 0.6681877... é o mesmo 0.6682 da tabela, só que sem arredondar — round(numero, 4) corta.

É esse par que se repete um monte de vezes para formar a rede: o neurônio faz a conta, a sigmoid decide o quanto acende.

Onde este código mora

~/Área de trabalho/estudo_ia.py — o arquivo de estudo limpo, com o tijolo 1 e o tijolo 2 um embaixo do outro e os testes no fim.

Livraria do Neon · estante redes-neurais · o texto e o código são do João; o que entra de novo aqui é a arrumação para a web