<?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://huiwenn.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://huiwenn.github.io/" rel="alternate" type="text/html" /><updated>2026-09-14T07:58:40+00:00</updated><id>https://huiwenn.github.io/feed.xml</id><title type="html">Sophia Sun</title><subtitle>bleep bloop tech blog.</subtitle><author><name>Sophia Sun</name></author><entry><title type="html">Job search summer 2026</title><link href="https://huiwenn.github.io/job-search" rel="alternate" type="text/html" title="Job search summer 2026" /><published>2026-09-13T00:00:00+00:00</published><updated>2026-09-13T00:00:00+00:00</updated><id>https://huiwenn.github.io/job-search</id><content type="html" xml:base="https://huiwenn.github.io/job-search"><![CDATA[<blockquote>
  <p>Information sharing.</p>
</blockquote>

<!--more-->

<ul class="table-of-content" id="markdown-toc">
  <li><a href="#applying" id="markdown-toc-applying">Applying</a>    <ul>
      <li><a href="#on-referrals" id="markdown-toc-on-referrals">on referrals</a></li>
      <li><a href="#on-resume" id="markdown-toc-on-resume">on resume</a></li>
      <li><a href="#on-research" id="markdown-toc-on-research">on research</a></li>
    </ul>
  </li>
  <li><a href="#interviews" id="markdown-toc-interviews">Interviews</a>    <ul>
      <li><a href="#general-programming" id="markdown-toc-general-programming">General Programming</a></li>
      <li><a href="#ml-programming" id="markdown-toc-ml-programming">ML programming</a></li>
      <li><a href="#system-design" id="markdown-toc-system-design">System Design</a></li>
      <li><a href="#behavioral" id="markdown-toc-behavioral">Behavioral</a></li>
      <li><a href="#what-i-wouldve-done-differently" id="markdown-toc-what-i-wouldve-done-differently">What i would’ve done differently</a></li>
    </ul>
  </li>
</ul>

<p>I went through a job search loop this July and August, and here is a summary of it for information sharing. This is by no means a guide because there are many things that I don’t know / didn’t do well. I’m sure you can do better than me, good luck!</p>

<p>to start off, the mandatory sankey:</p>

<p><img src="/assets/img/jobsearch/sankey.png" alt="sankey diagram" /></p>

<p>(companies O and A were, alas, in the leftmost grey bar)</p>

<h2 id="applying">Applying</h2>

<p>The positions I interviewed for are mostly mid-level and senior MLE (or member of technical staff, if they care to use this name) on the topics of agents / agent infra / continual learning / post training, and a few on forecasting and “world models”, a few on research.</p>

<p>The companies I applied to are around 50% public companies, 30% D+ stage startups, and 20% earlier startups. Among the 22, 3 were recruiter reach-outs, 7 were referrals from friends, and the rest was just applying online from the company’s websites.</p>

<h4 id="on-referrals">on referrals</h4>

<p>in my experience this time i find that, unless the referral is strong (e.g. the person has worked with you before and can speak to the process and outcome) and that they know the hiring manager and the exact opening, a referral only gave me slightly better response rate than applying online directly. This might be because I am a more junior and fungible candidate though - my takeaway is ashbyhq works, still apply!</p>

<h4 id="on-resume">on resume</h4>

<p>there is this advice circling on the internet that you have to tailor your resume for each application based on the job description. I didn’t do this, because (1) a lot of the JDs are generic (on purpose), (2) AI can omit seemingly unrelated skills / experiences that would be good to include, (3) AI can hallucinate untruthful details, and fixing them by hand is time consuming. Obviously you should tailor the resume for the job that you <em>want</em> and include the keywords they’d be looking for, but going with one consistent copy of resume did get me decent responses.</p>

<h4 id="on-research">on research</h4>

<p>my priorities this time were growth and interesting problems. Other than the obvious contenders of frontier labs and star startups, I’ve found opportunities at research fractions of larger startups/companies to be interesting: e.g. <a href="https://research.perplexity.ai/">perplexity research</a>,  <a href="https://decagon.ai/blog/introducing-decagon-labs">decagon labs</a>,  <a href="https://labs.scale.com/">scale labs</a>,  apple special projects, etc. I enjoyed talking to them - smart people, cool problems, more structure than neolab startups - at the cost of perhaps less security than product-focused roles.</p>

<h2 id="interviews">Interviews</h2>

<p>roughly 4 types of interviews.</p>

<h3 id="general-programming">General Programming</h3>

<ul>
  <li>among my non ML programming rounds, only ~30% were leetcode style questions. My hypothesis is that with coding agents companies can make questions that better simulate the real work, which I think is great.</li>
  <li>what I mean by that is more practical coding questions, for example:
    <ul>
      <li>for an agent role: design + implement an in-memory file system</li>
      <li>for a search role: implement a simple index + citation mechanism</li>
      <li>for recsys: debug + edit a code repo for better real time recommendations update</li>
    </ul>
  </li>
  <li>I only had 1 interview that allowed AI coding tools, and the interviewer mostly observed how I worked with claude (haiku) in a big repo. not sure if that 45 minutes were informative to the company.
    <ul>
      <li>anecdotally, I know someone who put misleading information in <code class="language-plaintext highlighter-rouge">agents.md</code>  and tested if a candidate can find out.</li>
    </ul>
  </li>
</ul>

<h3 id="ml-programming">ML programming</h3>

<ul>
  <li>Again, very tailored for the role.</li>
  <li>I find these to be hard to prepare for - retrospectively, the best approach would be to know what exactly the team is working on and keep up with recent research on that topic.</li>
  <li>The 1:1 interviews are more or less <a href="https://torch-leet.vercel.app/">in this style</a>. Among them, I was asked to implement GRPO once, Gaussian Splatting once (to test GPU parallelism skills, which i did not have enough), and <a href="https://arxiv.org/abs/2211.17192">speculative decoding</a> twice (!)</li>
  <li>I preferred the take home assignments more. They are more time consuming, but you get to put in more thought and show more expertise. It also provides perspective on what the team is working on / what they are looking for.</li>
</ul>

<h3 id="system-design">System Design</h3>

