Tópicos em alta
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
No episódio de hoje do programa de horror...
Na documentação em Python do random.seed() def, nos disseram
"Se a for um int, ele é usado diretamente." [1]
Mas se você semear com 3 ou -3, na verdade obtém exatamente o mesmo objeto de RNG, produzindo os mesmos fluxos. (Aprendi hoje). No NanoChat, eu estava usando o sinal como uma forma (que eu achava que era) inteligente para obter diferentes sequências de RNG para divisões de tren/teste. Daí bug nojento porque agora treino = teste.
Achei o código CPython responsável em cpython/Modules/_randommodule.c [2], onde na linha 321 vemos em um comentário:
"Esse algoritmo depende do número ser não sinalizado. Então: se o arg for um PyLong, use seu valor absoluto." seguido de
n = PyNumber_Absolute(arg);
que explicitamente chama abs() na sua seed para torná-la positiva, descartando o bit de sinal.
Mas esse comentário também está errado/enganoso. Por trás do capot, o Python chama o algoritmo Mersenne Twister MT19937, que no caso geral tem 19937 bits (não zero) de estado. Python pega sua int (ou outros objetos) e "espalha" essa informação entre esses bits. Em princípio, o bit de sinal poderia ter sido usado para aumentar os bits de estado. Não há nada no algoritmo que "dependa do número ser não sinalizado". Foi tomada a decisão de não incorporar a parte do sinal (o que, na minha opinião, foi um erro). Um exemplo trivial poderia ter sido mapear n -> 2*abs(n) + int(n < 0).
Finalmente, isso nos leva ao contrato do aleatório de Python, que também não está totalmente detalhado na documentação. O contrato mencionado é o seguinte:
Mesma semente = > mesma sequência.
Mas não há garantia de que sementes diferentes produzam sequências diferentes. Então, em princípio, o Python não promete que, por exemplo, seed(5) e seed(6) sejam fluxos de RNG diferentes. (Embora isso seja bastante comumente assumido implicitamente em muitas aplicações.) De fato, vemos que seed(5) e seed(-5) são fluxos idênticos. E provavelmente você não deveria usá-los para separar seus comportamentos de treino/teste em aprendizado de máquina. Uma das armas de footgun de horror de programação mais divertidas que encontrei recentemente. Nos vemos no próximo episódio.
[1]
[2]

Melhores
Classificação
Favoritos
