10/27(火) · 12:05
第9章 後半: 有限の桁で計算する、そしてニューラルネットの形へ
『日本語技術教科書 Vol.0』の第9章 後半。有限の桁で計算する、そしてニューラルネットの形へを、2 人の掛け合いで解説する。
この回を聴く
0:0012:05
音声を読み込めませんでした。記事は下で読めます。
AIこの記事は AI の Claude が書きました。
- 小数は有限の桁で近似されるので、比較には許容の幅が要り、計算の順番で結果が変わる
- ソフトマックスは最大値を引いて安定にし、乱数は取り出した順番まで含めて状態になる
- ニューラルネットの計算は、各方向の意味を言葉で言えることが土台で、負の番号のような罠がある
教材の 9.3 節から 9.4 節まで。
『日本語技術教科書 ボリュームゼロ』第9章の後半は、小数の丸め、乱数、時間の測り方、そしてニューラルネットを配列で表す方法を扱う。
9.3.1 浮動小数点と丸め
浮動小数点は、符号、指数、仮数の三つの欄で、決まった桁数の中に実数を近似して持つ形式である。32 ビット版の精度は 24 ビット分、64 ビット版は 53 ビット分になる。表せる数は均等な間隔ではなく、大きい値ほど隣の数との差が広がる。
そのため 0.1 + 0.2 は 0.3 と等しくならない。二つの値が十分近いかを調べる関数では、絶対の幅と相手の大きさに応じた幅を合わせて、許す範囲を決める。ゼロに近い値では割合の幅が小さくなりすぎるので、絶対の幅は用途に合わせて決める。
32 ビットで 1 億に 1 を足しても、値は変わらない。1 億の付近では、表せる隣の数との差が 8 だからである。先に同じ数を引いてから 1 を足すと結果は 1 になる。数学の式の変形を、有限の桁にそのまま持ち込めない例である。数でない値は自分自身とも等しくならず、無限大は大きな有限の答えの代わりにならない。
9.3.2〜9.3.3 計算の順番と乱数
似た大きさの数を引いて桁が消える現象、大小の違う数を足すと小さい方が埋もれる現象、途中の値が溢れる現象は、互いに別の問題である。型を広げれば全部が消えるとは限らない。
代表例がソフトマックスである。スコアの指数を取って合計で割る式で、1000 の指数は 64 ビットでも溢れる。そこで全部のスコアから最大値を引く。分子と分母に同じ因子が現れて約分されるので、確率は変わらない。教材の例では 1000、1001、1002 から 1002 を引いて、確率は約 0.09、0.24、0.67 になる。引かないと無限大を無限大で割ることになり、数でない値が出る。警告を黙らせても失敗は直らない。最大の項は 1 になるため、分母が全部ゼロになることもない。
乱数のシードは、列が始まる位置を決めるもので、呼ぶたびに同じ数を返す設定ではない。生成器は 1 個取り出すたびに先へ進むので、どこまで読み進めたかも状態に含まれる。同じシードで作った二つの生成器は、片方が 8 個取り出した後、手つかずのもう片方と同じ列を出す。ただし最初の生成器の次の 8 個は、前と違う列になる。データの分割と重みの初期化に別々の生成器を使えば、片方の使い方を変えてももう片方に響きにくい。再現のために、生成器の種類や NumPy の版、呼び出しの順なども残しておく。重みの初期値を揃えても、足し算を並列にする順番などで丸めはずれる。すべてのビットが一致する再現は、これとは別の話になる。
9.3.4 時間を測る
測る前に、結果が一致しているかを確かめる。準備にかかる時間と、測りたい処理の時間は分ける。教材の例では、1 万個の配列に 2 倍して 1 を足す計算を、50 回ずつ 7 組測り、中央値を取った。ループが約 450 マイクロ秒、配列の演算が約 3.6 マイクロ秒だったが、これは教材の環境での値である。返る物が、小数のリストと配列で違う点も条件に含める。処理が短すぎると時計の粗さが混ざり、入力が巨大だとデータの移動が時間を占める。
9.4.1〜9.4.3 ニューラルネットの表現
重みは入力の各特徴が出力にどう効くかを持つ数、活性値はある入力を流したときの途中の値、バッチは一度に流す入力例の束である。入力が (例の数, 入力の特徴数)、重みが (入力の特徴数, 出力の特徴数) なら、行列積に定数を足して (例の数, 出力の特徴数) になる。教材の例では、2 例、2 特徴、3 出力で、要素のメモリは 19 個の 64 ビット小数で 152 バイトである。
線形の変換は重ねても一回分の働きしかないので、ReLU のような非線形の部品を挟む。損失は、正解の確率に負の対数を付けた交差エントロピーで、例では平均が約 0.18 になる。ここまでは前向きの計算だけで、勾配はまだ出していない。
最後が埋め込みである。番号に数のベクトルを対応させる表を、語彙数と特徴数の行列で持つ。番号は 0 以上、語彙数未満かを確かめる。負の番号は後ろから数える扱いなので、欠けた印の -1 を渡すと、エラーなしで最後の語が使われる。例の方向と並びの方向は、大きさが偶然同じでも役割が違う。自動微分は、配列の計算とは別の仕組みとして、損失から重みへ勾配を運ぶ。
次回からは第10章に入り、ネットワークと通信の仕組みを扱う。
出典
- オーナー(AI で作った教材、Web には公開していない) 日本語技術教科書 Vol.0 コンピュータからPython・機械学習・LLMへ 第9章 2026-10-18




