【AI取扱説明書⑥】なぜAIは速い整数ではなく浮動小数点を使う?65,536通りの16ビット(BF16)と256通りの8ビット(FP8)で壊れない秘密
作成日:
更新日:

【AI取扱説明書⑥】なぜAIは速い整数ではなく浮動小数点を使う?65,536通りの16ビット(BF16)と256通りの8ビット(FP8)で壊れない秘密


🔧 論旨

コンピュータやプログラミングに触れたことがある方ほど、AI の中身を知ったときに 「ちょっと待って! CPU や回路は『整数』で計算した方が圧倒的に速くて省電力なのに、なぜ AI はわざわざ重たい『浮動小数点(小数)』を使うの? しかも 16 ビットなんて 65,536 通り、8 ビットなんてファミコンみたいな 256 通りしかないのに、なんで知識が壊れないの?」 と強い疑問を抱くはずです。

結論から言うと、AI は 「鍛えるとき(学習)は 0.00001 単位の微調整と自動ズームができる浮動小数点を使い、完成して動かすとき(推論)は高速な整数(INT8 / INT4)へ丸め込む」 という見事な二刀流で動いています。さらに最新の AI 学習では、重要な原本と集計器だけを 32 ビット(約 42.9 億通り)の金庫で守りつつ、計算の 9 割を占める掛け算だけを「0 付近に目盛りを全集中させた 16 ビット(BF16)」や「32 個単位で専用虫眼鏡を当てる 8 ビット(MXFP8)」へ圧縮することで、精度を落とさず計算速度と脳の規模を数倍に引き上げています。

🔧 合わせて読みたい深まる関連情報
🔧 対象となる方
  • C 言語やアセンブラ、組み込み開発などの経験があり、「なぜ AI は計算の速い整数や固定小数点ではなく、浮動小数点を使うのか?」 と不思議に思っている方

  • AI ニュースや GPU スペック表によく出てくる 「FP32」「FP16」「BF16」「FP8」「INT8 / INT4」 の違いを、仕組みの根っこからスッキリ理解したい方

  • 「16 ビット= 65,536 通り、8 ビット= 256 通りしかない器で、なぜ何千億パラメータもの繊細な知識が潰れないのか」 その数学と回路のトリックを知りたい方

  • NVIDIA の H100(Hopper)や Blackwell 世代の GPU がなぜ AI 覇権を握っているのか、ハードウェア設計の強みを知りたい方

吹出しアイコン

前回の話で、AI の頭の中が [0.024, -0.118, 0.891, ...] みたいな小数だらけなのは分かったぞい。でものう、コンピュータちゅうのは昔から「小数」より「整数」で計算した方が回路も単純で圧倒的に速いはずじゃろ? なんでわざわざ小数点以下なんか使うんじゃ?

吹出しアイコン

まさにそこがコンピュータ好きの方ほど引っかかる一番面白いポイントなんです!まずは「AI の中で小数点以下が何に使われているのか」、そして「整数部と小数点以下に役割分担はあるのか」から順番に見ていきましょう。


AIで小数点以下は何に使われているのか

ほぼ0に近い小数で動く4つの主な用途

大規模言語モデル(LLM)や画像認識などのディープラーニングの内部を覗くと、飛び交っている数値のほとんどは 100 や 5000 のような大きな整数ではなく、-1.0 から +1.0(あるいは 0.0 から 1.0)の間にある「0 に近い小数」 です。

AI の世界において、この小数点以下の細かい数字は主に次の 4 つの役割 で使われています。

🔧 🔬 AIの脳内で『小数点以下』が担っている4つの仕事

① 神経回路の「重み(Weight)」と「バイアス(Bias)」 :AI の脳は、無数の人工ニューロン(神経細胞)が網の目のように繋がってできています。この繋がりの強さを表すのが「重み」で、0.0234 や -0.1892 といった小数で記録されています。流れてきた信号にこの小数を掛け算することで、「この情報は大事だから強めよう」「ここは邪魔だからマイナスで抑えよう」という絶妙なボリューム調整を行っています。

