全結合層とは

ぜんけつごうそうfully connected layer別名 Dense層、Linear層、全結合

1行定義

全結合層とは、前の層のすべてのユニットが次の層のすべてのユニットとつながり、入力の重み付き和にバイアスを足した値を出力するニューラルネットワークの層のことです。

くわしく

全結合層は、前の層のすべてのユニットが、次の層のすべてのユニットとつながっている層です。英語ではfully connected layerといいます。ライブラリでは呼び名が異なり、KerasではDense層、PyTorchではLinear層として用意されています。

何を計算するか

出力側の各ユニットは、すべての入力にそれぞれの重みを掛けて足し合わせ、バイアスを加えます。計算の形から、アフィン変換とも呼ばれます。重みとバイアスは、どちらも学習で決まるパラメータです。

活性化関数とセットで使う理由

全結合層の計算は線形関数です。線形関数は何回重ねても1つの線形関数にまとまるため、全結合層だけを重ねても表現力は増えません。そこで、全結合層の間に非線形の活性化関数を挟みます。

どこで使われるか

  • 多層パーセプトロン:全結合層と活性化関数を交互に重ねたネットワークです。
  • CNNの出力側:畳み込み層などで取り出した特徴を、全結合層でクラスごとの得点にまとめます。2013年のNetwork In Networkは、ここをグローバルアベレージプーリングに置き換えると過学習しにくくなると主張しました。
  • Transformer:各層に、2つの全結合層の間にReLU関数を挟んだ部分があります。系列のどの位置にも、同じ重みを使います。

名前の似たFCNとの違い

FCN(Fully Convolutional Network)は、全結合層をもたない全層畳み込みネットワークです。分類用のCNNの全結合層を畳み込み層に置き換え、任意の大きさの画像から画素ごとの予測を出せるようにしました。

覚え方

「全員と握手する全結合層。重ねるなら間に活性化関数」と覚えます。

G検定での出題

重み付き和にバイアスを足す線形関数であること、重みとバイアスの数の数え方、活性化関数と組み合わせる理由、畳み込み層との違いが問われます。

混同しやすい用語

用語意味
FCN(Fully Convolutional Network)CNNの全結合層を畳み込み層に置き換え、画素ごとにクラスを出力するモデル

◯×チェック

  1. 全結合層の出力ユニットの数は、入力の数と同じにしなければならない。

    答えを見る

    答え × 誤り

    出力の数は設計者が自由に決めます。784個の入力を100個のユニットにまとめる、最後の全結合層の出力を分類したいクラスの数に合わせる、といった使い方をします。

  2. 原論文のTransformerでは、エンコーダとデコーダの各層に、2つの全結合層の間にReLU関数を挟んだ部分があり、系列のどの位置にも同じ重みで適用される。

    答えを見る

    答え ◯ 正しい

    原論文では位置ごとのフィードフォワードネットワークと呼ばれ、FFN(x) = max(0, xW1 + b1)W2 + b2 と書かれます。Attentionで集めた情報を、位置ごとに非線形に変換する役割をもちます。

  3. PyTorchのLinear層やKerasのDense層は、全結合層を実装したものである。

    答えを見る

    答え ◯ 正しい

    どちらも入力と重み行列の積にバイアスを足す計算を行います。ライブラリによって呼び名が違っても、中身は同じ全結合層です。

練習問題

全結合層の問題(1問)
  1. 全結合層のパラメータ数

AIで作成 人による確認:未 誤りを報告

出典と作成について

作成:ウカトレ編集部(AIで作成し、別のAIが一次資料と照合。手順は編集方針)

公開日: 最終更新日: 最終確認日:

対応シラバス:シラバス第1.4版 技術17

改訂履歴

表示設定

テーマ
文字の大きさ
問題演習