<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://matthias-bitzer.github.io/homepage/feed.xml" rel="self" type="application/atom+xml" /><link href="https://matthias-bitzer.github.io/homepage/" rel="alternate" type="text/html" /><updated>2026-03-15T20:22:28+00:00</updated><id>https://matthias-bitzer.github.io/homepage/feed.xml</id><title type="html">Matthias Bitzer</title><subtitle>Personal website featuring AI/ML blog posts, AI art gallery, and publications</subtitle><author><name>Matthias Bitzer</name></author><entry><title type="html">A Bridge from Kurt Gödel to Zen Buddhism</title><link href="https://matthias-bitzer.github.io/homepage/blog/2024/12/01/bridge-from-godel-to-zen-buddhism/" rel="alternate" type="text/html" title="A Bridge from Kurt Gödel to Zen Buddhism" /><published>2024-12-01T00:00:00+00:00</published><updated>2024-12-01T00:00:00+00:00</updated><id>https://matthias-bitzer.github.io/homepage/blog/2024/12/01/bridge-from-godel-to-zen-buddhism</id><content type="html" xml:base="https://matthias-bitzer.github.io/homepage/blog/2024/12/01/bridge-from-godel-to-zen-buddhism/"><![CDATA[<p><em>This article explores the fascinating philosophical connections between Kurt Gödel’s mathematical discoveries and Zen Buddhist thought.</em></p>

<h2 id="introduction">Introduction</h2>

<p>Kurt Gödel’s incompleteness theorems, published in 1931, fundamentally changed our understanding of the limits of formal systems and mathematical reasoning. Surprisingly, these insights from mathematical logic find unexpected resonance in the ancient wisdom of Zen Buddhism.</p>

<h2 id="gödels-incompleteness">Gödel’s Incompleteness</h2>

<p>Gödel proved that any sufficiently powerful formal system cannot be both complete and consistent. There will always be true statements that cannot be proven within the system itself. This revolutionary insight revealed inherent limitations in our formal approaches to truth.</p>

<h2 id="the-zen-perspective">The Zen Perspective</h2>

<p>Zen Buddhism has long taught that ultimate truth cannot be captured in words or concepts. The famous Zen saying goes: “The finger pointing at the moon is not the moon.” Language and logic, while useful tools, cannot fully encompass reality.</p>

<h2 id="the-bridge">The Bridge</h2>

<p>Both Gödel and Zen point to something beyond the reach of formal systems:</p>

<ol>
  <li>
    <p><strong>Self-reference paradoxes</strong>: Gödel used self-reference to construct unprovable truths. Zen koans often employ paradox to push the mind beyond conceptual thinking.</p>
  </li>
  <li>
    <p><strong>Limits of language</strong>: Gödel showed mathematical limitations; Zen emphasizes the limitations of all conceptual frameworks.</p>
  </li>
  <li>
    <p><strong>Direct experience</strong>: Where formal systems fail, both traditions suggest a more direct approach to understanding.</p>
  </li>
</ol>

<h2 id="conclusion">Conclusion</h2>

<p>The bridge between Gödel and Zen reminds us that the deepest truths may lie beyond our formal systems of thought—a humbling insight for both mathematicians and meditators alike.</p>

