Ich glaube, dass die SGD-Abstiegsrichtung bei einer kleinen Stapelgröße eine sehr verrauschte Schätzung der "wahren" Abstiegsrichtung wird (dh wenn wir sie für den gesamten Trainingssatz ausgewertet haben). Bei einer kleinen Chargengröße bin ich mir nicht sicher, wie viel eine Erhöhung des Impulses helfen würde, da sich der Impuls in sehr lauten Richtungen ansammeln würde. Aber ich könnte mich irren, vielleicht ist Ihr Optimierungsproblem gut genug gestellt, wo dies funktionieren könnte.
Wenn Sie nicht nach "State of the Art" -Ergebnissen streben, besteht eine Option für natürliche Bilddaten darin, die Größe der Bilder zu ändern. Ich denke tatsächlich, dass Modulo, das der Elite-Benchmarking-Leistung nachjagt, natürliche Bilder viele skalierungsinvariante Eigenschaften haben und viele ihrer semantischen Merkmale unter vernünftigen Skalierungstransformationen ziemlich robust sind. Dies würde einen Teil des GPU-Speichers entlasten und es Ihnen ermöglichen, Ihre Stapelgröße zu erhöhen, und Ihre SGD-Abstiegsrichtungen wären bessere Schätzungen der Abstiegsrichtungen.
Wenn Sie es mit einer trennbaren Verlustfunktion wie der negativen Log-Wahrscheinlichkeit zu tun haben, können wir die Tatsache ausnutzen, dass der Gradient einer großen Charge lediglich die Summe / der Durchschnitt der Gradienten ihrer Teilpartien ist. Zum Beispiel, wenn unsere Chargengröße istB.können wir Gradienten einer Super-Batch-Größe berechnen B K.Indem wir die Stapel wie gewohnt durchlaufen und jeden Stapelgradienten berechnen, aber anstatt die Gewichte zu aktualisieren, speichern wir jeden Gradienten in einer laufenden Summe oder einem Durchschnitt. Wenn wir angemessen mitteln, berechnen wir den genauen Gradienten für dieB K.Größe Super Batch. Wir führen dann nach jedem die Gewichtsaktualisierung durchK.-te Charge wurde verarbeitet.
Wir werden das genau berechnen B K.Batch-Gradienten durch Serialisierung der Berechnung wie oben beschrieben. Es gibt nur minimalen zusätzlichen Rechen- oder Speicheraufwand. Sie müssen lediglich den Minibatch-Iterator so ändern, dass er die Super-Batch-Serialisierung und den Gradienten-Cache enthält.