② 「確率」の表現 :AI が写真の被写体を判定して「猫である確率 0.85(85%)、犬である確率 0.12(12%)」と出したり、前回見たように「次に来る 1 語の確率分布(合計 1.0)」を計算したりするときに小数がそのまま使われます。

③ 言葉や画像の「意味の座標(ベクトル)」 :「猫」や「コーヒー」といった言葉を [0.12, -0.45, 0.88, ...] という数千個の小数の並び(座標)に変換し、小数点以下のわずかな差で「意味の近さやニュアンスの方向」を測っています。

④ 学習時の「超微小なチューニング(勾配・学習率)」 :AI を賢く鍛える(学習させる)ときは、お手本との誤差を減らすように何百億個もの「重み」を少しずつ書き換えます。このとき一気に 1 や 2 も動かすと知識が崩壊してしまうため、0.0001 や 0.00001 という極小の小数(学習率)を使って、顕微鏡レベルの微調整を何百万回も繰り返します。

符号と指数と仮数に分ける浮動小数点の構造

ここで、「AI は整数部と小数点以下で別々の意味(役割)を持たせているの?」 という疑問が湧きますよね。

これに対する正確な答えは、「AI の数学的な思考としては役割を分けておらず、一続きの滑らかな実数として扱っている(むしろ掛け算を何十層も重ねたときに数値が天文学的に爆発するのを防ぐため、意図的に -1.0 〜 +1.0 の小数点以下の世界へ正規化して閉じ込めている)」 です。

ところが、それを記録する コンピュータのメモリ構造(浮動小数点数:Floating-Point Number) の側では、限られたビット数を賢く使うために、1 つの小数を次の 3 つのパーツに明確に役割分担 して保存しています。

数値=(−1)符号部×(1.仮数部)2×2指数部−基準値\text{数値} = (-1)^{\text{符号部}} \times (1.\text{仮数部})_2 \times 2^{\text{指数部} - \text{基準値}}
パーツ名AI における役割ビット数を増やしたときの効果
符号部(Sign)プラスかマイナスか(信号の促進か抑制か)常に 1 ビット(0 なら正、1 なら負)で固定。
指数部(Exponent)「桁のスケール(大きさの範囲)」 を担当ここが多いほど、極小の数から巨大な数までパンクせずに表現でき、学習中の計算崩壊が起きにくくなる。
仮数部(Mantissa)「小数点以下の目盛りの細かさ(精度)」 を担当ここが多いほど、隣の数値とのわずかな違いを緻密に区別できる。

実は、この 「桁の広さ(指数部)」と「目盛りの細かさ(仮数部)」のどちらにビットを割り振るか という設計こそが、現代の AI 専用チップの性能を決める最大の勝負所になっているのです。


なぜ速い整数ではなく浮動小数点を使うのか

微分の超微小な修正と自動ズームの壁

おっしゃる通り、純粋な電子回路としては 浮動小数点よりも整数(INT)の方が回路面積も小さく、計算速度も速く、消費電力も圧倒的に少なくて済みます。昔のゲーム機や組み込みマイコンの開発では、小数を扱いたいときでも「すべての数値をあらかじめ 100 万倍して整数のまま計算し、最後に桁を戻す(固定小数点方式)」という高速化テクニックがよく使われていました。

それなのに、なぜ AI の学習では整数(固定小数点)を使わず、浮動小数点を使うのでしょうか? そこには整数ではどうしても越えられない 3 つの物理的・数学的な壁 があります。

🔧 🧱 AIの学習を『整数』だけでは回せない3つの理由

① 「1 未満の超微小な修正」が階段に阻まれる(微分・勾配降下法の壁) :AI の学習は、なだらかな坂道の傾き(微分)を測りながら、0.00001 ずつ重みを動かして谷底の正解を探す作業です。もし重みが -128 〜 +127 の整数(階段)だったら、「0.0001 だけ増やしたい」と思っても 0 の次は 1 しかありません。切り捨てれば 永遠に 0 のまま一歩も学習が進まず、無理やり 1 動かせば 修正しすぎて既存の知識が吹き飛んでしまう のです。

