Malé reziduum ještě neznamená správné parametry
Tuhle kapitolu si vynutil vlastní spadlý test, a je to nejdůležitější věc v celé labce.
Úloha: proložit daty součet dvou exponenciál, model se čtyřmi parametry.
Data byla vyrobena z pravdivých parametrů [−4, −5, 4, −4] a doplněna malým šumem. Test tvrdil, že nalezené parametry budou pořád „blízko pravdě". Spadl — a solver měl pravdu.
Co Levenberg-Marquardt našel: parametry [−4,571, −4,583, 373,9, −373,9]. Třetí a čtvrtý jsou stokrát větší, než mají být. A přitom je reziduum toho fitu 6,81·10⁻², zatímco reziduum v pravých parametrech je 7,71·10⁻². Nalezené řešení je tedy lepší než pravda.
Proč se to stalo
Není to chyba optimalizace. Je to vlastnost modelu. Když se obě rychlosti přiblíží k sobě — x₁ = a + ε, x₂ = a − ε — a koeficienty se nastaví na x₃ = C/2ε, x₄ = −C/2ε, pak
Součet dvou exponenciál tedy umí napodobit úplně jinou funkci — C·t·e^{at} — a koeficienty přitom utečou do nekonečna. Dvě naprosto různé sady parametrů dávají prakticky tutéž křivku.
Největší odchylka od C·t·e^{at}: 7.20e-3
Když se ε blíží nule, koeficienty utečou do nekonečna a křivka se přesto skoro nezmění. Dvě naprosto různé sady parametrů dávají tutéž křivku — a žádný optimalizátor mezi nimi nemůže rozhodnout, protože není podle čeho.
Co s tím
Lepší optimalizátor nepomůže, protože žádný optimalizátor nemá podle čeho mezi těmi sadami rozhodnout. Pomůže jen menší model. Když se rovnou proloží dvouparametrické C·t·e^{at}, vyjde stejně dobré reziduum a parametry jsou dobře určené. Testy tady ověřují obojí.
| příznak | co znamená |
|---|---|
| koeficienty utíkají do velkých hodnot | skoro jistě degenerace |
| dva parametry se skoro vyruší | model má nadbytečný stupeň volnosti |
| reziduum je skvělé, ale parametry nesmyslné | fit sedí, model nikoli |
| malá změna dat velmi změní parametry | úloha je špatně podmíněná |
To je táž věc, kterou si VisionLab zapsal u hand-eye kalibrace — „malé reziduum není důkaz". Tady v nejostřejší podobě: reziduum není jen malé, ono porazí pravdu.
Praktický důsledek pro robotiku. Identifikace parametrů ramene — hmotností, poloh těžišť, tření — je přesně tenhle druh úlohy a trpí přesně tímhle. Proto se identifikuje jen to, co je z daného pohybu vůbec identifikovatelné (takzvané základní parametry), a ne všechno, co v modelu stojí. Když se to nedodrží, vyjdou hmotnosti, které jsou záporné, a fit bude výborný.