summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Smeding <t.j.smeding@uu.nl>2023-02-24 14:10:10 +0100
committerTom Smeding <t.j.smeding@uu.nl>2023-02-24 14:10:10 +0100
commit03b43a3a0c4df095689ec4defa3e6e7e68b5ffaa (patch)
treef075325227cb3e90efa7a18818d5f2bc9d724f4b
parent32a16819043fc1f8fb365d8b9bb9010b8101e93f (diff)
index.html: Some text about my research
-rw-r--r--index.html43
1 files changed, 42 insertions, 1 deletions
diff --git a/index.html b/index.html
index 1712380..7e48a62 100644
--- a/index.html
+++ b/index.html
@@ -50,6 +50,9 @@ div.main-content {
display: inline-block;
max-width: 800px;
}
+div.longtext {
+ text-align: left;
+}
summary {
cursor: pointer;
}
@@ -94,9 +97,47 @@ summary {
</p>
<details><summary><u>For a list of my academic publications, click here.</u></summary>
<ul id="pubs-ul">
- <!--PUBS-REPLACE-START--> (Info missing, server misconfigured) <!--PUBS-REPLACE-END-->
+ <!--PUBS-REPLACE-START--> (Info missing, server misconfigured, sorry) <!--PUBS-REPLACE-END-->
</ul>
</details>
+ <h2>My research</h2>
+ <div class="longtext">
+ <p>
+ Currently my primary research interest is in <a href="https://en.wikipedia.org/wiki/Automatic_differentiation" target="_blank">automatic differentiation</a> (AD), as seen through the lens of <a href="https://en.wikipedia.org/wiki/Functional_programming" target="_blank">functional programming</a> (FP), in my case mostly using the programming language <a href="https://haskell.org" target="_blank">Haskell</a>.
+ My PhD supervisors are Gabriele Keller and Matthijs V&aacute;k&aacute;r.
+ </p>
+ <p>
+ In general I am enthousiastic about lots of things in computer science; I enjoy functional programming and thinking about programming techniques that make FP work well, but I also have some experience in more low-level programming (in C and C++), some of it in <a href="https://stats.ioinformatics.org/people/5681" target="_blank">competitive</a> <a href="https://2019.nwerc.eu/" target="_blank">programming</a>.
+ I like thinking about how to optimise code to make it run faster, and also about devising compiler optimisations to make other people's code run faster.
+ Furthermore, I like being able to do all of those things while enabling the compiler to prevent me from making mistakes as much as possible; typically, I do this by using the type system of the programming language I'm working in.
+ </p>
+ <p>
+ Also send me your favourite esolangs :)
+ </p>
+ <!--
+ <details><summary><u>An intro to automatic differentiation for programmers</u></summary>
+ <p>
+ In automatic differentiation (AD), we study how to generalise taking symbolic/algebraic derivatives from simple mathematical expressions to whole computer programs, while keeping computational efficiency in mind.
+ Being able to take the derivative of a numerical function implemented as a program is useful whenever you want to get some idea a program's local behaviour when you change its inputs a little; in the case of AD, we consider continuous inputs &mdash; in practice, floating point numbers.
+ (If you're interested in the case where inputs are discrete, such as integers, look to <em>incremental computation</em> instead &mdash; about which I know very little.)
+ </p>
+ <p>
+ For example, in machine learning, the usual approach is to formulate a <em>model</em> with a lot of parameters, and then optimise those parameters to make the model compute some kind of target function as well as possible.
+ This model is a computer program; neural networks (as considered in machine learning) are simply computer programs of a particular, quite structured form.
+ Optimising a model involves changing the parameters in such a way as to get the output closer to the desired output on some set of inputs, and the derivative (gradient, in this case) of the model tells you, at least locally, how to change the parameters to make the model a <em>little bit</em> better.
+ Gradient descent, and other more sophisticated algorithms, use this derivative information to optimise a model in some fashion.
+ AD allows model implementors to have a lot of freedom in designing their models, because whatever they do, the AD algorithm will let the system compute the model's derivative.
+ </p>
+ <p>
+ Another application of AD is in statistical inference, such as in <a href="https://mc-stan.org/" target="_blank">Stan</a>, where users formulate a <em>statistical</em> model (with some parameters) of some part of the real world and then try to determine, given some real-world observations, where the parameters will approximately lie.
+ (This is the Bayesian inference approach to statistical inference &mdash; frequentist inference fairly directly reduces to optimisation, for example using gradient descent.)
+ Such inference algorithms need to compute a probability distribution (namely, the result: the distribution telling you where the parameters lie), and while it is relatively easy to give an indication of where these distributions are high (likely parameter values) and where they are low (unlikely ones), it's harder to <em>normalise</em> this distribution, which means computing what the actual <em>probability</em> of some parameter value is (as opposed to just being more or less likely than another parameter value).
+ This normalisation involves integrating the produced unnormalised probability distribution, and clever integration algorithms (for continuous parameters, <a href="https://en.wikipedia.org/wiki/Hamiltonian_Monte_Carlo" target="_blank">HMC</a>) use the local "relief" (derivative) of your statistical model to more quickly find areas of interest, and more quickly converge to a good estimate of the overall integral (and thus the actual probabilities).
+ Here, again, AD allows model implementors to not have to worry about writing their models in a specific form &mdash; any computation will do.
+ </p>
+ </details>
+ -->
+ </div>
</div>
</body>
</html>