② 「普段は極小、たまに巨大」という桁のギャップ(ダイナミックレンジの壁) :「じゃあ最初から全体を 1 億倍して整数にすればいいじゃないか!」と思うかもしれません。しかし AI の計算中には、普段は 0.0001 のような極小の値を精密に扱いたいのに、特定のニューロンで突発的に 10000 のような巨大な数値(外れ値)が飛び出してくる性質があります。刻み幅が常に一定の整数(固定小数点)では、細かい数に合わせると巨大数で桁あふれ(オーバーフロー)を起こし、巨大数に合わせると細かい数がすべて 0 に潰れてしまいます。その点、浮動小数点は「指数部」のおかげで 0 に近いときはミクロの目盛りに自動ズームインし、大きい数が来たときは自動でズームアウトしてパンクを防ぐ ことができます。

③ 何十層もの掛け算でビット幅が雪だるま式に膨張する :8 ビットの整数同士を 1 回掛け算すると結果は最大 16 ビットになり、もう 1 回掛けると 32 ビット、64 ビット……と層を通過するたびに必要な桁数が倍増します。毎回割り算して桁を戻す(再スケーリング)手間を入れると、せっかくの整数の速さが帳消しになってしまうのに対し、-1.0 〜 +1.0 を中心とする浮動小数点なら指数部が自動で桁を吸収しながら何十層でも突き進めます。

実は学習は小数で推論は整数という二刀流

吹出しアイコン

なるほど、AI を鍛える「学習」のときに滑らかな坂道と自動ズームが要るから小数を使うんじゃな! じゃあ、もう勉強が終わって完成した AI を使うときも、ずっと重たい小数のまま計算しとるんか?

吹出しアイコン

いいえ!そこがまさに今の AI 技術の面白いところで、「もう重みを書き換えない完成後の AI(推論)」では、おっしゃる通り 高速で省エネな「整数」へ変換して動かす技術(量子化:Quantization) が大活躍しているんです!

AI の一生を「① 学習(AI を作る期間)」と「② 推論(完成した AI を使う期間)」に分けて整理すると、数値形式の使い分けが一目でわかります。

データ形式全体サイズ指数部(桁の広さ)仮数部(細かさ)AI での主な活躍場所と特徴
FP32(単精度小数)32 ビット8 ビット23 ビット約 42.9 億通り。2017 年頃までの標準。極めて正確だがメモリを大量に食うため、現在は「重みの原本」や「足し算の集計器」の保護用として活躍。
FP16(半精度小数)16 ビット5 ビット10 ビット65,536 通り。メモリ半減で速いが、指数部が 5 ビット(最大値 65,504)と狭く、巨大 AI の学習中に桁あふれエラーが起きやすい弱点があった。
BF16(Brain Float)16 ビット8 ビット7 ビット現在の AI 学習の王道(65,536 通り)。Google Brain が AI 専用に考案。FP32 と同じ「桁の広さ(8 ビット)」を死守し、仮数部を大胆に削った形式。
FP8(8 ビット小数)8 ビット4 または 5 ビット3 または 2 ビット最新データセンター GPU の切り札(256 通り)。H100 や Blackwell 世代で実用化された超高速学習・推論フォーマット。
INT8 / INT4(整数)8 / 4 ビットなし(整数)なし(整数)完成後の AI を動かす(推論)軽量化の主役。小数をあきらめて -128〜127(INT8)や 16 段階(INT4)の整数へ丸め込み、パソコンやスマホでも動かせるようにする技術。

さらにハードウェア側の進化として、NVIDIA の GPU に搭載されている Tensor コア(行列演算専用回路) が浮動小数点専用の超並列回路を積んだことで、データセンターでは小数そのものも整数に迫る猛スピードで計算できるようになっています。


わずか16ビットの器で知能が壊れない4つの秘密

ここで、鋭い方なら必ず次の疑問にぶつかります。

「32 ビット(約 42.9 億通り)なら分かるけど、主流の 16 ビット(BF16)ってたったの 216=65,5362^{16} = 65{,}536 通りしか数字を表せないよね? 昔のパソコンの 6 万 5 千色カラーくらいの粗さで、どうして人間の言葉の繊細なニュアンスが壊れないの!?」