<ul>
  <li>Open-ended “build a system that does X” design questions</li>
  <li>Agent / RAG questions are quite straightforward
    <ul>
      <li><a href="https://docs.google.com/document/d/1qjH-xBHtEUEZI7RuHkuRZ4f4iqYd9gAkXTAztjPWvIQ/edit?usp=sharing">This doc</a> has a good overview of all aspects of a agent system. a bit outdated but it helped me to organize my thinking.</li>
      <li>specific questions i was asked:
        <ul>
          <li>chatbot for internal documents (and how to scale to 100k users?)</li>
          <li>RAG for customer support given policy docs and past interactions (and how to continually improve answers?)</li>
          <li>memory system for personal agent</li>
          <li>chatbot for a team working together (multi-user memory / context / interface)</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>General ML roles all ask about recommendation systems, with specifics depending on the business they’re in.
    <ul>
      <li>I am completely new to this interview type. <a href="https://youtu.be/9U48NlbOzCU?si=uwMIDU0Yg5OfC2CX">This video</a> helped me with pacing, structure, and level of details in my answers; it also felt more realistic than other resources.</li>
    </ul>
  </li>
</ul>

<h3 id="behavioral">Behavioral</h3>

<p>It was interesting to talk to the +1 and +2s and figure out their priorities. Vibes wise: the startups each has a distinct culture, you can feel it just by talking to folks. The big companies felt more chaotic and overwhelmed, at least compared to a couple years ago. The two questions I usually go for are (1) what are the most challenging / annoying things about working here, and (2) the vision of where the product / research / team is going in near and far future.</p>

<p>I might be an idealist, but I get the ick when a team’s priority is to defend scope and collect paychecks for as long as possible; I want to find a place where we build.</p>

<h3 id="what-i-wouldve-done-differently">What i would’ve done differently</h3>

<p>these are mostly for myself and are subject to further reflection.</p>

<ul>
  <li>reach out to more people. The two positions I interviewed at apple were not the <em>best</em> fits for my skillset - so i didn’t get them - but by telling the stories it turns out that I knew quite some people working on ML at apple, and they pointed me to better fitting teams and projects, plus companies where good managers have gone to start teams. By the time this happened I was already in the offer negotiation stage, so here’s a reminder to talk to more people earlier on in the process.</li>
  <li>Do more thorough prepping for ML coding, for each of the positions. The ML rounds were more in-depth and up-to-date than I expected, and if I had the time / mental capacity I would dig deeper into the field I am going into, read up, implement the common algorithms, and know the trade-offs.</li>
  <li>work on perspective and signals for corporate america: leadership, ownership, conflict and stress handling, etc.</li>
</ul>]]></content><author><name>Sophia Sun</name></author><category term="misc" /><summary type="html"><![CDATA[Information sharing.]]></summary></entry><entry><title type="html">Entangled, day for night</title><link href="https://huiwenn.github.io/learning-to-move-shanghai" rel="alternate" type="text/html" title="Entangled, day for night" /><published>2026-09-01T00:00:00+00:00</published><updated>2026-09-01T00:00:00+00:00</updated><id>https://huiwenn.github.io/learning-to-move-shanghai</id><content type="html" xml:base="https://huiwenn.github.io/learning-to-move-shanghai"><![CDATA[<blockquote>
  <p>动·玩·生 (Learning to Move, Learning to Play, Learning to Animate) at Inclusion Conference on the Bund in Shanghai.</p>
</blockquote>

<!--more-->

<p><a href="(/learning-to-move-learning-to-play-learning-to-animate)">Our work</a> is a part of the art exhibition at the <a href="https://www.inclusionconf.com/">Inclusion Conference on the Bund</a> in Shanghai this year. <a href="https://www.mingyongcheng.com/">Mingyong</a>, <a href="https://zhanghanunwalled.com/">Han</a>, <a href="https://www.yuemenglindseygu.com/">Lindsey</a> and I presented together as the artist group <code class="language-plaintext highlighter-rouge">0x0a</code>. Huge thanks to the curation team <a href="https://semicolonc.art/event/inclusion2026">;C</a> for their support.</p>

<p>Some stills from the event:</p>

<p><img src="/assets/img/l2msh/poster.jpg" alt="" /></p>

<p><img src="/assets/img/l2msh/1.jpg" alt="" /></p>

<p><img src="/assets/img/l2msh/3.jpg" alt="" /></p>

<p><img src="/assets/img/l2msh/4.jpg" alt="" /></p>

<p><img src="/assets/img/l2msh/5.jpg" alt="" /></p>

<p><img src="/assets/img/l2msh/6.jpg" alt="" /></p>

<p><img src="/assets/img/l2msh/7.jpg" alt="" /></p>

<p><img src="/assets/img/l2msh/8.jpg" alt="" /></p>

<p><img src="/assets/img/l2msh/9.jpg" alt="" /></p>

<p><img src="/assets/img/l2msh/10.jpg" alt="" /></p>

<p>For more about the project, see <a href="/learning-to-move-learning-to-play-learning-to-animate">the project blog post</a>.</p>]]></content><author><name>Sophia Sun</name></author><category term="art_making" /><summary type="html"><![CDATA[动·玩·生 (Learning to Move, Learning to Play, Learning to Animate) at Inclusion Conference on the Bund in Shanghai.]]></summary></entry><entry><title type="html">I reviewed for JMLR and all i got is this (not) lousy gif</title><link href="https://huiwenn.github.io/jmlr" rel="alternate" type="text/html" title="I reviewed for JMLR and all i got is this (not) lousy gif" /><published>2025-03-03T00:00:00+00:00</published><updated>2025-03-03T00:00:00+00:00</updated><id>https://huiwenn.github.io/jmlr</id><content type="html" xml:base="https://huiwenn.github.io/jmlr"><![CDATA[<blockquote>
  <p>In support of nice digital artifacts as tokens of appreciation.</p>
</blockquote>

<!--more-->

<p>I submitted a review for a 70 page JMLR manuscript the other day, and they brought me to a page that expressed gratitude and gave me a zip file to download. I openned the zip and found a <code class="language-plaintext highlighter-rouge">README.md</code> file. The readme went:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># badges
I review for JMLR badges
</code></pre></div></div>

<p>Here’s the badge in question.</p>

<p><img src="/assets/img/jmlr/I_review_JMLR.gif" alt="" style="width: 40%;" /></p>

<p>cute and/or cringe, seeing it sparked some 2000s internet joy in me.</p>

