Compare commits
10 commits
e16d9628fe
...
d0d75b5991
Author | SHA1 | Date | |
---|---|---|---|
d0d75b5991 | |||
6d744a8840 | |||
7e94865dc5 | |||
bfef7c6567 | |||
73740c9c23 | |||
d79ac64f71 | |||
681974170e | |||
fe066d13ed | |||
53c91abe4f | |||
a7f5585709 |
8
404.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
title: Page not found
|
||||
---
|
||||
|
||||
<p>
|
||||
The page you were looking for does not exist. You might want to
|
||||
<a href="/">go back home</a>.
|
||||
</p>
|
11
README.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
# Personal blog
|
||||
|
||||
## Build and deploy
|
||||
|
||||
Uses [Cloudflare Pages direct upload](https://developers.cloudflare.com/pages/get-started/direct-upload/).
|
||||
|
||||
```sh
|
||||
cabal run site build
|
||||
npx wrangler login # Only needed once
|
||||
npx wrangler pages deploy
|
||||
```
|
16
README.org
|
@ -1,16 +0,0 @@
|
|||
* Personal blog
|
||||
|
||||
** Setup
|
||||
|
||||
#+begin_src sh
|
||||
npm install netlify-cli -g
|
||||
netlify login # login to Netlify
|
||||
netlify link # link the directory to the site
|
||||
#+end_src
|
||||
|
||||
** Deploy
|
||||
|
||||
#+begin_src sh
|
||||
# deploy, omit "--prod" if you want to preview
|
||||
netlify deploy --dir=_site --prod
|
||||
#+end_src
|
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 25 KiB |
|
@ -740,3 +740,49 @@
|
|||
volume = 21,
|
||||
year = 1999,
|
||||
}
|
||||
|
||||
@misc{liu2024_kan,
|
||||
author = {Liu, Ziming and Wang, Yixuan and Vaidya, Sachin and
|
||||
Ruehle, Fabian and Halverson, James and Soljačić,
|
||||
Marin and Hou, Thomas Y. and Tegmark, Max},
|
||||
title = {{KAN}: {Kolmogorov}-{Arnold} {Networks}},
|
||||
year = 2024,
|
||||
month = may,
|
||||
publisher = {arXiv},
|
||||
doi = {10.48550/arXiv.2404.19756},
|
||||
url = {http://arxiv.org/abs/2404.19756},
|
||||
note = {arXiv:2404.19756 [cond-mat, stat]},
|
||||
keywords = {Computer Science - Machine Learning, Condensed
|
||||
Matter - Disordered Systems and Neural Networks,
|
||||
Computer Science - Artificial Intelligence,
|
||||
Statistics - Machine Learning},
|
||||
}
|
||||
|
||||
@article{chenNeuralOrdinaryDifferential2018,
|
||||
archivePrefix = {arXiv},
|
||||
eprinttype = {arxiv},
|
||||
eprint = {1806.07366},
|
||||
primaryClass = {cs, stat},
|
||||
title = {Neural {{Ordinary Differential Equations}}},
|
||||
url = {http://arxiv.org/abs/1806.07366},
|
||||
abstract = {We introduce a new family of deep neural network models. Instead of specifying a discrete sequence of hidden layers, we parameterize the derivative of the hidden state using a neural network. The output of the network is computed using a black-box differential equation solver. These continuous-depth models have constant memory cost, adapt their evaluation strategy to each input, and can explicitly trade numerical precision for speed. We demonstrate these properties in continuous-depth residual networks and continuous-time latent variable models. We also construct continuous normalizing flows, a generative model that can train by maximum likelihood, without partitioning or ordering the data dimensions. For training, we show how to scalably backpropagate through any ODE solver, without access to its internal operations. This allows end-to-end training of ODEs within larger models.},
|
||||
urldate = {2019-01-05},
|
||||
date = {2018-06-19},
|
||||
keywords = {Statistics - Machine Learning,Computer Science - Artificial Intelligence,Computer Science - Machine Learning},
|
||||
author = {Chen, Ricky T. Q. and Rubanova, Yulia and Bettencourt, Jesse and Duvenaud, David},
|
||||
file = {/home/dimitri/Nextcloud/Zotero/storage/26D4Y3GG/Chen et al. - 2018 - Neural Ordinary Differential Equations.pdf;/home/dimitri/Nextcloud/Zotero/storage/RNXT4EQV/1806.html}
|
||||
}
|
||||
|
||||
@article{ruthotto2024_differ_equat,
|
||||
author = {Ruthotto, Lars},
|
||||
title = {Differential {Equations} for {Continuous}-{Time}
|
||||
{Deep} {Learning}},
|
||||
journal = {Notices of the American Mathematical Society},
|
||||
year = 2024,
|
||||
month = may,
|
||||
volume = 71,
|
||||
number = 05,
|
||||
issn = {0002-9920, 1088-9477},
|
||||
doi = {10.1090/noti2930},
|
||||
url = {https://www.ams.org/notices/202405/rnoti-p613.pdf},
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 919 B |
Before Width: | Height: | Size: 2.2 KiB |
BIN
favicon-96x96.png
Normal file
After Width: | Height: | Size: 9.2 KiB |
BIN
favicon.ico
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
3
favicon.svg
Normal file
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="32" height="32" viewBox="0 0 32 32"><image width="32" height="32" xlink:href="data:image/png;base64,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"></image><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
|
||||
@media (prefers-color-scheme: dark) { :root { filter: none; } }
|
||||
</style></svg>
|
After Width: | Height: | Size: 3.3 KiB |
24
index.html
|
@ -16,17 +16,17 @@ title: Dimitri Lozeve
|
|||
/>
|
||||
|
||||
<p>
|
||||
Hi! I am an Engineering Manager
|
||||
at <a href="https://www.doctrine.fr/">Doctrine</a>, where we develop
|
||||
productivity tools to help lawyers manage their data.
|
||||
Hi! I am an Engineering Manager at
|
||||
<a href="https://www.doctrine.fr/">Doctrine</a>, where we develop productivity
|
||||
tools to help lawyers analyze and write their private documents.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I was previously a Research Engineer and Project Manager
|
||||
at <a href="https://www.sysnav.fr/">Sysnav</a>, where I worked on
|
||||
developing algorithms to help physicians measure the progress of
|
||||
neuromuscular diseases. We used data from inertial sensors to
|
||||
extract meaningful variables for pharmaceutical studies.
|
||||
I was previously a Research Engineer and Project Manager at
|
||||
<a href="https://www.sysnav.fr/">Sysnav</a>, where I worked on developing
|
||||
algorithms to help physicians measure the progress of neuromuscular diseases.
|
||||
We used data from inertial sensors to extract meaningful variables for
|
||||
pharmaceutical studies.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
@ -41,10 +41,10 @@ title: Dimitri Lozeve
|
|||
</p>
|
||||
|
||||
<p>
|
||||
You can contact me by email (at firstname@lastname.com),
|
||||
reach me via <a rel="me" href="https://mathstodon.xyz/@dlzv">Mastodon</a>,
|
||||
find me on <a href="https://www.linkedin.com/in/dimitrilozeve">LinkedIn</a>,
|
||||
or see what I do on <a href="https://github.com/dlozeve/">GitHub</a>.
|
||||
You can contact me by email (at firstname@lastname.com), reach me via
|
||||
<a rel="me" href="https://mathstodon.xyz/@dlzv">Mastodon</a>, find me on
|
||||
<a href="https://www.linkedin.com/in/dimitrilozeve">LinkedIn</a>, or see what
|
||||
I do on <a href="https://github.com/dlozeve/">GitHub</a>.
|
||||
</p>
|
||||
|
||||
<h2>Recent Posts</h2>
|
||||
|
|
81
posts/kolmogorov-arnold-networks.org
Normal file
|
@ -0,0 +1,81 @@
|
|||
---
|
||||
title: "Reading notes: Kolmogorov-Arnold Networks"
|
||||
date: 2024-06-08
|
||||
tags: machine learning, paper
|
||||
toc: false
|
||||
---
|
||||
|
||||
This paper [cite:@liu2024_kan] proposes an alternative to multi-layer
|
||||
perceptrons (MLPs) in machine learning.
|
||||
|
||||
The basic idea is that MLPs have parameters on the nodes of the
|
||||
computation graph (the weights and biases on each cell), and that KANs
|
||||
have the parameters on the edges. Each edge has a learnable activation
|
||||
function parameterized as a spline.
|
||||
|
||||
The network is learned at two levels, which allows for "adjusting
|
||||
locally":
|
||||
- the overall shape of the computation graph and its connexions
|
||||
(external degrees of freedom, to learn the compositional structure),
|
||||
- the parameters of each activation function (internal degrees of
|
||||
freedom).
|
||||
|
||||
It is based on the [[https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Arnold_representation_theorem][Kolmogorov-Arnold representation theorem]], which
|
||||
says that any continuous multivariate function can be represented as a
|
||||
sum of continuous univariate functions. We recover the distinction
|
||||
between the compositional structure of the sum and the structure of
|
||||
each internal univariate function.
|
||||
|
||||
The theorem can be interpreted as two layers, and the paper then
|
||||
generalizes it to multiple layer of arbitrary width. In the theorem,
|
||||
the univariate functions are arbitrary and can be complex (even
|
||||
fractal), so the hope is that allowing for arbitrary depth and width
|
||||
will allow to only use splines. They derive an approximation theorem:
|
||||
when replacing the arbitrary continuous functions of the
|
||||
Kolmogorov-Arnold representation with splines, we can bound the error
|
||||
independently of the dimension. (However there is a constant which
|
||||
depends on the function and its representation, and therefore on the
|
||||
dimension...) Theoretical scaling laws in the number of parameters are
|
||||
much better than for MLPs, and moreover, experiments show that KANs
|
||||
are much closer to their theoretical bounds than MLPs.
|
||||
|
||||
KANs have interesting properties:
|
||||
- The splines are interpolated on grid points which can be iteratively
|
||||
refined. The fact that there is a notion of "fine-grainedness" is
|
||||
very interesting, it allows to add parameters without having to
|
||||
retrain everything.
|
||||
- Larger is not always better: the quality of the reconstruction
|
||||
depends on finding the optimal shape of the network, which should
|
||||
match the structure of the function we want to approximate. Finding
|
||||
this optimal shape is found via sparsification, pruning, and
|
||||
regularization (non-trivial).
|
||||
- We can have a "human in the loop" during training, guiding pruning,
|
||||
and "symbolifying" some activations (i.e. by recognizing that an
|
||||
activation function is actually a cos function, replace it
|
||||
directly). This symbolic discovery can be guided by a symbolic
|
||||
system recognizing some functions. It's therefore a mix of symbolic
|
||||
regression and numerical regression.
|
||||
|
||||
They test mostly with scientific applications in mind: reconstructing
|
||||
equations from physics and pure maths. Conceptually, it has a lot of
|
||||
overlap with Neural Differential Equations
|
||||
[cite:@chenNeuralOrdinaryDifferential2018;@ruthotto2024_differ_equat]
|
||||
and "scientific ML" in general.
|
||||
|
||||
There is an interesting discussion at the end about KANs as the model
|
||||
of choice for the "language of science". The idea is that LLMs are
|
||||
important because they are useful for natural language, and KANs
|
||||
could fill the same role for the language of functions. The
|
||||
interpretability and adaptability (being able to be manipulated and
|
||||
guided during training by a domain expert) is thus a core feature that
|
||||
traditional deep learning models lack.
|
||||
|
||||
There are still challenges, mostly it's unclear how it performs on
|
||||
other types of data and other modalities, but it is very
|
||||
encouraging. There is also a computational challenges, they are
|
||||
obviously much slower to train, but there has been almost no
|
||||
engineering work on them to optimize this, so it's expected. The fact
|
||||
that the operations are not easily batchable (compared to matrix
|
||||
multiplication) is however worrying for scalability to large networks.
|
||||
|
||||
* References
|
|
@ -106,6 +106,7 @@ was gathered using a Software Defined Radio to listen to aircrafts.
|
|||
- My submission [[https://github.com/dlozeve/apl-competition-2018][on GitHub]]
|
||||
- Nominated as a [[https://www.dyalog.com/nnews/128/456/Winners-Announced-for-the-2018-APL-Programming-Contest.htm][Phase I winner]]
|
||||
- [[https://adventofcode.com/][Advent of code]]
|
||||
- [[https://git.sr.ht/~dlozeve/advent-of-code/tree/main/item/2024][2024]] (BQN)
|
||||
- [[https://github.com/dlozeve/aoc2023][2023]] (BQN)
|
||||
- [[https://github.com/dlozeve/aoc2022][2022]] (mostly BQN)
|
||||
- [[https://github.com/dlozeve/aoc2021][2021]] (mostly Chicken Scheme)
|
||||
|
|
8
site.hs
|
@ -18,7 +18,7 @@ main = hakyll $ do
|
|||
route idRoute
|
||||
compile copyFileCompiler
|
||||
|
||||
match "favicon.ico" $ do
|
||||
match (fromList ["favicon.ico", "favicon.svg", "favicon-96x96.png", "web-app-manifest-192x192.png", "web-app-manifest-512x512.png", "apple-touch-icon.png", "site.webmanifest"]) $ do
|
||||
route idRoute
|
||||
compile copyFileCompiler
|
||||
|
||||
|
@ -112,6 +112,12 @@ main = hakyll $ do
|
|||
|
||||
match "templates/*" $ compile templateBodyCompiler
|
||||
|
||||
match "404.html" $ do
|
||||
route idRoute
|
||||
compile $
|
||||
customPandocCompiler False
|
||||
>>= loadAndApplyTemplate "templates/default.html" defaultContext
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
feedConfiguration :: FeedConfiguration
|
||||
feedConfiguration =
|
||||
|
|
|
@ -1 +1,21 @@
|
|||
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
||||
{
|
||||
"name": "Dimitri Lozeve",
|
||||
"short_name": "Dimitri Lozeve",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/web-app-manifest-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/web-app-manifest-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
||||
|
|
|
@ -1,31 +1,54 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes">
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, user-scalable=yes"
|
||||
/>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<link rel="shortcut icon" href="/favicon.ico" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
|
||||
<link rel="manifest" href="/site.webmanifest" />
|
||||
|
||||
<meta name="description" content="Dimitri Lozeve's blog: $title$">
|
||||
$if(keywords)$
|
||||
<meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$">
|
||||
$endif$
|
||||
<title>Dimitri Lozeve - $title$</title>
|
||||
<meta property="og:title" content="Dimitri Lozeve - $title$" />
|
||||
<meta property="og:url" content="https://lozeve.com$url$" />
|
||||
<meta name="description" content="Dimitri Lozeve's blog: $title$" />
|
||||
<meta name="og:description" content="Dimitri Lozeve's blog: $title$" />
|
||||
$if(keywords)$
|
||||
<meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" />
|
||||
$endif$
|
||||
<meta name="fediverse:creator" content="@dlzv@mathstodon.xyz" />
|
||||
|
||||
<link rel="stylesheet" href="/css/tufte.css" />
|
||||
<link rel="stylesheet" href="/css/pandoc.css" />
|
||||
<link rel="stylesheet" href="/css/default.css" />
|
||||
<link rel="stylesheet" href="/css/syntax.css" />
|
||||
|
||||
<!-- RSS feed -->
|
||||
<link rel="alternate" type="application/rss+xml" title="Dimitri Lozeve's blog" href="/rss.xml" />
|
||||
<link
|
||||
rel="alternate"
|
||||
type="application/rss+xml"
|
||||
title="Dimitri Lozeve's blog"
|
||||
href="/rss.xml"
|
||||
/>
|
||||
<link
|
||||
rel="alternate"
|
||||
type="application/atom+xml"
|
||||
title="Dimitri Lozeve's blog"
|
||||
href="/atom.xml"
|
||||
/>
|
||||
|
||||
<!-- MathJax -->
|
||||
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
|
||||
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
<script
|
||||
id="MathJax-script"
|
||||
async
|
||||
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"
|
||||
></script>
|
||||
</head>
|
||||
<body>
|
||||
<article>
|
||||
|
@ -33,31 +56,25 @@
|
|||
<nav>
|
||||
<a href="/">Home</a>
|
||||
<a href="/archive.html">Posts</a>
|
||||
<a href="/projects.html">Projects</a>
|
||||
<a href="/cv.html">CV</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/projects.html">Projects</a>
|
||||
<a href="/cv.html">CV</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
</nav>
|
||||
|
||||
$if(title)$
|
||||
<h1 class="title">$title$</h1>
|
||||
$if(subtitle)$
|
||||
<p class="subtitle">$subtitle$</p>
|
||||
$endif$
|
||||
$if(date)$
|
||||
<p class="byline">$date$$if(author)$ – $author$$endif$</p>
|
||||
$else$
|
||||
$if(author)$
|
||||
<p class="byline">$author$</p>
|
||||
$endif$
|
||||
$endif$
|
||||
$if(tags)$
|
||||
<p class="byline">Tags: $tags$</p>
|
||||
$endif$
|
||||
$endif$
|
||||
<h1 class="title">$title$</h1>
|
||||
$if(subtitle)$
|
||||
<p class="subtitle">$subtitle$</p>
|
||||
$endif$ $if(date)$
|
||||
<p class="byline">$date$$if(author)$ – $author$$endif$</p>
|
||||
$else$ $if(author)$
|
||||
<p class="byline">$author$</p>
|
||||
$endif$ $endif$ $if(tags)$
|
||||
<p class="byline">Tags: $tags$</p>
|
||||
$endif$ $endif$
|
||||
</header>
|
||||
|
||||
$body$
|
||||
|
||||
</article>
|
||||
|
||||
<footer>
|
||||
|
|
BIN
web-app-manifest-192x192.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
web-app-manifest-512x512.png
Normal file
After Width: | Height: | Size: 106 KiB |
7
wrangler.toml
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Generated by Wrangler on Sat Jun 08 2024 13:19:27 GMT+0200 (Central European Summer Time)
|
||||
name = "lozeve"
|
||||
pages_build_output_dir = "./_site"
|
||||
compatibility_date = "2024-02-28"
|
||||
|
||||
[env.production]
|
||||
compatibility_date = "2024-02-28"
|