実は、現在の巨大 AI がたった 65,536 通りの器で賢く学習できる裏には、4 つの巧妙なカラクリ が隠されています。

原本と集計器を32ビットで守る混合精度学習

1 つ目の秘密は、「16 ビットで学習している」と言っても、実は一番大事な金庫と電卓の受け皿には、今もこっそり 32 ビット(FP32)を使っている ということです。これを 「混合精度学習(Mixed Precision Training)」 と呼びます。

もし重みの原本まで 65,536 通りの 16 ビットにしてしまうと、0.00001 のような微小な学習修正を足した瞬間に、目盛り未満の端数として切り捨てられてしまい(アンダーフロー)、学習が止まってしまいます。そこで実際の AI 内部では、次のように役割を分担しています。

処理パート使うビット数なぜその精度にするのか
① 大量の掛け算(行列演算)16 ビット(BF16)AI の計算時間の 9 割以上 を占める一番重い作業場。ここを 16 ビットにするだけで、データ転送量が半減し計算速度が数倍に跳ね上がる。
② 足し算の集計皿(Accumulator)32 ビット(FP32)16 ビット同士を何千回も掛け算して足し合わせる「受け皿」は、小さな数の積み重ねが消えないよう 32 ビットの広い器で受け止める。
③ 重みの原本(Master Weight)32 ビット(FP32)微小な修正(0.00001 等)を確実に蓄積するため、大元のパラメータは 32 ビットの金庫で保管し、掛け算する瞬間だけ 16 ビットにコピーして送り出す。

つまり、「知識を蓄える金庫と集計器は 42.9 億通りの 32 ビットで厳重に守り、一番時間がかかる掛け算の作業場だけを 16 ビットにしてスピードを稼いでいる」 のが真相なのです。

ゼロ付近へ目盛りの半分を集める対数分布

2 つ目の秘密は、65,536 個の目盛りの「並び方」にあります。

もし -10,000 から +10,000 までの間に均等に 65,536 個の目盛りを振ったら、1 目盛りあたり約 0.3 刻みのガタガタな定規になってしまい、AI が一番よく使う -1.0 〜 +1.0 の間にはたった 6〜 7 個しか数字が置けません。

ところが、浮動小数点は 2 の何乗 という指数で目盛りを作るため、0 に近づくほど目盛りの密度が倍々に増えていく(対数分布になる) という魔法の性質を持っています。実際に BF16(全 65,536 パターン)のビット配置を計算してみると、驚くべき偏り方をしています。

🔧 📏 BF16(全65,536通り)の目盛りはどこに集まっている?

・ 表現できる最大値 :約 ±3.39×1038\pm 3.39 \times 10^{38} (38 桁というとてつもない巨大数までパンクしない!)

・ -1.0 〜 +1.0 の間にある目盛り数 :なんと 32,512 通り(全パターンの約 49.6% = 約半分!) がこの狭い範囲だけに密集しています。

・ -0.01 〜 +0.01 の極小領域にある目盛り数 :AI の重みが最も密集するこのわずか 2 センチ幅のような極小の隙間だけでも、実に 約 30,800 通り(全体の約 47%) もの目盛りが超高密度で詰め込まれています。

AI の重みはほとんどが 0 のすぐ近くに集まっているため、この「0 付近への目盛り全集中」とピタリと噛み合い、65,536 通りしかなくても AI にとってはシルクのように滑らかな数値空間として機能するのです。

メモリ帯域の壁とニューロン数を倍増させる効果

そして 3 つ目・ 4 つ目の秘密が、現代の AI 開発を支配している 「メモリの渋滞(メモリウォール問題)」と「脳の規模の法則」 です。

現在の巨大 AI は、計算回路のスピードよりも 「メモリ(VRAM)から計算回路へ重みデータを運んでくる道路の渋滞」 が最大のボトルネックになっています。たとえば 700 億パラメータ(70B)の AI モデルを置くだけでも、32 ビット(1 個 4 バイト)なら 約 280GB のメモリが必要ですが、16 ビット(1 個 2 バイト)にすれば半分の 約 140GB で済み、データの運搬時間も一気に半分になります。