<p>It also reminded me of <a href="https://danco.substack.com/p/innovation-takes-magic-and-that-magic">Alex Danco’s piece</a> on how science, open sourced software, and startups benifit a lot from gift culture. The reciprocity and goodwill of gift exchange culture (rather than, say, the market of labor and capital) encourages risk-taking and genuine contribution.</p>

<p>Is this badge a gift? It signals that I’m participating in the community around scientific reciprocity, which i proudly displayed in this blog post for vanity. It does not compensate for the 6 hours I spent on it, but is nontheless fulfilling. Maybe one small reason for ML conferences’ disfunctional review system is the lacking of social credits given to reviewers? (I know review experience helps with visa &amp; immigration, but that would not encourage service beyond the needed amount.) Can we start giving out little internet trinkets, unique each year, like ELO badges from games?</p>

<p>I look forward to seeing gifs for reviewers from more ML conferences.</p>]]></content><author><name>Sophia Sun</name></author><category term="misc" /><summary type="html"><![CDATA[In support of nice digital artifacts as tokens of appreciation.]]></summary></entry><entry><title type="html">Learning to Move, Learning to Play, Learning to Animate</title><link href="https://huiwenn.github.io/learning-to-move" rel="alternate" type="text/html" title="Learning to Move, Learning to Play, Learning to Animate" /><published>2024-12-03T00:00:00+00:00</published><updated>2024-12-03T00:00:00+00:00</updated><id>https://huiwenn.github.io/learning-to-move</id><content type="html" xml:base="https://huiwenn.github.io/learning-to-move"><![CDATA[<blockquote>
  <p>An immersive performance featuring multi-modal generative machine learning model @ UCSD’s Qualcomm Institute.</p>
</blockquote>

<!--more-->

<p><img src="/assets/img/yuanque/title.jpg" alt="" /></p>

<p>This is a project funded by UCSD’s Qualcomm institude <a href="https://qi.ucsd.edu/events/learning-to-move-learning-to-play-learning-to-animate/">IDEAS program</a> and is a collaboration with many folks here. See full list of contributors below.</p>

<h3 id="trailer">Trailer</h3>

<iframe width="100%" height="550" src="https://player.vimeo.com/video/966172941" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>

<p>What does it mean to be intelligent? Is it unique to humans, or can it take other forms—beings of wood, stone, metal, and silicon? Recently, we have seen rapid advances in “artificial intelligence,” but its definition has remained elusive. AI systems are often portrayed as some “other,” an alien invention that threatens to overpower us.</p>

<p>At the same time, we are only just becoming aware of the other intelligences surrounding us on this earth, those we’ve failed to recognize or acknowledge for so long. These beings—animals, plants, and natural systems that have been with us all along—are slowly revealing their complexity, agency, and knowledge.</p>

<p>Ecologist and philosopher David Abram coined the phrase “the more-than-human world” to refer to a way of thinking that seeks to override our human tendency to separate ourselves from the natural world. Our work is the artists’ reflection on learning to see technology and nature as part of this more-than-human world. What does it mean to live in a world where we, the technologies we have created, and nature form a collective intelligence? How do we coexist without overpowering or being overpowered by one another?</p>

<p>We explore these concepts in our performance through mediums and cutting-edge technologies including self-developed organic material robotics, AI-generated visuals, audio spatialization, real-time bio-feedback data sonification and visualization, and movement. Our performers, machines, and visuals interact in the realm of shadows, whose conceptual framework be traced back to Plato’s allegory of the cave, where shadows on the wall represent the limited and often deceptive nature of human perception. Beginning with mutual imitation and later progressing to playfulness, our performance reflects the complex process of how humans, nature, and machines perceive and learn from one another, reflecting the connected consciousness of our environment, our technologies, and us.</p>

<p> </p>

<h3 id="organic-form-robots">Organic form Robots</h3>

<p><img src="/assets/img/l2m/robot1.png" alt="" />
<em>Large center robot, Jensen’s linkage.</em></p>

<p><img src="/assets/img/l2m/robot2.png" alt="" />
<em>Arduino IoT controlled organic robot arm, and the shadow it casts.</em></p>

<p> </p>

<h3 id="full-docummentation">Full docummentation:</h3>

<iframe title="vimeo-player" src="https://player.vimeo.com/video/960878340?h=5273aba6fb" width="640" height="360" frameborder="0" allowfullscreen=""></iframe>

<p> </p>

<h4 id="credits">Credits</h4>

<p>(in alphabetical order):</p>

<p>Co-Directors: Mingyong Cheng, Sophia Sun, Han Zhang</p>

<p>Performers: Yuemeng Gu, Erika Roos</p>

<p>Robotic Engineer: Sophia Sun</p>

<p>Visual Artist: Mingyong Cheng</p>

<p>Sound Designer: Han Zhang</p>

<p>Lighting Engineer: Zehao Wang, Han Zhang</p>

<p>Video Editor: Yuemeng Gu</p>

<p>Post Production Coordinator: Mingyong Cheng</p>

<p>Technical &amp; Installation Support: Yifan Guo, Ke Li, Zehao Wang, Zetao Yu</p>

<p>Special thanks to Palka Puri for plant support, the Initiative for Digital Exploration of Arts and Sciences (IDEAS) program at the University of California San Diego and Qualcomm Institute for sponsoring this project, and the AV team from the California Institute for Telecommunications and Information Technology (Calit2) for installation and media support.</p>

<p><img src="/assets/img/l2m/learning_to_move_poster.png" alt="Poster" />
<em>Poster at Neurips 2024.</em></p>

<p><img src="/assets/img/l2m/1.jpg" alt="stills" />
<img src="/assets/img/l2m/2.jpg" alt="stills" /> 
<img src="/assets/img/l2m/4.jpg" alt="stills" />
<img src="/assets/img/l2m/5.jpg" alt="stills" />
<img src="/assets/img/l2m/6.jpg" alt="stills" />
<img src="/assets/img/l2m/7.jpg" alt="stills" />
<img src="/assets/img/l2m/8.jpg" alt="stills" />
<img src="/assets/img/l2m/9.jpg" alt="stills" /></p>]]></content><author><name>Sophia Sun</name></author><category term="projects" /><category term="machine-learning" /><category term="art_making" /><summary type="html"><![CDATA[An immersive performance featuring multi-modal generative machine learning model @ UCSD’s Qualcomm Institute.]]></summary></entry><entry><title type="html">How to graduate your PhD when you have no hope</title><link href="https://huiwenn.github.io/feynman" rel="alternate" type="text/html" title="How to graduate your PhD when you have no hope" /><published>2024-03-28T00:00:00+00:00</published><updated>2024-03-28T00:00:00+00:00</updated><id>https://huiwenn.github.io/feynman</id><content type="html" xml:base="https://huiwenn.github.io/feynman"><![CDATA[<blockquote>
  <p>a.k.a. Richard Hamming vs. Richard Feynman</p>
