G検定(ジェネラリスト検定)
ぜんけつごうそう
全結合層
Fully Connected Layer
全結合層とは、前の層のすべてのノードと次の層のすべてのノードをつなぐ層です。入力のノード数と出力のノード数の積が重みの数になり、出力のノード数と同じ数だけバイアスがあり、学習で調整するパラメータの数は、この重みの数とバイアスの数を合わせたものになります。
詳しい説明
すべての入力がすべての出力に関わる層
全結合層では、次の層にある出力ノードの1つ1つが、前の層にある入力ノードのすべてから値を受け取ります。入力ノードと出力ノードのどの組み合わせにも、その組み合わせだけの重みが1つずつ割り当てられています。英語ではFully Connected Layerと呼びます。
この計算は、入力の値を並べたものに重みを並べた行列を掛ける計算、つまり行列積として書けます。イアン・グッドフェロー(Ian Goodfellow)らの教科書"Deep Learning"(2016年)は、畳み込みニューラルネットワークについて、少なくとも1つの層でこの行列積の代わりに畳み込みという演算を使うニューラルネットワークだと説明しています。全結合層は、その比較の出発点になる、行列積をそのまま使う層です。
1つの出力ノードが行う計算
出力ノードは、入力ノードの値にそれぞれの重みを掛けて足し合わせ、最後にバイアスを1つ足します。バイアスは、入力がどんな値であっても出力に一定の量を上乗せするための値で、出力ノード1つにつき1つあります。
入力のノードが3つ(、、)で、出力のノードが2つ(、)の場合、1つめの出力ノードの計算は次のとおりです。
2つめの出力ノードも同じ形で、別の重み、、と別のバイアスを使います。
ここでは、1つめの出力ノードが2つめの入力ノードから値を受け取るときの重みを表します。
パラメータ数の計算式
入力のノード数を、出力のノード数をとします。重みは入力ノードと出力ノードの組み合わせごとに1つあるので、重みの数は個です。バイアスは出力ノードごとに1つあるので、バイアスの数は個です。学習で調整するパラメータの合計は次の式で表せます。
この式は、入力の値を重みの行列に掛けてからバイアスを足すという計算の形から、そのまま導けます。重みの行列は縦に行、横に列の大きさを持ち、その要素の数が個になるためです。
3入力2出力の層での計算例
先ほどの例を式に当てはめます。入力のノード数が、出力のノード数がなので、重みは個です。これは、、、、、の6つに当たります。バイアスはとの2個です。合計は個になります。
ノード数を増やすとパラメータ数はどう変わるか
重みの数は入力のノード数と出力のノード数の掛け算で決まるので、両方を増やすと重みの数は掛け算の分だけ増えます。たとえば入力と出力のノード数をどちらも2倍にして、にすると、重みは個、バイアスは4個、合計は28個です。ノード数はどちらも2倍ですが、重みの数は6個から24個へ4倍になります。一方でバイアスの数は出力のノード数と同じ割合でしか増えないので、2個から4個への2倍にとどまります。
式から読み取れるのは、パラメータの大部分を重みが占めること、そして入力と出力のどちらか一方を増やしただけでも重みの数はその割合で増えることです。
畳み込み層との違い
グッドフェローらの教科書は、畳み込みを使う層が活用する考え方として、疎な結合(sparse interactions)、パラメータ共有(parameter sharing)、入力をずらすと出力も同じだけずれる性質(equivariant representations)の3つを挙げ、それぞれを全結合の層と比べて説明しています。このうち全結合層との違いがはっきり表れるのは、はじめの2つです。
疎な結合について、全結合層ではすべての出力ノードがすべての入力ノードとつながります。畳み込み層では、1つの出力は入力のうち一部の範囲とだけつながります。
パラメータ共有について、全結合層では重みの行列の要素はどれも、層の出力を計算するときに1度しか使われません。上の例でいえば、はを計算するときにだけ使われ、の計算には別の重みが使われます。畳み込み層では、同じ重みを入力のさまざまな位置で使い回します。
誤解しやすい点
全結合層のパラメータ数を数えるときに、重みの個だけを答えてバイアスの個を数え忘れることがあります。バイアスの数は入力のノード数ではなく出力のノード数と同じになる点にも注意が必要です。
また、全結合層と畳み込み層の違いは、層の目的が違うということではなく、入力と出力のつなぎ方と重みの使い方が違うということです。どちらの層も、学習によって重みを調整する層です。
試験で問われること
G検定
- 全結合層のパラメータ数は、入力のノード数を、出力のノード数をとすると、重み個とバイアス個を合わせた個です。たとえば、なら個になります。
- バイアスは出力ノードごとに1つずつあるため、バイアスの数は入力のノード数ではなく出力のノード数と同じになります。
- 重みの数は入力と出力のノード数の掛け算で決まるので、両方を2倍にすると重みの数は4倍になります。
- 全結合層ではすべての出力ノードがすべての入力ノードとつながり、重みの行列の各要素は出力の計算で1度しか使われません。畳み込み層は、1つの出力が入力の一部の範囲とだけつながり(疎な結合)、同じ重みを入力のさまざまな位置で使い回します(パラメータ共有)。
最終更新日: 2026/09/23