Forth再訪:2つの実装と奇妙な言語への省察

2025-08-28

著者は20年前に初めて出会ったForth言語を再訪し、2ヶ月かけて2つのForthインタプリタ、goforth(Go言語実装)とctil(C言語実装)を作成しました。goforthは純粋なインタプリタでシンプルですが、高度な機能が不足しています。一方、ctilは従来のForth実装により近く、Forth自身を使って言語を拡張することができ、Forthの威力を示しています。著者は、Forthの独自の強みは初期のハードウェア環境にあったと主張していますが、スタックベースのプログラミングモデルのため、現代のプログラミング環境では可読性が低く、実用性に欠けるとしており、コンパイラ原理や仮想マシンを理解するための学習プロジェクトとして最適だと結論づけています。

続きを読む

単一化アルゴリズム:実装と応用

2025-08-18

この記事では、単一化アルゴリズムについて詳しく説明します。これは、シンボリックな項間の等式を自動的に解くためのプロセスです。論理プログラミングや型推論で広く使用されています。パターンマッチングから始まり、単一化の概念を構築し、Norvigの改良されたアルゴリズムに基づいたPython実装を提供します。実装には、データ構造の定義、コア関数`unify`、ヘルパー関数`unify_variable`と`occurs_check`、詳細なコード例と実行結果が含まれています。

続きを読む
開発 単一化

多項式乗算、畳み込み、信号処理のエレガントな関係

2025-05-21

この記事では、多項式乗算、畳み込み、そして信号処理の関係を探ります。表と図を用いて多項式乗算を視覚的に説明し、それが本質的に畳み込み演算であることを明らかにします。次に、離散信号とシステムを紹介し、線形時不変システム(LTI)に焦点を当てます。任意の信号は、スケーリングとシフトされたインパルス信号の列に分解でき、LTIシステムの応答は畳み込みによって計算できることを説明します。最後に、畳み込みの性質とフーリエ変換との関係を簡単に触れ、畳み込みのフーリエ変換は、そのオペランドのフーリエ変換の積に等しく、効率的な畳み込み計算を可能にすることを強調します。

続きを読む
開発

ブルームフィルター:効率的な集合メンバーシップのための確率的データ構造

2025-05-02

ブルームフィルターは、最小限の空間で要素が集合のメンバーであるかどうかを効率的にテストする確率的データ構造です。要素をビット配列内の複数の位置にハッシュすることにより、ブルームフィルターは高速なメンバーシップテストを提供しますが、偽陽性の可能性がわずかにあります。ほとんどのクエリが負の結果を返すシナリオに最適で、ブルームフィルターはルックアップを大幅に高速化します。この記事では、基本原理、実装(Goの例あり)、および数学的導出について詳しく説明します。1%の偽陽性率で10億個のアイテムの集合に対する最適なパラメーター計算を示す実践的な例により、大規模データ処理における有効性が強調されます。

続きを読む

効率的なトランスフォーマー:スパースゲート付きエキスパート混合 (MoE)

2025-04-20

Transformerモデルのフィードフォワード層は非常に大きくなることが多く、効率のボトルネックとなっています。スパースゲート付きエキスパート混合(MoE)は、この問題に対するエレガントな解決策を提供します。MoEは、大きなフィードフォワード層を複数の小さな「エキスパート」ネットワークに分割し、ルーターを使用して各トークンに対して最適なエキスパートのサブセットを選択することで、計算コストを大幅に削減し、効率を向上させます。この記事では、MoEの仕組みを詳しく説明し、NumPyによる実装例を示し、エキスパートの負荷分散などの重要な問題点についても考察します。

続きを読む

交差エントロピー:分類のための損失関数の深堀り

2025-04-13

この記事では、機械学習の分類タスクにおける損失関数としての交差エントロピーの役割を明確に説明します。情報理論の概念である情報量とエントロピーから始め、交差エントロピーを構築し、KLダイバージェンスと比較します。そして、交差エントロピーと最尤推定との関係を数値例を用いて示し、機械学習におけるその応用を明確にします。

続きを読む

4つの2で奇跡を起こす:数学パズルのエレガントな解法

2025-02-23

一見単純な数学パズル:4つの数字「2」と任意の数学演算子のみを用いて、任意の自然数を生成する。小学校算数から大学レベルの高等数学まで、誰でも参加できる。最初は簡単なように見えるが、指数、階乗などが導入されると難易度が急上昇する。最終的に、物理学者ディラックは、入れ子になった平方根と対数を使って一般解を発見し、この長年の難問をエレガントに解決した。それもたった4つの2だけで。

続きを読む

PythonのJITデコレータ:3つの実装戦略

2025-02-03

この記事では、Pythonで人気のJITデコレータパターン、特にJAXとTritonライブラリでの使用について詳しく説明します。著者は簡略化された例を用いて、ASTベース、バイトコードベース、トレースベースの3つのJITデコレータをゼロから実装します。ASTベースのアプローチは抽象構文木を直接操作し、バイトコードベースのアプローチはPythonのバイトコードインタプリタを活用し、トレースベースのアプローチは実行時の関数の実行をトレースすることで式IRを構築します。この記事では、各アプローチの長所と短所を詳しく説明し、JAXとNumbaを例に、現実世界のアプリケーションにおける戦略を説明します。

続きを読む
開発

Raftの実装:分散コンセンサスへの深入り

2024-12-21

これは、分散コンセンサスアルゴリズムRaftとそのGoによる実装の詳細を説明するシリーズの最初の投稿です。Raftは、複数のサーバー間で決定的なステートマシンを複製するという問題を解決し、サーバーの障害が発生した場合でもサービスの可用性を確保します。この投稿では、Raftの中核となるコンポーネントであるステートマシン、ログ、コンセンサスモジュール、リーダー/フォロワーの役割、クライアントとのインタラクションを紹介します。また、Raftのフォールトトレランス、CAP定理、Goを導入言語として選択した理由についても説明します。今後の投稿では、アルゴリズムの実装の詳細について詳しく説明します。

続きを読む