</blockquote>

<!--more-->

<p>–</p>

<p>I am going to graduate my phd soon. I’ve been talking to some prospective students recently, and a common question that comes up is: what makes a good phd student? how to be a good researcher?</p>

<p>I’d point them to some <a href="https://huiwenn.github.io/readings">articles</a>, but to be honest I have no idea. What I did spend a lot of time thinking about, and have arrived at a somewhat self-convincing answer, is to a slightly different question - what makes a happy phd student?</p>

<p>The answer is that they are married.</p>

<p>(Obviously this is a joke. We did once survey a 10-phd bbq party, and marriage was the most statistically significant positive correlator. But that’s a story for another time.)</p>

<p>Richard Hamming’s inspiring and influential talk <a href="https://www.cs.virginia.edu/~robins/YouAndYourResearch.html">You and Your Research</a> is what convinced me to do a phd. I wanted to work on important problems and aspired to contribute to the advancement of human knowledge. Oh, to be a scientist! 3 years in I felt like there was no hope; I’ve toiled away all my time and the only way out is to quit.</p>

<p>So I sought advice from my parents. They asked me to think about the least accomplished PhD graduate I know - Can I do as much as they did? What would a minimum effort phd look like? I answered that would result in a pretty bad thesis. And they said, that’s fine, bad is ok, go do what you can. <a href="https://www.poetryfoundation.org/poems/48132/failing-and-flying">Anything worth doing is worth doing badly.</a></p>

<p>And here we are.</p>

<p>This line of reason was put into words a lot more elegantly by Richard Feynman. Allow me to quote his letter in its entirety here - I thought it was the perfect antidote to Hamming-esque anxieties, the Dionysus to our Apollo. Enjoy, and hope you will finish your phd with peacefulness in your heart as well.</p>

<p>–</p>

<p>Dear Koichi,</p>

<p>I was very happy to hear from you, and that you have such a position in the Research Laboratories. Unfortunately your letter made me unhappy for you seem to be truly sad. It seems that the influence of your teacher has been to give you a false idea of what are worthwhile problems. <strong>The worthwhile problems are the ones you can really solve or help solve, the ones you can really contribute something to. A problem is grand in science if it lies before us unsolved and we see some way for us to make some headway into it.</strong> I would advise you to take even simpler, or as you say, humbler, problems until you find some you can really solve easily, no matter how trivial. You will get the pleasure of success, and of helping your fellow man, even if it is only to answer a question in the mind of a colleague less able than you. You must not take away from yourself these pleasures because you have some erroneous idea of what is worthwhile.</p>

<p>You met me at the peak of my career when I seemed to you to be concerned with problems close to the gods. But at the same time I had another Ph.D. Student (Albert Hibbs) was on how it is that the winds build up waves blowing over water in the sea. I accepted him as a student because he came to me with the problem he wanted to solve. With you I made a mistake, I gave you the problem instead of letting you find your own; and left you with a wrong idea of what is interesting or pleasant or important to work on (namely those problems you see you may do something about). I am sorry, excuse me. I hope by this letter to correct it a little.</p>

<p>I have worked on innumerable problems that you would call humble, but which I enjoyed and felt very good about because I sometimes could partially succeed. For example, experiments on the coefficient of friction on highly polished surfaces, to try to learn something about how friction worked (failure). Or, how elastic properties of crystals depends on the forces between the atoms in them, or how to make electroplated metal stick to plastic objects (like radio knobs). Or, how neutrons diffuse out of Uranium. Or, the reflection of electromagnetic waves from films coating glass. The development of shock waves in explosions. The design of a neutron counter. Why some elements capture electrons from the L-orbits, but not the K-orbits. General theory of how to fold paper to make a certain type of child’s toy (called flexagons). The energy levels in the light nuclei. The theory of turbulence (I have spent several years on it without success). Plus all the “grander” problems of quantum theory.</p>

<p>No problem is too small or too trivial if we can really do something about it.</p>

<p>You say you are a nameless man. You are not to your wife and to your child. You will not long remain so to your immediate colleagues if you can answer their simple questions when they come into your office. You are not nameless to me. Do not remain nameless to yourself – it is too sad a way to be. now your place in the world and evaluate yourself fairly, not in terms of your naïve ideals of your own youth, nor in terms of what you erroneously imagine your teacher’s ideals are.</p>

<p>Best of luck and happiness.</p>

<p>Sincerely, Richard P. Feynman.</p>]]></content><author><name>Sophia Sun</name></author><category term="meta-research" /><summary type="html"><![CDATA[a.k.a. Richard Hamming vs. Richard Feynman]]></summary></entry><entry><title type="html">Evaluating Probabilistic Predictions: Proper Scoring Rules</title><link href="https://huiwenn.github.io/predictive-distributions" rel="alternate" type="text/html" title="Evaluating Probabilistic Predictions: Proper Scoring Rules" /><published>2023-10-22T00:00:00+00:00</published><updated>2023-10-22T00:00:00+00:00</updated><id>https://huiwenn.github.io/predictive-distributions</id><content type="html" xml:base="https://huiwenn.github.io/predictive-distributions"><![CDATA[<blockquote>
  <p>Point predictions are often insufficient for machine learning tasks that involves uncertainty. As a solution, probabilistic models are becoming more widely used. This post talks about proper scoring rules, a framework to think about and evaluate probabilistic predictions.</p>
</blockquote>

<!--more-->

