<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Paul Peseux supervised by M.Berar</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>T.Paquet</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>V.Nicollet Litis Normandie</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Lokad Paris</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>France paul.peseux@lokad.com</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>@ i n t e r c e p t FLOAT</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Variable Scalar Boolean Variable Addition Function Call Function Call (2 parameters) Parameter access Constant access Broadcast Projector Aggregation Projector Predicate</institution>
        </aff>
      </contrib-group>
      <abstract>
        <p>This work is about performing automatic diferentiation of a query in the context of relational databases and queries. This is done in order to perform optimization through gradient descent in these relational databases. This work describes a form of automatic differentiation for a subset of relational queries.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>INTRODUCTION</title>
      <p>
        Modern Diferentiable Programming applied to Deep Learning
concentrates on dense and regular problems such as images [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]
and sound [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], or studies ways to project unstructured problems
into this framework [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] (e.g. auto-encoders for text data). Its
success is partly due to automatic diferentiation [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. Parallel to this
many business domains have a very well-defined structure, but this
structure is relational. For example supply chain data is organized
in relational databases and experts are used to working with these.
A canonical example coming from this domain: items in the
product table come from suppliers in the supplier table and are stored
in warehouses in the warehouse table; the problem’s structure is
completely diferent from Computer Vision or Natural Language
Processing, two hot topics in Machine Learning (ML). As people
that understand the supply chain complexity work with relational
databases, it seems to be the adequate place to let them build their
own models and optimize them. One of the main ways to optimize
a model is through gradient-based methods; if the model is written
with queries then we need to diferentiate them to optimize the
model. Letting experts build white box models will help them to
check the sanity of models, which is very dificult to do on black box
models, such as deep neural networks. It is called Interpretable ML
in [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] and directly applies to the supply chain, where thousands of
orders are placed everyday for a single company. Furthermore [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]
has shown the advantages when performing an optimization in the
database system itself, limiting data transfer costs, over pulling the
data out to an external ML-oriented system.
      </p>
      <p>
        Many sub parts of languages have been diferentiated: Python [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]
[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], C [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], Julia [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], Swift [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ], F# [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] . . . A more complete
reference can be found at [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. However, there are only a few attempts at
diferentiating SQL ·like programming languages, to our knowledge.
Thus we study a way to diferentiate relational queries in order to
perform optimization through gradient descent.
      </p>
      <p>
        ADSL
[
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] [. . . ] proposes to diferentiate subsets of common
programming languages. What these initiatives have in common
is the purpose of diferentiating a pre-existing language. It is an
interesting task, while being complicated, as those languages are
not crafted for diferentiation. This is especially true for relational
programming languages.
      </p>
      <p>
        We introduce ADSL1, which is A Diferentiable Sub Language
that is intended to lower relational language. It is a simple language
where Automatic Diferentiation is a first class citizen. This idea
is similar to [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. ADSL is closed by diferentiation: the
adjoint, i.e. the derived program, of an ADSL program is also a
diferentiable ADSL program. This closure gives immediate access
to higher order derivatives, which are sometimes used [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
ADSL is a simple SSA language that supports loops and conditional.
Its major specificity is its projectors and broadcasts support.
      </p>
      <p>According to the definition below, an ADSL program is a list of
Statements &lt;  &gt;, whose grammar is defined by:
Ψ  
Ξ)⟩
Φ)⟩
⟨ S ⟩
⟨ e ⟩
::= .
| ⟨ v ← ⟩
| ⟨ Cond ( v
| ⟨ For (  
| ⟨ Return v ⟩
::= .
| ⟨ v ⟩
| ⟨ f ⟩
| ⟨ b ⟩
| ⟨ v + w ⟩
| ⟨ Call1 op v ⟩
| ⟨ Call2 op v w ⟩
| ⟨ Param i ⟩
| ⟨ Const i ⟩
| ⟨ v ⊳  ⟩
| ⟨ v ⊲  ⟩
| ⟨ Pred ⟩</p>
      <sec id="sec-1-1">
        <title>Variable assignment Conditional Loop Output of a program</title>
        <p>⟨ Pred ⟩ ::= .</p>
        <p>| ⟨ And v w ⟩
| ⟨ Or v w ⟩
| ⟨ Not v ⟩
| ⟨ v &lt; w ⟩
| ⟨ v ≤  ⟩</p>
        <p>ADSL is tight but it is enough to tackle many real business
problems, such as those encountered in the supply chain. Its main
characteristic is to be easily and fully diferentiable. Projectors
1Adsl library can be found at https://github.com/Lokad/Adsl
R′
( , →) × 
( , →) ×  ′
In this section we describe our approach to derive relational query.
This approach is based on compilation.</p>
        <p>Let R be a relational query that creates the float column  in
the table  . We assume that R involves a float column  in the
table  . In optimization or Machine Learning, such an objective
function is often called loss.  stands for Observation Table and
 for Parameter Table. It is possible that  =  .</p>
        <p>Our main goal is to minimize the scalar:</p>
        <sec id="sec-1-1-1">
          <title>SELECT sum ( L o s s ) FROM OT</title>
          <p>Diferentiating a relational query means that we want to create
the column  ′ in  that is the derivative of  . with respect
to  . . Doing so will unlock optimization through gradient-based
methods. As it appears hard to diferentiate arbitrary query, we
reduce our scope to a subset of queries that should be wide enough
to cover many industrial cases. First we do not consider a query
that involves a Common Table Expression: these have to be inlined
in the query. It drastically helps query compilation to ADSL. Second
 . should appear once and only once.</p>
          <p>Let  be the set of tables used in R. Then { ,  } ⊂  .</p>
          <p>Let’s introduce the relation" −→  " when the primary key
of  is a foreign key in  . It is said that  broadcasts into  .</p>
          <p>Here is a simple way to create such  and  in SQL:</p>
        </sec>
        <sec id="sec-1-1-2">
          <title>CREATE t a b l e TA AS</title>
          <p>SELECT f o r e i g n K e y AS p r i m a r y K e y
FROM TB</p>
          <p>GROUP BY f o r e i g n K e y
( , −→) naturally forms a graph. Then we can compile the query
R to the pair ( , −→) ×  where  is an ADSL program. Evaluation
of ( , −→) ×  gives  ..</p>
          <p>As  is an ADSL program it is possible to diferentiate it with
respect to the input associated to  . as  ′.</p>
          <p>We state that with</p>
          <p>R ′ = ( , −→) ×  ′
evaluation of R ′ gives the expected  . ′, which is
represented in Figure 1.</p>
          <p>We believe that this schema is a good way to diferentiate
relational queries: if the output is a relational query then we can use all
the optimizations and parallelizations developed for regular ones.
4</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>GRAPH POINT OF VIEW</title>
      <p>In this section we introduce notations on graphs that will be
applied to the SQL Table tree in order to simplify it and facilitate its
compilation to ADSL.</p>
      <p>Definition 4.1 (Polytree). A Polytree is a directed acyclic graph
whose underlying undirected graph is a tree.</p>
      <p>For example, any tree structure of a website is a Polytree.</p>
      <p>Definition 4.2 (Cross Edge). A cross-edge is a pair of edges in a
graph ( −→ ,  −→ ) which indicates that  comes from a
cross operation between  and .</p>
      <p>Here is a simple way to create such an edge in SQL:</p>
      <sec id="sec-2-1">
        <title>CREATE t a b l e B AS SELECT ∗ FROM A CROSS JOIN C</title>
        <p>Let  be a Polytree with cross-edges: ( , , (,   ))
Definition 4.3 (PolyStar). Let’s define a PolyStar ★ as
★ = { (, ) |  a Polytree with cross-edges &amp; n a node of  }
(1)</p>
        <p>A PolyStar is a PolyTree with a special focus on a specific node
of the graph.</p>
        <p>Let (,  ) ∈ ★. We call
• an upstream node a node  of  such that  −→  .
• an upstream cross node a cross node  of  such that one of
its parents is an upstream node.
• an observation-cross a cross node of  such that one of its
parents is  .
• a downstream node a node  of  such that is not an
observationcross node and that  −→ .</p>
        <p>• We call a full node the remaining nodes of  .</p>
        <p>By construction, there is no path between a full node and  .
4.1</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>SQL Table tree simplification</title>
      <p>A relational query in SQL creates many tables, even though some
could be grouped. For example,</p>
      <sec id="sec-3-1">
        <title>SELECT L o s s FROM OT</title>
        <p>creates another table with a bijection from its index to  index.
Thus we introduce a novel join operator that helps us to simplify
the table tree: TOTAL JOIN. 1 TOTAL JOIN 2 ON ⟨ ⟩ is the same
semantic as 1 INNER JOIN 2 ON ⟨ ⟩ with the additional
constraint that for each line of 1, there is exactly one line of 2 that
corresponds. To make a successful 1 TOTAL JOIN 2 ON ⟨ ⟩ it is
suficient that  columns are a primary key in 2 and a foreign key
in 2, but it is not necessary.</p>
        <p>
          Thanks to this join operator that is reminiscent of [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ], we can
gather tables in the graph that come from this operation. Indeed,
creating a new table is thus equivalent to adding a column to the
origin table. Then the compilation in ADSL from any join
operator that is not a TOTAL JOIN gives a projector (a broadcast or
3
1
4
        </p>
        <p>TOTAL JOIN
2
5
an aggregator). If a TOTAL JOIN is used then operations can be
performed line by line thus we can compile it to a scalar operation
such as +, Call1, Call2 . . .</p>
        <p>Remark 2 (Sufficient condition). If the query is written
without any Common Table Expression and involves  . only once, then
 ,  ∈ ★ where  are the used tables in R.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4.2 A supply chain example</title>
      <p>In this section we take a real case from the supply chain industry
to illustrate our previous formalization.</p>
      <p>Let’s consider that our database contains information on
products that a company sells. It has the Product table recording the
products. These products are organized by categories. The Orders
table records products orders. Assuming that we also have a Week
table whose primary is the week number, we would write:</p>
      <sec id="sec-4-1">
        <title>CREATE t a b l e C a t e g o r y AS</title>
        <p>SELECT c a t e g o r y FROM P r o d u c t
GROUP BY c a t e g o r y</p>
      </sec>
      <sec id="sec-4-2">
        <title>CREATE t a b l e CategoryWeek AS SELECT ∗ FROM C a t e g o r y CROSS JOIN Week</title>
      </sec>
      <sec id="sec-4-3">
        <title>CREATE t a b l e ProductWeek AS SELECT ∗ FROM P r o d u c t CROSS JOIN Week</title>
        <sec id="sec-4-3-1">
          <title>Then we get Figure 3.</title>
        </sec>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>4.3 Why all these notations?</title>
      <p>All these notations help us to compile the query as easily as possible.
While computing a line of  . ′ from ( , −→) ×  ′, an input
coming from
• the observation table gives a scalar
• an upstream table gives a scalar
• a full table gives a vector of the size of the full table itself.
• an upstream-cross table gives a vector of the size of the left
table used in the cross operation
• a downstream table gives a vector of certain size.</p>
      <p>In summary, we introduce the TOTAL JOIN operator to turn the
SQL Table tree into a PolyStar. Once it is a PolyStar, its lowering,
i.e. compilation, to ADSL is simplified.</p>
    </sec>
    <sec id="sec-6">
      <title>5 EXPERIMENTS 5.1 Dataset</title>
      <p>
        We used the Chicago taxi rides dataset that can be found here 2.
We chose this dataset because it has also been used by [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] which
partly motivated our work.
      </p>
      <p>For each ride, we use the taxi identifier, distance (in miles) and
the tips (in dollar). In this example, the Observation table is the
Trips table and the Taxis table is an upstream table:</p>
      <sec id="sec-6-1">
        <title>CREATE t a b l e T a x i s AS</title>
        <p>SELECT t a x i I d , 1 AS a FROM T r i p s
GROUP BY t a x i I d</p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>5.2 Linear Regression</title>
      <p>We use linear regression to predict the tip based on the trip distance.</p>
      <p>=  ×  + 
It is an interesting example to perform a benchmark but according
to us, it does not illustrate the relational aspect of the dataset. Thus
we also used an augmented version of this model where the slope
depends on the taxi identifier, the intercept remains shared among
taxis:</p>
      <p>taxiId = taxiId ×  +</p>
      <p>This example illustrates how the relational information between
the Trips table and the Taxis table has to be used.
(2)
(3)
thus the derived query (with respect to the slope ) should be:
SELECT</p>
      <p>t r i p I d , t a x i I d ,</p>
      <sec id="sec-7-1">
        <title>FROM (</title>
        <p>SELECT</p>
        <p>∗ ,
2 ∗ a ∗ ( E s t i m a t e d − T i p s ) AS G r a d i e n t ,
T a x i s . a ∗ T r i p s . d i s t a n c e +</p>
        <p>AS E s t i m a t e d</p>
        <sec id="sec-7-1-1">
          <title>FROM T r i p s</title>
        </sec>
      </sec>
      <sec id="sec-7-2">
        <title>INNER JOIN T a x i s</title>
        <p>WHERE T r i p s . t a x i I d = T a x i s . t a x i I d ) ;
For the sake of notation, slopes are initialized at 1 and intercept at
0.</p>
        <p>
          Such a model has a straight forward explanation; the model can
be white boxed. Taxi’s slope shows its ability to get tips. It is called
Interpretable ML [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ]. We’ve used linear regression for simplicity
sake, but unlocking diferentiable programming, i.e. access program
derivative, to relational programming language unlocks an amazing
variety of other models. All experiments were run on Azure with
¨Standard_L8s_v2¨, a 8 vCPU machine, running at 2.557 GHz with
a disk of 1.9TB NVMe. Our prototype and experiments were run
on a supply chain Domain Specific Language. It is a Python ·like
implementation of SQL narrowed for supply chain problems. Tests
were carried out five times and the average runtimes recorded. In
Table 1, we present our result for 10 epochs of gradient descent on
the Chicago dataset.
103
105
1.95 × 107
        </p>
        <sec id="sec-7-2-1">
          <title>Taxis 479 1037 9201</title>
          <p>
            In Table 1, Shared Slope is the implementation relative to
equation 2 and Taxi’s Slope is relative to equation 3. We’ve not
reproduced all experiments from [
            <xref ref-type="bibr" rid="ref20">20</xref>
            ] as our focus is to diferentiate a
relational query that involves table relationships. In our example
this is the relationship between Trips and Taxis tables.
6
          </p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>CONCLUSION</title>
      <p>
        In this work we’ve presented a concrete approach to perform
diferentiation on relational query. Our claim is that derived query should
also be a query. Thus we have introduced a dedicated programming
language ADSL that is closed by diferentiation. Thanks to the
introduced operator TOTAL JOIN and PolyStar, we can clarify the roles
of diferent tables in the relational query to diferentiate. Our
implementation allows us to eficiently tackle real world problems such
as those encountered in a supply chain, for example. We hope that
relational programming language will consider Automatic
Diferentiation as first class citizens in the future, this would strengthen
"Query 2.0" [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] and unlock many interesting applications. This
would help every engineer working on relational databases to
develop eficient white-box models by easily plugging their expertise
into it.
      </p>
    </sec>
    <sec id="sec-9">
      <title>ACKNOWLEDGMENTS</title>
      <p>This work was supported by ANRT French program and Lokad.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Martín</given-names>
            <surname>Abadi</surname>
          </string-name>
          and
          <string-name>
            <given-names>Gordon</given-names>
            <surname>Plotkin</surname>
          </string-name>
          .
          <year>2019</year>
          .
          <article-title>A simple diferentiable programming language</article-title>
          .
          <source>Proceedings of the ACM on Programming Languages</source>
          <volume>4</volume>
          (
          <issue>12</issue>
          <year>2019</year>
          ),
          <fpage>1</fpage>
          -
          <lpage>28</lpage>
          . https://doi.org/10.1145/3371106
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>Atilim</given-names>
            <surname>Baydin</surname>
          </string-name>
          , Barak Pearlmutter, Alexey Radul, and
          <string-name>
            <given-names>Jefrey</given-names>
            <surname>Siskind</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>Automatic diferentiation in machine learning: A survey</article-title>
          .
          <source>Journal of Machine Learning Research</source>
          <volume>18</volume>
          (
          <year>04 2018</year>
          ),
          <fpage>1</fpage>
          -
          <lpage>43</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Atilim</given-names>
            <surname>Günes</surname>
          </string-name>
          <string-name>
            <given-names>Baydin</given-names>
            , Barak A.
            <surname>Pearlmutter</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Siskind</surname>
          </string-name>
          .
          <year>2016</year>
          .
          <article-title>DifSharp: An AD Library for</article-title>
          .
          <source>NET Languages. ArXiv abs/1611</source>
          .03423 (
          <year>2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Olivier</given-names>
            <surname>Breuleux</surname>
          </string-name>
          and Bart van Merriënboer.
          <year>2017</year>
          . Automatic Diferentiation in Myia.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>M.</given-names>
            <surname>Cerezo</surname>
          </string-name>
          and
          <string-name>
            <given-names>Patrick</given-names>
            <surname>Coles</surname>
          </string-name>
          .
          <year>2020</year>
          .
          <article-title>Impact of Barren Plateaus on the Hessian and Higher Order Derivatives</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Hoon</given-names>
            <surname>Chung</surname>
          </string-name>
          ,
          <article-title>Sung Joo Lee, Hyeong Bae Jeon, and</article-title>
          <string-name>
            <given-names>J.</given-names>
            <surname>Park</surname>
          </string-name>
          .
          <year>2020</year>
          .
          <article-title>Semi-Supervised Speech Recognition Acoustic Model Training Using Policy Gradient</article-title>
          .
          <source>Applied Sciences</source>
          <volume>10</volume>
          (
          <year>2020</year>
          ),
          <fpage>3542</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Autodif</surname>
          </string-name>
          .org community.
          <year>2020</year>
          .
          <article-title>Tools for Automatic Diferentiation</article-title>
          . http://www. autodif.org/?module=Tools.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>L.</given-names>
            <surname>Hascoët</surname>
          </string-name>
          and
          <string-name>
            <given-names>V.</given-names>
            <surname>Pascual</surname>
          </string-name>
          .
          <year>2013</year>
          .
          <article-title>The Tapenade automatic diferentiation tool: Principles, model, and specification</article-title>
          .
          <source>ACM Trans. Math. Softw</source>
          .
          <volume>39</volume>
          (
          <year>2013</year>
          ),
          <volume>20</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>20</lpage>
          :
          <fpage>43</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Hu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Anderson</surname>
          </string-name>
          ,
          <string-name>
            <surname>Tzu-Mao Li</surname>
            ,
            <given-names>Q.</given-names>
          </string-name>
          <string-name>
            <surname>Sun</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          <string-name>
            <surname>Carr</surname>
            , Jonathan Ragan-Kelley, and
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Durand</surname>
          </string-name>
          .
          <year>2020</year>
          .
          <article-title>Dif Taichi: Diferentiable Programming for Physical Simulation</article-title>
          . ArXiv abs/
          <year>1910</year>
          .00935 (
          <year>2020</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>Michael</given-names>
            <surname>Innes</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>Don't Unroll Adjoint: Diferentiating SSA-Form Programs</article-title>
          . (10
          <year>2018</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>Mike</given-names>
            <surname>Innes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Edelman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Fischer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Rackauckas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Saba</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V. B.</given-names>
            <surname>Shah</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Will</given-names>
            <surname>Tebbutt</surname>
          </string-name>
          .
          <year>2019</year>
          .
          <article-title>A Diferentiable Programming System to Bridge Machine Learning and Scientific Computing</article-title>
          . ArXiv abs/
          <year>1907</year>
          .07587 (
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Tzu-Mao Li</surname>
          </string-name>
          .
          <year>2019</year>
          .
          <article-title>Diferentiable Visual Computing</article-title>
          . ArXiv abs/
          <year>1904</year>
          .12228 (
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Tzu-Mao</surname>
            <given-names>Li</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Michaël</given-names>
            <surname>Gharbi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Andrew</given-names>
            <surname>Adams</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Durand</surname>
          </string-name>
          , and Jonathan RaganKelley.
          <year>2018</year>
          .
          <article-title>Diferentiable programming for image processing and deep learning in halide</article-title>
          .
          <source>ACM Transactions on Graphics (TOG) 37</source>
          (
          <year>2018</year>
          ),
          <fpage>1</fpage>
          -
          <lpage>13</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>Carol</given-names>
            <surname>Mak</surname>
          </string-name>
          and
          <string-name>
            <given-names>C.</given-names>
            <surname>Ong</surname>
          </string-name>
          .
          <year>2020</year>
          .
          <article-title>A Diferential-form Pullback Programming Language for Higher-order Reverse-mode Automatic Diferentiation</article-title>
          . ArXiv abs/
          <year>2002</year>
          .08241 (
          <year>2020</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Andrea</surname>
            <given-names>Mari</given-names>
          </string-name>
          , Thomas Bromley, and
          <string-name>
            <given-names>Nathan</given-names>
            <surname>Killoran</surname>
          </string-name>
          .
          <year>2020</year>
          .
          <article-title>Estimating the gradient and higher-order derivatives on quantum hardware.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>Frank</given-names>
            <surname>McSherry</surname>
          </string-name>
          .
          <year>2010</year>
          .
          <article-title>Privacy Integrated Queries: An Extensible Platform for Privacy-Preserving Data Analysis</article-title>
          .
          <source>Commun. ACM</source>
          <volume>53</volume>
          (
          <issue>09</issue>
          <year>2010</year>
          ),
          <fpage>89</fpage>
          -
          <lpage>97</lpage>
          . https: //doi.org/10.1145/1559845.1559850
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>B. V.</given-names>
            <surname>Merrienboer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Moldovan</surname>
          </string-name>
          , and
          <string-name>
            <surname>Alexander</surname>
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Wiltschko</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>Tangent: Automatic diferentiation using source-code transformation for dynamically typed array programming</article-title>
          .
          <source>ArXiv abs/1809</source>
          .09569 (
          <year>2018</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>Marc</given-names>
            <surname>Rasi Bart Chrzaszcz Richard Wei</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Dan</given-names>
            <surname>Zheng</surname>
          </string-name>
          .
          <year>2020</year>
          .
          <article-title>Diferentiable Programming Manifesto</article-title>
          . https://github.com/apple/swift/blob/main/docs/ DiferentiableProgramming.md.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>Cynthia</given-names>
            <surname>Rudin</surname>
          </string-name>
          .
          <year>2019</year>
          .
          <article-title>Stop explaining black box machine learning models for high stakes decisions and use interpretable models instead</article-title>
          .
          <source>Nature Machine Intelligence</source>
          <volume>1</volume>
          (
          <issue>05</issue>
          <year>2019</year>
          ),
          <fpage>206</fpage>
          -
          <lpage>215</lpage>
          . https://doi.org/10.1038/s42256-019-0048-x
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <surname>Maximilian</surname>
            <given-names>E.</given-names>
          </string-name>
          <string-name>
            <surname>Schüle</surname>
            , Frédéric Simonis,
            <given-names>Thomas</given-names>
          </string-name>
          <string-name>
            <surname>Heyenbrock</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Kemper</surname>
            , Stephan Günnemann, and
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Neumann</surname>
          </string-name>
          .
          <year>2019</year>
          .
          <article-title>In-Database Machine Learning: Gradient Descent and Tensor Algebra for Main Memory Database Systems</article-title>
          . In BTW.
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <surname>Bart</surname>
            <given-names>van Merriënboer</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Olivier Breuleux</surname>
            , Arnaud Bergeron, and
            <given-names>Pascal</given-names>
          </string-name>
          <string-name>
            <surname>Lamblin</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>Automatic diferentiation in ML: Where we are and where we should be going</article-title>
          .
          <source>(10</source>
          <year>2018</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>Wu</surname>
            <given-names>Weiyuan</given-names>
          </string-name>
          , Lampros Flokas,
          <string-name>
            <surname>Eugene Wu</surname>
            , and
            <given-names>Jiannan</given-names>
          </string-name>
          <string-name>
            <surname>Wang</surname>
          </string-name>
          .
          <year>2020</year>
          .
          <article-title>Complaintdriven Training Data Debugging for Query 2</article-title>
          .
          <fpage>0</fpage>
          .
          <fpage>1317</fpage>
          -
          <lpage>1334</lpage>
          . https://doi.org/10. 1145/3318464.3389696
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>