Add `min` and `max` rev specializations?
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Lies zuerst die verlinkten Stack-Exchange- und PyTorch-Diskussionen und untersuche anschließend die vorhandenen min/max-APIs und die Spezialisierungsmuster für den Reverse Mode in der Bibliothek. Kläre das beabsichtigte Verhalten für Skalare und Vektoren, einschließlich gleicher Argumente und der vorgeschlagenen Gradienten; abgeschlossen ist die Aufgabe, wenn die vereinbarten Spezialisierungen mit Tests implementiert sind, die diese Fälle abdecken.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
From this stackoverflow post it looks like we can phrase max(a,b) into
$$
max(a,b) = \frac{a + b + |a-b|}{2}
$$
and similarly for min
$$
min(a,b) = \frac{a + b - |a-b|}{2}
$$
So except for the case when $a=b$ this function is differentiable. For max we have
$$
\begin{align}
\frac{\partial max}{a} = \frac{1}{2} + \frac{sign(a-b)}{2}
\frac{\partial max}{a} = \frac{1}{2} + \frac{sign(a-b)}{2}
\end{align}
$$
so if a>b the gradient is 1 and if a<b the gradient is 1/2. For min we have
$$
\begin{align}
\frac{\partial min}{a} = \frac{1}{2} - \frac{sign(a-b)}{2}
\frac{\partial min}{a} = \frac{1}{2} - \frac{sign(a-b)}{2}
\end{align}
$$
where if $a>b$ the gradient is 0 and if $a<b$ the gradient is 1/2
From this it seems like pytorch does something similar to the above. I think this would be nice to implement. We can also write min(vector) for these as well.
- Vorherrschende Sprache
- C++
- Sterne
- 845
- Forks
- 225
- Ø Merge
- 3 T. 9 Std.
- Gemergte PRs (30 T.)
- 12
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus stan-dev/math
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 54/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 54/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
Maintainer antworten meist innerhalb von 1 Tag
-
numerics performance
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
stan-dev/math#3481 · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
-
`eigendecompose_sym`, `eigenvalues_sym` and `eigenvectors_sym` do not compile for complex matrices of `fvar<var>` or `fvar<fvar<double>>`Evtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offenbug
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 55/100
stan-dev/math#3477 · 5 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Ähnliche Issues
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 72/100
rhalbersma/xstd-ints#395 ·
Maintainer antworten meist innerhalb von 1 Tag
-
[Bug] Root filesystem scope (/) incorrectly rejects all descendant pathsEvtl. vergeben @mugenkyou hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
neutralinojs/neutralino.js#304 · 1 Kommentar ·
-
FuSa
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
tenstorrent/tt-umd#3851 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 73/100
mattgodbolt/zindex#67 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100