「BitNet b1.58」の版間の差分
Administrator (トーク | 投稿記録) 編集の要約なし |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| 1行目: | 1行目: | ||
'''BitNet b1.58'''とは、2024年2月末に[[マイクロソフト]]が発表したパラメータを3値(-1, 0, +1)で表現する超軽量で超高速な1ビットLLMアーキテクチャです。「[[1bit LLM]]」とも呼ばれます。 | '''BitNet b1.58'''とは、2024年2月末に[[マイクロソフト]]が発表したパラメータを3値(-1, 0, +1)で表現する超軽量で超高速な1ビットLLMアーキテクチャです。「[[1bit LLM]]」とも呼ばれます。 | ||
業界をあげて「[[bfloat16]]だ」「[[FP8]]だ」とデータサイズの削減を続けた結果、ついにパラメータが取り得る値は3種類(-1, 0, 1) | 業界をあげて「[[bfloat16]]だ」「[[FP8]]だ」とデータサイズの削減を続けた結果、ついにパラメータが取り得る値は3種類(-1, 0, 1)になりました。なお内部的には2ビットで3値を保持する「1.58ビット」を採用しています。2ビットだと4値を表現できますがゼロを表現するために3値だけを使うようにしているようです。 | ||
通常、[[ニューラルネットワーク]]の[[内積]]計算は各要素の[[乗算]]とその結果の[[加算]]から成り立ちます。例えば、ベクトル <math>( \mathbf{a} = [a_1, a_2, a_3] ) </math>と <math>( \mathbf{b} = [b_1, b_2, b_3] )</math> の内積は次のように計算されます。 | 通常、[[ニューラルネットワーク]]の[[内積]]計算は各要素の[[乗算]]とその結果の[[加算]]から成り立ちます。例えば、ベクトル <math>( \mathbf{a} = [a_1, a_2, a_3] ) </math>と <math>( \mathbf{b} = [b_1, b_2, b_3] )</math> の内積は次のように計算されます。 | ||
2026年4月17日 (金) 07:59時点における版
BitNet b1.58とは、2024年2月末にマイクロソフトが発表したパラメータを3値(-1, 0, +1)で表現する超軽量で超高速な1ビットLLMアーキテクチャです。「1bit LLM」とも呼ばれます。
業界をあげて「bfloat16だ」「FP8だ」とデータサイズの削減を続けた結果、ついにパラメータが取り得る値は3種類(-1, 0, 1)になりました。なお内部的には2ビットで3値を保持する「1.58ビット」を採用しています。2ビットだと4値を表現できますがゼロを表現するために3値だけを使うようにしているようです。
通常、ニューラルネットワークの内積計算は各要素の乗算とその結果の加算から成り立ちます。例えば、ベクトル と の内積は次のように計算されます。
しかし、1bit LLMでは乗算器が不要になり加算器だけで行列積の計算が行えるようになります。例えば、行列と の積を計算する場合、各要素は次のように計算されます。
これにより
- GPUの回路の99%くらいが使われなくなる
- 三択の分岐はGPUよりCPUの方が強い
- GPUの並列性は有用なのでコア数勝負ではまだCPUより強い
- GPUやCPUに代わるデバイスが登場する可能性がある
1bit LLMは 最近の人工知能でよく使われているバーテックスシェーダー系の行列演算メインの回路ではなく、 古典的なGPGPUで使われたピクセルシェーダー系の技法(回路)を使えば爆速な気がする。