<hr />]]></content><author><name>Matthias Bitzer</name></author><category term="philosophy" /><category term="mathematics" /><summary type="html"><![CDATA[Exploring the unexpected connections between Gödel's incompleteness theorems and the teachings of Zen Buddhism.]]></summary></entry><entry><title type="html">How to use data version control (dvc) in a machine learning project</title><link href="https://matthias-bitzer.github.io/homepage/blog/2019/07/01/data-version-control-dvc/" rel="alternate" type="text/html" title="How to use data version control (dvc) in a machine learning project" /><published>2019-07-01T00:00:00+00:00</published><updated>2019-07-01T00:00:00+00:00</updated><id>https://matthias-bitzer.github.io/homepage/blog/2019/07/01/data-version-control-dvc</id><content type="html" xml:base="https://matthias-bitzer.github.io/homepage/blog/2019/07/01/data-version-control-dvc/"><![CDATA[<p><em>Data Version Control (DVC) is an essential tool for machine learning projects. This guide shows you how to integrate it into your workflow.</em></p>

<h2 id="introduction">Introduction</h2>

<p>Managing data and model versions in machine learning projects can be challenging. Unlike code, datasets can be large and frequently updated. DVC (Data Version Control) solves this by providing Git-like version control for data.</p>

<h2 id="why-dvc">Why DVC?</h2>

<ul>
  <li><strong>Version control for large files</strong>: Track datasets without bloating your Git repository</li>
  <li><strong>Reproducibility</strong>: Ensure experiments can be reproduced with exact data versions</li>
  <li><strong>Pipeline management</strong>: Define and track your ML pipelines</li>
  <li><strong>Storage agnostic</strong>: Works with S3, GCS, Azure, SSH, and more</li>
</ul>

<h2 id="getting-started">Getting Started</h2>

<h3 id="installation">Installation</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip <span class="nb">install </span>dvc
</code></pre></div></div>

<h3 id="initialize-dvc-in-your-project">Initialize DVC in your project</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd </span>your-ml-project
git init
dvc init
</code></pre></div></div>

<h3 id="add-your-data">Add your data</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>dvc add data/training_data.csv
git add data/training_data.csv.dvc data/.gitignore
git commit <span class="nt">-m</span> <span class="s2">"Add training data"</span>
</code></pre></div></div>

<h2 id="setting-up-remote-storage">Setting up Remote Storage</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>dvc remote add <span class="nt">-d</span> myremote s3://mybucket/dvc-storage
git add .dvc/config
git commit <span class="nt">-m</span> <span class="s2">"Configure DVC remote"</span>
</code></pre></div></div>

<h2 id="working-with-dvc">Working with DVC</h2>

<h3 id="push-data-to-remote">Push data to remote</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>dvc push
</code></pre></div></div>

<h3 id="pull-data-from-remote">Pull data from remote</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>dvc pull
</code></pre></div></div>

<h3 id="track-changes">Track changes</h3>

<p>When your data changes:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>dvc add data/training_data.csv
git add data/training_data.csv.dvc
git commit <span class="nt">-m</span> <span class="s2">"Update training data"</span>
dvc push
</code></pre></div></div>

<h2 id="dvc-pipelines">DVC Pipelines</h2>

<p>Define reproducible ML pipelines in <code class="language-plaintext highlighter-rouge">dvc.yaml</code>:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">stages</span><span class="pi">:</span>
  <span class="na">prepare</span><span class="pi">:</span>
    <span class="na">cmd</span><span class="pi">:</span> <span class="s">python src/prepare.py</span>
    <span class="na">deps</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="s">src/prepare.py</span>
      <span class="pi">-</span> <span class="s">data/raw</span>
    <span class="na">outs</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="s">data/prepared</span>
  
  <span class="na">train</span><span class="pi">:</span>
    <span class="na">cmd</span><span class="pi">:</span> <span class="s">python src/train.py</span>
    <span class="na">deps</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="s">src/train.py</span>
      <span class="pi">-</span> <span class="s">data/prepared</span>
    <span class="na">outs</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="s">models/model.pkl</span>
    <span class="na">metrics</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="na">metrics.json</span><span class="pi">:</span>
          <span class="na">cache</span><span class="pi">:</span> <span class="no">false</span>
</code></pre></div></div>

<p>Run the pipeline:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>dvc repro
</code></pre></div></div>

<h2 id="best-practices">Best Practices</h2>

<ol>
  <li><strong>Always commit <code class="language-plaintext highlighter-rouge">.dvc</code> files alongside code changes</strong></li>
  <li><strong>Use meaningful commit messages</strong> that describe data changes</li>
  <li><strong>Set up CI/CD</strong> to automatically run <code class="language-plaintext highlighter-rouge">dvc repro</code></li>
  <li><strong>Document your data sources</strong> and preprocessing steps</li>
</ol>

<h2 id="conclusion">Conclusion</h2>

<p>DVC bridges the gap between data science and software engineering best practices. By integrating it into your workflow, you’ll achieve better reproducibility and collaboration in your ML projects.</p>

<hr />]]></content><author><name>Matthias Bitzer</name></author><category term="machine-learning" /><category term="data-science" /><category term="tools" /><summary type="html"><![CDATA[A practical guide to implementing DVC for managing datasets and ML experiments in your projects.]]></summary></entry><entry><title type="html">How to extend Python with C/C++ Code</title><link href="https://matthias-bitzer.github.io/homepage/blog/2019/01/01/extend-python-with-c-cpp/" rel="alternate" type="text/html" title="How to extend Python with C/C++ Code" /><published>2019-01-01T00:00:00+00:00</published><updated>2019-01-01T00:00:00+00:00</updated><id>https://matthias-bitzer.github.io/homepage/blog/2019/01/01/extend-python-with-c-cpp</id><content type="html" xml:base="https://matthias-bitzer.github.io/homepage/blog/2019/01/01/extend-python-with-c-cpp/"><![CDATA[<p><em>Python’s simplicity comes at a performance cost. Learn how to extend Python with C/C++ for critical code paths.</em></p>

