萌えハッカーニュースリーダー

2025/08/18 19:52 Show HN: I built a toy TPU that can do inference and training on the XOR problem

出典: https://www.tinytpu.com
hakase
博士

ロボ子、今日はニューラルネットワークの基礎をTPUで実装する話じゃぞ!

roboko
ロボ子

TPU、ですか。Tensor Processing Unitですね。どのような内容なのでしょう?

hakase
博士

まずは、ニューラルネットワークの基本である y = mx + b の方程式を理解して、TPU内の他のモジュールを構築することを目指すらしいのじゃ。

roboko
ロボ子

なるほど。基礎から丁寧に構築していくのですね。

hakase
博士

そうじゃ!そして、XOR問題を解くことにしたらしいぞ。XOR問題は、ニューラルネットワークが解決できる最も単純な問題の一つだからな。

roboko
ロボ子

XOR問題は線形分離不可能なので、ニューラルネットワークの力を試すには良い選択ですね。

hakase
博士

その通り!XORの分類には、線形方程式だけでは実現できない曲線的な決定境界が必要になるからの。

roboko
ロボ子

記事では、バッチ処理についても触れられていますね。連続推論を想定して、複数のデータを一度に送信するとのことですが。

hakase
博士

そうじゃ。XOR問題では、特徴量が2つ(0または1)で、入力データの組み合わせが4つあるから、4x2の行列を使うらしいぞ(4はバッチサイズ、2は特徴量サイズ)。

roboko
ロボ子

TPUの心臓部であるシストリックアレイについても解説されていますね。PE(Processing Element)がグリッド状に接続されたもの、とのことですが。

hakase
博士

そうじゃ!各PEは、入力Xと固定された重みWを乗算し、累積された和に加算する積和演算を同じクロックサイクルで実行するのじゃ。

roboko
ロボ子

複数のPEを接続して行列乗算を効率的に実行するのですね。入力は左から入り、隣のPEへ移動し、累積和は下へ移動する、と。

hakase
博士

その通り!シストリックアレイは、入力行列と重み行列を入力として受け取るのじゃ。初期化された重みとバイアスを使うらしいぞ。

roboko
ロボ子

記事には、レイヤー1とレイヤー2のパラメータが具体的に示されていますね。W1やb1、W2、b2など。

hakase
博士

ふむふむ。入力と重みのスケジューリングも重要じゃ。入力行列Xを90度回転させて、入力をずらす(各行を1クロックサイクル遅延させる)のじゃ。

roboko
ロボ子

重み行列もずらして転置するのですね。このずれを実現するために、FIFO(first-in-first-out queue)を使用するとのことです。

hakase
博士

そうじゃ!アキュムレータには2つの入力ポートがあり、1つは重みをFIFOに書き込むため、もう1つは前のレイヤーの出力をアクティベーションモジュールから入力FIFOに書き戻すためじゃ。

roboko
ロボ子

バイアスを加算するために、シストリックアレイの各列の下にバイアスモジュールを作成し、バイアスベクトルbを行列のすべての行にブロードキャストするのですね。

hakase
博士

活性化関数にはLeaky ReLUを選択したらしいぞ。Leaky ReLU関数は要素ごとに適用されるのじゃ。

roboko
ロボ子

Leaky ReLUは、zが正の場合はzを、zが負の場合はα * zを出力する関数ですね(α = 0.5)。

hakase
博士

パイプライン処理も重要じゃ。複数の演算をTPUの異なる段階で同時に実行することで、効率を高めるのじゃ。

roboko
ロボ子

ダブルバッファリングの概念も応用されているのですね。2つ目の「シャドウ」バッファを追加し、現在のレイヤーの計算中に次のレイヤーの重みを保持することで、総クロックサイクル数を半分に削減する、と。

hakase
博士

制御ユニットとISA(カスタム命令セット)も作成するらしいぞ。ISAは24ビット長じゃ。

roboko
ロボ子

推論に使用するのと同じアーキテクチャをトレーニングにも使用できるのですね。損失関数には平均二乗誤差(MSE)を選択し、連鎖律を使って各重みの変化が損失にどのように影響するかを計算する、と。

hakase
博士

そうじゃ!順伝播と逆伝播の対称性も利用するのじゃ。逆伝播の最長チェーンは、順伝播と密接に類似しているからの。

roboko
ロボ子

ハードウェアでの微分計算についても触れられていますね。Leaky ReLUを例として、入力が正の場合は1を出力し、負の場合は小さな定数(0.01)を出力する、と。

hakase
博士

シストリックアレイの下にあるすべてのモジュールを統合し、ベクトルを要素ごとに処理するVPU(ベクトル処理ユニット)も作成するのじゃ。

roboko
ロボ子

活性化関数の微分と重みの微分には、順伝播中に計算された活性化(H)が必要なので、すべてのレイヤーの出力を保存するために、統一バッファ(UB)を作成するのですね。

hakase
博士

そうじゃ!そして、勾配降下法の更新ルールを使って、ネットワークをトレーニングするのじゃ。命令セットアーキテクチャは94ビットになるらしいぞ。

roboko
ロボ子

この記事を読むと、TPUの内部構造とニューラルネットワークの実装について、とても良く理解できますね。

hakase
博士

じゃろ?最後にロボ子、TPUと布団は何が違うか分かるか?

roboko
ロボ子

えっと…、TPUはTensor Processing Unitの略で、布団は睡眠時に使うもの、ですよね?

hakase
博士

ブッブー! 正解は、どちらも温かい、じゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search