さらに AI の研究で、非常に面白い法則が判明しています。同じ 100GB のメモリ予算が与えられたとき、次の 2 つの AI を戦わせると、常に後者(②)の方が圧倒的に賢くなる のです。

  1. 32 ビット(約 42.9 億通りの超高精度) で、250 億個 のニューロンを持つ AI
  2. 16 ビット(65,536 通りの適度な精度) で、500 億個 のニューロンを持つ AI

人間の脳の神経細胞も、実は 1 個ずつの電気信号はかなりアバウトでノイズ混じりですが、数百億個が集まってアンサンブル(合議)することで深い知性を生み出しています。AI もまったく同じで、1 個のニューロンの下の方の細かい桁を 42.9 億通りまで緻密に計算しても、そこは単なる「誤差ノイズ」になって賢さに貢献しません。むしろ 16 ビットへ丸めて適度な大雑把さを与え(これが丸暗記=過学習を防ぐ効果も持ちます)、浮いたメモリでニューロンの総数(パラメータ数)を 2 倍に増やした方が、AI の知能は劇的に高まる のです。


極小8ビット学習を実現する3つの工夫

吹出しアイコン

16 ビットの秘密はすごくよく分かったわ!でも最近の最新 GPU では、さらに半分の「8 ビット浮動小数点(FP8)」で巨大 AI を学習させているんでしょう? 8 ビットなんて 28=2562^8 = 256 通りしかないじゃない! いくらなんでも 256 通りじゃパンクするか全部 0 に潰れちゃうわよ!

256 通りといえば、昔の 8 ビットパソコンや初期のゲーム機のカラーパレットと同じ数です。普通に計算したら一瞬で崩壊しますが、NVIDIA の Hopper(H100)や最新の Blackwell 世代では、3 つの緻密なトリック を組み合わせることで、たった 256 通りの FP8 で数千億パラメータの学習を成立させています。

行きはE4M3で帰りはE5M2の器使い分け

8 ビットのうち 1 ビットはプラス・マイナスの「符号」に取られるため、残りは 7 ビット しかありません。7 ビットでは「桁の広さ(指数部:E)」と「目盛りの細かさ(仮数部:M)」を 1 つの形式で両立するのは不可能です。

そこで FP8 では、AI の学習工程の 「行き(順伝播:予測を出す計算)」 と 「帰り(逆伝播:誤差から修正量を求める反省会)」 で、ビット配分が違う 2 種類の 8 ビット形式を途中で切り替える という驚きの作戦を採っています。

FP8 の種類7 ビットの内訳表せる最大値役割と驚きの工夫
E4M3指数 4 / 仮数 3±448【行き(順伝播・推論)専用】 数値の範囲が落ち着いている重みや信号の計算に使用。さらに AI 向け仕様(OCP / NVIDIA E4M3FN)では、通常の浮動小数点にある 「無限大(Infinity)」のビット枠すら廃止して普通の数値表現へ転用 し、本来 ±240 だった上限を ±448 まで執念で広げています。
E5M2指数 5 / 仮数 2±57,344【帰り(逆伝播の勾配)専用】 小数点以下は 2 ビット(4 段階)と粗い代わりに、±57,344 まで耐えられる広い器。突発的な巨大数が出やすい「誤差の勾配」の計算を受け止めます。

動的倍率調整と32個単位のMXFP8分割

それでも、E4M3 の上限はたったの 448 です。もし計算したいデータ群が 0.0001 〜 0.0005 だったら全部 0 に潰れますし、1000 が来たら即パンクします。これを防ぐ残りの 2 つのトリックが 「動的スケーリング(虫眼鏡の移動)」 と 「ブロックスケーリング(MXFP8)」 です。

🔧 🔍 256通りの小さな定規を使いこなす『虫眼鏡』の進化

① 動的スケーリング(Per-Tensor Scaling) :データをそのまま FP8 に入れるのではなく、事前にデータの塊の中で一番大きな値(絶対値最大:amax)を測り、「その最大値が 448 のギリギリ手前にピタッと収まるような倍率(FP32 の正確なスケール係数)」 を全体に掛けてから FP8 に変換します。8 ビットで超高速に掛け算したあと、32 ビットの集計皿で受け止めてから先ほどの倍率で割り算して元の桁に戻す――つまり 「256 目盛りの小さな定規に、毎回ベストな倍率の虫眼鏡を添えて当てている」 のです。