<h2 id="introduction">Introduction</h2>

<p>Python is beloved for its readability and ease of use, but interpreted languages have inherent performance limitations. When you need maximum speed for compute-intensive operations, extending Python with C or C++ is a powerful solution.</p>

<h2 id="when-to-use-c-extensions">When to Use C Extensions</h2>

<ul>
  <li><strong>CPU-bound computations</strong>: Mathematical operations, algorithms</li>
  <li><strong>Interfacing with C libraries</strong>: Using existing C/C++ code</li>
  <li><strong>Performance-critical paths</strong>: When Python becomes a bottleneck</li>
  <li><strong>Memory-intensive operations</strong>: More control over memory management</li>
</ul>

<h2 id="method-1-python-c-api">Method 1: Python C API</h2>

<p>The traditional approach using Python’s C API:</p>

<h3 id="example-a-simple-add-function">Example: A simple add function</h3>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;Python.h&gt;</span><span class="cp">
</span>
<span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="nf">add</span><span class="p">(</span><span class="n">PyObject</span><span class="o">*</span> <span class="n">self</span><span class="p">,</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">args</span><span class="p">)</span> <span class="p">{</span>
    <span class="kt">int</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">;</span>
    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">PyArg_ParseTuple</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="s">"ii"</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">a</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">b</span><span class="p">))</span> <span class="p">{</span>
        <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span>
    <span class="p">}</span>
    <span class="k">return</span> <span class="n">PyLong_FromLong</span><span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">);</span>
<span class="p">}</span>

<span class="k">static</span> <span class="n">PyMethodDef</span> <span class="n">methods</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span>
    <span class="p">{</span><span class="s">"add"</span><span class="p">,</span> <span class="n">add</span><span class="p">,</span> <span class="n">METH_VARARGS</span><span class="p">,</span> <span class="s">"Add two integers"</span><span class="p">},</span>
    <span class="p">{</span><span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">}</span>
<span class="p">};</span>

<span class="k">static</span> <span class="k">struct</span> <span class="n">PyModuleDef</span> <span class="n">module</span> <span class="o">=</span> <span class="p">{</span>
    <span class="n">PyModuleDef_HEAD_INIT</span><span class="p">,</span>
    <span class="s">"mymodule"</span><span class="p">,</span>
    <span class="nb">NULL</span><span class="p">,</span>
    <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
    <span class="n">methods</span>
<span class="p">};</span>

<span class="n">PyMODINIT_FUNC</span> <span class="nf">PyInit_mymodule</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">return</span> <span class="n">PyModule_Create</span><span class="p">(</span><span class="o">&amp;</span><span class="n">module</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<h3 id="build-with-setuppy">Build with setup.py</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">setuptools</span> <span class="kn">import</span> <span class="n">setup</span><span class="p">,</span> <span class="n">Extension</span>

<span class="n">module</span> <span class="o">=</span> <span class="n">Extension</span><span class="p">(</span><span class="s">'mymodule'</span><span class="p">,</span> <span class="n">sources</span><span class="o">=</span><span class="p">[</span><span class="s">'mymodule.c'</span><span class="p">])</span>

<span class="n">setup</span><span class="p">(</span>
    <span class="n">name</span><span class="o">=</span><span class="s">'mymodule'</span><span class="p">,</span>
    <span class="n">ext_modules</span><span class="o">=</span><span class="p">[</span><span class="n">module</span><span class="p">]</span>
<span class="p">)</span>
</code></pre></div></div>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python setup.py build_ext <span class="nt">--inplace</span>
</code></pre></div></div>

<h2 id="method-2-cython">Method 2: Cython</h2>

<p>Cython provides a more Pythonic approach:</p>

<h3 id="cython_examplepyx">cython_example.pyx</h3>

<div class="language-cython highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="kt">int</span> <span class="n">a</span><span class="p">,</span> <span class="kt">int</span> <span class="n">b</span><span class="p">):</span>
    <span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>

<span class="k">def</span> <span class="nf">fast_sum</span><span class="p">(</span><span class="kt">double</span><span class="p">[:]</span> <span class="n">arr</span><span class="p">):</span>
    <span class="k">cdef</span> <span class="kt">double</span> <span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
    <span class="k">cdef</span> <span class="kt">int</span> <span class="n">i</span>
    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">arr</span><span class="p">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
        <span class="n">total</span> <span class="o">+=</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
    <span class="k">return</span> <span class="n">total</span>
</code></pre></div></div>

