4 ビット浮動小数点形式 FP4

2026/04/19 2:21

4 ビット浮動小数点形式 FP4

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

概要:

ニューラルネットワークは、大規模な AI モデルのメモリ使用量を最適化するために FP8 および FP4 のような超低精度フォーマットを採用する傾向が高まっています。このトレンドは C 言語と Python ライブラングの双方によって支えられています。Python の

float
は一般的に 64 ビットの二重精度を指しますが、専門的な縮小精度フォーマットが台頭しています。現在最も重要な進展は、1 つのビットを指数部、1 つのビットをマンティス部に用いる 4 ビット浮動小数点数(FP4)の E2M1 サブセットへの採用であり、これは計算タスクに適した非一様値分布を利用することで、従来の一様間隔配置や極端なケース(E3M0 の対数スケールまたは E0M3 の線形スケールなど)とは異なり、限られたメモリに多くのパラメータを圧縮して格納することを可能にします。符号付き 4 ビット数の場合、最初のビットが符号を表し、その後の構成によって値は約 -6 から +6 まで、0.5 刻みで表現でき、指数部がゼロのときに零および小数部分を特別に扱います。Python の
pychop
ライブラリなどのツールが現在これら E2M1 フォーマットを実装していますが、分野は NF4 とような将来のフォーマットへ進化しており、それらは大規模言語モデルに見られる特定の重みの分布にさらに適切に合わせて設計されており、モデルがより複雑になるにつれて計算効率を維持しながら精度も過度に損なわずに行えます。

本文

古くは、浮動小数点数は 32 ビットで格納されていましたが、やがて標準規格として 64 ビットへと移行しました。C プログラミング言語は古い慣習を受け継ぎ、

float
で 32 ビットの浮動小数点数を指し、
double
ではそのビット数が倍である(64 ビット)ものを指しています。一方、Python は最も一般的な浮動小数点形式である C の
double
に相当するものを単に
float
と呼んでいます。

プログラマーたちは、32 ビットの float から 64 ビットの float への移行に感謝していました。精度が高くなることは害がなく、さらに多くの場合、32 ビットから 64 ビットへの変更によって数値的の問題が解消されます(ただしすべてではありません。私がこれまで多数指摘してきたことです)。

しかし、ニューラルネットワークは画期的な変化をもたらしました。それは、より少ない精度の浮動小数点数に対する需要を生み出したのです。これらのネットワークには膨大な数のパラメータが存在するため、パラメータの精度を高めることよりも、メモリ内により多くのパラメータを収めることが重要です。その結果、開発者たちは二倍精度(64 ビット)の代わりに、半分精度(16 ビット)、あるいはそれ以下の FP8(8 ビット)や FP4(4 ビット)のような形式を望みました。本稿では 4 ビットの浮動小数点数について考察します。

それほど高い精度が必要がないのに、なぜわざわざ浮動小数点数を使う必要があるのでしょうか?整数を使えばよいのではないか。例えば、4 ビットを用いれば 0 から 15 までの整数を表すことができます。さらにバイアスを導入して、各値から 7 を引くことで、その 4 ビットが -7 から 8 までを表すようにすることも可能です。しかしながら、より広いダイナミックレンジを持つことは有用であることが判明しました。

FP4 フォーマットの符号付き 4 ビット浮動小数点数では、最初のビットを符号用として使用します。残りの 3 ビットについてはどう扱うべきかという問題が生じます。表記法「ExMm」は、指数部に x ビット、仮数部(マンティッサ)に m ビットを持つ形式を指します。符号付き 4 ビット数の文脈では x + y = 3 となりますが、他の文脈ではその合計はさらに大きくなる場合もあります。例えば、8 ビットの符号付き浮動小数点数の場合、x + y = 7 となります。

符号付き 4 ビット浮動小数点数では、以下の 4 つのパターンが可能です:E3M0、E2M1、E1M2、および E0M3。これらはいずれもどこかで使用されていますが、その中で最も一般的であり、Nvidia のハードウェアでもサポートされているのは E2M1 です。

符号ビット s、指数 e、そして仮数 m を持つ数は、以下の式によって値を持ちます: (−1)^s × 2^(e−b) × (1 + m/2) ここで b はバイアスを表します。バイアスの目的は、e に符号を使用せずに正も負も負の指数を表すようにすることにあります。例えば、b = 1 とし、e が 1、2、3 のいずれであっても、2^(e−b) はそれぞれ 1、2、4 を表します。