<ul class="table-of-content" id="markdown-toc">
  <li><a href="#probabilistic-predictions--predictive-distributions" id="markdown-toc-probabilistic-predictions--predictive-distributions">Probabilistic Predictions / Predictive Distributions</a>    <ul>
      <li><a href="#calibration-and-accuracy" id="markdown-toc-calibration-and-accuracy">Calibration and Accuracy</a></li>
    </ul>
  </li>
  <li><a href="#proper-scoring-rules-psr" id="markdown-toc-proper-scoring-rules-psr">Proper Scoring Rules (PSR)</a>    <ul>
      <li><a href="#definition" id="markdown-toc-definition">Definition</a></li>
      <li><a href="#common-scoring-rules" id="markdown-toc-common-scoring-rules">Common Scoring Rules</a>        <ul>
          <li><a href="#negative-log-likelihood-nll" id="markdown-toc-negative-log-likelihood-nll">Negative Log Likelihood (NLL)</a></li>
          <li><a href="#brierquadratic-score" id="markdown-toc-brierquadratic-score">Brier/Quadratic Score</a></li>
          <li><a href="#continuous-ranked-probability-score-crps" id="markdown-toc-continuous-ranked-probability-score-crps">Continuous Ranked Probability Score (CRPS)</a></li>
          <li><a href="#energy-score" id="markdown-toc-energy-score">Energy Score</a></li>
          <li><a href="#interval-specific-mean-interval-score" id="markdown-toc-interval-specific-mean-interval-score">Interval specific: Mean Interval Score</a></li>
          <li><a href="#interval-specific-winkler-score" id="markdown-toc-interval-specific-winkler-score">Interval specific: Winkler Score</a></li>
          <li><a href="#tangent-is-kl-divergence-a-proper-scoring-rule" id="markdown-toc-tangent-is-kl-divergence-a-proper-scoring-rule">tangent: Is KL divergence a proper scoring rule?</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="#discussion" id="markdown-toc-discussion">Discussion</a></li>
</ul>

<h2 id="probabilistic-predictions--predictive-distributions">Probabilistic Predictions / Predictive Distributions</h2>

<p>Predictive distributions are when a model produces a probability distribution (as opposed to a point prediction) given data and parameters. They have many benefits - many real world problems have inherent uncertainty, and we can capture thing we care about, like risk or reward, through a probabilistic representation. With predictive distributions, we can have better uncertainty quantification, and make better decisions given these uncertainties.</p>

<p>To put in perspective, for input \(X\), instead of outputting a point prediction \(y\), the model outputs a distribution over the space of outputs \(p(y\vert X)\).</p>

<p>For example, for a classification task, we can output confidence along with a label:</p>

<p><img src="/assets/img/properscoring/classification.png" alt="" style="width: 60%;" /></p>

<p>For regression, one can output a gaussian distribution over \(y\) (mean and variance), like in the case of Gaussian Process regression:</p>

<p><img src="/assets/img/properscoring/gp.png" alt="" style="width: 60%;" /></p>

<p>Uncertainties can be from different sources. The most mainstream distinction is aleatoric (there exists variations in the data, as in our classification example) vs epistemic (we don’t have enough data to know the label for sure, as in our regression example).</p>

<p><img src="/assets/img/properscoring/uq.png" alt="Illustration from talk by Balaji Lakshminarayanan, Dustin Tran, and Jasper Snoek from Google Brain" style="width: 90%;" /></p>

<h3 id="calibration-and-accuracy">Calibration and Accuracy</h3>

<p>In general, we want two thing from our probabilistic forecasts: calibration, and accuracy. Calibration refers to that the probabilities predicted actually corresponds to the true probabilities. For example,  among the days that we predict 30% precipitation rate, 30% of them actually rained.</p>

<p>In the machine learning community, many studies have shown that as neural networks get deeper, they become less calibrated. So there have been efforts to calibrating neural networks using techniques like <a href="https://papers.nips.cc/paper_files/paper/2017/hash/9ef2ed4b7fd2c810847ffa5fa85bce38-Abstract.html">ensembles</a> and <a href="http://proceedings.mlr.press/v70/guo17a.html">temporal scaling</a>, among others. This is still an active area of study.</p>

<p>An important note is that calibration is not the same thing as accuracy. A model can be perfectly calibrated but completely useless - for example, for a binary classification task with a balanced test set, a model that predicts class A always with \(50\%\) probability.</p>

<p>Evaluating probabilistic forecasts, then, requires evaluating both accuracy and calibration. This is where proper scoring rules come in.</p>

<h2 id="proper-scoring-rules-psr">Proper Scoring Rules (PSR)</h2>

<h3 id="definition">Definition</h3>

<p>Scoring rules are functions that score how well a predictive distribution captures data. Let’s say we have data domain \(x \sim \mathbf{X}\), and \(P\) is a distribution over \(\mathbf{X}\). Then the score</p>

\[S: P \times x \rightarrow \mathbb{R}\]

<p>It assess the quality of probabilistic forecasts, by assigning a numerical score based on the predictive distribution and on the event or value that materializes. A scoring rule is proper if the forecaster maximizes the expected score for an observation drawn from the distribution \(F\) if he or she issues the probabilistic forecast \(F\), rather than \(G = F\). It is strictly proper if the maximum is unique.</p>

<h3 id="common-scoring-rules">Common Scoring Rules</h3>

<h4 id="negative-log-likelihood-nll">Negative Log Likelihood (NLL)</h4>

<p>You probably know what NLL is. In addition to being a proper scoring rule, it also have optimal discrimination power.</p>

\[NLL = -\sum_{i=1}^{n} \left[ y_i \log(p(y_i)) + (1 - y_i) \log(1 - p(y_i)) \right]\]

<h4 id="brierquadratic-score">Brier/Quadratic Score</h4>

<p>Brier score is a PSR for classification tasks. It is sometimes preferred over NLL because it is bounded within \([0,1]\) and hence more stable.</p>

<p>In the binary setting, we can calculate it as:</p>

\[BS = \frac{1}{n} \sum_{i=1}^{n} (p_i - o_i)^2\]

<ul>
  <li>\(n\) is the total number of observations or data points.
​</li>
  <li>
    <p>\(p_i\) represents the predicted probability of the positive class for the i-th observation.</p>
  </li>
  <li>\(o_i\) is an indicator variable that equals 1 if the event occurred and 0 if it did not for the 
i-th observation.</li>
</ul>

<h4 id="continuous-ranked-probability-score-crps">Continuous Ranked Probability Score (CRPS)</h4>

<p>Continuous Ranked Probability Score (CRPS) is another metric widely used in fields like meteorology, hydrology, and climate science. In plain words, the CRPS measures the discrepancy between the predicted cumulative distribution function (CDF) of a forecast and a step function representing the true outcome. It essentially quantifies the spread of the forecast distribution around the observed value.</p>

<p>The Continuous Ranked Probability Score is defined as:</p>

