Inverse Design and Automatic Differentiation for Optical Devices Ian - - PowerPoint PPT Presentation
Inverse Design and Automatic Differentiation for Optical Devices Ian - - PowerPoint PPT Presentation
Inverse Design and Automatic Differentiation for Optical Devices Ian Williamson and Momchil Minkov Stanford University Optical Society Workshop Nov 21, 2019 https:// github.com / fancompute / workshop-invdesign 2 Workshop outline Brief
https://github.com/fancompute/workshop-invdesign
2
Workshop outline
- Brief crash course on optical simulation
- Theory of numerically solving Maxwell’s equations
- Practical demonstration with our open source code
- Inverse design theory / practical introduction
- Adjoint gradient computation
- Automatic differentiation
- Connection to machine learning
- Device parameterization techniques
- Binarizing features
- Optimization penalties
3
A history of optical simulation packages (from our group)
4
maxwellfdfd fdfd_suite
Wonseok Shin Yu (Jerry) Shi
fdfdpy
Ian Williamson
angler ceviche
Tyler Hughes Momchil Minkov Ian Williamson MATLAB Python
gradient-enabled
A quick crash course in
- ptical simulation
5
6
How do we simulate optical devices?
electric field magnetic field relative permittivity this represents our device! current source
... we solve Maxwell’s equations!
7
Stern Group (Northwestern Univ) Wang et al. Nat. Comm. 8, 2098 (2017) Witmer et al. Opt. Express 24, 5876-5885 (2016)
Welcome to the optical device zoo
Kocaman et al. Nat. Pho. 5, 499–505 (2011) Soler Penades et al. Opt. Express 24, 22908-22916 (2016)
Constructing a set of equations to solve
Some assumptions we make:
- A two-dimensional domain (invariant along z-direction)
- All fields are also invariant along z-direction
- Electric-field polarized only along z-direction
8
Constructing a set of equations to solve
9
Where can these equations take us?
10
Interesting / useful
- ptical devices
Optical devices we can analytically model Inverse-designed
- ptical devices
11
The key idea behind finite differences
...
- Very simple concept that can be scaled up to solve
complex PDEs
- Convergence to the exact solution at a rate
proportional to h (depends on “stencil”)
Discretizing Maxwell’s equations
12
continuous PDE discretized PDE Along just one dimension, this looks like... Along two dimensions, the representation is a bit more complex, but the same idea applies!
Discretizing Maxwell’s equations
13
discretized PDE spatial representation flattened representation sparse linear problem:
The ceviche package (at a high level)
14
Notebook #01
15
Inverse design
- Assume that we can “mold” the permittivity
- Try to get the best possible structure for a
particular desired functionality.
16
Piggott, A. et al., Nature Photonics, 374–377 (2015)
Inverse design
- We want the gradient of some objective
function w.r.t. the permittivity at every point
- Efficiently!
17
Piggott, A. et al., Nature Photonics, 374–377 (2015)
Automatic differentiation
18
- r: differentiable programming
Usual programming: library of functions f1(x)
<latexit sha1_base64="mgn+bjLVnQ0fXQshiR2UgAI6ni0=">ADlHicbVJda9swFXjfXTeV7vBXvZiFgLdw0KcbWwPfSiUwZ5GB01TsE2Q5etERJKNdN2mCP+IvW6/bP9mspeMOJlAcO65OkcX6aSl4AZHo98HPe/e/QcPDx/5j58fb86PjFlSkqzWDClHo65QaEFzBDkKuC41UJkKmKbL86Y/vQFteKEu8a6ERNK54jlnFB01zWfhyeqtPzvqj4ajdgX7IFyDPlmvi9lx7zbOClZJUMgENSYKRyUmlmrkTEDtx5WBkrIlnUPkoKISTGLbetg4JgsyAvtsKgZbcVFucL0IXp2FhDlZEUF47dwG6fV4rjqmlzA1iVNgMEhu+oELXfOUrlxqlLNuOYPRYXsulu7WmS8DaH/xv3LWnPwi2uwsQN62kwxYlqEbn7DUouGWFlFRlNtYyg5xWAmsbm3yDd0yjyzCxzXWg2I5z1EyS2NTFJENYfc9ogrz4nlqxabftBeSUCLImNEHGtXtIcecAZq7Pw7YgmrK0EXLW2PmV1NE5snLu2jZt7tbRZ3Q/r7Wpc1ZW7LyiZIVASt6l/RiFxUw91g7oOr8TB8P/z4/UP/7HQd2kPymrwhJyQkn8gZ+UouyIQwsiQ/yE/y3vlnXrn3pe/R3sHa81L0lnetz8G1DAW</latexit>x
<latexit sha1_base64="2yHmqackfPwH3xH5BtQd25uTJac=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nWbIvwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jncaUknihecUfTU2ep6MJyMJ+0K90G0BkOyXqfXR73bJC9ZJUEhE9TaOJpoTB01yJmAup9UFjRlSzqH2ENFJdjUtZPW4cgzeViUxm+FYctuKxzOF2BK27FxliorKS48u4HdPq8Ux1XT5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5AcYXd94grLD6njitdtdr2g4pKhFiGTVzCnBv/kOLOA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A7kIuiQ=</latexit>y
<latexit sha1_base64="OPD1xHQ2m3P8tbJgLR2mPHwvAk=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nXbIPwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jisNqaRzxQvOKHrqbHU9GE7Gk3aF+yBagyFZr9Pro95tkpeskqCQCWptHE0po4a5ExA3U8qC5qyJZ1D7KGiEmzq2knrcOSZPCxK47fCsGW3FQ7nCzCl7dg4S5WVFBe3cBun1eK413T5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5Ac4Q67xFXWHxOHVe6arXtBxWVCLEMm7iEOTf+IcXKA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A8Wwuig=</latexit>x
<latexit sha1_base64="2yHmqackfPwH3xH5BtQd25uTJac=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nWbIvwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jncaUknihecUfTU2ep6MJyMJ+0K90G0BkOyXqfXR73bJC9ZJUEhE9TaOJpoTB01yJmAup9UFjRlSzqH2ENFJdjUtZPW4cgzeViUxm+FYctuKxzOF2BK27FxliorKS48u4HdPq8Ux1XT5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5AcYXd94grLD6njitdtdr2g4pKhFiGTVzCnBv/kOLOA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A7kIuiQ=</latexit>y
<latexit sha1_base64="OPD1xHQ2m3P8tbJgLR2mPHwvAk=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nXbIPwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jisNqaRzxQvOKHrqbHU9GE7Gk3aF+yBagyFZr9Pro95tkpeskqCQCWptHE0po4a5ExA3U8qC5qyJZ1D7KGiEmzq2knrcOSZPCxK47fCsGW3FQ7nCzCl7dg4S5WVFBe3cBun1eK413T5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5Ac4Q67xFXWHxOHVe6arXtBxWVCLEMm7iEOTf+IcXKA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A8Wwuig=</latexit>fi(x)
<latexit sha1_base64="7Z/9hgbEhGuDSbmYnMPxjGq7VHQ=">ADk3icbVJdb9MwFPUaPkb52kA8RJRVRoPVE1hGhI8TMADL0hDWrtJSVQ5zk3r1XYi+2brZOU/8Ar/jH+DE1rUtFiydO65PsdX9kKwQ0Oh7/3Ot6du/fu7z/oPnz0+MnTg8NnE5OXmsGY5SLXlwk1ILiCMXIUcFloDIRcJEsPtf9i2vQhufqHG8LiCWdKZ5xRtFRk2zKj5avpwe94WDYLH8XBCvQI6t1Nj3s3ERpzkoJCpmgxoTBsMDYUo2cCai6UWmgoGxBZxA6qKgE9tm3MrvOyb1s1y7rdBv2E2FxdkcdG5aNtZQZSTFuWPXsN3npeK4rNvcAJaFTQGB4RsqRNVtHaVy7dQm63HMDotz2eaS7VrTBWDV7f9v3JVnt+9vducgrhtJi80LULXO2WtQcMNyKalKbaRlChktBVY2Mtkab5mG50Fs6+tAsS3nsJ4ktolLSYqwxPZ7hCVm72PLVE2uaDslL4mPt1ZvyUa/eQ4tYByjR3f+yzOdWUoUuWs9ocNU2rcBTbKHNtG9X3amnTqhdUm9WoqtqyotiUFXWQqPAb1b+iFrmoBtvB3AWT0SB4Ozj+/q53+nEV2n3ykrwiRyQgJ+SUfCVnZEwYuSI/yE/y3vhfA+eV/+Hu3srTPSWt53/4AcLUwOg=</latexit>x
<latexit sha1_base64="2yHmqackfPwH3xH5BtQd25uTJac=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nWbIvwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jncaUknihecUfTU2ep6MJyMJ+0K90G0BkOyXqfXR73bJC9ZJUEhE9TaOJpoTB01yJmAup9UFjRlSzqH2ENFJdjUtZPW4cgzeViUxm+FYctuKxzOF2BK27FxliorKS48u4HdPq8Ux1XT5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5AcYXd94grLD6njitdtdr2g4pKhFiGTVzCnBv/kOLOA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A7kIuiQ=</latexit>y
<latexit sha1_base64="OPD1xHQ2m3P8tbJgLR2mPHwvAk=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nXbIPwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jisNqaRzxQvOKHrqbHU9GE7Gk3aF+yBagyFZr9Pro95tkpeskqCQCWptHE0po4a5ExA3U8qC5qyJZ1D7KGiEmzq2knrcOSZPCxK47fCsGW3FQ7nCzCl7dg4S5WVFBe3cBun1eK413T5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5Ac4Q67xFXWHxOHVe6arXtBxWVCLEMm7iEOTf+IcXKA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A8Wwuig=</latexit>fn(x)
<latexit sha1_base64="An4mZ7WzgVSlO7M/VJkMd6ixZOQ=">ADk3icbVJdb9MwFPUaPkb52kA8RJRVRoPVE1hGhI8TMADL0hDWrtJSVQ5zk3r1XYi+2brZOU/8Ar/jH+DE1rUtFiydO65PsdX9kKwQ0Oh7/3Ot6du/fu7z/oPnz0+MnTg8NnE5OXmsGY5SLXlwk1ILiCMXIUcFloDIRcJEsPtf9i2vQhufqHG8LiCWdKZ5xRtFRk2yqjpavpwe94WDYLH8XBCvQI6t1Nj3s3ERpzkoJCpmgxoTBsMDYUo2cCai6UWmgoGxBZxA6qKgE9tm3MrvOyb1s1y7rdBv2E2FxdkcdG5aNtZQZSTFuWPXsN3npeK4rNvcAJaFTQGB4RsqRNVtHaVy7dQm63HMDotz2eaS7VrTBWDV7f9v3JVnt+9vducgrhtJi80LULXO2WtQcMNyKalKbaRlChktBVY2Mtkab5mG50Fs6+tAsS3nsJ4ktolLSYqwxPZ7hCVm72PLVE2uaDslL4mPt1ZvyUa/eQ4tYByjR3f+yzOdWUoUuWs9ocNU2rcBTbKHNtG9X3amnTqhdUm9WoqtqyotiUFXWQqPAb1b+iFrmoBtvB3AWT0SB4Ozj+/q53+nEV2n3ykrwiRyQgJ+SUfCVnZEwYuSI/yE/y3vhfA+eV/+Hu3srTPSWt53/4AgJYwPw=</latexit>Program = “computational graph” x1
<latexit sha1_base64="WvnCuKFTAn/041kzfknyfF9U+s=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vp9H0sD8ajtoV7oJoBfpktc6nR/u3SV6ySoJCJqi1cTSmDpqkDMBdS+pLGjKFnQGsYeKSrCpa2etw4Fn8rAojd8Kw5bdVDiczcGUtmPjLFVWUpx7dg27fV4pjsumzS1gpV0OCAzfUCHqXucolWunLtmMY3dYnMsul23Xhi4A697gf+OuPHuDcLM7B3HTSjpsqUE1Om9vQMEtK6WkKneJkTkUtBJYu8QWa7xlGl9EqWuA8W2nONmktRlPiI5whK7xFXWJymjitdtdr2g4pKhFiGTWDCnBv/kOLOA8oM938csjk1lKGPlbfaHDXP63icuqTwbZc09xrp8rof1ZvVuK67Mq03ZboJEhVhq/pXNCIf1Wg7mLvgcjyMTobvr3tn31YhfaAvCSvyGsSkfkjHwh52RCGJmRH+Qn+RUcB6fBx+DT36P7eyvNC9JZwdc/BHQvLQ=</latexit>x2
<latexit sha1_base64="/KcVBf1XBPy4aZ1Xx3wK9B7CuR8=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vp+PpYX80HLUr3AXRCvTJap1Pj/Zvk7xklQSFTFBr42ikMXUIGcC6l5SWdCULegMYg8VlWBT185ahwP5GFRGr8Vhi27qXA4m4MpbcfGWaqspDj37Bp2+7xSHJdNm1vASrscEBi+oULUvc5RKtdOXbIZx+6wOJdLtuDV0A1r3B/8ZdefYG4WZ3DuKmlXTYUoNqdN7egIJbVkpJVe4SI3MoaCWwdokt1njLNL6IUtdcB4ptOcfNJKnLfERyhCV23yOusDhNHVe6arXtBxWVCLEMm8CEOTf+IcWdB5QZ7v84ZHNqKEMfK2+1OWqe1/E4dUnh2y5p7jXS5XU/qjercV13ZVpvynQTJCrCVvWvaEQ+qtF2MHfB5XgYnQzfXvbP/uwCu0BeUlekdckIu/JGflCzsmEMDIjP8hP8is4Dk6Dj8Gnv0f391aF6Szgq9/AeLy4=</latexit>x4
<latexit sha1_base64="SGoml86irRuqWoT1DX2zb8lBfA=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omjLEHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vpyfTw/5oOGpXuAuiFeiT1TqfHu3fJnJKgkKmaDWxtFIY+qoQc4E1L2ksqApW9AZxB4qKsGmrp21DgeycOiNH4rDFt2U+FwNgdT2o6Ns1RZSXHu2TXs9nmlOC6bNreAlXY5IDB8Q4Woe52jVK6dumQzjt1hcS67XLZdG7oArHuD/4278uwNws3uHMRNK+mwpQbV6Ly9AQW3rJSqtwlRuZQ0Epg7RJbrPGWaXwRpa65DhTbco6bSVKX+YjkCEvsvkdcYXGaOq501WrbDyoqEWIZNoEJc278Q4o7Dygz3P9xyObUIY+Vt5qc9Q8r+Nx6pLCt13S3Guky+t+VG9W47ruyrTelOkmSFSErepf0Yh8VKPtYO6Cy/Ewejt89+2kf/ZhFdoD8pK8Iq9JRN6TM/KFnJMJYWRGfpCf5FdwHJwGH4NPf4/u760L0hnBV/A3yLzA=</latexit>x5
<latexit sha1_base64="Hsq5Akl8B80BmbPwZ2/oc8j8EU=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omsLEHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vpyfTw/5oOGpXuAuiFeiT1TqfHu3fJnJKgkKmaDWxtFIY+qoQc4E1L2ksqApW9AZxB4qKsGmrp21DgeycOiNH4rDFt2U+FwNgdT2o6Ns1RZSXHu2TXs9nmlOC6bNreAlXY5IDB8Q4Woe52jVK6dumQzjt1hcS67XLZdG7oArHuD/4278uwNws3uHMRNK+mwpQbV6Ly9AQW3rJSqtwlRuZQ0Epg7RJbrPGWaXwRpa65DhTbco6bSVKX+YjkCEvsvkdcYXGaOq501WrbDyoqEWIZNoEJc278Q4o7Dygz3P9xyObUIY+Vt5qc9Q8r+Nx6pLCt13S3Guky+t+VG9W47ruyrTelOkmSFSErepf0Yh8VKPtYO6Cy/Ewejs8+fauf/ZhFdoD8pK8Iq9JRN6TM/KFnJMJYWRGfpCf5FdwHJwGH4NPf4/u760L0hnBV/ABEcLzE=</latexit>x3
<latexit sha1_base64="F6glimikpVIWgm6oeZjembuU/0=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vpyfTw/5oOGpXuAuiFeiT1TqfHu3fJnJKgkKmaDWxtFIY+qoQc4E1L2ksqApW9AZxB4qKsGmrp21DgeycOiNH4rDFt2U+FwNgdT2o6Ns1RZSXHu2TXs9nmlOC6bNreAlXY5IDB8Q4Woe52jVK6dumQzjt1hcS67XLZdG7oArHuD/4278uwNws3uHMRNK+mwpQbV6Ly9AQW3rJSqtwlRuZQ0Epg7RJbrPGWaXwRpa65DhTbco6bSVKX+YjkCEvsvkdcYXGaOq501WrbDyoqEWIZNoEJc278Q4o7Dygz3P9xyObUIY+Vt5qc9Q8r+Nx6pLCt13S3Guky+t+VG9W47ruyrTelOkmSFSErepf0Yh8VKPtYO6Cy/EwOhm+/a2f/ZhFdoD8pK8Iq9JRN6TM/KFnJMJYWRGfpCf5FdwHJwGH4NPf4/u760L0hnBV/ArILy8=</latexit>x6
<latexit sha1_base64="Jy7O4Bzk75hf7WmrTDz1G41UfzQ=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omvK1BySGeE8DbFuk5Kocpyb1qrtWPbN1snKT+AVfhv/Bie0qGmxZOnc32Or+yTacEtjka/9/aDO3fv3T940Hv46PGTp4dHxe2rAyDCStFa4yakFwBRPkKOBKG6AyE3CZLT43/ctrMJaX6hxvNaSzhQvOKPoqe/L6bvpYX80HLUr3AXRCvTJap1Nj/ZvkrxklQSFTFBr42ikMXUIGcC6l5SWdCULegMYg8VlWBT185ahwP5GFRGr8Vhi27qXA4m4MpbcfGWaqspDj37Bp2+7xSHJdNm1vASrscEBi+okLUvc5RKtdOXbIZx+6wOJdLtuDV0A1r3B/8ZdefYG4WZ3DuK6lXTYUoNqdN7egIbVkpJVe4SI3MoaCWwdokt1njLND6PUtdcB4ptOcfNJKnLfERyhCV23yOusDhJHVe6arXtBxWVCLEMm8CEOTf+IcWtB5QZ7v84ZHNqKEMfK2+1OWqe1/E4dUnh2y5p7jXS5XU/qjercV13ZVpvynQTJCrCVvWvaEQ+qtF2MHfBxXgYvR6+/famf/phFdoD8py8IC9JRN6TU/KFnJEJYWRGfpCf5FdwHJwEH4NPf4/u760z0hnBV/ABRGLzI=</latexit>Automatic differentiation
Differentiable programming library: f1(x)
<latexit sha1_base64="mgn+bjLVnQ0fXQshiR2UgAI6ni0=">ADlHicbVJda9swFXjfXTeV7vBXvZiFgLdw0KcbWwPfSiUwZ5GB01TsE2Q5etERJKNdN2mCP+IvW6/bP9mspeMOJlAcO65OkcX6aSl4AZHo98HPe/e/QcPDx/5j58fb86PjFlSkqzWDClHo65QaEFzBDkKuC41UJkKmKbL86Y/vQFteKEu8a6ERNK54jlnFB01zWfhyeqtPzvqj4ajdgX7IFyDPlmvi9lx7zbOClZJUMgENSYKRyUmlmrkTEDtx5WBkrIlnUPkoKISTGLbetg4JgsyAvtsKgZbcVFucL0IXp2FhDlZEUF47dwG6fV4rjqmlzA1iVNgMEhu+oELXfOUrlxqlLNuOYPRYXsulu7WmS8DaH/xv3LWnPwi2uwsQN62kwxYlqEbn7DUouGWFlFRlNtYyg5xWAmsbm3yDd0yjyzCxzXWg2I5z1EyS2NTFJENYfc9ogrz4nlqxabftBeSUCLImNEHGtXtIcecAZq7Pw7YgmrK0EXLW2PmV1NE5snLu2jZt7tbRZ3Q/r7Wpc1ZW7LyiZIVASt6l/RiFxUw91g7oOr8TB8P/z4/UP/7HQd2kPymrwhJyQkn8gZ+UouyIQwsiQ/yE/y3vlnXrn3pe/R3sHa81L0lnetz8G1DAW</latexit>x
<latexit sha1_base64="2yHmqackfPwH3xH5BtQd25uTJac=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nWbIvwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jncaUknihecUfTU2ep6MJyMJ+0K90G0BkOyXqfXR73bJC9ZJUEhE9TaOJpoTB01yJmAup9UFjRlSzqH2ENFJdjUtZPW4cgzeViUxm+FYctuKxzOF2BK27FxliorKS48u4HdPq8Ux1XT5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5AcYXd94grLD6njitdtdr2g4pKhFiGTVzCnBv/kOLOA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A7kIuiQ=</latexit>y
<latexit sha1_base64="OPD1xHQ2m3P8tbJgLR2mPHwvAk=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nXbIPwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jisNqaRzxQvOKHrqbHU9GE7Gk3aF+yBagyFZr9Pro95tkpeskqCQCWptHE0po4a5ExA3U8qC5qyJZ1D7KGiEmzq2knrcOSZPCxK47fCsGW3FQ7nCzCl7dg4S5WVFBe3cBun1eK413T5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5Ac4Q67xFXWHxOHVe6arXtBxWVCLEMm7iEOTf+IcXKA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A8Wwuig=</latexit>x
<latexit sha1_base64="2yHmqackfPwH3xH5BtQd25uTJac=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nWbIvwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jncaUknihecUfTU2ep6MJyMJ+0K90G0BkOyXqfXR73bJC9ZJUEhE9TaOJpoTB01yJmAup9UFjRlSzqH2ENFJdjUtZPW4cgzeViUxm+FYctuKxzOF2BK27FxliorKS48u4HdPq8Ux1XT5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5AcYXd94grLD6njitdtdr2g4pKhFiGTVzCnBv/kOLOA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A7kIuiQ=</latexit>y
<latexit sha1_base64="OPD1xHQ2m3P8tbJgLR2mPHwvAk=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nXbIPwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jisNqaRzxQvOKHrqbHU9GE7Gk3aF+yBagyFZr9Pro95tkpeskqCQCWptHE0po4a5ExA3U8qC5qyJZ1D7KGiEmzq2knrcOSZPCxK47fCsGW3FQ7nCzCl7dg4S5WVFBe3cBun1eK413T5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5Ac4Q67xFXWHxOHVe6arXtBxWVCLEMm7iEOTf+IcXKA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A8Wwuig=</latexit>fi(x)
<latexit sha1_base64="7Z/9hgbEhGuDSbmYnMPxjGq7VHQ=">ADk3icbVJdb9MwFPUaPkb52kA8RJRVRoPVE1hGhI8TMADL0hDWrtJSVQ5zk3r1XYi+2brZOU/8Ar/jH+DE1rUtFiydO65PsdX9kKwQ0Oh7/3Ot6du/fu7z/oPnz0+MnTg8NnE5OXmsGY5SLXlwk1ILiCMXIUcFloDIRcJEsPtf9i2vQhufqHG8LiCWdKZ5xRtFRk2zKj5avpwe94WDYLH8XBCvQI6t1Nj3s3ERpzkoJCpmgxoTBsMDYUo2cCai6UWmgoGxBZxA6qKgE9tm3MrvOyb1s1y7rdBv2E2FxdkcdG5aNtZQZSTFuWPXsN3npeK4rNvcAJaFTQGB4RsqRNVtHaVy7dQm63HMDotz2eaS7VrTBWDV7f9v3JVnt+9vducgrhtJi80LULXO2WtQcMNyKalKbaRlChktBVY2Mtkab5mG50Fs6+tAsS3nsJ4ktolLSYqwxPZ7hCVm72PLVE2uaDslL4mPt1ZvyUa/eQ4tYByjR3f+yzOdWUoUuWs9ocNU2rcBTbKHNtG9X3amnTqhdUm9WoqtqyotiUFXWQqPAb1b+iFrmoBtvB3AWT0SB4Ozj+/q53+nEV2n3ykrwiRyQgJ+SUfCVnZEwYuSI/yE/y3vhfA+eV/+Hu3srTPSWt53/4AcLUwOg=</latexit>x
<latexit sha1_base64="2yHmqackfPwH3xH5BtQd25uTJac=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nWbIvwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jncaUknihecUfTU2ep6MJyMJ+0K90G0BkOyXqfXR73bJC9ZJUEhE9TaOJpoTB01yJmAup9UFjRlSzqH2ENFJdjUtZPW4cgzeViUxm+FYctuKxzOF2BK27FxliorKS48u4HdPq8Ux1XT5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5AcYXd94grLD6njitdtdr2g4pKhFiGTVzCnBv/kOLOA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A7kIuiQ=</latexit>y
<latexit sha1_base64="OPD1xHQ2m3P8tbJgLR2mPHwvAk=">ADjnicbVJda9swFXjfXTZV7o97sUsBPayEGefDxsr7KWPLTRtwTZFlq8TEUkW0nXbIPwL9r9uP2byV4y4mQCwbn6hxdpJNpwS1OJr8PesG9+w8eHj7qP37y9NnzwdGLC1tWhsGMlaI0Vxm1ILiCGXIUcKUNUJkJuMyW35v+5Q0Yy0t1jisNqaRzxQvOKHrqbHU9GE7Gk3aF+yBagyFZr9Pro95tkpeskqCQCWptHE0po4a5ExA3U8qC5qyJZ1D7KGiEmzq2knrcOSZPCxK47fCsGW3FQ7nCzCl7dg4S5WVFBe3cBun1eK413T5haw0i4HBIZvqRB1v3OUyo1Tl2zGsXsLmSXy3ZrQ5eAdX/0v3HXnv1RuN1dgLhpJR21KAanbc3oOCWlVJSlbvEyBwKWgmsXWKLDd4xjc+j1DXgWI7znEzSeoyH5Ac4Q67xFXWHxOHVe6arXtBxWVCLEMm7iEOTf+IcXKA8oM938csgU1lKEPlbfaHjXP63iauqTwbZc09xrp8noY1dvVtK67Mq23ZboJEhVhq/pXNCIf1Wg3mPvgYjqO3o0/nL0fHn9Zh/aQvCKvyRsSkU/kmJyQUzIjAD5QX6SX8Eg+Bh8Db79Pdo7WGteks4KTv4A8Wwuig=</latexit>fn(x)
<latexit sha1_base64="An4mZ7WzgVSlO7M/VJkMd6ixZOQ=">ADk3icbVJdb9MwFPUaPkb52kA8RJRVRoPVE1hGhI8TMADL0hDWrtJSVQ5zk3r1XYi+2brZOU/8Ar/jH+DE1rUtFiydO65PsdX9kKwQ0Oh7/3Ot6du/fu7z/oPnz0+MnTg8NnE5OXmsGY5SLXlwk1ILiCMXIUcFloDIRcJEsPtf9i2vQhufqHG8LiCWdKZ5xRtFRk2yqjpavpwe94WDYLH8XBCvQI6t1Nj3s3ERpzkoJCpmgxoTBsMDYUo2cCai6UWmgoGxBZxA6qKgE9tm3MrvOyb1s1y7rdBv2E2FxdkcdG5aNtZQZSTFuWPXsN3npeK4rNvcAJaFTQGB4RsqRNVtHaVy7dQm63HMDotz2eaS7VrTBWDV7f9v3JVnt+9vducgrhtJi80LULXO2WtQcMNyKalKbaRlChktBVY2Mtkab5mG50Fs6+tAsS3nsJ4ktolLSYqwxPZ7hCVm72PLVE2uaDslL4mPt1ZvyUa/eQ4tYByjR3f+yzOdWUoUuWs9ocNU2rcBTbKHNtG9X3amnTqhdUm9WoqtqyotiUFXWQqPAb1b+iFrmoBtvB3AWT0SB4Ozj+/q53+nEV2n3ykrwiRyQgJ+SUfCVnZEwYuSI/yE/y3vhfA+eV/+Hu3srTPSWt53/4AgJYwPw=</latexit>Track a way to compute any dxi/dxj df1 dx
<latexit sha1_base64="3INzIg2ZqnHMlPZ48McULmWlm0=">ADmHicbVJdb9MwFPUWPkb52uANXiKqSrxQNR0IHnioxAPwNtC6TUqiyrFvWqu2E9k3WycrP4NX+F38G5zQoqbFkqVz/U5vrJPVkphcT6fXAY3Ll7/7Rg97DR4+fPD0+eXZhi8owmLJCFuYqoxak0DBFgRKuSgNUZRIus+Wnpn95DcaKQp/jbQmponMtcsEoeipOHf5LKrdqp4d90fDUbvCfRCtQZ+s19ns5PAm4QWrFGhklobR6MSU0cNCiah7iWVhZKyJZ1D7KGmCmzq2pnrcOAZHuaF8Vtj2LbCofzBZjCdmycpdoqigvPbmC3LyotcNW0hQWsSscBgeEbKmXd6xylauPUJZtx7B6LC9Xlst3a0CVg3Rv8b9y1Z28QbncXIK9bSYctStCNztsb0HDCqWo5i4xikNOK4m1S2y+wTum8XmUuY60GzHOW4mSV3mo8IRVth9j7jC/EPqhC6rVt+UF7JEIuwCU7IhfEPKW89oMwI/8chW1BDGfp4eavtUTmv43Hqkty3XdLca5Tjd8Hbasa13VXVpbsrIJEpVhq/pXNCIf1Wg3mPvgYjyMTofvr3tTz6uQ3tEXpJX5DWJyHsyIV/IGZkSRgryg/wkv4IXwST4Hz9e/TwYK15Tjor+P4HTgYy9w=</latexit>dfi dx
<latexit sha1_base64="wQu0vz2DXInXFMntSb4PatnI9tM=">ADmHicbVJdb9MwFPUWPkb52uANXiKqSrxQNR0IHnioxAPwNtC6TUqiyrFvWquOE9k3WyfLP4NX+F38G5zQoqbFkqVz/U5vrJPVklhcDT6fXAY3Ll7/7Rg97DR4+fPD0+eXZhylozmLJSlvoqowakUDBFgRKuKg20yCRcZstPTf/yGrQRpTrH2wrSgs6VyAWj6Kk4dzmM+Hsys2O+6PhqF3hPojWoE/W62x2cniT8JLVBShkhoTR6MKU0s1CibB9ZLaQEXZks4h9lDRAkxq25ldOPAMD/NS+60wbNlthcX5AnRpOjbWUGUKigvPbmC3L2olcNW0hQGsK8sBgeEbKqXrdY7SYuPUJZtxzB6Li6LZbu1pktA1xv8b9y1Z28QbncXIK9bSYctK1CNztrUHDyqKgitEFxyWkt0NjH5Bu+YxudRapvrQLEd57iZJLWZjwpHWGH3PeIa8w+pFaqW237QXktQyzDJjghF9o/pLz1gDIt/B+HbE1Zej5a2R+XcxePUJrlv26S5VxeWu37ktquxc1ZVW3LqiZIVIat6l/RiHxUo91g7oOL8TA6Hb79rY/+bgO7RF5SV6R1yQi78mEfCFnZEoYKckP8pP8Cl4Ek+Bz8PXv0cODteY56azg+x8AJTMv</latexit>dfn dx
<latexit sha1_base64="0L+UPiVeP4QXmiEWLUQXS/sU=">ADmHicbVJdb9MwFPUWPkb52uANXiKqSrxQNR0IHnioxAPwNtC6TUqiyrFvWquOE9k3WyfLP4NX+F38G5zQoqbFkqVz/U5vrJPVklhcDT6fXAY3Ll7/7Rg97DR4+fPD0+eXZhylozmLJSlvoqowakUDBFgRKuKg20yCRcZstPTf/yGrQRpTrH2wrSgs6VyAWj6Kk4dzmM+Xsys2O+6PhqF3hPojWoE/W62x2cniT8JLVBShkhoTR6MKU0s1CibB9ZLaQEXZks4h9lDRAkxq25ldOPAMD/NS+60wbNlthcX5AnRpOjbWUGUKigvPbmC3L2olcNW0hQGsK8sBgeEbKqXrdY7SYuPUJZtxzB6Li6LZbu1pktA1xv8b9y1Z28QbncXIK9bSYctK1CNztrUHDyqKgitEFxyWkt0NjH5Bu+YxudRapvrQLEd57iZJLWZjwpHWGH3PeIa8w+pFaqW237QXktQyzDJjghF9o/pLz1gDIt/B+HbE1Zej5a2R+XcxePUJrlv26S5VxeWu37ktquxc1ZVW3LqiZIVIat6l/RiHxUo91g7oOL8TA6Hb79rY/+bgO7RF5SV6R1yQi78mEfCFnZEoYKckP8pP8Cl4Ek+Bz8PXv0cODteY56azg+x8QCzM0</latexit>19
x1
<latexit sha1_base64="WvnCuKFTAn/041kzfknyfF9U+s=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vp9H0sD8ajtoV7oJoBfpktc6nR/u3SV6ySoJCJqi1cTSmDpqkDMBdS+pLGjKFnQGsYeKSrCpa2etw4Fn8rAojd8Kw5bdVDiczcGUtmPjLFVWUpx7dg27fV4pjsumzS1gpV0OCAzfUCHqXucolWunLtmMY3dYnMsul23Xhi4A697gf+OuPHuDcLM7B3HTSjpsqUE1Om9vQMEtK6WkKneJkTkUtBJYu8QWa7xlGl9EqWuA8W2nONmktRlPiI5whK7xFXWJymjitdtdr2g4pKhFiGTWDCnBv/kOLOA8oM938csjk1lKGPlbfaHDXP63icuqTwbZc09xrp8rof1ZvVuK67Mq03ZboJEhVhq/pXNCIf1Wg7mLvgcjyMTobvr3tn31YhfaAvCSvyGsSkfkjHwh52RCGJmRH+Qn+RUcB6fBx+DT36P7eyvNC9JZwdc/BHQvLQ=</latexit>x2
<latexit sha1_base64="/KcVBf1XBPy4aZ1Xx3wK9B7CuR8=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vp+PpYX80HLUr3AXRCvTJap1Pj/Zvk7xklQSFTFBr42ikMXUIGcC6l5SWdCULegMYg8VlWBT185ahwP5GFRGr8Vhi27qXA4m4MpbcfGWaqspDj37Bp2+7xSHJdNm1vASrscEBi+oULUvc5RKtdOXbIZx+6wOJdLtuDV0A1r3B/8ZdefYG4WZ3DuKmlXTYUoNqdN7egIJbVkpJVe4SI3MoaCWwdokt1njLNL6IUtdcB4ptOcfNJKnLfERyhCV23yOusDhNHVe6arXtBxWVCLEMm8CEOTf+IcWdB5QZ7v84ZHNqKEMfK2+1OWqe1/E4dUnh2y5p7jXS5XU/qjercV13ZVpvynQTJCrCVvWvaEQ+qtF2MHfB5XgYnQzfXvbP/uwCu0BeUlekdckIu/JGflCzsmEMDIjP8hP8is4Dk6Dj8Gnv0f391aF6Szgq9/AeLy4=</latexit>x4
<latexit sha1_base64="SGoml86irRuqWoT1DX2zb8lBfA=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omjLEHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vpyfTw/5oOGpXuAuiFeiT1TqfHu3fJnJKgkKmaDWxtFIY+qoQc4E1L2ksqApW9AZxB4qKsGmrp21DgeycOiNH4rDFt2U+FwNgdT2o6Ns1RZSXHu2TXs9nmlOC6bNreAlXY5IDB8Q4Woe52jVK6dumQzjt1hcS67XLZdG7oArHuD/4278uwNws3uHMRNK+mwpQbV6Ly9AQW3rJSqtwlRuZQ0Epg7RJbrPGWaXwRpa65DhTbco6bSVKX+YjkCEvsvkdcYXGaOq501WrbDyoqEWIZNoEJc278Q4o7Dygz3P9xyObUIY+Vt5qc9Q8r+Nx6pLCt13S3Guky+t+VG9W47ruyrTelOkmSFSErepf0Yh8VKPtYO6Cy/Ewejt89+2kf/ZhFdoD8pK8Iq9JRN6TM/KFnJMJYWRGfpCf5FdwHJwGH4NPf4/u760L0hnBV/A3yLzA=</latexit>x5
<latexit sha1_base64="Hsq5Akl8B80BmbPwZ2/oc8j8EU=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omsLEHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vpyfTw/5oOGpXuAuiFeiT1TqfHu3fJnJKgkKmaDWxtFIY+qoQc4E1L2ksqApW9AZxB4qKsGmrp21DgeycOiNH4rDFt2U+FwNgdT2o6Ns1RZSXHu2TXs9nmlOC6bNreAlXY5IDB8Q4Woe52jVK6dumQzjt1hcS67XLZdG7oArHuD/4278uwNws3uHMRNK+mwpQbV6Ly9AQW3rJSqtwlRuZQ0Epg7RJbrPGWaXwRpa65DhTbco6bSVKX+YjkCEvsvkdcYXGaOq501WrbDyoqEWIZNoEJc278Q4o7Dygz3P9xyObUIY+Vt5qc9Q8r+Nx6pLCt13S3Guky+t+VG9W47ruyrTelOkmSFSErepf0Yh8VKPtYO6Cy/Ewejs8+fauf/ZhFdoD8pK8Iq9JRN6TM/KFnJMJYWRGfpCf5FdwHJwGH4NPf4/u760L0hnBV/ABEcLzE=</latexit>x3
<latexit sha1_base64="F6glimikpVIWgm6oeZjembuU/0=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vpyfTw/5oOGpXuAuiFeiT1TqfHu3fJnJKgkKmaDWxtFIY+qoQc4E1L2ksqApW9AZxB4qKsGmrp21DgeycOiNH4rDFt2U+FwNgdT2o6Ns1RZSXHu2TXs9nmlOC6bNreAlXY5IDB8Q4Woe52jVK6dumQzjt1hcS67XLZdG7oArHuD/4278uwNws3uHMRNK+mwpQbV6Ly9AQW3rJSqtwlRuZQ0Epg7RJbrPGWaXwRpa65DhTbco6bSVKX+YjkCEvsvkdcYXGaOq501WrbDyoqEWIZNoEJc278Q4o7Dygz3P9xyObUIY+Vt5qc9Q8r+Nx6pLCt13S3Guky+t+VG9W47ruyrTelOkmSFSErepf0Yh8VKPtYO6Cy/EwOhm+/a2f/ZhFdoD8pK8Iq9JRN6TM/KFnJMJYWRGfpCf5FdwHJwGH4NPf4/u760L0hnBV/ArILy8=</latexit>x6
<latexit sha1_base64="Jy7O4Bzk75hf7WmrTDz1G41UfzQ=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omvK1BySGeE8DbFuk5Kocpyb1qrtWPbN1snKT+AVfhv/Bie0qGmxZOnc32Or+yTacEtjka/9/aDO3fv3T940Hv46PGTp4dHxe2rAyDCStFa4yakFwBRPkKOBKG6AyE3CZLT43/ctrMJaX6hxvNaSzhQvOKPoqe/L6bvpYX80HLUr3AXRCvTJap1Nj/ZvkrxklQSFTFBr42ikMXUIGcC6l5SWdCULegMYg8VlWBT185ahwP5GFRGr8Vhi27qXA4m4MpbcfGWaqspDj37Bp2+7xSHJdNm1vASrscEBi+okLUvc5RKtdOXbIZx+6wOJdLtuDV0A1r3B/8ZdefYG4WZ3DuK6lXTYUoNqdN7egIbVkpJVe4SI3MoaCWwdokt1njLND6PUtdcB4ptOcfNJKnLfERyhCV23yOusDhJHVe6arXtBxWVCLEMm8CEOTf+IcWtB5QZ7v84ZHNqKEMfK2+1OWqe1/E4dUnh2y5p7jXS5XU/qjercV13ZVpvynQTJCrCVvWvaEQ+qtF2MHfBxXgYvR6+/famf/phFdoD8py8IC9JRN6TU/KFnJEJYWRGfpCf5FdwHJwEH4NPf4/u760z0hnBV/ABRGLzI=</latexit>Forward/reverse autodiff
20
x1
<latexit sha1_base64="WvnCuKFTAn/041kzfknyfF9U+s=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vp9H0sD8ajtoV7oJoBfpktc6nR/u3SV6ySoJCJqi1cTSmDpqkDMBdS+pLGjKFnQGsYeKSrCpa2etw4Fn8rAojd8Kw5bdVDiczcGUtmPjLFVWUpx7dg27fV4pjsumzS1gpV0OCAzfUCHqXucolWunLtmMY3dYnMsul23Xhi4A697gf+OuPHuDcLM7B3HTSjpsqUE1Om9vQMEtK6WkKneJkTkUtBJYu8QWa7xlGl9EqWuA8W2nONmktRlPiI5whK7xFXWJymjitdtdr2g4pKhFiGTWDCnBv/kOLOA8oM938csjk1lKGPlbfaHDXP63icuqTwbZc09xrp8rof1ZvVuK67Mq03ZboJEhVhq/pXNCIf1Wg7mLvgcjyMTobvr3tn31YhfaAvCSvyGsSkfkjHwh52RCGJmRH+Qn+RUcB6fBx+DT36P7eyvNC9JZwdc/BHQvLQ=</latexit>x2
<latexit sha1_base64="/KcVBf1XBPy4aZ1Xx3wK9B7CuR8=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vp+PpYX80HLUr3AXRCvTJap1Pj/Zvk7xklQSFTFBr42ikMXUIGcC6l5SWdCULegMYg8VlWBT185ahwP5GFRGr8Vhi27qXA4m4MpbcfGWaqspDj37Bp2+7xSHJdNm1vASrscEBi+oULUvc5RKtdOXbIZx+6wOJdLtuDV0A1r3B/8ZdefYG4WZ3DuKmlXTYUoNqdN7egIJbVkpJVe4SI3MoaCWwdokt1njLNL6IUtdcB4ptOcfNJKnLfERyhCV23yOusDhNHVe6arXtBxWVCLEMm8CEOTf+IcWdB5QZ7v84ZHNqKEMfK2+1OWqe1/E4dUnh2y5p7jXS5XU/qjercV13ZVpvynQTJCrCVvWvaEQ+qtF2MHfB5XgYnQzfXvbP/uwCu0BeUlekdckIu/JGflCzsmEMDIjP8hP8is4Dk6Dj8Gnv0f391aF6Szgq9/AeLy4=</latexit>x3
<latexit sha1_base64="F6glimikpVIWgm6oeZjembuU/0=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vpyfTw/5oOGpXuAuiFeiT1TqfHu3fJnJKgkKmaDWxtFIY+qoQc4E1L2ksqApW9AZxB4qKsGmrp21DgeycOiNH4rDFt2U+FwNgdT2o6Ns1RZSXHu2TXs9nmlOC6bNreAlXY5IDB8Q4Woe52jVK6dumQzjt1hcS67XLZdG7oArHuD/4278uwNws3uHMRNK+mwpQbV6Ly9AQW3rJSqtwlRuZQ0Epg7RJbrPGWaXwRpa65DhTbco6bSVKX+YjkCEvsvkdcYXGaOq501WrbDyoqEWIZNoEJc278Q4o7Dygz3P9xyObUIY+Vt5qc9Q8r+Nx6pLCt13S3Guky+t+VG9W47ruyrTelOkmSFSErepf0Yh8VKPtYO6Cy/EwOhm+/a2f/ZhFdoD8pK8Iq9JRN6TM/KFnJMJYWRGfpCf5FdwHJwGH4NPf4/u760L0hnBV/ArILy8=</latexit>x4
<latexit sha1_base64="SGoml86irRuqWoT1DX2zb8lBfA=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omjLEHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vpyfTw/5oOGpXuAuiFeiT1TqfHu3fJnJKgkKmaDWxtFIY+qoQc4E1L2ksqApW9AZxB4qKsGmrp21DgeycOiNH4rDFt2U+FwNgdT2o6Ns1RZSXHu2TXs9nmlOC6bNreAlXY5IDB8Q4Woe52jVK6dumQzjt1hcS67XLZdG7oArHuD/4278uwNws3uHMRNK+mwpQbV6Ly9AQW3rJSqtwlRuZQ0Epg7RJbrPGWaXwRpa65DhTbco6bSVKX+YjkCEvsvkdcYXGaOq501WrbDyoqEWIZNoEJc278Q4o7Dygz3P9xyObUIY+Vt5qc9Q8r+Nx6pLCt13S3Guky+t+VG9W47ruyrTelOkmSFSErepf0Yh8VKPtYO6Cy/Ewejt89+2kf/ZhFdoD8pK8Iq9JRN6TM/KFnJMJYWRGfpCf5FdwHJwGH4NPf4/u760L0hnBV/A3yLzA=</latexit>x4 = f3(f2(f1(x1)))
<latexit sha1_base64="+GAHq2Swn4AQ8EIA7pHdnGREmMg=">ADp3icbVLdbtMwGPUWfkb56+AGiRuLqlJ7QdV0Q3AB0iRuGNIa1cpiSLH+dJatZ3IdrZOVngabuF9eBuc0KmxZKl4/P5H+2T1Jwps14/Pvo2Lt3/8HDk0edx0+ePnvePX0x03mpKExpznM1T4gGziRMDTMc5oUCIhIO18nqc12/vgGlWS6vzF0BkSALyTJGiXFU3H21js/xJ5zFZ4MsnrjpD9axPxwO425vPBo3Ax8CfwN6aDMu49Pj2zDNaSlAGsqJ1oE/LkxkiTKMcqg6YamhIHRFhA4KIkAHdnmChXuOybFWa7clAY37K7CmsUSVK5bNlYTqQUxS8duYbvOSsnMui4zDaYsbAoGqHlLOK86ra1EbJ3aZN2OPmDNUrS5ZH+tyApM1en/r92NZ6ePd6tL4DeNpMXmBcha5+wVSLiluRBEpjZUIoWMlNxUNtTZFu+ZBld+ZOvjQNI956DuJLKJS05qYG3a7xGUJvsQWSaLstE2H5SVHJsc1znCKVPuIfmdA4Qq5v4Y0yVRhBqXNme12qaVsEksmHmyjasz1XCplXPr3ZXk6pqy4piV1bUQSIcN6p/i1rkourvB/MQzCYj/2z07t57+LjJrQn6DV6gwbIR+/RBfqCLtEUfQd/UA/0S9v6H31Zt7879bjo43mJWoNj/wBKr81kA=</latexit>dx4 dx1 = dx4 dx3 dx3 dx2 dx2 dx1
<latexit sha1_base64="oMXgdLNsEZqWrgUtjZe+C8pyr8Y=">ADxnicbVLdatswGFXj/XTZT9PtcjdiIbCbhTjp6C42KOymlx0bcE2QZY/JyKybCS5SRGCvcieZrfbA+xtJjvJsJMJbM45n86nz/KJC86UHo3+HW8R4+fPD1+1n3+4uWrk97p6xuVl5LClOY8l3cxUcCZgKlmsNdIYFkMYfbePm1qt/eg1QsF9f6oYAoI3PBUkaJdtKsdx4miVnPzqx7+RZ/wQ0+sRsyqch4S8abnbNefzQc1QsfAn8L+mi7rmanVWY5LTMQGjKiVKBPyp0ZIjUjHKw3bBUBC6JHMIHBQkAxWZ+gstHjglwWku3SM0rtWmw+j5AmSuWm2MIkJlRC+cuoPtOisF0+uqzBTosjAJaKD6A+HcdltbSbr1BarcdSBqhdZW4v3uSRL0LY7+N+4257dAW5WF8Dva0tLzQsQlc+1lyBgRfMsIyIxocwSEnJtTWhSnd4r2lw7UemOg4E3escVJNEJnbBSjSsdfs+glKnyLDRFHW3voHpSXHOsdVzHDCpLtI/uAoZK5f4zpgkhCtQuja9UcNUlsMI5MmLqyCatzZWYS2/dtk42tbduKomkrqiARjmvXP1KZXFT9/WAegpvx0J8MP34761983ob2GL1F79B75KNzdIEu0RWaIop+oJ/oF/rtXrCK73VZmvnaOt5g1rL+/4XRZRFdw=</latexit>[N4 × N3]
<latexit sha1_base64="7XdSmnZFNe5kRkCSAyC1SVlGXmM=">ADn3icbVLjtMwFPU0PIby6sCSjaGqxIaq6QyCBYuRWMCqKtJ0ZlASVY5z01p1nMi+6czIyp+whX/ib3BCi5oWS5bOPdfn+Mo+cSGFwdHo91Hu3f/wcPjR93HT54+e947eXFp8lJzmPFc5vo6ZgakUDBDgRKuCw0siyVcxavPdf9qDdqIXF3gXQFRxhZKpIzdNS81wsm8zMaosjA0Mn8NJr3+qPhqFn0EPgb0CebNZ2fdG7CJOdlBgq5ZMYE/qjAyDKNgkuoumFpoGB8xRYQOKiYuyqyzegVHTgmoWmu3VZIG3ZXYXGxBJ2blo01TJmM4dKxW9jui1IJvK3bwgCWhU0AgeM7JmXVbR1l2dapTdbjmAMWl1mbi/drzVaAVXfwv3E3nt0B3e0uQa4bSYvNC1C1ztlrUHD8yxjKrGhzhJIWSmxsqFJt3jPNLjwI1tfB4rvOQf1JGNXWIShFtsv0dQYvoxskIVZaNtPigtJcWc1vmhidDuIeWdA4xr4f6Y8iXTjKNLmbPaHTVJqmAc2TB1bRvW9+rMJlXfr3arcVW1ZUWxKyvqIDFJG9W/oha5qPr7wTwEl+Ohfzp8/+2sf/5pE9pj8oq8IW+JTz6Qc/KVTMmMcLImP8hP8st7X3xJt7079HO0UbzkrSW9/0PCK40Dw=</latexit>[N3 × N2]
<latexit sha1_base64="JsmrP4jrYi03O3pbH4jy1g0Pupo=">ADn3icbVLjtMwFPU0PIbymA4s2RiqSmyomg4IFixGYgGrqkjTmUFJVDnOTWvVcSL7pjMjK3/CFv6Jv8EJLWpaLFk691yf4yv7xIUBkej30cd7979Bw+PH3UfP3n67KR3+vzS5KXmMO5zPV1zAxIoWCGAiVcFxpYFku4ilef6/7VGrQRubrAuwKijC2USAVn6Kh5rxdM5mc0RJGBoZP5OJr3+qPhqFn0EPgb0CebNZ2fdm7CJOdlBgq5ZMYE/qjAyDKNgkuoumFpoGB8xRYQOKiYuyqyzegVHTgmoWmu3VZIG3ZXYXGxBJ2blo01TJmM4dKxW9jui1IJvK3bwgCWhU0AgeNbJmXVbR1l2dapTdbjmAMWl1mbi/drzVaAVXfwv3E3nt0B3e0uQa4bSYvNC1C1ztlrUHD8yxjKrGhzhJIWSmxsqFJt3jPNLjwI1tfB4rvOQf1JGNXWIShFtsv0dQYvoxskIVZaNtPigtJcWc1vmhidDuIeWdA4xr4f6Y8iXTjKNLmbPaHTVJqmAc2TB1bRvW9+rMJlXfr3arcVW1ZUWxKyvqIDFJG9W/oha5qPr7wTwEl+OhfzZ8/+1d/zTJrTH5CV5Td4Qn3wg5+QrmZIZ4WRNfpCf5Jf3yviTbzp36Odo43mBWkt7/sfAk0DQ=</latexit>[N2 × N1]
<latexit sha1_base64="PKRyIrXS63+jZ5uCQi28QNdneDs=">ADn3icbVJNj9MwFPQ2wC7lqwtHLoaqEheqpoCWA4eVOMCpKtJ2d1ESVY7z0lp1nMh+6e7Kyj/hCv+Jf4MTWtS0WLI0b5n/GRPXEhcDT6fdTx7t1/cHzysPvo8ZOnz3qnzy9NXmoOM57LXF/HzIAUCmYoUMJ1oYFlsYSrePW57l+tQRuRqwu8KyDK2EKJVHCGjpr3esFkPqYhigwMncz9aN7rj4ajZtFD4G9An2zWdH7auQmTnJcZKOSGRP4owIjyzQKLqHqhqWBgvEVW0DgoGLuqsg2o1d04JiEprl2WyFt2F2FxcUSdG5aNtYwZTKGS8duYbsvSiXwtm4LA1gWNgEjm+ZlFW3dZRlW6c2WY9jDlhcZm0u3q81WwFW3cH/xt14dgd0t7sEuW4kLTYvQNU6Z69BwQ3Ps4ypxIY6SyBlpcTKhibd4j3T4MKPbH0dKL7nHNSTRDZ2iUkQbrH9HkGJ6cfIClWUjb5oLSUFHNa54cmQruHlHcOMK6F+2PKl0wzji5lzmp31CSpgnFkw9S1bVjfqzObVH2/2q3GVdWFcWurKiDxCRtVP+KWuSi6u8H8xBcjof+u+GHb+/7582oT0hL8lr8ob45Iyck69kSmaEkzX5QX6SX94r74s38aZ/j3aONpoXpLW8738A+90Cw=</latexit>Forward/reverse autodiff
21
dx4 dx1 = dx4 dx3 dx3 dx2 dx2 dx1
<latexit sha1_base64="oMXgdLNsEZqWrgUtjZe+C8pyr8Y=">ADxnicbVLdatswGFXj/XTZT9PtcjdiIbCbhTjp6C42KOymlx0bcE2QZY/JyKybCS5SRGCvcieZrfbA+xtJjvJsJMJbM45n86nz/KJC86UHo3+HW8R4+fPD1+1n3+4uWrk97p6xuVl5LClOY8l3cxUcCZgKlmsNdIYFkMYfbePm1qt/eg1QsF9f6oYAoI3PBUkaJdtKsdx4miVnPzqx7+RZ/wQ0+sRsyqch4S8abnbNefzQc1QsfAn8L+mi7rmanVWY5LTMQGjKiVKBPyp0ZIjUjHKw3bBUBC6JHMIHBQkAxWZ+gstHjglwWku3SM0rtWmw+j5AmSuWm2MIkJlRC+cuoPtOisF0+uqzBTosjAJaKD6A+HcdltbSbr1BarcdSBqhdZW4v3uSRL0LY7+N+4257dAW5WF8Dva0tLzQsQlc+1lyBgRfMsIyIxocwSEnJtTWhSnd4r2lw7UemOg4E3escVJNEJnbBSjSsdfs+glKnyLDRFHW3voHpSXHOsdVzHDCpLtI/uAoZK5f4zpgkhCtQuja9UcNUlsMI5MmLqyCatzZWYS2/dtk42tbduKomkrqiARjmvXP1KZXFT9/WAegpvx0J8MP34761983ob2GL1F79B75KNzdIEu0RWaIop+oJ/oF/rtXrCK73VZmvnaOt5g1rL+/4XRZRFdw=</latexit>[N4 × N3]
<latexit sha1_base64="7XdSmnZFNe5kRkCSAyC1SVlGXmM=">ADn3icbVLjtMwFPU0PIby6sCSjaGqxIaq6QyCBYuRWMCqKtJ0ZlASVY5z01p1nMi+6czIyp+whX/ib3BCi5oWS5bOPdfn+Mo+cSGFwdHo91Hu3f/wcPjR93HT54+e947eXFp8lJzmPFc5vo6ZgakUDBDgRKuCw0siyVcxavPdf9qDdqIXF3gXQFRxhZKpIzdNS81wsm8zMaosjA0Mn8NJr3+qPhqFn0EPgb0CebNZ2fdG7CJOdlBgq5ZMYE/qjAyDKNgkuoumFpoGB8xRYQOKiYuyqyzegVHTgmoWmu3VZIG3ZXYXGxBJ2blo01TJmM4dKxW9jui1IJvK3bwgCWhU0AgeM7JmXVbR1l2dapTdbjmAMWl1mbi/drzVaAVXfwv3E3nt0B3e0uQa4bSYvNC1C1ztlrUHD8yxjKrGhzhJIWSmxsqFJt3jPNLjwI1tfB4rvOQf1JGNXWIShFtsv0dQYvoxskIVZaNtPigtJcWc1vmhidDuIeWdA4xr4f6Y8iXTjKNLmbPaHTVJqmAc2TB1bRvW9+rMJlXfr3arcVW1ZUWxKyvqIDFJG9W/oha5qPr7wTwEl+Ohfzp8/+2sf/5pE9pj8oq8IW+JTz6Qc/KVTMmMcLImP8hP8st7X3xJt7079HO0UbzkrSW9/0PCK40Dw=</latexit>[N3 × N2]
<latexit sha1_base64="JsmrP4jrYi03O3pbH4jy1g0Pupo=">ADn3icbVLjtMwFPU0PIbymA4s2RiqSmyomg4IFixGYgGrqkjTmUFJVDnOTWvVcSL7pjMjK3/CFv6Jv8EJLWpaLFk691yf4yv7xIUBkej30cd7979Bw+PH3UfP3n67KR3+vzS5KXmMO5zPV1zAxIoWCGAiVcFxpYFku4ilef6/7VGrQRubrAuwKijC2USAVn6Kh5rxdM5mc0RJGBoZP5OJr3+qPhqFn0EPgb0CebNZ2fdm7CJOdlBgq5ZMYE/qjAyDKNgkuoumFpoGB8xRYQOKiYuyqyzegVHTgmoWmu3VZIG3ZXYXGxBJ2blo01TJmM4dKxW9jui1IJvK3bwgCWhU0AgeNbJmXVbR1l2dapTdbjmAMWl1mbi/drzVaAVXfwv3E3nt0B3e0uQa4bSYvNC1C1ztlrUHD8yxjKrGhzhJIWSmxsqFJt3jPNLjwI1tfB4rvOQf1JGNXWIShFtsv0dQYvoxskIVZaNtPigtJcWc1vmhidDuIeWdA4xr4f6Y8iXTjKNLmbPaHTVJqmAc2TB1bRvW9+rMJlXfr3arcVW1ZUWxKyvqIDFJG9W/oha5qPr7wTwEl+OhfzZ8/+1d/zTJrTH5CV5Td4Qn3wg5+QrmZIZ4WRNfpCf5Jf3yviTbzp36Odo43mBWkt7/sfAk0DQ=</latexit>[N2 × N1]
<latexit sha1_base64="PKRyIrXS63+jZ5uCQi28QNdneDs=">ADn3icbVJNj9MwFPQ2wC7lqwtHLoaqEheqpoCWA4eVOMCpKtJ2d1ESVY7z0lp1nMh+6e7Kyj/hCv+Jf4MTWtS0WLI0b5n/GRPXEhcDT6fdTx7t1/cHzysPvo8ZOnz3qnzy9NXmoOM57LXF/HzIAUCmYoUMJ1oYFlsYSrePW57l+tQRuRqwu8KyDK2EKJVHCGjpr3esFkPqYhigwMncz9aN7rj4ajZtFD4G9An2zWdH7auQmTnJcZKOSGRP4owIjyzQKLqHqhqWBgvEVW0DgoGLuqsg2o1d04JiEprl2WyFt2F2FxcUSdG5aNtYwZTKGS8duYbsvSiXwtm4LA1gWNgEjm+ZlFW3dZRlW6c2WY9jDlhcZm0u3q81WwFW3cH/xt14dgd0t7sEuW4kLTYvQNU6Z69BwQ3Ps4ypxIY6SyBlpcTKhibd4j3T4MKPbH0dKL7nHNSTRDZ2iUkQbrH9HkGJ6cfIClWUjb5oLSUFHNa54cmQruHlHcOMK6F+2PKl0wzji5lzmp31CSpgnFkw9S1bVjfqzObVH2/2q3GVdWFcWurKiDxCRtVP+KWuSi6u8H8xBcjof+u+GHb+/7582oT0hL8lr8ob45Iyck69kSmaEkzX5QX6SX94r74s38aZ/j3aONpoXpLW8738A+90Cw=</latexit>dx4 dx1 = ✓dx4 dx3 dx3 dx2 ◆ dx2 dx1
<latexit sha1_base64="K18b5XOu8ExbkEhbQ9qUVHWwIU=">AD03icbVJdb9MwFPVaPkb56uCRl4iq0nigatoheABpEjzwOKR1m5RElePctFYdJ7Jvtk6WXxCv/BF+Da/j1+CkLWpaLCU691yf4xvnxIXgGofDu4NW+979Bw8PH3UeP3n67Hn36MWFzkvFYMJykaurmGoQXMIEOQq4KhTQLBZwGS8+V/3La1Ca5/IcbwuIMjqTPOWMoqOm3S9hkpjl9MS6l2+9T14oIMXjLXZsV8W4KkY2VHw2xzcrbrSTbu94WBYL28f+GvQI+t1Nj1q3YRJzsoMJDJBtQ78YGRoQo5E2A7YamhoGxBZxA4KGkGOjL151qv75jES3PlHolezW4rDM7moHLdsDGaSp1RnDt2A5t9XkqOy6rNWBZmAQGL6lQthOYyvNk5NshpH7E4z5pcvFsrugC0nf7/xl17dvredncO4rqWNi8AFnpnL0CTcszIqExOqLIGUlgKtCXW6wTumwbkfmeo4kGzHOagmiUzsUpYgLF5H0GJ6YfIcFmUtb+QWkpPMy9KnNewpW7SHrAGWKu3/sTlVlKFLprPaHjVJbDCKTJi6tgmrc1VmEtvz7XY1srYpK4ptWVEFiQqvVv0rKpGLqr8bzH1wMRr48G7bye904/r0B6SV+Q1OSY+eU9OyVdyRiaEkV/kN7kjf9qTtml/b/9YbW0drDUvSWO1f/4FqmpKyw=</latexit>dx4 dx1 = dx4 dx3 ✓dx3 dx2 dx2 dx1 ◆
<latexit sha1_base64="cy0zgv3OZUKpm9VPqmAqAldqcMU=">AD03icbVJdb9MwFPVaPkb56uCRl4iq0nigatoheABpEjzwOKR1m5RElePctFYdJ7Jvtk6WXxCv/BF+Da/j1+CkLWpaLCU691yf4xvnxIXgGofDu4NW+979Bw8PH3UeP3n67Hn36MWFzkvFYMJykaurmGoQXMIEOQq4KhTQLBZwGS8+V/3La1Ca5/IcbwuIMjqTPOWMoqOm3S9hkpjl9MS6l2+9T95WPbahgBSPV9S4okZ2VYxW+0PFZ3N8M+32hoNhvbx94K9Bj6zX2fSodRMmOSszkMgE1TrwhwVGhirkTIDthKWGgrIFnUHgoKQZ6MjUn2u9vmMSL82VeyR6NbutMDibg8p1w8ZoKnVGce7YDWz2eSk5Lqs214BlYRJAYPiWCmE7ja02zg1yWocvcfiPGty8W6t6ALQdvr/G3ft2el72905iOta0mDzAmSlc/YKJNywPMuoTEyosgRSWgq0JtTpBu+YBud+ZKrjQLId56CaJDKxS1mCsMTmfQlph8iw2VR1tr6B6Wl8D3qsx5CVfuIsWtA5Qp7v6x+ZUYumc5qe9QkscEoMmHq2iaszlWZSWzPt9vVyNqmrCi2ZUVJCq8WvWvqEQuqv5uMPfBxWjgjwfvp30Tj+uQ3tIXpHX5Jj45D05JV/JGZkQRn6R3+SO/GlP2qb9vf1jtbV1sNa8JI3V/vkXrlKyw=</latexit>O(N1N2N3 + N1N3N4)
<latexit sha1_base64="H8u0OsHRr8JlZHlNGO52PQW2w1g=">ADtnicbVLdbtMwGPUafkb56+CSG4uqYgxNe0Qu+BiEjdcjSGt26QkVI7zpbXqOJbt7EeWH4Gn4RYehLfByVrUtFiydL7z5Zx8tk8qOdNmOPyz0wnu3X/wcPdR9/GTp8+e9/ZenOuyUhQmtOSlukyJBs4ETAwzHC6lAlKkHC7Sxe6f3EFSrNSnJlbCUlBZoLljBLjqWnvTVwQM6eE269u/2Qa4pPpyO8xfofvqrHfh2/xtNcfHgybhbdBuAR9tFyn073OdZyVtCpAGMqJ1lE4lCaxRBlGObhuXGmQhC7IDCIPBSlAJ7Y5kcMDz2Q4L5XfwuCGXVdYM5uDKnXLxmoidH0cz65gu8qwcxN3WYaTCVtBgaoeU84d93Wp6RYObXJehy9xZp50ebSzVqRBRjXHfxv3KVnd4DXu3PgV42kxZYSRK3z9goEXNOyKIjIbKyKDHJSceNsrPMV3jCNzsLE1r8DQTeco3qSxKY+SJmBG9O+j6gy+VFimZBVo20eK84NiWuY4UzpvxF8lsPCFXMvzGmc6INT583mp91Cxz0Sixce7btsmfKmzm+qFbr0bOtWVSrstkHSTCcaP6V9QiH9VwM5jb4Hx0EI4Pnw7B9/WoZ2F71Cr9E+CtFHdIy+oFM0QRT9QD/RL/Q7OAq+BxDM7j7t7Cw1L1FrBfIv39w60w=</latexit>O(N2N3N4 + N1N2N4)
<latexit sha1_base64="gk04E69m3kSKkdiStj+p2W1JVAw=">ADtnicbVLdbtMwGPUafkb56+CSG4uqYgxNV0Ru+BiEjdcjSGt26QkVI7zpbXqOJbt7EeWH4Gn4RYehLfByVrUtFhydHw+n5P9klZ9oMh392OsG9+w8e7j7qPn7y9Nnz3t6Lc1WisKElrxUlynRwJmAiWGw6VUQIqUw0W6+FzXL65AaVaKM3MrISnITLCcUWI8Ne29iQti5pRw+9Xtn0xH+GR6OcYv/PfEN8x47d42usPD4bNwNsgXI+Wo7T6V7nOs5KWhUgDOVE6ygcSpNYogyjHFw3rjRIQhdkBpGHghSgE9ucyOGBZzKcl8pPYXDriusmc1BlbplYzURuj6OZ1ewXWeVYOamLjMNpI2AwPUvCecu25rKylWTm2ybkdvsWZetLl0c63IAozrDv7X7tKzO8Dr1Tnwq0bSYksJotZ5ewUCrmlZFERkNlZFBjmpuHE21vkKb5hGZ2Fi69+BoBvOUd1JYlMfpMzAjWnfR1SZ/CixTMiq0TYPlFcmxLXscIZU/4i+a0HhCrm3xjTOVGEGh8+b7Xeapa5aJTYOPdl2+RPFTZz/dCtr0bOtWVSrstkHSTCcaP6t6hFPqrhZjC3wfnoIDw8+PBt3D/+tAztLnqFXqN9FKP6Bh9Qadogij6gX6iX+h3cBR8DyCY3W3t7Cw1L1FrBPIv5mY61Q=</latexit>22
dx4 dx1 = ✓dx4 dx3 dx3 dx2 ◆ dx2 dx1
<latexit sha1_base64="K18b5XOu8ExbkEhbQ9qUVHWwIU=">AD03icbVJdb9MwFPVaPkb56uCRl4iq0nigatoheABpEjzwOKR1m5RElePctFYdJ7Jvtk6WXxCv/BF+Da/j1+CkLWpaLCU691yf4xvnxIXgGofDu4NW+979Bw8PH3UeP3n67Hn36MWFzkvFYMJykaurmGoQXMIEOQq4KhTQLBZwGS8+V/3La1Ca5/IcbwuIMjqTPOWMoqOm3S9hkpjl9MS6l2+9T14oIMXjLXZsV8W4KkY2VHw2xzcrbrSTbu94WBYL28f+GvQI+t1Nj1q3YRJzsoMJDJBtQ78YGRoQo5E2A7YamhoGxBZxA4KGkGOjL151qv75jES3PlHolezW4rDM7moHLdsDGaSp1RnDt2A5t9XkqOy6rNWBZmAQGL6lQthOYyvNk5NshpH7E4z5pcvFsrugC0nf7/xl17dvredncO4rqWNi8AFnpnL0CTcszIqExOqLIGUlgKtCXW6wTumwbkfmeo4kGzHOagmiUzsUpYgLF5H0GJ6YfIcFmUtb+QWkpPMy9KnNewpW7SHrAGWKu3/sTlVlKFLprPaHjVJbDCKTJi6tgmrc1VmEtvz7XY1srYpK4ptWVEFiQqvVv0rKpGLqr8bzH1wMRr48G7bye904/r0B6SV+Q1OSY+eU9OyVdyRiaEkV/kN7kjf9qTtml/b/9YbW0drDUvSWO1f/4FqmpKyw=</latexit>dx4 dx1 = dx4 dx3 ✓dx3 dx2 dx2 dx1 ◆
<latexit sha1_base64="cy0zgv3OZUKpm9VPqmAqAldqcMU=">AD03icbVJdb9MwFPVaPkb56uCRl4iq0nigatoheABpEjzwOKR1m5RElePctFYdJ7Jvtk6WXxCv/BF+Da/j1+CkLWpaLCU691yf4xvnxIXgGofDu4NW+979Bw8PH3UeP3n67Hn36MWFzkvFYMJykaurmGoQXMIEOQq4KhTQLBZwGS8+V/3La1Ca5/IcbwuIMjqTPOWMoqOm3S9hkpjl9MS6l2+9T95WPbahgBSPV9S4okZ2VYxW+0PFZ3N8M+32hoNhvbx94K9Bj6zX2fSodRMmOSszkMgE1TrwhwVGhirkTIDthKWGgrIFnUHgoKQZ6MjUn2u9vmMSL82VeyR6NbutMDibg8p1w8ZoKnVGce7YDWz2eSk5Lqs214BlYRJAYPiWCmE7ja02zg1yWocvcfiPGty8W6t6ALQdvr/G3ft2el72905iOta0mDzAmSlc/YKJNywPMuoTEyosgRSWgq0JtTpBu+YBud+ZKrjQLId56CaJDKxS1mCsMTmfQlph8iw2VR1tr6B6Wl8D3qsx5CVfuIsWtA5Qp7v6x+ZUYumc5qe9QkscEoMmHq2iaszlWZSWzPt9vVyNqmrCi2ZUVJCq8WvWvqEQuqv5uMPfBxWjgjwfvp30Tj+uQ3tIXpHX5Jj45D05JV/JGZkQRn6R3+SO/GlP2qb9vf1jtbV1sNa8JI3V/vkXrlKyw=</latexit>O(N1N2N3 + N1N3N4)
<latexit sha1_base64="H8u0OsHRr8JlZHlNGO52PQW2w1g=">ADtnicbVLdbtMwGPUafkb56+CSG4uqYgxNe0Qu+BiEjdcjSGt26QkVI7zpbXqOJbt7EeWH4Gn4RYehLfByVrUtFiydL7z5Zx8tk8qOdNmOPyz0wnu3X/wcPdR9/GTp8+e9/ZenOuyUhQmtOSlukyJBs4ETAwzHC6lAlKkHC7Sxe6f3EFSrNSnJlbCUlBZoLljBLjqWnvTVwQM6eE269u/2Qa4pPpyO8xfofvqrHfh2/xtNcfHgybhbdBuAR9tFyn073OdZyVtCpAGMqJ1lE4lCaxRBlGObhuXGmQhC7IDCIPBSlAJ7Y5kcMDz2Q4L5XfwuCGXVdYM5uDKnXLxmoidH0cz65gu8qwcxN3WYaTCVtBgaoeU84d93Wp6RYObXJehy9xZp50ebSzVqRBRjXHfxv3KVnd4DXu3PgV42kxZYSRK3z9goEXNOyKIjIbKyKDHJSceNsrPMV3jCNzsLE1r8DQTeco3qSxKY+SJmBG9O+j6gy+VFimZBVo20eK84NiWuY4UzpvxF8lsPCFXMvzGmc6INT583mp91Cxz0Sixce7btsmfKmzm+qFbr0bOtWVSrstkHSTCcaP6V9QiH9VwM5jb4Hx0EI4Pnw7B9/WoZ2F71Cr9E+CtFHdIy+oFM0QRT9QD/RL/Q7OAq+BxDM7j7t7Cw1L1FrBfIv39w60w=</latexit>O(N2N3N4 + N1N2N4)
<latexit sha1_base64="gk04E69m3kSKkdiStj+p2W1JVAw=">ADtnicbVLdbtMwGPUafkb56+CSG4uqYgxNV0Ru+BiEjdcjSGt26QkVI7zpbXqOJbt7EeWH4Gn4RYehLfByVrUtFhydHw+n5P9klZ9oMh392OsG9+w8e7j7qPn7y9Nnz3t6Lc1WisKElrxUlynRwJmAiWGw6VUQIqUw0W6+FzXL65AaVaKM3MrISnITLCcUWI8Ne29iQti5pRw+9Xtn0xH+GR6OcYv/PfEN8x47d42usPD4bNwNsgXI+Wo7T6V7nOs5KWhUgDOVE6ygcSpNYogyjHFw3rjRIQhdkBpGHghSgE9ucyOGBZzKcl8pPYXDriusmc1BlbplYzURuj6OZ1ewXWeVYOamLjMNpI2AwPUvCecu25rKylWTm2ybkdvsWZetLl0c63IAozrDv7X7tKzO8Dr1Tnwq0bSYksJotZ5ewUCrmlZFERkNlZFBjmpuHE21vkKb5hGZ2Fi69+BoBvOUd1JYlMfpMzAjWnfR1SZ/CixTMiq0TYPlFcmxLXscIZU/4i+a0HhCrm3xjTOVGEGh8+b7Xeapa5aJTYOPdl2+RPFTZz/dCtr0bOtWVSrstkHSTCcaP6t6hFPqrhZjC3wfnoIDw8+PBt3D/+tAztLnqFXqN9FKP6Bh9Qadogij6gX6iX+h3cBR8DyCY3W3t7Cw1L1FrBPIv5mY61Q=</latexit>Forward-mode Reverse-mode In optimization problems, this is always the case! Final objective function is just one number. N4 ⌧ N1, N
<latexit sha1_base64="wFk2stm+ADC7xKYjIBCZa+ZUAPs=">ADpHicbVJdb9MwFPUaPkb5WAfiReLqogHqJpuaHvgYRIvPKBpiHWblITKcW5aq4T2Tf7kJUfwyv8Iv4NTmhR02LJ1vG5PsdX9okLKQyORr93Ot69+w8e7j7qPn7y9Nleb/5hclLzWHCc5nrq5gZkELBAVKuCo0sCyWcBkvPtX1y2vQRuTqHO8KiDI2UyIVnKGjpr2Xp9NDGkpJT6f+O7eM6+Vg2uPhqNm0G3gL0GfLMfZdL9zEyY5LzNQyCUzJvBHBUaWaRcQtUNSwMF4ws2g8BxTIwkW36r+jAMQlNc+2mQtqw6wqLszno3LRsrGHKZAznjl3Bdl2USuBtXRYGsCxsAgc3zMpq27rKMtWTm2ybsdsTjP2ly8udsAVh1B/9rd+nZHdD16hzkdSNpsXkBqtY5ew0KbnieZUwlNtRZAikrJVY2NOkKb5gG535k6+tA8Q3noO4ksrGLTYJwi+3CEpMjyMrVFE2uaD0lJSzGkdIpoI7R5S3jnAuBbujymfM804uqg5q/VWk6QKxpENU1e2YX2vzmxS9f1qfTeuqrasKNZlR0kJmj+repRS6q/mYwt8HFeOgfD98PeyfFyGdpe8Iq/JW+KTI3JCPpMzMiGcWPKD/CS/vDfeF+bN/l7tLOz1LwgreF9/wPkTDSU</latexit>Reverse-mode autodiff always better when (few outputs, many inputs) x1
<latexit sha1_base64="WvnCuKFTAn/041kzfknyfF9U+s=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vp9H0sD8ajtoV7oJoBfpktc6nR/u3SV6ySoJCJqi1cTSmDpqkDMBdS+pLGjKFnQGsYeKSrCpa2etw4Fn8rAojd8Kw5bdVDiczcGUtmPjLFVWUpx7dg27fV4pjsumzS1gpV0OCAzfUCHqXucolWunLtmMY3dYnMsul23Xhi4A697gf+OuPHuDcLM7B3HTSjpsqUE1Om9vQMEtK6WkKneJkTkUtBJYu8QWa7xlGl9EqWuA8W2nONmktRlPiI5whK7xFXWJymjitdtdr2g4pKhFiGTWDCnBv/kOLOA8oM938csjk1lKGPlbfaHDXP63icuqTwbZc09xrp8rof1ZvVuK67Mq03ZboJEhVhq/pXNCIf1Wg7mLvgcjyMTobvr3tn31YhfaAvCSvyGsSkfkjHwh52RCGJmRH+Qn+RUcB6fBx+DT36P7eyvNC9JZwdc/BHQvLQ=</latexit>x2
<latexit sha1_base64="/KcVBf1XBPy4aZ1Xx3wK9B7CuR8=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vp+PpYX80HLUr3AXRCvTJap1Pj/Zvk7xklQSFTFBr42ikMXUIGcC6l5SWdCULegMYg8VlWBT185ahwP5GFRGr8Vhi27qXA4m4MpbcfGWaqspDj37Bp2+7xSHJdNm1vASrscEBi+oULUvc5RKtdOXbIZx+6wOJdLtuDV0A1r3B/8ZdefYG4WZ3DuKmlXTYUoNqdN7egIJbVkpJVe4SI3MoaCWwdokt1njLNL6IUtdcB4ptOcfNJKnLfERyhCV23yOusDhNHVe6arXtBxWVCLEMm8CEOTf+IcWdB5QZ7v84ZHNqKEMfK2+1OWqe1/E4dUnh2y5p7jXS5XU/qjercV13ZVpvynQTJCrCVvWvaEQ+qtF2MHfB5XgYnQzfXvbP/uwCu0BeUlekdckIu/JGflCzsmEMDIjP8hP8is4Dk6Dj8Gnv0f391aF6Szgq9/AeLy4=</latexit>x3
<latexit sha1_base64="F6glimikpVIWgm6oeZjembuU/0=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omg7EHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vpyfTw/5oOGpXuAuiFeiT1TqfHu3fJnJKgkKmaDWxtFIY+qoQc4E1L2ksqApW9AZxB4qKsGmrp21DgeycOiNH4rDFt2U+FwNgdT2o6Ns1RZSXHu2TXs9nmlOC6bNreAlXY5IDB8Q4Woe52jVK6dumQzjt1hcS67XLZdG7oArHuD/4278uwNws3uHMRNK+mwpQbV6Ly9AQW3rJSqtwlRuZQ0Epg7RJbrPGWaXwRpa65DhTbco6bSVKX+YjkCEvsvkdcYXGaOq501WrbDyoqEWIZNoEJc278Q4o7Dygz3P9xyObUIY+Vt5qc9Q8r+Nx6pLCt13S3Guky+t+VG9W47ruyrTelOkmSFSErepf0Yh8VKPtYO6Cy/EwOhm+/a2f/ZhFdoD8pK8Iq9JRN6TM/KFnJMJYWRGfpCf5FdwHJwGH4NPf4/u760L0hnBV/ArILy8=</latexit>x4
<latexit sha1_base64="SGoml86irRuqWoT1DX2zb8lBfA=">ADkHicbVJdb9MwFPUWPkb52sYjLxFVJV6omjLEHpAY4gXxNMS6TUqiynFuWqu2Y9k3WycrP4FX+G38G5zQoqbFkqVz/U5vrJPpgW3OBr93tsP7t1/8PDgUe/xk6fPnh8eHV/asjIMJqwUpbnOqAXBFUyQo4BrbYDKTMBVtvjc9K9uwFheqgu805BKOlO84Iyip74vpyfTw/5oOGpXuAuiFeiT1TqfHu3fJnJKgkKmaDWxtFIY+qoQc4E1L2ksqApW9AZxB4qKsGmrp21DgeycOiNH4rDFt2U+FwNgdT2o6Ns1RZSXHu2TXs9nmlOC6bNreAlXY5IDB8Q4Woe52jVK6dumQzjt1hcS67XLZdG7oArHuD/4278uwNws3uHMRNK+mwpQbV6Ly9AQW3rJSqtwlRuZQ0Epg7RJbrPGWaXwRpa65DhTbco6bSVKX+YjkCEvsvkdcYXGaOq501WrbDyoqEWIZNoEJc278Q4o7Dygz3P9xyObUIY+Vt5qc9Q8r+Nx6pLCt13S3Guky+t+VG9W47ruyrTelOkmSFSErepf0Yh8VKPtYO6Cy/Ewejt89+2kf/ZhFdoD8pK8Iq9JRN6TM/KFnJMJYWRGfpCf5FdwHJwGH4NPf4/u760L0hnBV/A3yLzA=</latexit>Reverse-mode autodiff
23
It’s backpropagation in machine learning lingo!
“AlexNet”, Krizhevsky et al., NIPS (2012)
62 million parameters… one final output!
Reverse-mode autodiff
24
It’s backpropagation in machine learning lingo!
“AlexNet”, Krizhevsky et al., NIPS (2012)
TensorFlow, PyTorch, Autograd et al. are all, in their heart, automatic differentiation libraries
Adjoint variable method
25
In photonics inverse design, it refers to how we “backprop” through the field computation Ae = b
<latexit sha1_base64="1VrUygbkZOefpm+DwEkd1c0VH/w=">ADlHicbVJdixMxFM12/Fjr16CL74ES8EXS6cq+rDCyiL4JCtstwszw5LJ3GlDk8yQ3NkPwvwIX/WX+W/MjK10WgOBc8/NObkJy2lsDge/97rBXfu3ru/6D/8NHjJ08PDp+d26IyHKa8kIW5SJkFKTRMUaCEi9IAU6mEWbo8afqzKzBWFPoMb0tIFJtrkQvO0FOzxToJ5peHgzGo3G76C4IV2BAVuv08rB3HWcFrxRo5JZG4XjEhPHDAouoe7HlYWS8SWbQ+ShZgps4tp5azr0TEbzwvitkbspsLhfAGmsB0bZ5m2iuHCs2vY7YtKC7xp2sICVqXLAIHjGyZl3e8cZWrt1CWbcewOiwvV5dLt2rAlYN0f/m/clWd/SDe7C5BXraTDFiXoRuftDWi45oVSTGcuNiqDnFUSaxfbfI23TKOzMHNdaD5lnPUTJK41MckQ7jB7ntEFeYfEyd0WbXa9oPySlIsaBMamgnjH1LesC4Ef6PKV8wzj6aHmrzVGzrI4miYtz3Zxc69RLqsHYb1ZTeq6KyvLTVnZBIlJ2qr+FY3IRzXcDuYuOJ+Mwrej9/fDY6PVqHdJy/JK/KahOQDOSZfySmZEk6W5Af5SX4FL4Kj4CT48vdob2+leU46K/j2B5L9L/I=</latexit>e = A−1b
<latexit sha1_base64="ur0ClkzSH7JxmqDsrc4leW6gpZg=">ADmHicbVJdb9MwFPUWPkb52uANXiyqSrysajoQPIBUxAPwNtC6TUrC5Dg3rVXHseybfcjKz+AVfhf/Bie0qGmxZOnc32Or+yTaiksjka/d3aDW7fv3N2717v/4OGjx/sHT05tWRkOU17K0pynzIUCqYoUMK5NsCKVMJZuvjY9M8uwVhRqhO80ZAUbKZELjhDT0VA39MP391hWKcX+/3RcNQug3CJeiT5Tq+ONi9irOSVwUo5JZG4UjYljBgWXUPfiyoJmfMFmEHmoWAE2ce3MNR14JqN5afxWSFt2XeFwNgdT2o6Ns0zZguHcsyvY7YtKCbxu2sICVtplgMDxkElZ9zpHWbFy6pLNOHaLxXnR5dLN2rAFYN0b/G/cpWdvQNe7c5CXraTDlhpUo/P2BhRc8bIomMpcbIoMclZJrF1s8xXeMI1OwsQ14HiG85RM0niUh+VDOEau+8RVZi/TZxQumq17QflaRY0iY4NBPGP6S8YBxI/wfUz5nhnH08fJW6NmWR2NExfnvu3i5l5TuKzuh/V6Na7rkzrdZlugsQkbVX/ikbkoxpuBnMbnI6H4dHw9dX/cm7ZWj3yHPygrwkIXlDJuQzOSZTwklJfpCf5FfwLJgEn4Ivf4/u7iw1T0lnBd/+ADXMa4=</latexit>dL d✏r = dL de de d✏r = dL de d(A−1b) d✏r = dL de dA−1 d✏r b
<latexit sha1_base64="U46yMG/FsIxHYnG9dPZuyaD+dc=">AEO3icfVNb9NAELVrPkr4aFqOXFZEQeXQKA4gegCphQsHDkVq2kqxidbrcbLKer3aXfdDq/1H/AV+CGduiCt31k6C4gR1JUszb+Y9j3eE8Go0v3+D38ruHP3v3tB62Hjx4/2Wnv7p2popQEhqRghbxIsAJGOQw1QwuhAScJwzOk9nHqn5+CVLRgp/qGwFxjiecZpRg7aBx+1uUpibKsZ4SzMxna0EQlHmatKiF+/Rh1sBUGzMYpu6d0/moOQpu8bHBat3LmlAYhQeN2p9/r1wdtBuEi6HiLczLe3bqK0oKUOXBNGFZqFPaFjg2WmhIGboZSgcBkhicwciHOajY1NdqUdchKcoK6R6uUY2uMoyeTEWqiFjFOaq+h6HLsNmnZac6uqTBXoUpgUNB9gBmzrUYrzpdKTbAaR2gepo3sWQ9l3gG2ra6/xt3odnqotXqFNhlTWmghQBe8Zy8BA5XpMhzN0eZ5Chkum3eJUtozXREenYWyq1wEna8qjapLYJM7NqYZr3byPUamzw9hQLsqaWy8oKxnSBaq8jVIq3UWyGxdgIqnbMSJTLDHR7g9wUqujpqkdDWITZa48N6DMTWo7oV3NBtY2aUKs0kRlJMxQzfqXVCRn1XDdmJvB2aAXvuq9+fK6c/RuYdpt75n3Nv3Qu+td+R98k68oUf8Pf/QP/Y/BN+Dn8Gv4Pe8dctfcJ56jRP8+Qu/RnM6</latexit>Adjoint variable method
26
In photonics inverse design, it refers to how we “backprop” through the field computation dL d✏r = dL de dA−1 d✏r b = −dL de A−1 dA d✏r A−1b = = eT
aj
dA d✏r e
<latexit sha1_base64="rmfYqlX8U12azI6qCjWmSuJ9OKg=">AEOnicbVPLjtMwFE2mPIbyamHJxqIaxGaqpoCGBSO1YsOCxSC1MyM1mcpxblpPHSeynXnI8hfxC/wIW3aILR+AnbaoacdSpOtz7jm+8b2OC0al6vV+nuNe/cfPNx/1Hz85Omz5632i1OZl4LAmOQsF+cxlsAoh7GisF5IQBnMYOzePHZ8WdXICTN+UjdFhBleMZpSglWFpq2vodJosMqznBTH81RodQSMosJwx6c4x2eDAOGl7ow6CeHaNjdHhHOlrmVk7Duv+KcowdKfBVONLczG6KxmrU6v26sW2g2CVdDxVutk2t67DpOclBlwRiWchL0ChVpLBQlDEwzLCUmCzwDCY25DgDGenqVg06sEiC0lzYjytUoZsKrWZzELms2WiJuXT/b9F1WOdpyam6cTSVoMpCJ6CAqEPMmGnWUnG2dqDrhy5g6p5Vsfi7b3AC1CmeXBXuSvP5gHaZOfAripJDc0L4E5n7QVwuCZ5lmFu+y6yBFJcMmUbJ9N1vGU6GQWRdscBJ1vOE1dJpGM7zImCG1W/j0mp0o+RprwoK23VoLRkSOXIjTZKqLAXyW5tgImgtseIzLHARNkHYK02S0SM+lHOkwtvRxYkenEdAKzuesbU5cVxascIOEGapU/zdOZEc12B7M3eC03w3edT98e98ZfFoN7b73ynvtvfUC78gbeF+8E2/sEb/tH/kDf9j40fjV+N34s0zd81eal15tNf7+A7SOcN4=</latexit>“dude, trust me”
e
<latexit sha1_base64="38VR73YgW9D1EDVfIjAeK5fx0U=">ADjnicbVLbtswEGSsPlL35bTHXoQaBnqpYbmP5NCiAXrJMQHiJIAkBS1sgmTFEGu8gChL+i1/bj+TSnVLiy7BAjMznKGC3IyLbjFyeT3Xi948PDR4/0n/afPnr94OTh4dWHLyjCYsVKU5iqjFgRXMEOAq60ASozAZfZ8nvTv7wBY3mpzvFeQyrpXPGCM4qeOoPrwXAynrQr3AXRCgzJap1eH/Ruk7xklQSFTFBr42iMXUIGcC6n5SWdCULekcYg8VlWBT105ahyP5GFRGr8Vhi27qXA4X4ApbcfGWaqspLjw7Bp2+7xSHO+aNreAlXY5IDB8T4Wo+52jVK6dumQzjt1hcSG7XLZdG7oErPuj/4278uyPws3uAsRNK+mwpQbV6Ly9AQW3rJSqtwlRuZQ0Epg7RJbrPGWaXwepa65DhTbco6bSVKX+YDkCHfYfY+4wuIodVzpqtW2H1RUIsQybOIS5tz4hxT3HlBmuP/jkC2oQx9qLzV5qh5XsfT1CWFb7ukudIl9fDqN6spnXdlWm9KdNkKgIW9W/ohH5qEbwdwF9Nx9GH86ezj8PjLKrT75A15S96RiBySY3JCTsmMALkB/lJfgWD4HPwNfj292hvb6V5TorOPkDsiQudg=</latexit>diagonal tensor
eaj = (AT)−1 −dL de T
<latexit sha1_base64="iXK2IKA1tW8hmXK2R8vM0Cu5o=">ADyHicbVJdb9MwFPVWPkb52uCRF4tq0nho1XQgQAJpiBeEeBhS9yElaeU6N62Z40T2zbrK8gt/hF/DKzb3CyDjUtliKde67P8Y19JoUBv9P1vbrVu379zdude+/+Dho8e7e09OTV5qDic8l7k+nzADUig4QYESzgsNLJtIOJtcfKz6Z5egjcjVEBcFxBmbKpEKztBT4923MLbsm6Pv6cGHkR26FyPbDRyNJKQYdqMksVHGcMaZtF+cs+AiLaYzjEfD8W6n3+vXi26CYAk6ZLmOx3vb8yjJeZmBQi6ZMWHQLzC2TKPgElw7Kg0UjF+wKYQeKpaBiW39j47ueyaha79p5DW7KrC4nQGOjcNG2uYMtX8nr2Bzb4olcCrqi0MYFnYBA4dpmUrt3YyrIbpyZjWM2WJxlTW6yXmt2Aeja+/8bd+nZ3qer3RnIy1rSYPMCVKXz9hoUzHmeZUz5d9NZAikrJTobmfQGr5mGwyC21XGg+JpzWE0S24mPVoJwhc37CEtM38RWqKstfUDpaWkmNMqaDQR2l+kXHjAuBb+jSmfMc04+jh6q9VRk8SFg9hGqW9fB05nNnGdwK1WA+easqJYlRVkJiktepfUYl8VIP1YG6C0EvOy9+vqyc/RuGdod8ow8JwckIK/JEflEjskJ4eQH+Ul+kd+tz62iNW8trduby01T0ljtb7/BaLRZE=</latexit>Adjoint variable method
27
For a “reciprocal” system (very often), dL d✏r = =
<latexit sha1_base64="rmfYqlX8U12azI6qCjWmSuJ9OKg=">AEOnicbVPLjtMwFE2mPIbyamHJxqIaxGaqpoCGBSO1YsOCxSC1MyM1mcpxblpPHSeynXnI8hfxC/wIW3aILR+AnbaoacdSpOtz7jm+8b2OC0al6vV+nuNe/cfPNx/1Hz85Omz5632i1OZl4LAmOQsF+cxlsAoh7GisF5IQBnMYOzePHZ8WdXICTN+UjdFhBleMZpSglWFpq2vodJosMqznBTH81RodQSMosJwx6c4x2eDAOGl7ow6CeHaNjdHhHOlrmVk7Duv+KcowdKfBVONLczG6KxmrU6v26sW2g2CVdDxVutk2t67DpOclBlwRiWchL0ChVpLBQlDEwzLCUmCzwDCY25DgDGenqVg06sEiC0lzYjytUoZsKrWZzELms2WiJuXT/b9F1WOdpyam6cTSVoMpCJ6CAqEPMmGnWUnG2dqDrhy5g6p5Vsfi7b3AC1CmeXBXuSvP5gHaZOfAripJDc0L4E5n7QVwuCZ5lmFu+y6yBFJcMmUbJ9N1vGU6GQWRdscBJ1vOE1dJpGM7zImCG1W/j0mp0o+RprwoK23VoLRkSOXIjTZKqLAXyW5tgImgtseIzLHARNkHYK02S0SM+lHOkwtvRxYkenEdAKzuesbU5cVxascIOEGapU/zdOZEc12B7M3eC03w3edT98e98ZfFoN7b73ynvtvfUC78gbeF+8E2/sEb/tH/kDf9j40fjV+N34s0zd81eal15tNf7+A7SOcN4=</latexit>eaj = (AT)−1 −dL de T
<latexit sha1_base64="iXK2IKA1tW8hmXK2R8vM0Cu5o=">ADyHicbVJdb9MwFPVWPkb52uCRF4tq0nho1XQgQAJpiBeEeBhS9yElaeU6N62Z40T2zbrK8gt/hF/DKzb3CyDjUtliKde67P8Y19JoUBv9P1vbrVu379zdude+/+Dho8e7e09OTV5qDic8l7k+nzADUig4QYESzgsNLJtIOJtcfKz6Z5egjcjVEBcFxBmbKpEKztBT4923MLbsm6Pv6cGHkR26FyPbDRyNJKQYdqMksVHGcMaZtF+cs+AiLaYzjEfD8W6n3+vXi26CYAk6ZLmOx3vb8yjJeZmBQi6ZMWHQLzC2TKPgElw7Kg0UjF+wKYQeKpaBiW39j47ueyaha79p5DW7KrC4nQGOjcNG2uYMtX8nr2Bzb4olcCrqi0MYFnYBA4dpmUrt3YyrIbpyZjWM2WJxlTW6yXmt2Aeja+/8bd+nZ3qer3RnIy1rSYPMCVKXz9hoUzHmeZUz5d9NZAikrJTobmfQGr5mGwyC21XGg+JpzWE0S24mPVoJwhc37CEtM38RWqKstfUDpaWkmNMqaDQR2l+kXHjAuBb+jSmfMc04+jh6q9VRk8SFg9hGqW9fB05nNnGdwK1WA+easqJYlRVkJiktepfUYl8VIP1YG6C0EvOy9+vqyc/RuGdod8ow8JwckIK/JEflEjskJ4eQH+Ul+kd+tz62iNW8trduby01T0ljtb7/BaLRZE=</latexit>= eT
aj
dA d✏r e
<latexit sha1_base64="rmfYqlX8U12azI6qCjWmSuJ9OKg=">AEOnicbVPLjtMwFE2mPIbyamHJxqIaxGaqpoCGBSO1YsOCxSC1MyM1mcpxblpPHSeynXnI8hfxC/wIW3aILR+AnbaoacdSpOtz7jm+8b2OC0al6vV+nuNe/cfPNx/1Hz85Omz5632i1OZl4LAmOQsF+cxlsAoh7GisF5IQBnMYOzePHZ8WdXICTN+UjdFhBleMZpSglWFpq2vodJosMqznBTH81RodQSMosJwx6c4x2eDAOGl7ow6CeHaNjdHhHOlrmVk7Duv+KcowdKfBVONLczG6KxmrU6v26sW2g2CVdDxVutk2t67DpOclBlwRiWchL0ChVpLBQlDEwzLCUmCzwDCY25DgDGenqVg06sEiC0lzYjytUoZsKrWZzELms2WiJuXT/b9F1WOdpyam6cTSVoMpCJ6CAqEPMmGnWUnG2dqDrhy5g6p5Vsfi7b3AC1CmeXBXuSvP5gHaZOfAripJDc0L4E5n7QVwuCZ5lmFu+y6yBFJcMmUbJ9N1vGU6GQWRdscBJ1vOE1dJpGM7zImCG1W/j0mp0o+RprwoK23VoLRkSOXIjTZKqLAXyW5tgImgtseIzLHARNkHYK02S0SM+lHOkwtvRxYkenEdAKzuesbU5cVxascIOEGapU/zdOZEc12B7M3eC03w3edT98e98ZfFoN7b73ynvtvfUC78gbeF+8E2/sEb/tH/kDf9j40fjV+N34s0zd81eal15tNf7+A7SOcN4=</latexit>AT = A
<latexit sha1_base64="JEVlptmh05Y3oNe3hoXTP93kNBM=">ADlHicbVJda9swFXjfXTZV7vBXvYiFgJ7WYizje2hg5Yy2NPoIGkKtldk+ToWkWUjXfcD4R+x1+2X7d9M9pIRJxMIzj1X5+ginbiUwuB4/Huv5925e+/+/oP+w0ePnzw9OHx2bopKc5jxQhb6ImYGpFAwQ4ESLkoNLI8lzOPladOfX4E2olBTvC0hytlCiVRwho6an3yf0k/05PJgMB6N20V3gb8CA7JaZ5eHveswKXiVg0IumTGBPy4xskyj4BLqflgZKBlfsgUEDiqWg4lsO29Nh45JaFpotxXSlt1UWFxkoAvTsbGKZMzBy7ht2+qJTAm6YtDGBV2gQOL5hUtb9zlGWr526ZDO2WExy7tcvF1rtgSs+8P/jbvy7A/pZjcDedVKOmxRgmp0zl6Dgmte5DlTiQ1nkDKom1DU26xlumwdSPbHMdKL7lHDSTRDZ2MUkQbrD7HkGF6cfIClVWrb9oLSFAvahIYmQruHlLcOMK6F+2PKM6YZRxctZ7U5apLUwSyYeraNmzu1blN6oFfb1aTu7KynJTVjZBYpK2qn9FI3JR9beDuQvOJyP/7ej9t3eD46NVaPfJS/KvCY+UCOyRdyRmaEkyX5QX6SX94L78g79T7/PdrbW2mek87yv4Buecv/g=</latexit>The adjoint field is a solution to the same Maxwell problem, but with a different source that depends on the objective function and the
- riginal field.
e = A−1b
<latexit sha1_base64="ur0ClkzSH7JxmqDsrc4leW6gpZg=">ADmHicbVJdb9MwFPUWPkb52uANXiyqSrysajoQPIBUxAPwNtC6TUrC5Dg3rVXHseybfcjKz+AVfhf/Bie0qGmxZOnc32Or+yTaiksjka/d3aDW7fv3N2717v/4OGjx/sHT05tWRkOU17K0pynzIUCqYoUMK5NsCKVMJZuvjY9M8uwVhRqhO80ZAUbKZELjhDT0VA39MP391hWKcX+/3RcNQug3CJeiT5Tq+ONi9irOSVwUo5JZG4UjYljBgWXUPfiyoJmfMFmEHmoWAE2ce3MNR14JqN5afxWSFt2XeFwNgdT2o6Ns0zZguHcsyvY7YtKCbxu2sICVtplgMDxkElZ9zpHWbFy6pLNOHaLxXnR5dLN2rAFYN0b/G/cpWdvQNe7c5CXraTDlhpUo/P2BhRc8bIomMpcbIoMclZJrF1s8xXeMI1OwsQ14HiG85RM0niUh+VDOEau+8RVZi/TZxQumq17QflaRY0iY4NBPGP6S8YBxI/wfUz5nhnH08fJW6NmWR2NExfnvu3i5l5TuKzuh/V6Na7rkzrdZlugsQkbVX/ikbkoxpuBnMbnI6H4dHw9dX/cm7ZWj3yHPygrwkIXlDJuQzOSZTwklJfpCf5FfwLJgEn4Ivf4/u7iw1T0lnBd/+ADXMa4=</latexit>eaj = A−1baj
<latexit sha1_base64="aW6f6vProljp2XJuQL/cS7AMFY=">ADpXicbVLjtMwFPU0PIby6oDEho1FVcFmqaAYAHSIDZskAap7YyUhMpxblpTx7FsZx4y/hm28EP8DU5oUdNiKdK5/oc39gnlZxpMxr9PugEN27eun14p3v3v0HD3tHj2a6rBSFKS15qc5ToEzAVPDIdzqYAUKYezdPWx7p9dgNKsFBNzLSEpyEKwnFiPDXvPYG5Jd8cfo8/fLXHocNpU897/dFw1Cy8D8I16KP1Op0fdS7jrKRVAcJQTrSOwpE0iSXKMrBdeNKgyR0RYQeShIATqxzQ84PBMhvNS+U8Y3LDbCmsWS1ClbtlYTYQuiFl6dgPbfVYJZq7qNtNgKmkzMEDNMeHcdVtbSbFxapP1OHqPNcuizaW7tSIrMK47+N+4a8/uAG93l8AvGkmLSWIWuftFQi4pGVREJHZWBUZ5KTixtlY5xu8YxpNwsTWx4GgO85RPUliU5+bzMCVad9HVJn8bWKZkFWjbR4orzg2Ja5ThDOm/EXyaw8IVcy/MaZLog1PmveanvULHPROLFx7ts2rs9Vhc1cP3Tb1di5tkzKbZmsg0Q4blT/ilrkoxruBnMfzMbD8OXw9ZdX/ZN369AeoqfoGXqBQvQGnaBP6BRNEUXf0Q/0E/0Kngefg0kw+7u1c7DWPEatFcz/ALAONrE=</latexit>Autograd
28
- The autograd package from Harvard (HIPS) is
an autodiff library for NumPy and SciPy
- In many cases, you can just use it blindly, and
then get all the gradients you need!
- You can also extend it by telling autograd how
to differentiate through custom functions github.com/HIPS/autograd
29
Ceviche
In ceviche we’ve interfaced the AVM with autograd This allows great flexibility in building
- ptimization graphs!
Notebook #02
30
31
32
Notebook #03
33
34
The adjoint variable method lets us efficiently compute the gradients in PDE-constrained
- ptimization problems (inverse design)
The backpropagation algorithm is the equivalent of the adjoint method for training neural networks Automatic differentiation is the generalization of both backpropagation and the adjoint method to arbitrary computational graphs (programs) We can utilize automatic differentiation to efficiently
- ptimize complex models that freely combine
physics, machine learning, and other computations
35
Final thoughts (homework?)
- Viewing parameterization as a sequence of
composable transformations is powerful!
- ML libraries can be useful for things other than ML!
- Hyper parameters are important!
- penalty term, binarization, etc.
- Scheduling (adjusting hyper params during
progress of optimization)
- Must go to simulations which capture 3D
features to make real devices
- but doesn’t necessarily mean that you can’t
prototype in 2D!
36
Other resources
37
metanet.stanford.edu Stanford University
- Shanhui Fan
- Jonathan Fan
- Jelena Vuckovic
UC Berkeley
- Eli Yablonovitch
Princeton University
- Alejandro Rodriguez
Technical University of Denmark
- Ole Sigmund
MIT
- Steven Johnson
... and many others!
A collection of resources being setup by Jiaqi Jiang / Jonathan Fan
https://github.com/fancompute/workshop-invdesign
38