はじめに
こんにちは、もう 12月なことに焦りまくりのひよこです。
みなさんは「31」という数字にどんなイメージを持っていますか?
カレンダーの日付やサーティワンアイスクリームを思い浮かべる方も多いかもしれません。
というわけで今回は 31 という数字について取り上げてみましょう。
🐣 12月の31日分が過ぎたら 2026年の元旦! 早すぎますw
31 の正体:メルセンヌ素数とレピュニット
まず、31 の数学的な美しさについて話しましょう。
31 は単なる素数ではなく、「メルセンヌ素数」と呼ばれるエリート素数の一つです。メルセンヌ素数とは、$2^n - 1$ の形で表される素数のことです。31 は $n=5$ の場合に相当します。
M_5 = 2^5 - 1 = 32 - 1 = 31
これを 2 進数で表記すると、もっと面白いことがわかります。
- 10 進数: 31
- 2 進数: $11111_2$
すべての桁が 1 で埋め尽くされています。
このように全ての桁が 1 である数を「レピュニット(Repunit)」と呼びます。31 は 2 進数におけるレピュニット数であり、かつ十進数における「素数」である。この 情報の密度と数学的な堅牢性 が、計算機にとってかなり都合が良いのです。
🐣 11111 は十進数だと =41*271 なので残念ながら素数ではありません
アルゴリズムの魔術:Java とハッシュ
プログラミングをする方なら、Java の hashCode 実装の中で 31 が使われているのを見たことがあるかもしれません。
なぜ 31 なのでしょうか。Joshua Bloch 氏らの解説によると、主な理由は次の 3 つです。
- 素数であること: 合成数を使うとハッシュ値が偏りやすく、衝突が増えがちになる
- 奇数であること: 偶数で掛け算をするとビットシフトと同じになり、下位ビットが 0 で埋まって情報が消えやすい
- 計算コストの最適化: 31 が $2^5 - 1$ という形をしている
特に 3 つ目がエンジニア的にはおいしいポイントです。
31 は $2^5 - 1$ なので、本来は重たい「掛け算」を、高速な「ビットシフト」と「引き算」に置き換えられます。
31 \times i = (i \ll 5) - i
コンパイラはこれを自動的に最適化してくれるので、非常に高速に処理できます。
こうした理由から、31 はハッシュ計算の世界で長年「マジックナンバー」として君臨してきました。
生成 AI 時代の「31」:31B パラメータの登場
ここからは現代のお話です。
最近の大規模言語モデル(LLM)界隈では、31B(310 億パラメータ) というサイズがちょっとしたトレンドになっています。
なぜ 31B なのか?
これまでオープンソース LLM は 7B や 70B が主流でした。しかし、70B クラスをまともに動かすには、高価な GPU が複数枚必要になります。
そこで登場したのが、Upstage の「Solar Pro 2」や「Skyfall-31B」といった 31B クラスのモデルたちです。
- シングル GPU 運用: 量子化技術を使えば、A100 や H100(80 GB VRAM)1 枚にモデル全体が乗り、高速に動かせる
- 性能密度: DUS(Depth Up-Scaling)といった工夫により、小型モデルからの拡張でも、推論やコーディング性能が 70B クラスに迫る
「巨大すぎず、小さすぎない」。31B は、現在のハードウェア制約における コスパの良いスイートスポット になる可能性を秘めています。
画像認識でも 31x31
画像認識(CNN)の世界でも、「RepLKNet」というモデルが 31x31 という巨大なカーネルサイズを採用しています。カーネルを大きくしていくと性能は上がるものの、実験によると 31x31 を超えたあたりから性能向上は頭打ちになり、計算コストだけが増えてしまうとのことです。
ここでも 31 は、「スケーリングの限界点」や「ほどよい上限」として顔を出してきます。
おわりに
31 という数字は、オイラーが手計算していた時代から、最新の生成 AI が活躍している現代まで、ずっと計算と知能のいわば縁の下の力持ちとして頑張ってきた数字の一つです。
次に 31 を見かけたときは、「おっ、君はできる数字だな!」と心の中でちょっとだけ褒めてあげてくださいね。
ではまた次の記事でお会いしましょう。
オマケ
この界隈にいると「ついに十代最後かぁ〜」とか「二十歳になってしまった…」というネタを耳にすることがあります。そう、これは十六進数での話なんですよね。
十六進数での「二十歳」は 32 歳であり、十代最後は 31 歳ということになります。
一般的にはやや自虐的に使われることが多いネタですが、見方を変えると「31 歳まで十代と変わらない柔軟性と若さを保てる人が生成 AI 界隈には多い」とも言えます。
ちょっと苦しいこじつけかもしれませんが、そのくらいの若さを保ったまま、31 という数字と一緒に元気にやっていきたいところです 🐣