\[CRPS(F, y) = \int_{-\infty}^{\infty} [F(x) - \mathbb{1}(x \geq y)]^2 \, dx\]

<ul>
  <li>\(CRPS(F, y)\): The Continuous Ranked Probability Score for the forecast \(F\) and the observed outcome \(y\).</li>
  <li>\(F(x)\): The cumulative distribution function (CDF) of the forecast, evaluated at \(x\).</li>
  <li>\(\mathbb{1}(x \geq y)\): The indicator function which equals 1 if \(x \geq y\) and 0 otherwise.</li>
  <li>\(dx\): Infinitesimal change in \(x\), indicating integration over the entire real number line.</li>
</ul>

<h4 id="energy-score">Energy Score</h4>
<p>Energy Score (ES) is a proper scoring rule to measure calibration and sharpness of the predicted distributions. Defined as</p>

\[\text{ES}(P, \textbf{x}) = E_{ \textbf{X} \sim P} \| \textbf{X} - \textbf{x} \| - \frac{1}{2} E_{ \textbf{X, X'} \sim P} \| \textbf{X} - \textbf{X'} \|\]

<p><a href="https://arxiv.org/pdf/2010.03759.pdf">This paper</a> shows that the energy score outperforms the softmax confidence score on common OOD evaluation benchmarks.</p>

<p>The energy score is parameter-free measure, which makes it easy to implement, especially for distributions whose analytic expressions are unavailable or difficult. Another result of this property is that it is not directly differentiable w.r.t. parameters.</p>

<h4 id="interval-specific-mean-interval-score">Interval specific: Mean Interval Score</h4>

<p>A common way of using probability forecasts for decision making is translating it to confidence intervals. We will go through two of the</p>

<p>The Mean Interval Score is a metric used to evaluate the accuracy and calibration of probabilistic forecasts. It measures the average width of prediction intervals relative to the observed outcomes.</p>

<p>Keep in mind that this is a specialized metric for evaluating prediction intervals, and it may not be as commonly used as metrics like Brier score or log-likelihood in all contexts.</p>

<p>In a prediction interval, a model not only predicts a point estimate but also provides a range of values within which the actual outcome is expected to fall with a certain confidence level.</p>

<p>The Mean Interval Score is defined as follows:</p>

\[MIS = \frac{1}{n} \sum_{i=1}^{n} (U_i - L_i) + \frac{2}{\alpha} \sum_{i=1}^{n} (L_i - y_i)1_{y_i &lt; L_i} + \frac{2}{\alpha} \sum_{i=1}^{n} (y_i - U_i)1_{y_i &gt; U_i}\]

<p>Where:</p>

<ul>
  <li>\(n\) is the total number of observations or data points.</li>
  <li>\(U_i\) is the upper bound of the prediction interval for the i-th observation.</li>
  <li>\(L_i\) is the lower bound of the prediction interval for the i -th observation.</li>
  <li>\(y_i\) is the actual observed value for the \(i\)-th observation.</li>
  <li>\(\alpha\) is the confidence level of the prediction interval (e.g., 0.95 for a 95% confidence interval).</li>
  <li>\(I(\cdot)\) is the indicator function, which equals 1 if the condition inside the parentheses is true, and 0 otherwise.</li>
</ul>

<p>The Mean Interval Score penalizes prediction intervals that are too wide or too narrow compared to the actual outcomes. It also accounts for cases where the actual outcome falls outside the predicted interval.</p>

<h4 id="interval-specific-winkler-score">Interval specific: Winkler Score</h4>

<p>The Winkler score is another fun one for confidence intervals / regions, and can be easily extended to forecasts in higher dimensions. It is essentially a a metric measuring the overlap between two sets.</p>

\[WS = \frac{2 \times |A \cap B|}{|A| + |B|}\]

<p>where \(A\) and \(B\) are binary sets and | \(\cdot\) | denotes the cardinalities of the sets.</p>

<p>The Winkler Score ranges from 0 to 1, with 1 indicating complete overlap and 0 indicating no overlap between the sets.</p>

<h4 id="tangent-is-kl-divergence-a-proper-scoring-rule">tangent: Is KL divergence a proper scoring rule?</h4>

<p>No. The main difference between KL divergence (and other entropy metrics) as opposed to PSRs is that it measures difference between two distributions, where as PSRs calculates a score with the predictive distribution and <em>observations</em>. Often we do not have the ground truth distribution, so we would have to approximate the KL divergence.</p>

<p>KL is also not <em>strictly</em> proper: While KL divergence is proper in the sense that it is minimized when the predicted distribution matches the true distribution, it is not strictly proper because it doesn’t have a unique maximum. In other words, multiple predicted distributions can yield the same KL divergence value.</p>

<p>This is not to say that we should not use KL divergence as a measure of accuracy. It is very helpful for optimization and model selection because of its sensitivity to small differences, and can be used along with other PSRs.</p>

<h2 id="discussion">Discussion</h2>

<p>I hope I’ve made the case for using proper scoring rules as evaluators of probabilistic predictions, and provided a  grimoire of useful scores.</p>

<p>It is worth noting that, while being <em>proper</em> is  helpful for model comparison, it is just one of the desirable property for a metric. <a href="https://proceedings.mlr.press/v202/marcotte23a/marcotte23a.pdf">This paper</a> from ICML 2023 raised the important point that we also need to pay attention to metric’s discriminative performance in the settings of the task. They showed that in a multivariate time series forecasting context, the energy score and CRPS fail to capture correlation structures between the variables, and are not sensitive to discrepancies in higher moments. Some scoring rules also appears complementary in their discriminative emphases, so it is worth having an ensemble of metrics for reliably measuring the correctness of forecasts.</p>

<p>Happy hacking!</p>

<hr />

<p><em>Extended Readings</em></p>

<ul>
  <li>
    <p><a href="https://sites.stat.washington.edu/raftery/Research/PDF/Gneiting2007jasa.pdf">Strictly proper scoring rules, prediction, and estimation.</a>. Gneiting, Tilmann, and Adrian E. Raftery. The OG proper scoring rules paper.</p>
  </li>
  <li>
    <p><a href="https://arxiv.org/pdf/2107.00363.pdf">Valid prediction intervals for regression problems</a>. Nicolas Dewolf, Bernard De Baets, Willem Waegeman. A survey of probablistic forecasting models including Bayesian methods (GP, BNN), ensemble methods, direct estimation methods (quantile regression), and conformal prediction methods. They introduce the methods clearly and compare the advantages and disadvantages of each.</p>
  </li>
</ul>

<hr />

<p><em>References</em></p>

<p>Michel Kana, “Uncertainty in Deep Learning. How To Measure?” <a href="https://towardsdatascience.com/my-deep-learning-model-says-sorry-i-dont-know-the-answer-that-s-absolutely-ok-50ffa562cb0b">blogpost</a>, 2020</p>

<p>Balaji Lakshminarayanan, Dustin Tran,  and Jasper Snoek, “Uncertainty and Out-of-Distribution Robustness in Deep Learning” Talk at NERSC <a href="https://www.youtube.com/watch?v=ssD7jNDIL2c&amp;ab_channel=NERSC">youtube</a>, 2020</p>

<p>Gneiting, Tilmann, and Adrian E. Raftery. “Strictly proper scoring rules, prediction, and estimation.” <a href="https://sites.stat.washington.edu/raftery/Research/PDF/Gneiting2007jasa.pdf">pdf</a> <em>Journal of the American statistical Association</em> 102.477 (2007): 359-378.</p>

<p>Victor Richmond Jose, Robert Nau, &amp; Robert Winkler. “Scoring Rules, Generalized Entropy, and Utility Maximization” <a href="https://people.duke.edu/~rnau/Nau_Scoring_Rules_Paris_seminar.pdf">slides</a>, Presentation for GRID/ENSAM Seminar, 2007</p>

<p>Marcotte, Étienne, Valentina Zantedeschi, Alexandre Drouin, and Nicolas Chapados. “Regions of Reliability in the Evaluation of Multivariate Probabilistic Forecasts.” <a href="https://proceedings.mlr.press/v202/marcotte23a/marcotte23a.pdf">pdf</a> ICML 2023</p>]]></content><author><name>Sophia Sun</name></author><category term="machine-learning" /><summary type="html"><![CDATA[Point predictions are often insufficient for machine learning tasks that involves uncertainty. As a solution, probabilistic models are becoming more widely used. This post talks about proper scoring rules, a framework to think about and evaluate probabilistic predictions.]]></summary></entry><entry><title type="html">Synthetic Erudition Assist Lattice</title><link href="https://huiwenn.github.io/seals" rel="alternate" type="text/html" title="Synthetic Erudition Assist Lattice" /><published>2021-05-27T00:00:00+00:00</published><updated>2021-05-27T00:00:00+00:00</updated><id>https://huiwenn.github.io/seals</id><content type="html" xml:base="https://huiwenn.github.io/seals"><![CDATA[<!--more-->

