2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

最近、量子という言葉をよく目にしませんか? LLM における量子化や量子コンピュータ、量子アルゴリズムなどなど。一方で、じゃあ量子って一体何だ? と聞かれるとちょっとあわあわしちゃうひよこです。
この記事ではこの「量子」について、AI エンジニアの視点で少し調べてみたいと思います。

LLM における量子化

まずは、機械学習でよく聞く量子化から。ここでの量子化は英語だと quantization で、物理の quantum(量子力学の量子)と必ずしも同じ話ではありません。

🐣 実はここが混乱の元だったりする

そもそも量子化とは

LLM の重みは通常 float32float16 のような連続値を表せる数で保存されています。量子化は、これをより少ないビット数の整数(int84bit など)に丸めて保存する仕組みです。

イメージとしては、$[0, 1]$ の実数値を、0.1 刻みのヒストグラムに置き換えてしまうような処理です。
連続な量を有限個の箱に押し込めるので、データ量が減り計算も軽くなりますが、精度が落ちるという代償もあります。

実際のライブラリでは、主に以下のような処理が行われます。

  1. 各レイヤーやチャネルごとに、重みの最大値と最小値を調べる
  2. その範囲を例えば 256 個(8bit)のスロットに割り当てる
  3. 元の重みを一番近いスロット番号に変換(エンコード)
  4. 計算時に元の値に近い実数に戻して使う(デコード)

代表的な手法

最近の Hugging Face Transformers では、bitsandbytes を用いた 8bit / 4bit 量子化や、GPTQ、AWQ のような手法に対応しています。

  • ポストトレーニング量子化:学習済みモデルの重みを丸める(GPTQ, AWQ など)
  • 学習とセットの量子化:量子化されたモデルによる追加学習(QLoRA など)

重要なのは、LLM で言う量子化は「精度を保ちつつ重みを丸めて軽くする 技術」であり、物理の「自然界が最初から離散的」という意味の量子とは別物だという点です。

量子コンピュータ

次は、物理寄りの量子代表、量子コンピュータです。

量子ビットと重ね合わせ

古典コンピュータのビットは 0 か 1 ですが、量子コンピュータの基本単位である 量子ビット(qubit) は、0 と 1 が重ね合わさった状態をとれます。

🐣 そう、かの有名なシュレディンガーの猫状態です!

1 つの量子ビットが 0 と 1 の状態を持つことができて、$n$ 個の量子ビットで $2^n$ 通りの状態を一度に重ね合わせて保持できる計算になります。
さらに、量子ビット同士が相関する エンタングルメント(量子もつれ) という現象を利用し、正しい答えの確率だけが高まるように計算を操作するのが量子アルゴリズムの本質です。

Python で試す Qiskit

Python から量子回路を触れるライブラリには Qiskit(IBM)、Cirq(Google)、PennyLane(Xanadu)などがあります。ここでは Qiskit を使って「0 と 1 の重ね合わせ」を作るミニマルな例を示します。

qiskit_example.py
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator

# 1 量子ビット、1 古典ビットの回路を作成
qc = QuantumCircuit(1, 1)

# |0> を H ゲート(アダマールゲート)で重ね合わせ状態に
qc.h(0)

# 測定して古典ビットに書き出し
qc.measure(0, 0)

# シミュレータで実行
backend = AerSimulator()
result = backend.run(qc, shots=1024).result()
counts = result.get_counts()

print(counts)
# 出力例: {'0': 500, '1': 524}
# だいたい半々の確率分布が出る

量子力学

最後は、本来の意味である物理学の量子です。

エネルギーのかたまり

1900 年、マックス・プランクは黒体放射の問題を解決するために、エネルギーが連続ではなく「かたまり(量子)」でやりとりされると仮定しました。

E = h \nu

ここで $E$ はエネルギー、$h$ はプランク定数、$\nu$ は振動数です。エネルギーはこの整数倍でしか増減しないと考えることで、実験結果がきれいに説明できました。これが量子の原点です。その後、シュレディンガー (猫で有名)、ハイゼンベルク (不確定性原理で有名) からディラック (デルタ関数の生みの親) を経て量子力学へと発展していきます。

「神はサイコロを振らない」

その後、量子力学は「確率でしか結果を予測できない理論」として発展しました。
ハイゼンベルクの不確定性原理では『人間はどれだけ頑張っても粒子の場所と運動量を同時に知ることはできない』としています。アインシュタインはこの確率的な性質に懐疑的で、友人マックス・ボルンへの手紙で有名な次の言葉を残しています。

神はサイコロを振らない

これは「もっと決定論的な理論があるはずだ」という彼の信念を表す言葉ですが、現在では自然は本質的に確率的に振る舞うと考えられています。

連続なものを離散でまとめる

ここまで出てきた用語を整理します。

  1. LLM の量子化:人間が扱いやすいように、連続量を離散値(デジタル)に丸めるエンジニアリング
  2. 量子力学の量子:そもそも自然界のエネルギーや物理量が、最初から飛び飛び(離散的)になっているという法則

文脈は違いますが、「連続に見える世界を有限の粒や箱で捉える」という点では共通しています。量子コンピュータは、その後者の物理法則を計算に応用したものです。

おわりに

最近の生成 AI 界隈では、物理や数学の用語が飛び交います。量子化やエントロピーなど、なんとなく使ってしまいがちですが、それぞれの背景には長い歴史があります。この記事が物理の世界から生成 AI の領域にまで広がった量子の理解に役立てば嬉しいです。

🐣 量子(りょうこ)ちゃんは昔なら親は物理学者?と思うところですが最近なら情報系の専門家かもしれませんね

ではまた、次の記事でお会いしましょう。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?