バイアスは可能となる数の範囲に影響を与えますが、それらの相対的な間隔には影響しません。どんなバイアス値 b でも、E3M0 フォーマットは指数のみを使用し仮数は使用せず、したがってその可能な値は対数スケール上で一様に分布しています。一方、E0M3 フォーマットは仮数のみを使用するため、その値は線形スケール上で一様に分布します。E1M2 および E2M1 のフォーマットについては、対数スケールも線形スケールも両方において間隔のばらつきがあります。

上記の変換式(s, e, m)を実数に変換することに関する例外として、e = 0 の場合が挙げられます。この場合は、m = 0 が 0 を、m = 1 が ½ を表します。

値の表

FP4 の数全体で 16 つしか存在しないため、それら全てをリストアップすることが可能です。以下に E2M1 フォーマット用の表を示します。

BitssexpmValue
00000000+0
00010001+0.5
00100010+1
00110011+1.5
01000100+2
01010101+3
01100110+4
01110111+6
10001000-0
10011001-0.5
10101010-1
10111011-1.5
11001100-2
11011101-3
11101110-4
11111111-6

この極めて小さな浮動小数点形式でありながら、+0 と −0 のふたつのゼロが存在することに留意してください。これは完全な精度を持つ浮動小数点数と同じようにです。その点については改めて触れます。

PyChop ライブラリ

Python ライブラリ

pychop
は、多様な低精度浮動小数点形式をシミュレートします。上記の表を作成するために pychop を使用した代码如下です:

import pychop

# Pychop からフォーマットのメタデータを取得する。
spec = pychop.MX_FORMATS["mxfp4_e2m1"]
assert (spec.exp_bits, spec.sig_bits) == (2, 1)

def e2m1_value(s: int, e: int, m: int) -> float:
    sign = -1.0 if s else 1.0

    # 不準数/ゼロ
    if e == 0:
        return sign * (m / 2.0)

    # 正規化された数値
    return sign * (2.0 ** (e - 1)) * (1.0 + m / 2.0)

def display_value(bits: int, x: float) -> str:
    if bits == 0b0000:
        return "+0"
    if bits == 0b1000:
        return "-0"
    return f"{x:+g}"

rows = []
for bits in range(16):
    s = (bits >> 3) & 0b1
    e = (bits >> 1) & 0b11
    m = bits & 0b1
    x = e2m1_value(s, e, m)

    rows.append(
        {
            "Bits": f"{bits:04b}",
            "s": s,
            "exp_bits": f"{e:02b}",
            "m": m,
            "Value": display_value(bits, x),
        }
    )

# テーブルを整形して出力する。
header = f"{'Bits':<4} {'s':>1} {'exp':>3} {'m':>1} {'Value':>6}"
print(header)
print("-" * len(header))
for row in rows:
    print(
        f"{row['Bits']:<4} " f"{row['s']:>1} "
        f"{row['exp_bits']:>3} "
        f"{row['m']:>1} "
        f"{row['Value']:>6}"
    )

その他のフォーマット

FP4 のみが 4 ビット浮動小数点形式の唯一のものではありません。実際に使用されているフォーマットの数は驚くほど多いです。次回の記事で、別のフォーマットについても取り扱う予定です。

追記: 次の記事では、LLM の重みの分布に最もよく一致する表現可能な数値を持つフォーマットである NF4 について議論します。

同じ日のほかのニュース

一覧に戻る →

2026/04/19 5:54

『好みの色を選べる:NIST の科学家らが、任意の波長のレーザーを開発』

## Japanese Translation: NIST の科学者と協力者が、Scott Papp という NIST の物理学者をリーダーとして発表された「Monolithic 3D integration of tantalum pentoxide nonlinear photonics」という論文に詳述されているように、特殊な材料の複雑なパターンをシリコンウエハーに堆積させることで、統合光子デバイスのチップ作成における画期的手法を開発しました。この革新は、サイズ、コスト、電力に関する重要な歴史的制約を解決し、量子コンピューティングなどの高度な技術用のコンパクトで高品質なレーザーの実現を可能にします。酸化シリコン、リチウムニオブате、タンタル五酸化物(単一のレーザー色を多様な波長に変換しつつ過度の発熱を抑える材料)を含むマルチレイヤーアプローチを用いることで、チームはビールコスター程度のサイズのパターンに、約 10,000 の光子回路を備えた指先ほどの大きさのチップを約 50 個集積することに成功しました。以前是高品質なレーザーは特定の波長(例:980 nm の赤外線)のみに存在し、量子技術の利用が専門的な研究室に限定されていましたが、この画期的進展により、携帯型光原子時計や地震予測システムといった現場での応用が可能になります。光原子時計や量子コンピュータなどの量子技術には、ルビジウム(780 nm の赤)やストロンチウム(461 nm の青)など、異なる原子に合わせた特定の色のレーザーが多く必要とされますが、この新技術はそれを効果的に解決します。この技術は、効率的な光処理を必要とする産業において量子デバイスへのアクセスを民主化するだけでなく、研究機関と Octave Photonics などのスタートアップ間の協力を促進します。*Nature* に掲載されたこれらの発見は、光子機能と電気システムを統合する道を開き、人工知能から暗物質調査に至るまでの分野を変革する可能性があります。これにより、複雑な科学ツールが従来の実験室の外でも手頃な価格で利用できるようになります。