<p><img src="/assets/img/seals/seals.jpg" alt="" /></p>

<p>Update: We presented ur music video for <em>Lockdown</em> at the <a href="https://neuripscreativityworkshop.github.io/2022/">Machine Learning for Creativity and Design Workshop</a> at NeurIPS 2022.</p>

<p><em>our poster for NIME 2021</em>
 </p>

<p>You can read the paper <a href="https://nime.pubpub.org/pub/5oupvoun/draft?access=jhkokrol">here</a> and listen to our music <a href="https://the5eals.bandcamp.com/album/the-seals-holiday-special">here</a>.</p>

<p>This paper documents the music-making of the band <em>Seals</em>, for which I play bass and do machine learning. The Seals is a pet project with Margaret Schedel, Susie Green, Ria Rajan, and Sofy Yuditskaya; we introduce ourselves, (cheekly), as <em>a political, feminist, noise, and AI-inspired electronic sorta-surf rock band</em>. The S.E.A.L. (Synthetic Erudition Assist Lattice) is the collection of algorithms that assist us in creating content with which to mold and shape our music and visuals. Glad to see our acronym powers from academia came into use.</p>

<p>Our first collection of songs are about how our living experiences are mediated by technology, pandemic lockdowns, the female body, and the occult.  I hope we can bring a performance to you one day.</p>

<p> </p>

<p><img src="/assets/img/seals/theremin.png" alt="" style="width: 80%;" class="center" />
<em>Sofy made custom theremins for all of us.</em>
 </p>]]></content><author><name>Sophia Sun</name></author><category term="projects" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Found Materials Drawing Machine</title><link href="https://huiwenn.github.io/drawingmachine" rel="alternate" type="text/html" title="Found Materials Drawing Machine" /><published>2020-07-01T01:09:00+00:00</published><updated>2020-07-01T01:09:00+00:00</updated><id>https://huiwenn.github.io/drawingmachine</id><content type="html" xml:base="https://huiwenn.github.io/drawingmachine"><![CDATA[<!--more-->

<p style="width: 60%;" class="center"><img src="/assets/img/drawingmachine/vid.gif" alt="robot" /></p>
<p> </p>

<p>I built a drawing robot with wood found in the desert! The machanism and software is heavily based on <a href="https://brachiograph.readthedocs.io/en/latest/index.html">BranchioGraph</a>, with a different construct and orientation that required some tinkering to figure out.</p>

<p><img src="/assets/img/bbd/15-2.jpeg" alt="robot2" />
<em>very ad-hoc calibration setup ft. printed protractor and earing</em></p>

<p style="width: 60%;" class="center"><img src="/assets/img/bbd/15-3.jpeg" alt="robot3" />
<em>first run! It drew a bonfire.</em></p>

<p>Even after calibration the drawing is still a little… wonky, because of the elasticity in the sticks, the looseness of the joints, and inacuracies of servo controls. In some ways, though, these faults added a layer of intermediacy to the drawing (or the act of drawing), which one may see as part of the machine’s <em>touch</em>.</p>

<p style="width: 60%;" class="center"><img src="/assets/img/bbd/13-7.jpeg" alt="pallet racks" />
<img src="/assets/img/bbd/15-4.jpeg" alt="vectors" />
<img src="/assets/img/bbd/15-5.jpeg" alt="drawing" />
<em>A drawing of a vectorized picture of us building pallet racks.</em></p>

<p> </p>

<p>The bot even participated in our weekly <em>drink-and-draw</em> event. People blew into a alcohol sensor appended to the raspberry Pi, whose reading were used to parametrize the <code class="language-plaintext highlighter-rouge">open-cv</code> vectorize function. (So technically, we drank and it drew.) Here is <a href="https://twitter.com/_yokaii_/status/1249096320083607553">a video</a> of the bot figure drawing.</p>