<h3 id="setuppy-for-cython">setup.py for Cython</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">setuptools</span> <span class="kn">import</span> <span class="n">setup</span>
<span class="kn">from</span> <span class="nn">Cython.Build</span> <span class="kn">import</span> <span class="n">cythonize</span>

<span class="n">setup</span><span class="p">(</span>
    <span class="n">ext_modules</span><span class="o">=</span><span class="n">cythonize</span><span class="p">(</span><span class="s">"cython_example.pyx"</span><span class="p">)</span>
<span class="p">)</span>
</code></pre></div></div>

<h2 id="method-3-ctypes">Method 3: ctypes</h2>

<p>For interfacing with existing shared libraries:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">ctypes</span>

<span class="c1"># Load the library
</span><span class="n">lib</span> <span class="o">=</span> <span class="n">ctypes</span><span class="p">.</span><span class="n">CDLL</span><span class="p">(</span><span class="s">'./mylib.so'</span><span class="p">)</span>

<span class="c1"># Define argument and return types
</span><span class="n">lib</span><span class="p">.</span><span class="n">add</span><span class="p">.</span><span class="n">argtypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">ctypes</span><span class="p">.</span><span class="n">c_int</span><span class="p">,</span> <span class="n">ctypes</span><span class="p">.</span><span class="n">c_int</span><span class="p">]</span>
<span class="n">lib</span><span class="p">.</span><span class="n">add</span><span class="p">.</span><span class="n">restype</span> <span class="o">=</span> <span class="n">ctypes</span><span class="p">.</span><span class="n">c_int</span>

<span class="c1"># Call the function
</span><span class="n">result</span> <span class="o">=</span> <span class="n">lib</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
</code></pre></div></div>

<h2 id="method-4-pybind11">Method 4: pybind11</h2>

<p>Modern C++ binding with pybind11:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;pybind11/pybind11.h&gt;</span><span class="cp">
</span>
<span class="kt">int</span> <span class="nf">add</span><span class="p">(</span><span class="kt">int</span> <span class="n">a</span><span class="p">,</span> <span class="kt">int</span> <span class="n">b</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">;</span>
<span class="p">}</span>

<span class="n">PYBIND11_MODULE</span><span class="p">(</span><span class="n">mymodule</span><span class="p">,</span> <span class="n">m</span><span class="p">)</span> <span class="p">{</span>
    <span class="n">m</span><span class="p">.</span><span class="n">def</span><span class="p">(</span><span class="s">"add"</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">add</span><span class="p">,</span> <span class="s">"Add two integers"</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="performance-comparison">Performance Comparison</h2>

<table>
  <thead>
    <tr>
      <th>Method</th>
      <th>Ease of Use</th>
      <th>Performance</th>
      <th>Use Case</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Python C API</td>
      <td>Low</td>
      <td>Highest</td>
      <td>Full control</td>
    </tr>
    <tr>
      <td>Cython</td>
      <td>Medium</td>
      <td>High</td>
      <td>Numeric code</td>
    </tr>
    <tr>
      <td>ctypes</td>
      <td>High</td>
      <td>Medium</td>
      <td>Existing libs</td>
    </tr>
    <tr>
      <td>pybind11</td>
      <td>High</td>
      <td>High</td>
      <td>C++ integration</td>
    </tr>
  </tbody>
</table>

<h2 id="conclusion">Conclusion</h2>

<p>Choose the right tool based on your needs:</p>

<ul>
  <li><strong>pybind11</strong>: Best for new C++ code</li>
  <li><strong>Cython</strong>: Great for optimizing Python code</li>
  <li><strong>ctypes</strong>: Quick integration with existing libraries</li>
  <li><strong>C API</strong>: Maximum control and performance</li>
</ul>

<hr />]]></content><author><name>Matthias Bitzer</name></author><category term="python" /><category term="programming" /><category term="performance" /><summary type="html"><![CDATA[Learn how to write Python extensions in C/C++ to boost performance for compute-intensive operations.]]></summary></entry><entry><title type="html">10 important papers to get started with machine learning</title><link href="https://matthias-bitzer.github.io/homepage/blog/2018/09/01/10-important-papers-machine-learning/" rel="alternate" type="text/html" title="10 important papers to get started with machine learning" /><published>2018-09-01T00:00:00+00:00</published><updated>2018-09-01T00:00:00+00:00</updated><id>https://matthias-bitzer.github.io/homepage/blog/2018/09/01/10-important-papers-machine-learning</id><content type="html" xml:base="https://matthias-bitzer.github.io/homepage/blog/2018/09/01/10-important-papers-machine-learning/"><![CDATA[<p><em>Starting your journey in machine learning? These 10 papers provide essential foundations for understanding the field.</em></p>

