HN 日本語サマリー

← 一覧へ戻る
プログラミング

Recurse Center でやったこと

What I did at Recurse Center (thill.me)

132 pointsby bingden43 コメント

要約

筆者は、友人の勧めでブルックリンにあるプログラミングの合宿施設「Recurse Center(RC)」で夏を過ごした。RCでは、参加者が自由に企画・スケジュールできるスタディグループが活発に行われており、筆者は「Agentic Adventures」(LLMとエージェントに関する議論)、「Practical Deep Learning」(機械学習の入門書を読み進める)、「Math Monday」(数学の学習と構築)、「Reverse engineering a board game AI」(ボードゲームAIの解析)などのグループに参加した。また、自身が開発したミニ言語「dodo」の完成や、DEFLATE圧縮アルゴリズムの実装、LLMを活用した様々なミニプロジェクトなど、多岐にわたる活動を行った。

全文翻訳

私は友人のCoryの推薦で、ブルックリンにあるプログラミングの合宿施設、Recurse Center(RC)で夏を過ごしました。そこで私がやったことのいくつかを紹介します。 スタディグループへの参加 RCでは、誰でも企画・スケジュールできる定期的なスタディグループがあります。例えば、毎週金曜日には、過去のAdvent of Codeの課題を一緒に解くために集まる人々がいました。私はAgentic Adventures、Practical Deep Learning、Math Monday、そしてオープンソースのボードゲームAIを調査する短いシリーズに参加しました。 Agentic Adventures Agentic Adventuresは、最新のLLMとエージェントに興味のある人々のためのディスカッショングループで、毎週異なることを行いました。いくつかのハイライトは以下の通りです:Amandaと私は、危険なスキップ権限で実行できるリモートサンドボックスをバイブコーディングエージェントのために構築しました。同じ趣旨で、Michelleはollamaとdockerを使用してローカルエージェントのためのサンドボックス環境をセットアップする方法を教えてくれました。これは、エージェントがどのように協力できるかを調査するために構築した「Just One」ゲームに使用しました。私たちは一緒にminGPTをいじり、ロミオとジュリエットのデータで訓練された小さなテキスト予測モデルを構築して、シェイクスピアのように話せるようにしました。小さなモデルがより会話的に話せるように、基本的なLoRAを訓練しました。 Practical Deep Learning これは、Jeremy HowardとSylvain Guggerによる著書『Practical Deep Learning』の(前半の)一部を読み進めるスタディグループでした。古典的な機械学習アプローチから始め、既存のモデルを使用または適応させ、その後、実際のニューラルネットワークモデルを構築する方法を学びました。この本は、高レベルの実践的な入門書であり、それらがどのように機能するか、そしてそれらで何が構築できるかについての直感を養うのに役立ちました。私自身は研究に興味がないため、このレベルの理解で十分でした。 Math Monday コーヒーチャットで、Sophiaと私は数学への情熱を共有していることを発見し、数学的なトピックのためのディスカッショングループを開始することにしました。これは楽しい気晴らしと学習・探求の機会となることを目的としていたため、各ミーティングの最初の半分を学習に費やし、その後ペアに分かれて学んだことに基づいて物事を構築しました。私たちが取り組んだ楽しいことのいくつかを紹介します:Project Eulerの問題を一緒に解く。Peter Winklerの著書『Mathematical Puzzles』からいくつかの問題を考える。フラクタルやその他のジェネレーティブアートを描く。このゲームのような、ボロノイ図を使用したプログラムの構築。BenはRocq証明アシスタントの紹介をしてくれ、私たちはブール代数の恒等式をいくつか解きました。ペンプロッターで描画するためのヒルベルト曲線を生成するプログラムを書きました。Kenjiと私は、Desmosでカオスゲームの楽しい拡張を作成しました。 ボードゲームAIのリバースエンジニアリング Tonyは、ボードゲーム「Race for the Galaxy」をプレイするためのKeldon AIのコードを掘り下げる短いシリーズを開始しました。最初のセッションでは、ルールを学び、AIをプレイするだけで、その後コードを掘り下げました――キュレーションされた特徴を持つ、古いスタイルの2層ニューラルネットワークです。Claudeはニューラルネットワークの重みを解釈し、それが何に反応したかを説明するのに非常に役立ちました。Keldon AIが戦略について何を学んだかを理解しようと時間を費やしました。ベースゲームでは、経済戦略が軍事戦略よりもはるかに強力であるという結論に至りました(プレイヤーの感情とも一致します)。最も強く重み付けされたノードのいくつかが、個々のカードの存在に対応していたことが、私にとって際立ったことの一つでした。 dodoを完成させる RCへの応募の一部として作成したミニ言語「dodo」を完成させました。これには、おそらく最も興味深い部分、マッチステートメントを実装するためのトリッキーな再帰コードの記述が含まれていました。これはLLMとの興味深いバランスでした――コードを自分で書くことは許しませんでしたが、素敵な仕様を書き、テストケースやサンプルプログラムを書く人がいるのは良かったです。LLMは、私がやったことを共有するのも簡単にしてくれました――ここでバイブコーディングされたオンラインREPLで試してみてください! DEFLATEの実装 RCでは、プロジェクトについて議論する多くのトークが行われます。バッチの早い段階で参加した一つは、JoshによるZIPファイル形式に関するもので、実装間の不整合についての彼の調査でした。彼は私が以前考えたこともなかったような詳細に深く踏み込みました。例えば、ウイルススキャナーが使用するアンジッパーがエッジケースを処理する方法が、あなたが使用するアンジッパーとわずかに異なると、ウイルスを含まないファイルがウイルスを含んでいると見なされないため、無害と見なされる可能性があります。これはセキュリティ上の脆弱性です!トークの中で私の注意を引いた部分の一つは、zipが使用する圧縮アルゴリズム、DEFLATEへの脱線でした。Kevanと私はそれを再実装するのは楽しい演習になると考え、数週間かけて数回のセッションでペアを組んで作業しました。DEFLATEは基本的にLZ77(一般化ランレングスエンコーディング)+ハフマン符号です。テキスト(実際には任意のバイトシーケンスですが、ここではテキストとして扱います)を2つの方法で圧縮します:(1)繰り返しシーケンスを後方参照で置き換える。例えば、「to be or not to be」は「to be or not (13, 5)」になるかもしれません。ここで括弧内の部分は「13バイト戻って、そこから5バイトコピーする」という意味です。(2)ハフマン符号化。これは、一般的なバイトを表すために短いビットシーケンスを割り当て、まれなバイトには長いシーケンスを割り当てる方法です。例えば、「e」の01100101やベル文字の00000111の代わりに、「e」にはわずか4または5ビットしか使用せず、英語のテキストには決して現れないベル文字には16ビット(または表現なし)を使用するかもしれません。仕様書を直接参照して、Rustで解凍プログラムを書きました。Rustを使うのは初めてでしたが、非常に良い言語だと感じました。(ただし、データライフタイムのルールの一部は理解するのを諦めました。)ほとんどの場合、C言語がそうあってほしいと思っていたような感覚でした。それでも、ビットパッキングに伴う概念的な難しさを排除するものではありませんでした――デバッグ中に、期待するビットシーケンスを書き出して、実際の結果と比較するために頻繁に立ち止まる必要がありました。このプロジェクトほど、自分が真のハッカーだと感じたものはありませんでした。 ペアプログラミングを多く行った RCは、他の人々と問題を一緒に取り組む「ペアプログラミング」の価値を強調しています。私はRCの基準から見ても内向的ですが、それでもかなりの量のペアプログラミングを行いました。KevanとのDEFLATE実装はペアプログラミングの最大の例でしたが、他にもいくつかのことを行いました。ZakiとTommyとは、SATソルバーを使用して数独を解きました――比較的単純な問題に強力なツールを持ち込みました。Seyoungとはライフゲームを実装し、各世代でシェルカーソルがきれいに(またはコマンドを間違えるとそうでないように)再描画されるようにする方法を学びました。Williamとはマスターマインドゲームを実装しました。BillとはEmacsでMagitの新しいビューを作成しようとしましたが、どちらもEmacs Lispで真剣なコードを書いた経験がほとんどなかったため、正直に言って野心的すぎました。しかし、彼は私にDoom Emacsを試すように説得し、私はそれを楽しんでいます! 多くのミニプロジェクトをバイブコーディングした RCに参加するにあたっての私の目標は、皆が騒いでいる新しいLLMの仕組みを習得することでした。これは明らかにAgentic AdventuresやPractical Deep Learningへの参加の動機の一部ですが、ランダムなものをバイブコーディングして、私が取り組める限界を押し広げようと多くの時間を費やしました。そのうちの一つは、rcade用のリズムゲームでした。これは、LLMの能力を本当に活用した最初のプロジェクトで、10種類の異なるプロトタイプを作成させ、最も気に入ったものを選びました。Amandaと私は、エージェントに単独で任せられるタスクの規模について実験しました。その結果、学術論文に基づいた気候モデリングを実装したファンタジーマップジェネレーターができました。また、エージェントを組み込んだゲームについても実験しました。そのうちの一つでは、エージェントに単語推測ゲーム「Just One」をプレイさせました。ゲームの目標は、他のプレイヤーと同じヒントを与えずに秘密の単語にヒントを与えることです。温度設定が1であっても、プレイしているすべてのエージェントが同じヒントを出すことが驚くほど頻繁にありました。私たちは、それぞれに「個性」を与えることでこれを解決しました。