Pytanie:
Jak dostroić wydajność algorytmów w pracach informatycznych
Ulderique Demoitre
2016-04-21 03:03:03 UTC
view on stackexchange narkive permalink

W dziedzinie informatyki często tworzy się artykuły, które przedstawiają algorytmy, które szacują coś z pewną dokładnością i określoną szybkością.

Wiele algorytmów można wyraźnie dostroić, aby uzyskać wysoką wydajność, zmniejszając nieco dokładność, lub wysoka dokładność, kompromitująca w tym przypadku wydajność.

Kiedy autor proponuje nowy algorytm, powinien przedstawić empiryczne wyniki dotyczące wydajności ORAZ empiryczne wyniki dotyczące dokładności.

Czy prezentowanie wyników jest uczciwe o wydajnościach uzyskanych za pomocą algorytmu dostrojonego na szybki (i mniej dokładny) oraz o wynikach dotyczących dokładności z algorytmem dostrojonym tak, aby był precyzyjny (i wolny)?

Zobacz także [Volkswagen] (http://www.reuters.com/article/us-volkswagen-emissions-usa-idUSKCN0XH2CX), którzy są uwikłani w poważny skandal z powodu robienia prawie dokładnie tego, co opisujesz. Mianowicie zaprogramowali swoje samochody deisel tak, aby w niektórych sytuacjach miały pewne dostrojenie silnika, a inne w innych. Niekoniecznie jest to wielka sprawa sama w sobie, stała się wielką sprawą, ponieważ nie ujawnili, że ich silniki mają różne obroty, i zaprogramowali je w ten sposób, aby dokładnie oszukać wszystkich co do zmierzonych właściwości silnika.
Niestety, dzieje się to często w CS, szczególnie w uczeniu maszynowym i tak dalej. Proszę, zniechęcaj do tego zachowania. To właśnie sprawia, że ​​ludzie są sceptyczni wobec CS, fakt, że jest to * tak łatwe * do zrobienia. Nie przyczyniaj się do degradacji pola, a wręcz przeciwnie, spróbuj je wyczyścić!
W rzeczywistości spodziewałbym się wykresu dokładności wykreślania w funkcji czasu wykonania.
Moja ogólna praktyczna zasada: jeśli masz całkowitą jasność co do wyników, nie ma problemu etycznego.
_Kiedy autor proponuje nowy algorytm, powinien przedstawić wyniki empiryczne_ - ... chyba że jest to praca teoretyczna. (kaszel)
Dodam, że oba końce są właściwie ciekawe. Czasami chcę jak najlepszych wyników i nie mam nic przeciwko czekaniu na nie trochę dłużej; ale innym razem mam eksperyment na dużą skalę i preferowany jest szybszy algorytm, nawet jeśli muszę poświęcić trochę wydajności.
Twierdzenie zarówno o szybkości *, jak i * dokładności algorytmu, gdy w rzeczywistości nie zostało to zaobserwowane, jest po prostu fałszywe. Jeśli twoje obserwacje nie potwierdzają twoich stwierdzeń, możesz zostać oskarżony o sfałszowanie wyników.
Sześć odpowiedzi:
Ric
2016-04-21 03:36:22 UTC
view on stackexchange narkive permalink

Nieuczciwe byłoby zrobienie tego bez wspominania, że ​​algorytm został dostrojony inaczej. Powinieneś określić, co zmieniło dostrojenie i jak to wpływa na wyniki algorytmu.

Powinieneś także wymienić wyniki dokładności dla szybkiego algorytmu i wyniki szybkości dla dokładnego algorytmu. (Prawdopodobnie chcesz też trochę liczb do tuningu w połowie drogi). Nie wymienianie „złych” wyników nie jest nieuczciwe, ale to zła nauka. Jeśli nie podasz tych liczb, spodziewam się, że recenzenci podniosą je i poproszą o nie.

To część „bez wspominania” sprawia, że ​​ta odpowiedź jest najlepsza. Jak myślisz, dlaczego tak wiele reklam telewizyjnych ma drobny druk?
David Richerby
2016-04-21 13:21:56 UTC
view on stackexchange narkive permalink

Parafrazując pytanie: „Czy uczciwie jest sugerować, że mój algorytm jest zarówno szybki, jak i dokładny, podczas gdy w rzeczywistości może być tylko szybki i niezbyt dokładny lub dokładny i nie tak szybki?”

NIE !!!

Oczywiście, że tak nie jest. Poważnie, dlaczego w ogóle musisz o to pytać?

Martin Ueding
2016-04-21 14:53:15 UTC
view on stackexchange narkive permalink

Jestem tylko mistrzem, więc nie wiem zbyt wiele o dynamice „gry”. Dlatego mogę tylko wyrazić opinię widza.

Jeden z moich przełożonych lubi mieć brutalnie szczere wątki w swoich artykułach. Jego praca koncentruje się na skalowaniu algorytmów równoległych. Na początek wybiera mocne skalowanie zamiast słabego skalowania. Ten pierwszy ma ustalony rozmiar problemu i używa większej liczby procesorów $ P $ do uruchomienia. Idealnie byłoby, gdybyś uzyskał spadek w czasie o 1 USD / P $. Wykonując podwójny wykres logarytmiczny czasu w funkcji liczby procesów, a także wykreślając idealną krzywą 1 $ / P $, szybko zobaczysz, kiedy idzie źle.

Słabe skalowanie to skalowanie rozmiaru problemu za pomocą zasobów. Wtedy potrzebny czas powinien pozostać stały. W przypadku problemów, które stają się trudne do zrównoleglenia na jakimś dobrym poziomie, nigdy nie zobaczysz niczego interesującego w słabym skalowaniu. Dzięki silnemu skalowaniu możesz wejść w skrajności, takie jak „jeden piksel na rdzeń” lub „jeden atom na wątek”.

Powiedział, że interesujące części (w nauce) to te, które jeszcze nie działają. Z pewnością potrafi ułożyć fabułę, dzięki której algorytm będzie wyglądał świetnie. Ale nie to go interesuje. Chce wiedzieć, jak daleko można to posunąć.

Naprawdę podziwiam tę brutalną szczerość. Jeśli ktoś ma wyniki, które są tylko takie sobie, to ta metoda jasno pokaże, że nie są one takie wspaniałe. Z drugiej strony, jeśli sam pozbędziesz się całej powierzchni ataku, nikt nie będzie mógł cię później rozerwać na strzępy za ukrycie czegokolwiek.

Dlatego sporządziłbym wykresy, które pokazują, jak słaba jest dokładność, gdy optymalizujesz pod kątem szybkości. Zawarłbym uczciwy wykres dokładności w funkcji prędkości (lub odwrotnie). Wtedy można albo sprawdzić, czy w środku znajduje się słodki punkt i jak dobrze jest.

Jeśli twój algorytm idzie do skrajności, ale ma fajny środek, myślę, że warto o tym wspomnieć . A jeśli ekstrema są tylko o kilka procent wolniejsze lub mniej dokładne, to również jest wynik.

Dmitry Grigoryev
2016-04-21 20:01:47 UTC
view on stackexchange narkive permalink

Porównaj jabłka z jabłkami

Wydajność algorytmu rzadko jest oceniana w izolacji: zwykle różne algorytmy są porównywane ze sobą lub z jakimś algorytmem referencyjnym. Dokonując takiego porównania, należy określić warunki, w których zostały ocenione algorytmy referencyjne, i ocenić swój własny algorytm w tych samych warunkach:

  • jeśli algorytmy referencyjne mają porównywalną dokładność, dostrój algorytm tak, aby taką samą dokładność i porównaj wydajność
  • jeśli algorytmy referencyjne mają podobną wydajność, dostosuj własne do tej samej wydajności i porównaj dokładność

Wręcz przeciwnie, jeśli masz porównanie danych w innych warunkach, można wybrać te, które są najbardziej korzystne dla algorytmu. To nie jest oszustwo, ale uzasadniona analiza warunków, w których Twój algorytm jest najbardziej praktyczny.

David Hammen
2016-04-24 16:00:11 UTC
view on stackexchange narkive permalink

Do tej pory powstrzymywałem się od dołączania do tej witryny, ponieważ nie czułem się uprawniony do komentowania. Opuściłem świat akademicki dwa dni przed tym, jak miałem skończyć z licencjatem. (Zostawię moją podłą historię jako komentarz). W końcu dołączyłem do tej witryny tylko z powodu tego pytania. Odpowiedź brzmi: NIE . „Dostrojone” algorytmy opracowane przez badaczy akademickich szkodzą praktykom.

Konkretny przykład: Spędziłem dwa absolutnie cudowne lata, zastanawiając się, jak wykryć awarie silników w pojeździe kosmicznym. Wcześniej opracowany „dostrojony” algorytm sugerował, że można obejść się bez bardzo drogich i podatnych na awarie czujników tradycyjnie używanych do wykrywania awarii sterów strumieniowych, wykorzystując zamiast tego odczyty akcelerometru i żyroskopu. Ta „dostrojona” praca w sposób dorozumiany zakładała idealnie wyrównane i doskonale usytuowane silniki sterujące z dużą ilością mocy . Ja natomiast miałem do czynienia z odpowiednikiem ciężarówki Mack na lodzie z niewyrównanymi silnikami VW i bez przerw. Nie miałem prostego problemu z sygnałem do szumu, z którym mógłbym się uporać. Musiałem zmierzyć się z problemem szumu, aby sygnalizować.

Użyłem metody bayesowskiej. Mało kto rozumiał moją matematykę. Skonsultowano się z inną (bardzo kosztowną) grupą, aby upewnić się, że to, co zrobiłem, było dobre. Widzieli ten sam problem z szumem do sygnału, ale zastosowali częste podejście do rozwiązania problemu. (Mało kto też rozumiał ich matematykę). Chociaż oni byli bywalcami, a ja byłem bayesjanistą, zgodzili się, że moje podejście jest słuszne. Ostatecznie kosztowało to dwa lata mojego czasu i rok czasu tej drugiej grupy. Porównaj to z 200 000 USD za czujniki plus kilka miesięcy czasu potrzebnego programistom niskiego poziomu, których kod byłby łatwo zrozumiały dla wszystkich. Podczas gdy miałem ogromną zabawę dla maniaków, inwestowanie we mnie i tę inną grupę było głupie zarówno z punktu widzenia ekonomii, jak i łatwości utrzymania.

Widziałem to wielokrotnie w trakcie mojej kariery.

Moja ohydna historia: zostałem przyjęty na studia doktoranckie z fizyki, dzięki rekomendacjom mojego licencjata, ale mój doradca akademicki powiedział mi, że ** nie kończę studiów **. Zrobił to dwa dni przed maturą, w sobotę, kiedy byłem 150 mil od mojej szkoły, gdzie byłem drużbą na ślubie mojego najlepszego przyjaciela. Powiedziano mi po tym, że wydawałem się bardziej zdenerwowany niż panna młoda czy pan młody.
W końcu dostałem ten cholerny stopień. Mój doradca znalazł klauzulę, zgodnie z którą muszę uczęszczać na cztery kursy sztuk wyzwolonych jako student pierwszego i drugiego roku oraz cztery kolejne jako młodszy i starszy. Zamiast tego wziąłem pięć i trzy. Później poszedłem do innej szkoły o Szekspirze, ograniczonej do starszych kierunków angielskich. Instruktor niechętnie mnie zaakceptował, ale powiedział, że to moja wina, jeśli nie będę w stanie uzyskać dobrych wyników. Dostałem szóstkę-. Mój doradca powiedział: „Nigdy nie kończysz studiów z powodu mojego martwego ciała”. Stałem się na tyle sprytny, że przeszedłem przez jego głowę. Przez lata przekazywałem pieniądze konkurującym szkołom Ivy League.
Roy T.
2016-04-22 12:17:03 UTC
view on stackexchange narkive permalink

W kontekście opracowywania algorytmów do celów akademickich rzeczywisty czas działania programu „zegar ścienny” nie jest istotny. Ważna jest złożoność czasowa (patrz notacja Wielkie Oh). Zwykle kilka poprawek wydajności lub optymalizacji algorytmu nie zmienia rzeczywistej złożoności czasowej i dlatego jest mało interesujące.

Jeśli algorytm zmienia złożoność czasową, ale także zmienia dokładność, algorytm rozwiązał inny problem i nie jest porównywalny. Ciągłe porównywanie ich jest przynajmniej przykładem poważnego zaniedbania.

Niestety w prawdziwym świecie tylko „trywialne” problemy, takie jak sortowanie listy, są tak dobrze zdefiniowane, że każdy tworzy algorytm, który ma dokładnie takie same warunki wstępne i końcowe. Dobry artykuł porównujący algorytmy powinien rozpoznać te różnice i zbadać ich wpływ.

_ rzeczywisty czas działania „zegara ściennego” programu nie jest ważny._ [potrzebne źródło]. Kiedy algorytmy są testowane na realistycznych zestawach danych, czas działania jest ważny, ponieważ duże o jest zwykle stałe. Weźmy na przykład dowolny artykuł na temat sieci neuronowych: są one O (n), ale użycie jednej lub innej funkcji nieliniowości może mieć ogromny wpływ na dokładność i / lub wydajność.
Różnica między komputerem z 1986 roku a komputerem z 2016 roku jest czynnikiem stałym, dlatego mało interesująca :-) Różnica między modemem 19200-bitowym a gigabitową siecią Ethernet jest czynnikiem stałym, dlatego mało interesującym.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...