機械学習関連のプログラミングをしているとよく乱数を使うわけですが、乱数のシードを設定するときに「42」という数字をよく見かけます。なぜ「42」が使われるのか調べてみました。
乱数のシードとは
乱数とは、すごく簡単に言ってしまうとランダムな数字列の事です。そして、乱数のシードというのは、乱数を計算機で計算をする際の元になる数字だと思ってください。乱数シードを同じ値にすると、計算機が出力する乱数の数値列は同じになります。
プログラミングをしているときに乱数を使いたい場面で、実行のたびに結果が変わってしまうとデバッグやチューニングの効果などが分からなくなってしまうため、よく乱数シードを固定するということを行います。
例えば、Googleによって開発されている機械学習ライブラリであるTensorFlowでは、以下のように乱数のシードを設定して乱数を生成することができます。以下の例は一様分布から0~1のデータを10個生成している例です
import tensorflow as tf tf.random.set_seed(42) tensor = tf.random.uniform(shape=(10, )) print(tensor)
【実行結果】 tf.Tensor( [0.6645621 0.44100678 0.3528825 0.46448255 0.03366041 0.68467236 0.74011743 0.8724445 0.22632635 0.22319686], shape=(10,), dtype=float32)
機械学習の勉強で講座などで勉強していると、なぜか上記のように乱数のシードとして「42」を使用している例をよく見かけます。「なんで42何だろう?」と常々思っていたので、その理由を少し調べて見ました。
乱数のシードでよく42が使われるのはなぜ?
全世界で1600万部売れた「銀河ヒッチハイク・ガイド」という書籍の中で「42」という数字が出てくるようです。この書籍の作家・脚本家であるダグラス・アダムスさんは42という数字を特別視していたようですね。
本書に登場するスーパーコンピューターのディープ・ソートは、「生命、宇宙、そして万物についての究極の疑問の答え」について問われ、750万年の計算の末に「42」と算出しています。
どうやらダグラス・アダムスさんは特に意図をもって数字を選んだわけではないようなのですが、色々と調べてみると様々な解釈が出ているようですので、皆さんも調べてみると面白いかと思います。
上記の数字からプログラミングで使用される乱数のシードとして「42」という数字がよく使われるようになったようです。個人的には「へぇ~」という感じでした。
まとめ
乱数のシードとしてよく「42」が使われる理由について調べてみました。
42という数字は「銀河ヒッチハイク・ガイド」という書籍の中で登場するスーパーコンピューターのディープ・ソートが「生命、宇宙、そして万物についての究極の疑問の答え」として計算した数字のようです。
皆さんも機械学習の勉強をしていると乱数のシードで「42」に遭遇することがあるかと思いますが、上記のような背景があるんだぐらいに思ってもらえるといいかと思います。乱数のシードとしてはもちろん「42」を使わなければならないというわけではないわけですが、こういった背景があることが知れることも面白いですね。