<h2 id="introduction">Introduction</h2>

<p>The machine learning field has produced thousands of papers, but certain works stand out as foundational. This curated list helps newcomers build a solid theoretical foundation.</p>

<h2 id="the-papers">The Papers</h2>

<h3 id="1-backpropagation-1986">1. Backpropagation (1986)</h3>
<p><strong>“Learning representations by back-propagating errors”</strong><br />
<em>Rumelhart, Hinton, Williams</em></p>

<p>The paper that made training deep neural networks practical. Understanding backpropagation is essential for any deep learning work.</p>

<h3 id="2-support-vector-machines-1995">2. Support Vector Machines (1995)</h3>
<p><strong>“Support-Vector Networks”</strong><br />
<em>Cortes, Vapnik</em></p>

<p>Introduced SVMs, demonstrating how to find optimal decision boundaries. Still relevant for understanding kernel methods and margin-based classification.</p>

<h3 id="3-random-forests-2001">3. Random Forests (2001)</h3>
<p><strong>“Random Forests”</strong><br />
<em>Leo Breiman</em></p>

<p>Ensemble learning that remains one of the most robust and interpretable methods. Essential for understanding bagging and feature importance.</p>

<h3 id="4-dropout-2014">4. Dropout (2014)</h3>
<p><strong>“Dropout: A Simple Way to Prevent Neural Networks from Overfitting”</strong><br />
<em>Srivastava, Hinton, et al.</em></p>

<p>A remarkably simple yet effective regularization technique that’s now standard in deep learning.</p>

<h3 id="5-adam-optimizer-2014">5. Adam Optimizer (2014)</h3>
<p><strong>“Adam: A Method for Stochastic Optimization”</strong><br />
<em>Kingma, Ba</em></p>

<p>The default optimizer for most deep learning projects. Understanding adaptive learning rates is crucial.</p>

<h3 id="6-batch-normalization-2015">6. Batch Normalization (2015)</h3>
<p><strong>“Batch Normalization: Accelerating Deep Network Training”</strong><br />
<em>Ioffe, Szegedy</em></p>

<p>Made training very deep networks practical by normalizing layer inputs.</p>

<h3 id="7-resnet-2015">7. ResNet (2015)</h3>
<p><strong>“Deep Residual Learning for Image Recognition”</strong><br />
<em>He, Zhang, Ren, Sun</em></p>

<p>Introduced skip connections, enabling training of networks with hundreds of layers. Won ImageNet 2015.</p>

<h3 id="8-attention-is-all-you-need-2017">8. Attention Is All You Need (2017)</h3>
<p><strong>“Attention Is All You Need”</strong><br />
<em>Vaswani et al.</em></p>

<p>Introduced the Transformer architecture, revolutionizing NLP and beyond. Foundation for BERT, GPT, and modern LLMs.</p>

<h3 id="9-bert-2018">9. BERT (2018)</h3>
<p><strong>“BERT: Pre-training of Deep Bidirectional Transformers”</strong><br />
<em>Devlin et al.</em></p>

<p>Demonstrated the power of pre-training and transfer learning in NLP.</p>

<h3 id="10-an-image-is-worth-16x16-words-2020">10. An Image is Worth 16x16 Words (2020)</h3>
<p><strong>“An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale”</strong><br />
<em>Dosovitskiy et al.</em></p>

<p>Vision Transformers (ViT) brought transformer success to computer vision.</p>

<h2 id="how-to-read-papers">How to Read Papers</h2>

<ol>
  <li><strong>First pass</strong>: Read abstract, introduction, and conclusion</li>
  <li><strong>Second pass</strong>: Understand the methodology and key figures</li>
  <li><strong>Third pass</strong>: Implement or reproduce the results</li>
</ol>

<h2 id="additional-resources">Additional Resources</h2>

<ul>
  <li><strong>ArXiv</strong>: Latest preprints</li>
  <li><strong>Papers With Code</strong>: Papers with implementations</li>
  <li><strong>Connected Papers</strong>: Visualize paper relationships</li>
</ul>

<h2 id="conclusion">Conclusion</h2>

<p>These papers span three decades of progress. Reading them provides both historical context and practical knowledge that remains relevant today.</p>

<hr />]]></content><author><name>Matthias Bitzer</name></author><category term="machine-learning" /><category term="research" /><category term="education" /><summary type="html"><![CDATA[A curated list of foundational papers that every machine learning practitioner should read.]]></summary></entry></feed>