ニューラルネットワークのパラメータ数の計算方法
ニューラルネットワークのパラメータ数は、重みの数とバイアスの数の合計で計算できます。全結合層(Fully Connected Layer)では、前の層の各ニューロンが次の層のすべてのニューロンと接続されています。
重み数の計算
入力層から隠れ層への重み数:
$ \text{入力層ニューロン数} \times \text{隠れ層ニューロン数} = 10 \times 20 = 200$
隠れ層から出力層への重み数:
$ \text{隠れ層ニューロン数} \times \text{出力層ニューロン数} = 20 \times 5 = 100$
したがって、総重み数は:
$\text{総重み数} = 200 + 100 = 300$
バイアス数の計算
バイアスは各層(入力層を除く)のニューロンごとに1つずつ存在します。
隠れ層のバイアス数:
$ \text{隠れ層ニューロン数} = 20$
出力層のバイアス数:
$\text{出力層ニューロン数} = 5$
したがって、総バイアス数は:
$\text{総バイアス数} = 20 + 5 = 25$
全パラメータ数の計算
全パラメータ数は重み数とバイアス数の合計です:
$\text{全パラメータ数} = \text{総重み数} + \text{総バイアス数} = 300 + 25 = 325$
重要ポイント
ニューラルネットワークのパラメータ数は、層間の結合数(入力次元×出力次元)とバイアスの数(各層のニューロン数)の合計です。入力層にはバイアスがないことに注意してください。
パラメータ数はモデルの複雑さを表す指標の一つであり、パラメータ数が多いほどモデルの表現力は高くなりますが、過学習のリスクも高まります。
実際のディープラーニングフレームワークでの確認方法
import tensorflow as tf# モデルの定義
model = tf.keras.Sequential([
tf.keras.layers.Dense(20, activation='relu', input_shape=(10,)),
tf.keras.layers.Dense(5, activation='softmax')
])# モデルの概要を表示
model.summary()
上記のコードを実行すると、以下のような出力が得られます:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 20) 220
_________________________________________________________________
dense_1 (Dense) (None, 5) 105
=================================================================
Total params: 325
Trainable params: 325
Non-trainable params: 0
_________________________________________________________________
この出力から、計算した通り全パラメータ数が325であることが確認できます。
応用:より複雑なネットワークの場合
複数の隠れ層を持つより複雑なネットワークの場合も、同様の方法でパラメータ数を計算できます。例えば、入力層(10ニューロン)→隠れ層1(20ニューロン)→隠れ層2(15ニューロン)→出力層(5ニューロン)の場合:
$ \text{全パラメータ数} = (10 \times 20 + 20) + (20 \times 15 + 15) + (15 \times 5 + 5) = 220 + 315 + 80 = 615$