Frage:
Optimieren der Algorithmusleistung in Informatikarbeiten
Ulderique Demoitre
2016-04-21 03:03:03 UTC
view on stackexchange narkive permalink

In der Informatik ist es üblich, Papiere zu erstellen, die Algorithmen präsentieren, die etwas mit einer bestimmten Genauigkeit und einer bestimmten Geschwindigkeit schätzen.

Viele Algorithmen können eindeutig auf hohe Leistungen abgestimmt werden, wodurch die Genauigkeit ein wenig beeinträchtigt wird. oder hohe Genauigkeit, die in diesem Fall die Leistung beeinträchtigt.

Wenn ein Autor einen neuen Algorithmus vorschlägt, sollte er empirische Ergebnisse über Leistungen UND empirische Ergebnisse über Genauigkeit präsentieren.

Ist es ehrlich, Ergebnisse zu präsentieren? über Leistungen, die mit dem Algorithmus erzielt wurden, der schnell (und weniger genau) eingestellt ist, und Ergebnisse über die Genauigkeit mit dem Algorithmus, der so eingestellt ist, dass er präzise (und langsam) eingestellt ist?

Siehe auch [Volkswagen] (http://www.reuters.com/article/us-volkswagen-emissions-usa-idUSKCN0XH2CX), die in einen schweren Skandal verwickelt sind, weil sie fast genau das tun, was Sie beschreiben. Sie programmierten nämlich ihre Deisel-Autos so, dass sie in bestimmten Situationen eine bestimmte Motorabstimmung und in anderen eine andere Motorabstimmung hatten. Das ist nicht unbedingt eine große Sache für sich, es wurde eine große Sache, weil sie nicht offenlegten, dass ihre Motoren unterschiedliche Drehungen verwendeten, und sie so programmierten, um alle hinsichtlich der gemessenen Motoreigenschaften zu täuschen.
Leider passiert dies häufig in CS, insbesondere beim maschinellen Lernen und so weiter. Bitte entmutigen Sie dieses Verhalten. Dies ist es, was die Leute skeptisch gegenüber CS macht, die Tatsache, dass dies * so einfach * ist. Tragen Sie nicht zur Verschlechterung des Feldes bei, sondern versuchen Sie im Gegenteil, es zu reinigen!
Ich würde in der Tat eine Genauigkeit der grafischen Darstellung gegenüber der Laufzeit erwarten.
Meine allgemeine Faustregel: Wenn Sie völlig offen und klar über die Ergebnisse sind, gibt es kein ethisches Problem.
_Wenn ein Autor einen neuen Algorithmus vorschlägt, sollte er empirische Ergebnisse präsentieren_ - ... es sei denn, es handelt sich um eine theoretische Arbeit. (Husten)
Ich werde hinzufügen, dass beide Enden tatsächlich interessant sind. Manchmal möchte ich die besten Ergebnisse, und es macht mir nichts aus, ein bisschen länger auf sie zu warten. Aber manchmal habe ich ein Experiment in großem Maßstab, und ein schnellerer Algorithmus wird bevorzugt, selbst wenn ich ein wenig Leistung opfern muss.
Es ist einfach falsch, sowohl Geschwindigkeit * als auch * Genauigkeit für einen Algorithmus zu beanspruchen, wenn dieser tatsächlich nicht beobachtet wurde. Wenn Ihre Beobachtungen Ihre Aussagen nicht stützen, können Sie beschuldigt werden, Ihre Ergebnisse verfälscht zu haben.
Sechs antworten:
Ric
2016-04-21 03:36:22 UTC
view on stackexchange narkive permalink

Es wäre unehrlich, dies zu tun, ohne zu erwähnen, dass der Algorithmus anders eingestellt wurde. Sie sollten angeben, was sich an der Optimierung geändert hat und wie sich dies auf die Ergebnisse des Algorithmus auswirkt.

Sie sollten auch Genauigkeitsergebnisse für den schnellen Algorithmus und Geschwindigkeitsergebnisse für den genauen Algorithmus auflisten. (Sie möchten wahrscheinlich auch einige Nummern für die Abstimmung in der Mitte der Straße). Die "schlechten" Ergebnisse nicht aufzulisten ist nicht unehrlich, aber es ist schlechte Wissenschaft. Wenn Sie diese Zahlen nicht angeben, würde ich erwarten, dass Ihre Prüfer sie ansprechen und nach ihnen fragen.

Es ist der Teil "ohne zu erwähnen", der diese Antwort zur besten macht. Warum haben Ihrer Meinung nach so viele Fernsehwerbung Kleingedrucktes?
David Richerby
2016-04-21 13:21:56 UTC
view on stackexchange narkive permalink

Um Ihre Frage zu paraphrasieren: "Ist es ehrlich zu behaupten, dass mein Algorithmus sowohl schnell als auch genau ist, obwohl er tatsächlich nur schnell und nicht so genau oder genau und nicht so schnell sein kann?"

NEIN !!!

Natürlich nicht. Im Ernst, warum müssen Sie überhaupt fragen?

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

Ich bin nur ein Meisterschüler, daher weiß ich nicht viel über die Dynamik des „Spiels“. Daher kann ich nur eine Meinung der Zuschauer abgeben.

Einer meiner Vorgesetzten hat gerne brutal ehrliche Pläne in seinen Papieren. Seine Arbeit konzentriert sich auf die Skalierung paralleler Algorithmen. Für den Anfang wählt er eine starke Skalierung anstelle einer schwachen Skalierung. Ersteres nimmt eine feste Problemgröße an und verwendet mehr Prozessoren $ P $, um ausgeführt zu werden. Idealerweise würde man einen Zeitverlust von $ 1 / P $ erzielen. Wenn Sie ein Doppelprotokoll der Zeit gegen die Prozessanzahl erstellen und auch die perfekte Kurve $ 1 / P $ zeichnen, sehen Sie schnell, wenn es schlecht wird.

Eine schwache Skalierung ist die Skalierung der Problemgröße mit den Ressourcen. Dann sollte die benötigte Zeit konstant bleiben. Bei Problemen, die auf einer feinen Ebene schwer zu parallelisieren sind, werden Sie bei einer schwachen Skalierung nie etwas Interessantes sehen. Mit einer starken Skalierung können Sie in die Extreme wie "ein Pixel pro Kern" oder "ein Atom pro Thread" gehen.

Er sagte, dass die interessanten Teile (in der Wissenschaft) diejenigen sind, die noch nicht funktionieren. Er kann sicherlich eine Handlung erstellen, die den Algorithmus großartig aussehen lässt. Aber das interessiert ihn nicht. Er möchte wissen, wie weit es gedrängt werden kann.

Ich bewundere diese brutale Ehrlichkeit wirklich. Wenn man Ergebnisse hat, die nur mittelmäßig sind, dann wird diese Methode deutlich zeigen, dass sie nicht so großartig sind. Wenn Sie andererseits die gesamte Angriffsfläche selbst entfernen, kann Sie später niemand mehr auseinanderreißen, um etwas zu verbergen.

Daher würde ich Diagramme erstellen, die zeigen, wie schlecht die Genauigkeit wird, wenn Sie die Geschwindigkeit optimieren. Ich würde eine ehrliche Darstellung von Genauigkeit gegen Geschwindigkeit (oder umgekehrt) hinzufügen. Dann kann man entweder sehen, ob es einen Sweet Spot in der Mitte gibt und wie gut das tatsächlich ist.

Wenn Ihr Algorithmus bis zum Äußersten geht, aber einen schönen Mittelweg hat, ist es erwähnenswert, denke ich . Und wenn die Extreme nur wenige Prozent langsamer oder weniger genau sind, ist dies auch ein Ergebnis.

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

Äpfel mit Äpfeln vergleichen

Die Leistung des Algorithmus wird selten isoliert bewertet: In der Regel werden verschiedene Algorithmen miteinander oder mit einem Referenzalgorithmus verglichen. Wenn Sie einen solchen Vergleich durchführen, sollten Sie die Bedingungen bestimmen, unter denen Referenzalgorithmen bewertet wurden, und Ihren eigenen Algorithmus unter denselben Bedingungen bewerten:

  • Wenn Referenzalgorithmen eine vergleichbare Genauigkeit aufweisen, stellen Sie Ihren Algorithmus so ein, dass die gleiche Genauigkeit und vergleichen Sie die Leistung
  • Wenn Referenzalgorithmen eine ähnliche Leistung haben, stellen Sie Ihre eigene auf die gleiche Leistung ein und vergleichen Sie die Genauigkeit

Im Gegenteil, wenn Sie einen Vergleich haben Daten unter verschiedenen Bedingungen ist es in Ordnung, die Bedingungen auszuwählen, die für Ihren Algorithmus am günstigsten sind. Dies ist kein Betrug, sondern eine legitime Analyse der Bedingungen, unter denen Ihr Algorithmus am praktischsten ist.

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

Bisher habe ich mich dieser Website nicht angeschlossen, da ich mich nicht qualifiziert fühlte, Kommentare abzugeben. Ich verließ die Welt der Wissenschaft zwei Tage bevor ich mit einem BS abschließen sollte. (Ich werde meine schmutzige Geschichte als Kommentar hinterlassen). Ich bin dieser Seite endlich nur wegen dieser Frage beigetreten. Die Antwort lautet NEIN . "Optimierte" Algorithmen von akademischen Forschern belästigen Praktiker.

Ein konkretes Beispiel: Ich habe zwei wundervolle Jahre damit verbracht, zu bestimmen, wie Triebwerksausfälle an einem Raumfahrzeug erkannt werden können. Ein zuvor entwickelter "abgestimmter" Algorithmus schlug vor, auf die sehr teuren und fehleranfälligen Sensoren zu verzichten, die traditionell zur Erkennung von Triebwerksausfällen verwendet werden, indem stattdessen Beschleunigungsmesser- und Kreiselmessungen verwendet werden. Diese "abgestimmte" Arbeit setzte implizit perfekt ausgerichtete und perfekt positionierte Triebwerke mit vielen, vielen oomph voraus. Andererseits musste ich mich mit dem Äquivalent eines Mack-Lastwagens auf Eis mit falsch ausgerichteten VW-Motoren und ohne Unterbrechungen auseinandersetzen. Ich hatte kein einfaches Signal-Rausch-Problem, mit dem ich fertig werden konnte. Ich musste mich mit einem Rauschen auseinandersetzen, um ein Problem zu signalisieren.

Ich habe einen Bayes'schen Ansatz verwendet. Kaum jemand hat meine Mathematik verstanden. Eine andere (sehr teure) Gruppe wurde konsultiert, um sicherzustellen, dass das, was ich tat, gesund war. Sie sahen das gleiche Rausch-zu-Signal-Problem, verwendeten jedoch einen häufigeren Ansatz, um das Problem zu lösen. (Kaum jemand verstand ihre Mathematik.) Während sie Frequentisten waren und ich ein Bayesianist war, stimmten sie darin überein, dass mein Ansatz gültig war. Am Ende kostete es zwei Jahre meiner Zeit und ein Jahr der Zeit dieser anderen Gruppe. Vergleichen Sie das mit 200.000 US-Dollar für Sensoren plus ein paar Monate der Zeit, die ein Low-Level-Programmierer benötigt, dessen Code für alle leicht verständlich ist. Während ich großen Spaß an Geeks hatte, war es sowohl aus wirtschaftlicher als auch aus Sicht der Wartbarkeit dumm, in mich und diese andere Gruppe zu investieren.

Ich habe dies im Laufe meiner Karriere immer wieder gesehen.

Meine schmutzige Geschichte: Ich war dank der Empfehlungen meines Forschungsberaters für ein Doktorandenprogramm in Physik aufgenommen worden, nur um von meinem akademischen Berater zu erfahren, dass ich ** nicht graduierte **. Er tat dies zwei Tage vor seinem Abschluss an einem Samstag, als ich 150 Meilen von meiner Schule entfernt war, wo ich der beste Mann bei der Hochzeit meines besten Freundes war. Mir wurde gesagt, dass ich nervöser wirkte als die Braut oder der Bräutigam.
Ich habe schließlich diesen verdammten Abschluss bekommen. Mein Berater fand eine Klausel, die besagte, dass ich als Neuling und im zweiten Jahr vier Kurse für freie Künste und vier weitere als Junior und Senior belegen musste. Ich nahm stattdessen fünf und drei. Später besuchte ich eine Klasse an einer anderen Schule in Shakespeare, die nur älteren englischen Majors vorbehalten war. Der Ausbilder akzeptierte mich widerwillig, sagte aber, es wäre meine Schuld, wenn ich keine qualitativ hochwertigen Ergebnisse erzielen könnte. Ich habe ein A bekommen-. Mein Berater sagte: "Sie machen nie einen Abschluss über meinen toten Körper." Ich wurde klug genug, um über seinen Kopf zu gehen. Ich habe jahrelang Geld für konkurrierende Ivy League-Schulen gespendet.
Roy T.
2016-04-22 12:17:03 UTC
view on stackexchange narkive permalink

Im Zusammenhang mit der Entwicklung von Algorithmen für akademische Zwecke ist die tatsächliche Wanduhr-Laufzeit des Programms nicht wichtig. Wichtig ist die zeitliche Komplexität (siehe Big-Oh-Notation). Normalerweise ändern einige Leistungsverbesserungen oder Optimierungen an einem Algorithmus nicht die tatsächliche Zeitkomplexität und sind daher von geringem Interesse.

Wenn ein Algorithmus die Zeitkomplexität ändert, aber auch die Genauigkeit ändert, die der Algorithmus gelöst hat a anderes Problem und ist nicht vergleichbar. Ein Vergleich dieser Fälle ist zumindest ein Fall schwerwiegender Vernachlässigung.

Leider sind in der realen Welt nur "triviale" Probleme wie das Sortieren einer Liste so gut definiert, dass jeder einen Algorithmus erstellt, der genau die gleichen Vor- und Nachbedingungen hat. Ein gutes Papier, das Algorithmen vergleicht, sollte diese Unterschiede erkennen und ihre Auswirkungen untersuchen.

_die tatsächliche 'Wanduhr'-Laufzeit des Programms ist nicht wichtig._ [Zitieren erforderlich]. Wenn Algorithmen mit realistischen Datensätzen verglichen werden, ist die Laufzeit wichtig, da das große o normalerweise festgelegt ist. Nehmen wir zum Beispiel jedes Papier über neuronale Netze: Sie sind O (n), aber die Verwendung der einen oder anderen Nichtlinearitätsfunktion kann enorme Auswirkungen auf Genauigkeit und / oder Leistung haben.
Der Unterschied zwischen einem Computer von 1986 und einem von 2016 ist ein konstanter Faktor, daher von geringem Interesse :-) Der Unterschied zwischen einem 19200-Bit-Modem und Gigabit-Ethernet ist ein konstanter Faktor, daher von geringem Interesse.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...