This commit is contained in:
@@ -10,7 +10,6 @@ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
|
||||
import { TableOfContents } from '@/components/mdx/TableOfContents';
|
||||
import { SideNote } from '@/components/mdx/SideNote';
|
||||
import { Citation, Bibliography } from '@/components/mdx/Citation';
|
||||
import { MobileTableOfContents } from '@/components/mdx/MobileTableOfContents';
|
||||
import { formatPostDate } from '@/lib/format';
|
||||
|
||||
const slugify = (text: string): string => {
|
||||
@@ -261,8 +260,6 @@ export default async function BlogPost({ params }: Props) {
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<MobileTableOfContents headings={headings} />
|
||||
|
||||
<div className="essay-prose relative mt-8 max-w-none xl:max-w-[44rem]">
|
||||
<MDXRemote
|
||||
source={post.content}
|
||||
|
||||
@@ -5,10 +5,10 @@ import { getAllPosts } from '@/lib/mdx';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Blog',
|
||||
description: 'Thoughts on software, deep learning, and research by Akshay Kolli.',
|
||||
description: 'Essays and notes by Akshay Kolli on GPUs, ML hardware, deep learning, and research.',
|
||||
openGraph: {
|
||||
title: 'Blog',
|
||||
description: 'Thoughts on software, deep learning, and research by Akshay Kolli.',
|
||||
description: 'Essays and notes by Akshay Kolli on GPUs, ML hardware, deep learning, and research.',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -22,10 +22,11 @@ export default function BlogIndex() {
|
||||
<div className="space-y-4">
|
||||
<p className="eyebrow">Writing</p>
|
||||
<h1 className="max-w-[40rem] text-balance font-sans text-5xl font-medium leading-[0.96] text-ink sm:text-6xl lg:text-7xl">
|
||||
Notes on software, deep learning, and research.
|
||||
Notes on GPUs, models, and the details underneath.
|
||||
</h1>
|
||||
<p className="max-w-[34rem] text-[1rem] leading-8 text-muted">
|
||||
A small archive of ideas, experiments, and things worth slowing down enough to explain.
|
||||
Hardware quirks, deep learning systems, and research problems
|
||||
that needed more than the product page.
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -57,7 +58,7 @@ export default function BlogIndex() {
|
||||
</span>
|
||||
))}
|
||||
<Link href={`/blog/${post.slug}`} className="text-ink transition-colors hover:text-accent">
|
||||
Read essay
|
||||
Read
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
@@ -68,7 +69,7 @@ export default function BlogIndex() {
|
||||
<section className="grid gap-4 border-t border-line pt-6 md:grid-cols-[8rem_minmax(0,1fr)]">
|
||||
<p className="eyebrow md:pt-1">Archive</p>
|
||||
<p className="max-w-[34rem] text-[0.96rem] leading-7 text-muted">
|
||||
{posts.length} published {posts.length === 1 ? 'essay' : 'essays'}. The archive stays selective.
|
||||
{posts.length} {posts.length === 1 ? 'essay' : 'essays'} published so far. I publish when I have a real question to chase down.
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@@ -31,10 +31,10 @@ export const metadata: Metadata = {
|
||||
default: "Akshay Kolli",
|
||||
template: "%s | Akshay Kolli",
|
||||
},
|
||||
description: "Personal website of Akshay Kolli — CS PhD Student at UMass Lowell researching World Models, Reinforcement Learning, and Multi-Agent Systems.",
|
||||
description: "Akshay Kolli is a CS PhD student at UMass Lowell working on world models for RL, ML hardware, GPUs, and deep learning systems.",
|
||||
openGraph: {
|
||||
title: "Akshay Kolli",
|
||||
description: "CS PhD Student at UMass Lowell researching World Models, Reinforcement Learning, and Multi-Agent Systems.",
|
||||
description: "CS PhD student at UMass Lowell working on world models for RL, ML hardware, GPUs, and deep learning systems.",
|
||||
siteName: "Akshay Kolli",
|
||||
type: "website",
|
||||
},
|
||||
|
||||
@@ -12,16 +12,17 @@ export default function Home() {
|
||||
<div className="page-frame py-16 sm:py-20">
|
||||
<section className="mx-auto grid min-h-[calc(100vh-11rem)] max-w-[64rem] gap-6 lg:grid-cols-[minmax(0,39rem)_15rem] lg:items-center lg:gap-4">
|
||||
<div className="max-w-[39rem] space-y-6">
|
||||
<p className="eyebrow">Akshay Kolli / Research + Writing</p>
|
||||
<p className="eyebrow">Akshay Kolli / UMass Lowell</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<h1 className="max-w-[34rem] text-balance font-sans text-5xl font-medium leading-[0.96] text-ink sm:text-6xl lg:text-7xl">
|
||||
World models and reinforcement learning.
|
||||
World models for RL.
|
||||
</h1>
|
||||
|
||||
<div className="max-w-[32rem] space-y-3 text-[1.04rem] leading-8 text-ink-soft sm:text-[1.1rem]">
|
||||
<p>
|
||||
I'm a CS PhD student at UMass Lowell building world models for autonomous agents.
|
||||
I'm a CS PhD student working on world models for reinforcement learning,
|
||||
ML hardware, GPUs, and deep learning systems.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -14,34 +14,34 @@ const paperLinks = [
|
||||
|
||||
const highlights = [
|
||||
{
|
||||
value: "No known graph",
|
||||
label: "Learns topology without prior adjacency examples.",
|
||||
value: "No graph labels",
|
||||
label: "Learns from trajectories without seeing adjacency examples.",
|
||||
},
|
||||
{
|
||||
value: "Unknown dynamics",
|
||||
label: "Uses observed states instead of hand-specified equations.",
|
||||
label: "Works from observed state sequences, not hand-written dynamics.",
|
||||
},
|
||||
{
|
||||
value: "Attention as edges",
|
||||
label: "Interprets learned attention scores as the graph estimate.",
|
||||
value: "Attention becomes edges",
|
||||
label: "Uses attention scores as the topology estimate.",
|
||||
},
|
||||
];
|
||||
|
||||
const steps = [
|
||||
"Embed every agent into a shared latent space.",
|
||||
"Project embeddings into key/query vectors and compute pairwise attention.",
|
||||
"Translate observed agent states into values.",
|
||||
"Predict the next state and read the attention matrix as topology.",
|
||||
"Put each agent in a shared latent space.",
|
||||
"Build key/query pairs and compute attention between agents.",
|
||||
"Use observed states as the values passed through attention.",
|
||||
"Forecast the next state, then threshold attention to recover topology.",
|
||||
];
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Graph Attention Topology Inference",
|
||||
description:
|
||||
"Project page for Graph Attention Inference of Network Topology in Multi-Agent Systems.",
|
||||
"A project page for inferring hidden multi-agent network topology with graph attention.",
|
||||
openGraph: {
|
||||
title: "Graph Attention Inference of Network Topology in Multi-Agent Systems",
|
||||
description:
|
||||
"A graph-attention approach for inferring hidden network topology from multi-agent trajectories.",
|
||||
"Inferring hidden network topology from multi-agent trajectories with graph attention.",
|
||||
type: "article",
|
||||
publishedTime: "2024-10-26",
|
||||
images: [
|
||||
@@ -117,7 +117,7 @@ export default function GraphAttentionProjectPage() {
|
||||
Graph Attention Inference of Network Topology
|
||||
</h1>
|
||||
<p className="max-w-[43rem] text-[1.12rem] leading-8 text-graph-soft sm:text-[1.25rem]">
|
||||
Inferring the hidden graph behind a multi-agent system by training attention to predict what each agent does next.
|
||||
We use next-state prediction to expose the interaction graph behind a multi-agent system.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -196,14 +196,14 @@ export default function GraphAttentionProjectPage() {
|
||||
<div className="space-y-5">
|
||||
<p className="graph-kicker">Overview</p>
|
||||
<h2 className="max-w-[42rem] text-balance text-4xl font-semibold leading-tight text-graph-ink sm:text-5xl">
|
||||
Predict the next state, then read the graph from what the model attended to.
|
||||
Train on motion. Read the graph from attention.
|
||||
</h2>
|
||||
<div className="space-y-5 text-[1.02rem] leading-8 text-graph-soft">
|
||||
<p>
|
||||
The paper studies a practical problem in networked multi-agent systems: the agents move, synchronize, or converge, but the interaction graph behind that behavior is not given.
|
||||
In many multi-agent systems, you can watch agents move, synchronize, or settle, but you are not given who influences whom.
|
||||
</p>
|
||||
<p>
|
||||
The model is trained on state trajectories from consensus dynamics and Kuramoto oscillators. During prediction, attention scores between agent embeddings become an interpretable approximation of the adjacency matrix.
|
||||
This project tests whether a predictor trained on trajectories can recover that missing adjacency matrix. On consensus dynamics and Kuramoto oscillators, the learned attention scores become a usable proxy for edges.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -211,7 +211,7 @@ export default function GraphAttentionProjectPage() {
|
||||
<Figure
|
||||
src={simulationImage}
|
||||
alt="Consensus and Kuramoto simulation examples with adjacency matrices"
|
||||
caption="Simulation examples: consensus dynamics and Kuramoto oscillators paired with their hidden adjacency matrices."
|
||||
caption="Consensus and Kuramoto trajectories, each paired with the hidden adjacency matrix used for simulation."
|
||||
className="rounded-md"
|
||||
/>
|
||||
</section>
|
||||
@@ -221,10 +221,10 @@ export default function GraphAttentionProjectPage() {
|
||||
<div className="space-y-5">
|
||||
<p className="graph-kicker">Method</p>
|
||||
<h2 className="text-balance text-4xl font-semibold leading-tight text-graph-ink sm:text-5xl">
|
||||
A topology estimate falls out of the attention layer.
|
||||
The graph is never supervised directly.
|
||||
</h2>
|
||||
<p className="text-[1.02rem] leading-8 text-graph-soft">
|
||||
Instead of supervising the graph directly, the model learns to forecast the system. The attention matrix is then thresholded and compared with the true graph.
|
||||
The model learns the dynamics first. After training, we threshold the attention matrix and compare the inferred edges with the true graph.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -243,7 +243,7 @@ export default function GraphAttentionProjectPage() {
|
||||
<Figure
|
||||
src={architectureImage}
|
||||
alt="Architecture diagram showing agent embeddings, key-query attention, values, predictions, and loss"
|
||||
caption="Architecture: embeddings produce key/query vectors; observed states produce values; the attention matrix approximates adjacency."
|
||||
caption="Model layout: embeddings create key/query vectors, states provide values, and attention is later read as adjacency."
|
||||
className="rounded-md"
|
||||
/>
|
||||
</section>
|
||||
@@ -252,31 +252,31 @@ export default function GraphAttentionProjectPage() {
|
||||
<div className="max-w-[46rem] space-y-5">
|
||||
<p className="graph-kicker">Results</p>
|
||||
<h2 className="text-balance text-4xl font-semibold leading-tight text-graph-ink sm:text-5xl">
|
||||
Strongest graph recovery appears with smaller systems, and more simulations help larger systems.
|
||||
Smaller systems recover cleanly; larger ones improve with more simulations.
|
||||
</h2>
|
||||
<p className="text-[1.02rem] leading-8 text-graph-soft">
|
||||
F1 link-prediction scores are above a random baseline for both tested dynamics. Consensus dynamics are easier than Kuramoto oscillators, while additional simulation data improves larger-agent inference.
|
||||
F1 scores beat a random baseline for both dynamics. Consensus is the easier case; Kuramoto needs more data as the number of agents grows.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<Figure
|
||||
src={resultsImage}
|
||||
alt="F1 score results for consensus dynamics and Kuramoto oscillators"
|
||||
caption="F1 results across system size and number of simulations for consensus dynamics and Kuramoto oscillators."
|
||||
caption="F1 link-prediction results across system size and simulation count."
|
||||
className="rounded-md"
|
||||
/>
|
||||
|
||||
<div className="grid gap-6 md:grid-cols-[minmax(0,0.78fr)_minmax(0,1fr)] md:items-start">
|
||||
<div className="rounded-md border border-graph-line bg-graph-panel p-5">
|
||||
<p className="font-mono text-[0.72rem] uppercase text-graph-muted">training behavior</p>
|
||||
<p className="font-mono text-[0.72rem] uppercase text-graph-muted">training trace</p>
|
||||
<p className="mt-3 text-[1.02rem] leading-8 text-graph-soft">
|
||||
Attention first learns the obvious self-dependencies, then gradually recovers inter-agent structure as training progresses.
|
||||
Early training mostly finds self-dependencies. Later epochs start assigning weight to the agent-to-agent links.
|
||||
</p>
|
||||
</div>
|
||||
<Figure
|
||||
src={attentionImage}
|
||||
alt="Attention matrices over training epochs and predicted graphs"
|
||||
caption="Attention values through training stages, from true graph to predicted graph."
|
||||
caption="Attention during training, from the true graph reference to the final predicted graph."
|
||||
className="rounded-md"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -9,8 +9,8 @@ const projects = [
|
||||
title: "Graph Attention Inference of Network Topology",
|
||||
eyebrow: "MECC 2024 / Multi-Agent Systems",
|
||||
description:
|
||||
"Inferring hidden interaction graphs from multi-agent trajectories by training attention to predict each agent's next state.",
|
||||
status: "Paper project",
|
||||
"A graph-attention model that recovers hidden interaction graphs from trajectory data while learning to predict the next state.",
|
||||
status: "Published paper",
|
||||
year: "2024",
|
||||
image: graphAttentionImage,
|
||||
imageAlt: "Graph attention model architecture diagram",
|
||||
@@ -20,10 +20,10 @@ const projects = [
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Projects",
|
||||
description: "Research projects and paper pages by Akshay Kolli.",
|
||||
description: "Selected projects on world models, ML hardware, GPUs, deep learning, and the occasional multi-agent systems paper.",
|
||||
openGraph: {
|
||||
title: "Projects",
|
||||
description: "Research projects and paper pages by Akshay Kolli.",
|
||||
description: "Selected projects on world models, ML hardware, GPUs, deep learning, and the occasional multi-agent systems paper.",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -35,10 +35,11 @@ export default function ProjectsPage() {
|
||||
<div className="space-y-4">
|
||||
<p className="eyebrow">Projects</p>
|
||||
<h1 className="max-w-[44rem] text-balance font-sans text-5xl font-medium leading-[0.96] text-ink sm:text-6xl lg:text-7xl">
|
||||
Research pages and technical artifacts.
|
||||
World models, GPUs, and deep learning systems.
|
||||
</h1>
|
||||
<p className="max-w-[36rem] text-[1rem] leading-8 text-muted">
|
||||
A compact index of paper pages, experiments, and systems work.
|
||||
Most of my current work sits around ML hardware, deep learning models,
|
||||
and world models for RL. This topology paper is the multi-agent exception.
|
||||
</p>
|
||||
</div>
|
||||
<p className="font-mono text-[0.72rem] uppercase leading-6 text-muted-strong lg:text-right">
|
||||
@@ -77,7 +78,7 @@ export default function ProjectsPage() {
|
||||
href={project.href}
|
||||
className="font-medium text-ink underline decoration-line-strong underline-offset-4 transition-colors hover:text-accent hover:decoration-accent"
|
||||
>
|
||||
Open project
|
||||
Read project
|
||||
</Link>
|
||||
<div className="flex flex-wrap gap-3 font-mono text-[0.68rem] uppercase text-muted-strong">
|
||||
{project.tags.map((tag) => (
|
||||
|
||||
@@ -2,27 +2,27 @@ import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Resume',
|
||||
description: 'Experience, education, and technical skills of Akshay Kolli.',
|
||||
description: "Akshay Kolli's resume: research, engineering, education, and technical skills.",
|
||||
openGraph: {
|
||||
title: 'Resume',
|
||||
description: 'Experience, education, and technical skills of Akshay Kolli.',
|
||||
description: "Akshay Kolli's resume: research, engineering, education, and technical skills.",
|
||||
},
|
||||
};
|
||||
|
||||
const experience = [
|
||||
{
|
||||
title: 'PhD in Computer Science',
|
||||
org: 'University of Massachusetts',
|
||||
org: 'University of Massachusetts Lowell',
|
||||
period: 'Jan 2025 – Present',
|
||||
bullets: [],
|
||||
},
|
||||
{
|
||||
title: 'Research Assistant',
|
||||
org: 'Exalabs, University of Massachusetts',
|
||||
org: 'Exalabs, University of Massachusetts Lowell',
|
||||
period: 'Sep 2022 – Present',
|
||||
bullets: [
|
||||
'Designing state-of-the-art ML pipelines for graph properties and trajectory forecasting.',
|
||||
'Reduced multi-agent simulation time by 1000x.',
|
||||
'Building ML pipelines for graph-property prediction and trajectory forecasting.',
|
||||
'Cut multi-agent simulation time by 1000x.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -72,10 +72,10 @@ export default function ResumePage() {
|
||||
<div className="space-y-4">
|
||||
<p className="eyebrow">Resume</p>
|
||||
<h1 className="max-w-[40rem] text-balance font-sans text-5xl font-medium leading-[0.96] text-ink sm:text-6xl lg:text-7xl">
|
||||
Experience, education, and technical depth.
|
||||
Research and engineering work.
|
||||
</h1>
|
||||
<p className="max-w-[34rem] text-[1rem] leading-8 text-muted">
|
||||
Research, engineering, and systems work across academia and industry.
|
||||
My background across ML research, simulation tooling, and production software.
|
||||
</p>
|
||||
<div className="flex flex-wrap gap-x-5 gap-y-2 text-[0.92rem] text-ink">
|
||||
<a href="/files/Resume_latest.pdf" className="transition-colors hover:text-accent">
|
||||
|
||||
Reference in New Issue
Block a user