Agentic OS 技術スタックを下から読む 第32回:賢さを、より少ないビットで積む ―― 量子化と、近似の取引
前回は、外の現場の第二面として、失敗を戻せる形に保つ設計を見ました。外へ出た処理は、ただ速く進めばよいわけではありません。間違えたときに止まり、戻り、やり直せる必要があります。
Agentic OS 技術スタックを下から読む 第32回:賢さを、より少ないビットで積む ―― 量子化と、近似の取引
土台へ降りる
前回は、外の現場の第二面として、失敗を戻せる形に保つ設計を見ました。外へ出た処理は、ただ速く進めばよいわけではありません。間違えたときに止まり、戻り、やり直せる必要があります。
今回は、そこからいったん土台へ降ります。
これまで見てきた記憶、編成、安全、評価、外の現場は、すべて同じ前提に乗っていました。賢さを、十分に安く積めることです。手元でも、遠くの機械でも、何度も動かせることです。
その前提を支える細部のひとつが、量子化です。これは、モデルの中身を、より少ないビットで持つ技術です。賢さそのものを作り替える話ではありません。同じ数の山を、より狭いメモリに置き、より少ない運搬で動かす話です。
モデルの中身は数の山です
モデルの中身は、つきつめれば膨大な数の集まりです。学習で決まった重みが、何十億個と並んでいます。
重みとは、入力された数をどれだけ強めるか、弱めるかを決める係数です。たとえば、ある層に入ってきた数に重みを掛け、その結果を足し合わせます。それを何層も繰り返すことで、次の単語や次の判断が出ます。
つまり、モデルを動かすとは、入力をこの数の山に通すことです。
ここで効いてくるのが、一つひとつの重みを何ビットで持つかです。高い精度では、一つの数を三十二ビットや十六ビットで持ちます。三十二ビットなら、一つの重みに32個の0か1を使います。十六ビットなら16個です。
これを八ビットにすれば、使う場所は半分以下になります。三十二ビットから八ビットなら、四分の一です。四ビットなら八分の一です。さらに攻めて二ビットにすれば、三十二ビットの十六分の一です。
中身の数の個数は同じです。並び方も同じです。ただし、一つの数を表すために使う目盛りを減らします。これが量子化の出発点です。
なぜ小さくすると速くなるのか
ビットを削ると、まずメモリの使用量が減ります。これは分かりやすい効果です。三十二ビットの重みを八ビットにすれば、同じ個数の重みが四分の一の場所に収まります。
しかし、それだけではありません。もっと大きいのは、運ぶ量が減ることです。
モデルを動かすとき、重みはメモリから計算する場所へ運ばれます。計算する場所は、届いた数を掛けたり足したりします。ところが、大きなモデルでは、計算そのものよりも、数を運ぶことが詰まりやすくなります。
計算する力は余っているのに、必要な重みがまだ届かない。すると、計算する場所は待ちます。この待ち時間が積み重なると、全体の速さを決めてしまいます。
ビットを半分にすると、運ぶ量も半分になります。三十二ビットを八ビットにすれば、運ぶ量は四分の一です。すると、同じ通り道で、同じ時間により多くの重みを届けられます。
ここでは、置き場所、運搬、速さがつながっています。小さく持てるから、狭い場所に入ります。小さく運べるから、待ち時間が減ります。待ち時間が減るから、同じ機械でも速く動きます。
そして、ある境を越えると意味が変わります。たとえば必要なメモリが一ギガバイトを切ると、遠くの大きな機械ではなく、手のひらの機械に載せられる場面が出ます。これは単なる節約ではありません。動く場所そのものが変わります。
失われるのは細かな目盛りです
ただし、ただ小さくなるわけではありません。ビットを削るほど、数を表す目盛りは粗くなります。
三十二ビットでは、かなり細かな差を表せます。0.1234と0.1235のような近い数も、別の値として持てます。八ビットになると、使える値の種類が大きく減ります。四ビットならさらに減ります。二ビットでは、表せる段階はごく少数です。
そのため、本来の重みを、いちばん近い粗い目盛りへ丸めます。0.1234をそのまま持てないなら、近くの0.125に置きます。あるいは0.12に置きます。どちらにしても、少しずれます。
一つの重みだけを見れば、このずれは小さいかもしれません。けれど、モデルの中には何十億個もの重みがあります。すべてに小さなずれが乗ります。その重みを通った結果が次の層へ行き、また次の層へ行きます。
ずれは、必ず同じ向きに増えるわけではありません。打ち消し合うこともあります。けれど、急所では小さなずれが出力を変えます。ぎりぎりの判断をしている場所では、少しの丸めで、次に選ばれる語や判断が変わることがあります。
ここが量子化の代償です。より少ないビットで積む代わりに、近似のずれを受け入れます。安く積むことは、ここでも近似を買うことです。
後から削る方法
削り方には、大きく二つあります。
一つ目は、鍛え終わったモデルを後から削る方法です。すでにある三十二ビットや十六ビットの重みを読み取り、それを八ビットや四ビットの目盛りに丸めます。
この方法は手軽です。元の学習をやり直さなくてよいからです。すでにある重みの最大値と最小値を見て、その範囲を粗い段階に分けます。そして、各重みをいちばん近い段階へ置き換えます。
たとえば、あるまとまりの重みがマイナス1からプラス1までに収まっているとします。八ビットなら、およそ256段階に分けられます。四ビットなら16段階です。二ビットなら4段階です。段階が少ないほど、一段の幅が広くなります。
問題は、モデルがその粗い目盛りを知らずに鍛えられていることです。学習中の重みは、細かな目盛りを前提に少しずつ調整されています。その後で急に丸めると、細かい調整が消えます。
八ビットなら、多くの場合はまだ耐えられます。四ビットでは、場所によって崩れが目立ちます。二ビットまで行くと、単純に後から丸めるだけでは厳しくなります。粗い目盛りの段差が大きすぎるからです。
削る前提で鍛える方法
二つ目は、鍛えるときから、最後は粗い目盛りになると織り込んでおく方法です。
学習中に、重みをいったん丸めたふりをします。丸めた重みで出力を計算します。そして、その出力のずれを見ながら、元の重みを少しずつ直します。
ここで大事なのは、モデルが段差に慣れていくことです。細かな目盛りでしか成り立たない重みの置き方は避けられます。丸めても結果が変わりにくい場所へ、重みが寄っていきます。
たとえるなら、細い線の上だけを歩ける形ではなく、少し幅のある道でも崩れない形にしていくことです。丸められた後の世界を、学習中から経験させます。
この方法は手間がかかります。学習の計算も増えます。調整も難しくなります。けれど、同じ四ビットまで削るなら、後から丸めるだけよりも、出力の崩れは小さくなります。二ビットのように強く削るほど、この差は大きくなります。
つまり、攻めて小さくしたいなら、削る前提で鍛える必要があります。小さくした後に耐える形を、先に作っておくのです。
一律に削らない
もう一つ重要なのは、モデルの中を一律に扱わないことです。モデルの中は均一ではありません。
強く削っても出力にほとんど響かない場所があります。一方で、少し削るだけで大きく崩れる場所もあります。急所を雑に削ると、全体の大きさは減っても、使い物になりません。
だから、場所ごとに削り方を変えます。こらえられる場所は四ビットや二ビットまで攻めます。急所は八ビットや十六ビットで残します。全体を同じ段階まで下げるのではなく、重みのまとまりごとに幅を変えます。
入口で言葉を数に変える表も重要です。ここは、語と数の対応を最初に作る場所です。ここが荒れると、その後の層へ入る前から入力が歪みます。だから、削れる部分と残す部分を分けて見ます。
層の中にも違いがあります。広い変換を担う場所は、多少粗くても耐えることがあります。出力の直前に近い場所や、特定の判断に強く効く場所は、粗くすると崩れやすいことがあります。
小さくする効果は掛け算で効きます。多くの場所を四ビットにできれば、全体の置き場所は大きく減ります。さらに一部を二ビットにできれば、もう一段下がります。その一方で、急所だけは残します。
よい量子化とは、ただ乱暴に削ることではありません。どこを守り、どこを攻めるかを決めることです。
土台が安くなると上の層が変わる
小さく載るようになると、動く場所の選択肢が増えます。
必要なメモリが手元の機械に収まれば、処理を遠くへ送らず、その場で済ませられます。個人の覚え書き、作業中の下書き、通信が弱い場所での補助などは、その恩恵を受けます。往復が消えるので、反応も速くなります。
ただし、手元の機械には天井があります。計算する力にも、電力にも、熱にも限りがあります。重い思考や長い処理は、やはり遠くの大きな機械に任せたほうがよい場面があります。
だから役割が分かれます。手元で何度も使う軽い処理は近くに置きます。重い処理は遠くに置きます。どちらか一方ではありません。小さくした賢さと、大きな賢さを、同じ仕組みの中で使い分けます。
量子化は、派手な賢さの話ではありません。同じ賢さを、より少ないビットで持ち、より狭い場所に、より速く載せる話です。その代わりに、粗い目盛りによる近似のずれを払います。後から削るより、削る前提で鍛えたほうが崩れにくいです。そして、一律に削るより、急所を残して他を攻めるほうがよいです。
上で見てきた記憶、編成、安全、評価、外の現場は、賢さが十分に安いことに乗っています。土台が高ければ、上のすべてが重くなります。土台が小さく速くなれば、上の層はもっと気軽に何度も動けます。
次回も、土台のあたりを続けます。今度は、その賢さをゼロから組むとき、何がいちばん効くのかを見ます。派手な工夫より先に、地味な土台づくりがどれだけ効くのか。その手仕事の話に入ります。
← 一覧へ