2026/04/19 1:26

ボーイング社の B-52 ストラトフォートレス爆撃機に搭載された、スタートラッカー内の電気式傾斜計。

## Japanese 翻訳: アストロコンパスは、1960 年代の B-52 爆撃機向けに開発され、乗組員が手動で行っていた複雑な三角法の計算を自動化し、天体航法を画期的に変化させました。ジャミングに脆弱な現代デジタルシステムと異なり、この電気機械装置は、外部デジタル信号を使用せずに、シンクロン(変送機)および光増倍管を用いて恒星を追跡する信頼性の高い抗ジャミング方式を提供しました。恒星位置の物理的な追跡と天球のアナログモデルを組み合わせることで、システムはパイロットにリアルタイムでの航法更新を通じて正確な位置を決定することを可能にしました。 公式空軍年誌からのデータに基づいて動作し、この装置は時間や恒星の赤緯などの入力をノブで調整するマスターコントロールパネルを搭載していました。これらの設定は、安定したジャイロプラットフォームとガラスドーム型望遠鏡を含む組立体内の 19 のコンポーネントを駆動しました。アストロコンパスは「位置線」技術を使用し、測定された恒星の高度を計算された期待値と比較することで航空機の軌跡を特定しました。この自動化により、困難な手動手順はスムーズな電気機械プロセスへと変換され、爆撃機艦隊が重要な航法任務において、作戦能力とミッション安全性を大幅に向上させました。

2026/04/19 4:19

Claude のデザインに関する考察と感情

## 日本語翻訳: 要約:中心的な論点是、Figma の専用でロックされたファイル形式がネイティブのスキーマを持たず、深いエイリアシングおよび未文書化されたプリミティブに依存を迫られること(例:946 色の変数を含むネストされたグループのあるファイル)であり、これがコードトレーニング済みの AI モデルが設計論理を正確に解釈することを妨げる。LLM はこれらの特定の不透明な Figma 構造ではなくコードに対してトレーニングされているため、「Figma Make」のような現在のツールは、設計ファイルが依然として規範的であると示唆することでユーザーを誤導し、実質的にワークフローを新しいエージェント時代と不相容の専用エコシステムにロックしている。その対応として、Claude Design とような新たなツールは、「HTML と JS をすべて徹底する」というアプローチを取り、コードと直接統合してレポジトリから AI エージェントへ供給される統一されたフィードバックループを創出する。著者は業界における分岐の予測を行う:一方は誠実なコード連結による生産ツールへの道筋、他方は Photoshop に似た制約のない探求環境への道筋となる。クリーンなコードからのこの転換を批判しつつも、著者は Sketch などの競合業者に対してネイティブ機能に安住するのではなく、粒子エフェクトやメッシュ変換などの特定機能を備えた革新を促し、Figma の形式が AI エージェントに必要なトレーニングデータへの含まれにくさを指摘している。 ## テキストを翻訳 (必要に応じて;そうでない場合は元のものを繰り返す): ## Summary: The core argument is that Figma's proprietary, locked-down file format lacks a native schema, forcing reliance on deep aliasing and undocumented primitives (exemplified by files containing 946 color variables within nested groups) that prevent code-trained AI models from accurately interpreting design logic. Because LLMs were trained on code rather than these specific, opaque Figma structures, current tools like "Figma Make" are misleading users by suggesting the design file remains canonical, effectively locking workflows into a proprietary ecosystem incompatible with the emerging agentic era. In response, new tools like Claude Design adopt an "HTML and JS all the way down" approach, integrating directly with code to create a unified feedback loop where repositories feed AI agents. The author predicts a fork in the industry: one path toward honest, code-linked production tools, and another for unconstrained exploration environments similar to Photoshop. While criticizing this shift away from clean code, the author also urges competitors like Sketch to innovate with specific features (particle effects, mesh transforms) rather than resting on native capabilities, noting that Figma's format prevents its inclusion in necessary training data for AI agents.