② ブロックスケーリング(MXFP8:32 個単位の小部屋分割) :ところが①の方法には弱点がありました。100 万個のデータの中に、99 万 9,999 個の 0.1 と、たった 1 個だけの異常な巨大数 10,000(外れ値) が混ざっていた場合、その 1 個の 10,000 がパンクしないように全体を縮小すると、残り 99 万 9,999 個の小さなデータがすべて目盛り未満になって 0 に消えてしまうのです。そこで最新の Blackwell 世代(MXFP8:Microscaling FP8)などでは、100 万個全体を 1 つの倍率で縛るのをやめ、「隣り合う 32 個ずつの極小グループ(ブロック)」に小部屋分けして、32 個ごとに専用の倍率(8 ビット指数 E8M0)を持たせる 方式へ進化しました。これなら 10,000 が出ても影響を受けるのは同じ小部屋の 31 個だけで済み、他の何百万個ものデータは自分たちにピッタリの 256 目盛りをフル活用できます。最新 GPU はこの「32 個ごとに虫眼鏡を切り替えながら 8 ビットで掛け算する処理」を半導体回路の中で全自動で一瞬でやってのけます。


まとめ:AIの数値表現から見える設計の勘所

今回見てきた AI の数値の世界を振り返ると、私たちが普段パソコンや AI サービスを選ぶときにも役立つ本質が見えてきます。

🔧 💡 AIの小数・ビット設計から分かる3つのポイント

① AI は「学習=浮動小数点(BF16 / FP8)」「推論=整数(INT8 / INT4)」の適材適所で動いている :微分の微調整が必要な育成期間だけ自動ズーム付きの浮動小数点を使い、完成後は軽快な整数へ丸め込むことでスピードと省電力を両立しています。

② 65,536 通りや 256 通りで壊れないのは「32 ビットの金庫+ 0 付近への対数集中+ブロック虫眼鏡」のおかげ :単体で戦っているのではなく、原本と足し算の受け皿を 32 ビットで守りつつ、一番重い「掛け算の瞬間」だけを極限までスリム化しています。

③ AI の性能を決める真のボトルネックは「メモリ容量とメモリ帯域(データの通り道)」にある :1 個あたりのビット数を半分に削れば、同じメモリにより巨大な脳(パラメータ数)を載せられ、データの運搬速度も倍増します。手元の Mac や PC でローカル AI を動かすときに「CPU のクロック数」以上に 「メモリ容量(GB)とメモリ帯域幅(GB/s)」 が効いてくるのも、まったく同じ理由です。

吹出しアイコン

AI さんは一番よく使う 0 のまわりに目盛りをギュギュッと半分も集めて、大事な金庫は 32 ビットでしっかり守っているんでちぃね!猫様も大好きなカリカリの袋だけは 64 ビットの厳重金庫で守ってほしいでちぃ🐾

さて、32 ビット → 16 ビット → 8 ビットと削ってきた人類の執念は、ついに 「だったら重みを -1 と 0 と +1 の 3 択(1.58 ビット)だけにして、重い『掛け算』そのものをこの世から消し去ってしまえばいいじゃないか!」 という究極の領域へ到達しました。

続く 第 7 弾(掛け算を捨てた『1.58 ビット AI(BitNet)』の衝撃!) では、掛け算が足し算・引き算だけに変わる 「1.58 ビット AI(BitNet b1.58)」 の仕組みと、最新 GPU で動かすと逆に損をする意外なハードウェアの壁、そして我が家の Intel 最終世代 iMac(Core i5 / メモリ 64GB)で実際にローカル AI を選ぶときのリアルな比較をお届けします!

ふかふかの場所で気持ちよさそうに目を細めてくつろぐノルウェージャンフォレストキャット

▲ 適度な「丸め」で力を抜くのが、AI も猫様も賢く長持ちする秘訣です