<p> 
You may find my code for it <a href="https://github.com/guiguiguiguigui/chatsubo-e">here</a>.</p>]]></content><author><name>Sophia Sun</name></author><category term="projects" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">chicken soup for the cs phd student</title><link href="https://huiwenn.github.io/readings" rel="alternate" type="text/html" title="chicken soup for the cs phd student" /><published>2020-06-02T01:09:00+00:00</published><updated>2020-06-02T01:09:00+00:00</updated><id>https://huiwenn.github.io/readings</id><content type="html" xml:base="https://huiwenn.github.io/readings"><![CDATA[<blockquote>
  <p>Pieces of writings that I found helpful for thinking about research and surviving a PhD.</p>
</blockquote>

<!--more-->

<h3 id="de-mystifying-good-research-and-good-papers-by-fei-fei-li"><em>De-Mystifying Good Research and Good Papers</em>, by Fei-Fei Li</h3>

<p>read it <a href="https://bigaidream.gitbooks.io/tech-blog/content/2014/de-mystifying-good-research.html">here</a>.</p>

<p>I’m putting this one first because it’s a succint yet powerful read. It’s easy to be caught up in the “publish or perish” culture and the race of metric hacking / low-hanging fruits; this article serves as a good reminder of that’s not why we are here doing research.</p>

<blockquote>
  <p>Every research project and every paper should be conducted and written with one singular purpose: to genuinely advance the field of computer vision. So when you conceptualize and carry out your work, you need to be constantly asking yourself this question in the most critical way you could – “Would my work define or reshape xxx (problem, field, technique) in the future?”</p>
</blockquote>

<blockquote>
  <p>This means publishing papers is NOT about “this has not been published or written before, let me do it”, nor is it about “let me find an arcane little problem that can get me an easy poster”. It’s about “if I do this, I could offer a better solution to this important problem,” or “if I do this, I could add a genuinely new and important piece of knowledge to the field.”</p>
</blockquote>

<h3 id="you-and-your-research-by-richard-hamming"><em>You and Your Research</em>, by Richard Hamming</h3>

<p>read it <a href="http://www.cs.virginia.edu/~robins/YouAndYourResearch.html">here</a>.</p>

<p>A classic and important reading for any researcher in science. In his talk (linked is a transcription) Hamming talks about <em>what</em> constitutes <em>important work</em>, <em>why</em> do it, and <em>how</em> to do it. The arguments are interlaced with cool personal science anecdotes and lined with optimism – it reminded me of why I am here doing grad school in the first place. I first heard about the talk’s existence, funnily enough, from <a href="http://www.paulgraham.com/hamming.html">Paul Graham</a>, but I’ve seen scientists I look up to reference it again and agian, from when they’re feeling burnt out to when facing important decisions. It carries a message worth bearing in our minds as we go about, well, being us and doing our research.</p>

<h3 id="the-phd-grind-by-phillip-guo"><em>The PhD Grind</em>, by Phillip Guo</h3>

<p>(update: Phillip took down the book; see his <a href="https://pg.ucsd.edu/index.html#faq">FAQ</a>. you may still find copies online. Perhaps instead, check out his <a href="https://pg.ucsd.edu/early-stage-PhD-advice.htm">Advice for early-stage Ph.D. students</a>.)</p>

<p>The pitch I generally give people about this book is that Phillip encountered a pretty comprehensive set of problems for a CS PhD student, and prevailed (!). In this mini memoir he writes with clarity, provides sound analysis, and offers precious advices. Whatever problem you are experiencing, you are likely to find a way to reason about it from this book. Feel like you are just doing grunt work? Find it hard to communicate with you advisor? Anxious about not publishing (whereby proving your competence)? Deciding between industry vs academia? Phil’s got you.</p>

<p>It is both endearing and inspiring to learn about his journey, and to know that he came out ok (he’s a professor at UCSD now!). I really appreciate the honesty and detail he put into this work. Thank you!</p>

<h2 id="other-interesting-things">Other Interesting things</h2>
<ul>
  <li><a href="http://matt.might.net/articles/phd-school-in-pictures/">An illustrated guide to PhD</a></li>
  <li><a href="https://jiasi.wordpress.com/2019/05/27/invisible-accomplishments/?fbclid=IwAR2nwe6TdMMpt8t2qhDee5WFvPo6vF7trRR8Wwl29ym6DFxTUQTOqsFJl1A">How to transform into a senior PhD student</a></li>
  <li><a href="https://www.amazon.com/PhD-Not-Enough-Survival-Science/dp/0465022227">A PhD Is Not Enough!: A Guide to Survival in Science (book)</a></li>
  <li><a href="http://phdcomics.com/">phd comics</a></li>
</ul>

<p> </p>

<p><img src="/assets/img/misc/brainstick.gif" alt="brain on a stick" /></p>]]></content><author><name>Sophia Sun</name></author><category term="meta-research" /><summary type="html"><![CDATA[Pieces of writings that I found helpful for thinking about research and surviving a PhD.]]></summary></entry><entry><title type="html">Karaoke of Dreams</title><link href="https://huiwenn.github.io/karaoke" rel="alternate" type="text/html" title="Karaoke of Dreams" /><published>2020-04-01T00:00:00+00:00</published><updated>2020-04-01T00:00:00+00:00</updated><id>https://huiwenn.github.io/karaoke</id><content type="html" xml:base="https://huiwenn.github.io/karaoke"><![CDATA[<!--more-->

<p><img src="/assets/img/karaoke/01-rec.jpg" alt="" />
 
<img src="/assets/img/karaoke/02.jpg" alt="" /></p>

<p> </p>

<p>This is a computer-generated karaoke I built with <a href="https://www.yuditskaya.com/">Sofy</a> and <a href="https://www.derekxkwan.com/">Derek</a> during our time together in <a href="https://brahman.ai/">Brahman.ai</a>, Bombay Beach CA.</p>

<p>For details, please see <a href="/assets/img/idx/KoD.pdf">our paper</a> :)</p>

<p> 
<img src="/assets/img/bbd/9-4.jpg" alt="sofy and the tesseract" />
<em>Sofy building the tesseract.</em></p>]]></content><author><name>Sophia Sun</name></author><category term="projects" /><summary type="html"><![CDATA[]]></summary></entry></feed>