<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Yahel Uffenheimer</title><link>https://yahel1216.github.io/posts/</link><description>Recent content in Posts on Yahel Uffenheimer</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://yahel1216.github.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Clarkson's Algorithm for Linear Programming</title><link>https://yahel1216.github.io/posts/clarksons-lp-algorithm/</link><pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/clarksons-lp-algorithm/</guid><description>&lt;h1 id="clarksons-algorithm-for-linear-programming"&gt;Clarkson&amp;rsquo;s Algorithm for Linear Programming&lt;/h1&gt;
&lt;div
 class="alert alert-info my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Programming:&lt;/strong&gt; Feasibility, optimality, and the standard form of an LP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Rank, linear independence, matrix inverses, and spanning sets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Expectation and Markov&amp;rsquo;s inequality.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;hr&gt;
&lt;p&gt;Linear programs arise throughout combinatorial optimization, machine learning, and operations research. In many practical settings the number of constraints $n$ is enormous compared to the ambient dimension $d$ — think of $n = 10^6$ constraints in $d = 50$ dimensions. Standard algorithms like the simplex method take time proportional to $n$ per pivot, and interior-point methods scale as $O(n^{3.5})$ in the worst case. When $n \gg d$, most constraints are redundant: the optimal solution is determined by only $d$ of them.&lt;/p&gt;</description></item><item><title>The Nystrom Method: Spectral Action</title><link>https://yahel1216.github.io/posts/kernel-4/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/kernel-4/</guid><description>&lt;div
 class="alert alert-abstract my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Eigen-decompositions, positive definite matrices, rank.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Functional Analysis:&lt;/strong&gt; Hilbert spaces, $L^2$ spaces, operators.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kernel Methods:&lt;/strong&gt; Previous posts in the series.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;Continuing our series on kernel methods, recall that these methods allow us to operate in high-dimensional spaces using the &amp;ldquo;kernel trick&amp;rdquo;. However, they suffer from a major computational bottleneck: constructing and manipulating the Gram matrix requires $O(N^2)$ memory and $O(N^3)$ time for operations like inversion or eigen decomposition, where $N$ is the dataset size. When $N$ reaches hundreds of thousands, exact computation becomes infeasible. In this post, I will explore the &lt;strong&gt;Nystrom method&lt;/strong&gt;, a powerful technique for constructing low-rank approximations of these matrices. Rather than treating it merely as a linear algebra heuristic, I want to derive it from first principles: starting with the spectral properties of integral operators on Hilbert spaces and showing how the discretization of these operators naturally leads to the matrix approximation formulas we use in practice.&lt;/p&gt;</description></item><item><title>Algebraic Techniques for Fast Integer Multiplication</title><link>https://yahel1216.github.io/posts/fast-integer-mult/</link><pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/fast-integer-mult/</guid><description>&lt;div
 class="alert alert-note my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-note) 10%, transparent);
 border-left-color: var(--color-note);
 --hover-bg: color-mix(in srgb, var(--color-note) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-note) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ring Theory:&lt;/strong&gt; Homomorphisms, Ideals, Quotient Rings, Chinese Remainder Theorem (see &lt;a href="#appendix-algebraic-definitions"&gt;Appendix&lt;/a&gt; for definitions).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Polynomials:&lt;/strong&gt; Polynomial multiplication, division, convolutions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Algorithm Analysis:&lt;/strong&gt; Basic recursive complexity and $O$-notation.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;Given two integers $a,b\in \mathbb{N}$, how fast can we multiply them?&lt;/p&gt;</description></item><item><title>Fast Fourier Transform over Finite Fields</title><link>https://yahel1216.github.io/posts/fft-finite-field/</link><pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/fft-finite-field/</guid><description>&lt;div
 class="alert alert-note my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-note) 10%, transparent);
 border-left-color: var(--color-note);
 --hover-bg: color-mix(in srgb, var(--color-note) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-note) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ring Theory:&lt;/strong&gt; Basic definitions (Rings, Fields, Polynomials).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Group Theory:&lt;/strong&gt; Cyclic groups and generators.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Basic FFT:&lt;/strong&gt; Familiarity with the standard divide-and-conquer strategy on $\mathbb{C}$ is helpful but not required.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;The Fast Fourier Transform (FFT) is one of the most important algorithms in history. Usually, it is introduced over the field of complex numbers $\mathbb{C}$, relying on geometric intuition about roots of unity lying on the unit circle.&lt;/p&gt;</description></item><item><title>Fast Matrix Multiplication - Part 4</title><link>https://yahel1216.github.io/posts/fmm-4/</link><pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/fmm-4/</guid><description>&lt;div
 class="alert alert-info my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://yahel1216.github.io/posts/fmm-3"&gt;Part 3&lt;/a&gt;:&lt;/strong&gt; Familiarity with Tensor Rank, Direct Sums, and Tensor Products.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Combinatorics:&lt;/strong&gt; Basic understanding of the Multinomial Theorem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asymptotic Analysis:&lt;/strong&gt; Limits and roots of polynomials.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;In this post, we will formalize the tools needed to compare different tensor algorithms and prove the powerful &lt;strong&gt;$\tau$-Theorem&lt;/strong&gt; (also known as the Asymptotic Sum Inequality). This theorem is the engine behind many modern improvements in the exponent of matrix multiplication, allowing us to derive bounds on $\omega$ from sums of disparate tensors.&lt;/p&gt;</description></item><item><title>Fast Matrix Multiplication - Part 3</title><link>https://yahel1216.github.io/posts/fmm-3/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/fmm-3/</guid><description>&lt;div
 class="alert alert-note my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-note) 10%, transparent);
 border-left-color: var(--color-note);
 --hover-bg: color-mix(in srgb, var(--color-note) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-note) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://yahel1216.github.io/posts/fmm-2"&gt;Part 2 of this series&lt;/a&gt;:&lt;/strong&gt; Familiarity with the tensor product of vector spaces and bilinear algorithms.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Vector spaces, Bases, Dual spaces, and Tensor Products (basic definition).&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;In this post, we continue building the foundation for fast matrix multiplication algorithms. We will discuss essential tensor operations—product, sum, and restriction—and establish the Triple Product Condition, setting the stage for the group-theoretic approach.&lt;/p&gt;</description></item><item><title>Fast Matrix Multiplication - Part 2</title><link>https://yahel1216.github.io/posts/fmm-2/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/fmm-2/</guid><description>&lt;div
 class="alert alert-note my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-note) 10%, transparent);
 border-left-color: var(--color-note);
 --hover-bg: color-mix(in srgb, var(--color-note) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-note) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://yahel1216.github.io/posts/fmm-1"&gt;Part 1 of this series&lt;/a&gt;:&lt;/strong&gt; Familiarity with standard Matrix Multiplication (MM) and $\omega$.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Vector spaces, Bases, Dual spaces, and Tensor Products (basic definition).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abstract Algebra:&lt;/strong&gt; Fields and Polynomial rings (helpful for the tensor intuition).&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;hr&gt;
&lt;p&gt;In the previous post, we discussed Strassen&amp;rsquo;s algorithm and the definition of the exponent $\omega$. We demonstrated that the complexity of matrix multiplication is dominated by the number of multiplications in the base algorithm, assuming a recursive approach.&lt;/p&gt;</description></item><item><title>Fast Matrix Multiplication - Part 1</title><link>https://yahel1216.github.io/posts/fmm-1/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/fmm-1/</guid><description>&lt;div
 class="alert alert-note my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-note) 10%, transparent);
 border-left-color: var(--color-note);
 --hover-bg: color-mix(in srgb, var(--color-note) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-note) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Basic definitions (matrix multiplication, inner products, block matrices).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asymptotic Notation:&lt;/strong&gt; Big-O notation and the Master Theorem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No prior knowledge&lt;/strong&gt; of Group Theory or Representation Theory is required for this post.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;hr&gt;
&lt;p&gt;In this series of posts, we will discuss a fascinating line of work that aims to use group theory and representation theory to design fast algorithms for matrix multiplication. We will start with the basics of matrix multiplication algorithms and build up to the group theoretic approach.
This post is intended for readers without any prior knowledge of groups or representation theory, or of matrix multiplication algorithms. My goal is to build an intuitive understanding of the problem space before we dive deeper in future posts.&lt;/p&gt;</description></item><item><title>Approximating the Cut-Norm - Part 1</title><link>https://yahel1216.github.io/posts/cut-norm/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/cut-norm/</guid><description>&lt;div
 class="alert alert-note my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-note) 10%, transparent);
 border-left-color: var(--color-note);
 --hover-bg: color-mix(in srgb, var(--color-note) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-note) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Eigenvalues, PSD matrices, Tensor products.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convex Optimization:&lt;/strong&gt; Basic familiarity with Semidefinite Programming (SDP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Expectations, Markov&amp;rsquo;s inequality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph Theory:&lt;/strong&gt; Basic definitions, Cuts, Regularity.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;Consider the following problem: Given an undirected graph $G=(V,E)$, let $A,B\subset V$ denote non-empty disjoint sets. Let $E(A,B)$ denote the set of edges in $E$ that cross from $A$ to $B$. Denote $D(A,B)=\frac{\left|E(A,B)\right|}{\left|A\right|\left|B\right|}$ to be the &lt;strong&gt;density&lt;/strong&gt; of edges crossing from $A$ to $B$.&lt;/p&gt;</description></item><item><title>Approximating the Cut-Norm - Part 2</title><link>https://yahel1216.github.io/posts/cut-norm-2/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/cut-norm-2/</guid><description>&lt;div
 class="alert alert-note my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-note) 10%, transparent);
 border-left-color: var(--color-note);
 --hover-bg: color-mix(in srgb, var(--color-note) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-note) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Eigenvalues, PSD matrices, Tensor products.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convex Optimization:&lt;/strong&gt; Basic familiarity with Semidefinite Programming (SDP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Expectations, Markov&amp;rsquo;s inequality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph Theory:&lt;/strong&gt; Basic definitions, Cuts, Regularity.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;We are interested in computing the cut norm of a matrix, defined by $$\|A\|_C=\max_{I\subset R,J\subset S}\left|\sum_{i\in I,j\in J}a_{i,j}\right|$$
where $A=(a_{i,j})_{i\in R,j\in S}$. We&amp;rsquo;ve seen this is a hard problem, and it is often equivalent to computing the $\infty\mapsto 1$ norm, defined by $$\|A\|_{\infty\mapsto 1}=\max_{x\in \set{\pm 1}^R, y\in \set{\pm1}^S} \sum_{i\in R,j\in S} a_{i,j}\cdot x_i\cdot y_j$$
We&amp;rsquo;ve already seen that computing the latter norm can be done by solving an integer quadratic program, which has a relaxation to a quadratically constrained quadratic program given by $$\max \sum_{i,j}a_{i,j}\cdot \langle u_i, v_j\rangle \quad\text{subject to}\quad \|u_i \|^2 = \|v_j\|^2=1$$ where the optimization is over vectors $u_1,\ldots,u_n$ and $v_1,\ldots ,v_m$. We&amp;rsquo;ve seen that this problem can be solved using semi-definite programming, and we&amp;rsquo;ve seen one method to round the solution, giving an approximation factor of $\approx 0.03$. In this post, we&amp;rsquo;ll see another method, which is much cleaner, and uses randomized rounding of this SDP.&lt;/p&gt;</description></item><item><title>The Conjugate Gradient Method for Linear Equations</title><link>https://yahel1216.github.io/posts/conj-gradient/</link><pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/conj-gradient/</guid><description>&lt;div
 class="alert alert-info my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Eigenvalues, eigenvectors, positive (semi-)definite (PSD) matrices, and the notion of orthogonality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calculus:&lt;/strong&gt; Gradients and basic convexity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimization:&lt;/strong&gt; Gradient Descent (GD) basics.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;One of the most common tasks in numerical algorithms is to solve a linear equation—that is, find $x$ for which
$$Ax=b$$
for a given matrix $A$ and vector $b$. This can be solved via Gaussian elimination, which generally has a high runtime ($O(n^3)$). We will show how to improve upon this using optimization ideas. This is one instance of a problem for which we can find an &lt;strong&gt;approximate&lt;/strong&gt; solution much faster using &lt;strong&gt;calculus&lt;/strong&gt; tools, compared with using a close-form exact algebraic solution.&lt;/p&gt;</description></item><item><title>Basic Matroid Theory</title><link>https://yahel1216.github.io/posts/matroid-theory/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/matroid-theory/</guid><description>&lt;h1 id="basic-matroid-theory-and-infinite-extensions"&gt;Basic Matroid Theory and Infinite Extensions&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Vector spaces, basis, dimension, and linear independence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph Theory:&lt;/strong&gt; Graphs, connected components, cycles, and spanning trees.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set Theory:&lt;/strong&gt; Basic cardinality and Zorn&amp;rsquo;s Lemma (for the infinite section).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;In this post, we will discuss the basics of &lt;strong&gt;Matroid Theory&lt;/strong&gt;. While often taught merely as a theoretical framework for Greedy Algorithms, matroids are a rich combinatorial structure in their own right. We will start with the finite foundations and then explore how these definitions behave (and break) when extended to the infinite case.&lt;/p&gt;</description></item><item><title>Random Fourier Features</title><link>https://yahel1216.github.io/posts/kernel-2/</link><pubDate>Fri, 09 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/kernel-2/</guid><description>&lt;div
 class="alert alert-info my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Analysis:&lt;/strong&gt; Basic Fourier Analysis (transforms, exponentials).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Concentration inequalities (Hoeffding), expectation, and Gaussian distributions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kernel Methods:&lt;/strong&gt; Familiarity with the basic kernel trick (see &lt;a href="https://yahel1216.github.io/posts/kernel-1"&gt;previous post&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;In the previous post, we introduced the idea of kernels as a way to lift a separation problem to a much larger space (potentially infinite-dimensional) while keeping the computation tractable via the &amp;ldquo;Kernel Trick.&amp;rdquo; We also mentioned that when the number of points in the dataset is very large—which is the case in most modern applications—the kernel method is less useful, as it requires computing and storing a huge $n \times n$ matrix.&lt;/p&gt;</description></item><item><title>Tensor Sketch: Polynomial Kernels</title><link>https://yahel1216.github.io/posts/kernel-3/</link><pubDate>Fri, 09 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/kernel-3/</guid><description>&lt;div
 class="alert alert-info my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Inner products, tensor products, and vectorization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probability:&lt;/strong&gt; Hash functions, independence, and variance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Algorithms:&lt;/strong&gt; Fast Fourier Transform (FFT) and basic convolution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kernel Methods:&lt;/strong&gt; Familiarity with the Polynomial Kernel.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;In previous posts, we discussed the Radial Basis Function (RBF) kernel and how to approximate it using &lt;strong&gt;Random Fourier Features&lt;/strong&gt;. Today, we turn our attention to another fundamental kernel—the &lt;strong&gt;Polynomial Kernel&lt;/strong&gt;—and a powerful algebraic technique to approximate it called &lt;strong&gt;Tensor Sketching&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>The Kernel Method</title><link>https://yahel1216.github.io/posts/kernel-1/</link><pubDate>Thu, 08 Jan 2026 00:00:00 +0000</pubDate><guid>https://yahel1216.github.io/posts/kernel-1/</guid><description>&lt;div
 class="alert alert-info my-6 overflow-hidden rounded-lg transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 style="background-color: color-mix(in srgb, var(--color-) 10%, transparent);
 border-left-color: var(--color-);
 --hover-bg: color-mix(in srgb, var(--color-) 15%, transparent);"
 onmouseover="this.style.backgroundColor = this.style.getPropertyValue('--hover-bg')"
 onmouseout="this.style.backgroundColor = 'color-mix(in srgb, var(--color-) 10%, transparent)'"
 role="alert"
 aria-labelledby="alert-0-title"&gt;
 
 &lt;div
 class=" flex items-center justify-between px-6 py-6"
 &gt;
 &lt;div class="flex items-center gap-3"&gt;
 
 &lt;h4
 id="alert-0-title"
 class="m-0 font-semibold text-foreground/90"&gt;
 Prerequisites
 &lt;/h4&gt;
 &lt;/div&gt;

 
 
 &lt;/div&gt;

 
 &lt;div
 id="alert-0-content"
 class="alert-content px-6 pb-6"&gt;
 &lt;div class="prose prose-sm text-foreground/90 max-w-none"&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear Algebra:&lt;/strong&gt; Inner product spaces, positive definite matrices, spectral decomposition, projections.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;script&gt;
function toggleAlert(alertId) {
 const content = document.getElementById(alertId + '-content');
 const chevron = document.getElementById(alertId + '-chevron');
 const header = content.previousElementSibling;
 
 if (content.classList.contains('hidden')) {
 content.classList.remove('hidden');
 chevron.style.transform = 'rotate(0deg)';
 header.setAttribute('aria-expanded', 'true');
 } else {
 content.classList.add('hidden');
 chevron.style.transform = 'rotate(-90deg)';
 header.setAttribute('aria-expanded', 'false');
 }
}


document.addEventListener('DOMContentLoaded', function() {
 const collapsedAlerts = document.querySelectorAll('.alert-content.hidden');
 collapsedAlerts.forEach(function(content) {
 const alertId = content.id.replace('-content', '');
 const chevron = document.getElementById(alertId + '-chevron');
 if (chevron) {
 chevron.style.transform = 'rotate(-90deg)';
 }
 });
});
&lt;/script&gt;

&lt;p&gt;In this post, we will explore the idea of kernels in machine learning. In future posts, we will explore different ways to approximate specific kernel computations. Approximation is useful for big data applications due to the prohibitively high cost of exact kernel computations.&lt;/p&gt;</description></item></channel></rss>