全結合層 (fully-connected layer, 全接続層)

1. 全結合層 (fully-connected layer, 全接続層)とは [概要]

全結合層 (fully-connected layer, 全接続層)とは,ニューラルネットワークにおいて,前後の層と密に全てのニューロン同士が接続(connect)している層である.全結合層の役割は,隣接する2層間の全てのニューロンユニット間において,単純な「線形重みパラメータによる線形識別的な変換」を行い,入力ベクトル表現の変換を実施することである(1.1節).入出力のベクトル間での線形変換を通して,特徴の抽出や,次元の削減・上昇 (1.2節) なども担当する層である.

全結合層の,(英語の元の)呼び方としては,全接続層(fully-connected layer)の他にも,線形層(Linear layer)や,密接続層(dense connection layer)などがある.このサイトでは,このうち全結合層でなるべく呼び名を統一している.英語圏では FC layerという略称もよく使われる.3節にて,それらの呼びわけについても整理したい.

※ connect は「接続」であるゆえ,本来は全接続層が翻訳として最適である.全結合層だと,結合 = combine/uniteなので,「2つ以上を1つに結合する」の意味になってしまう.しかし,慣習的に「全結合層」で業界の皆様は慣れてしまっているので,そちらを主に使用したい.

全結合層は,昔ながらの3層MLP(Multi Layer Perceptron)でも使用されてきたが,現代の基本的なディープニューラルネットワーク構造である CNN, LSTM, Transformer などにおいても,頻繁に使用される基本的で重要な層である.

全結合層と畳み込み層は,ともに,「線形層(Linear Layer, 線形変換のみを行う層)」の1種である.ディープニューラルネットは,線形層だけ使用するのでは表現力が足りないので,非線形変換を担当する活性化関数 (特にReLU型の活性化関数)も使用することで,(全体として)非線形の表現力を得る.

2019年頃以降から,Transformer 登場以降,Transformer設計を用いたBERT, GPTや,ViT・MLP-Mixerなどでは「MLP(FFN)ブロック」も中心的なブロックの1つとして使用し,「(マルチヘッドアテンションブロック中心で設計して) 畳み込み層は用いないネットワーク設計」を用いる傾向が増している.コンピュータビジョンやNLPなどの,主要パターン認識分野では「全結合層2層まで + ReLU型の活性化関数」の構成のMLPブロックの使用頻度が増してきているとも言える.

1.1 全結合層の構造と定式化

全結合層(fully-connected layer)
図1. 全結合層(fully-connected layer).5つの入力から,3ニューロンユニットにより3値を出力する例.

ここでは$t$層目に配置されている全結合層について,その変換式を様子を定式化したい(図1).各結合は,出力との接続グループ3つにそって青・緑・赤に色分けしておいた(※ 1.1.2節で述べる話).

第 $l-1$ 層からの入力$\bm{h}^{(l-1)} \in \mathbb{R}^{K^{in}} $に対して,第$l$層の全結合層で行う線形(アフィン)変換の結果として,$\bm{h}^{(l)} \in \mathbb{R}^{K^{out}} $を出力するとする.

1.1.1 普段使う「行列・ベクトル積 + バイアス」の形式

このとき,全結合層では,学習済みの重み行列$\bm{W} \in \mathbb{R}^{K^{\text{in}} \times K^{\text{out}}}$ および バイアス値$b$を用いて,以下の線形(アフィン)変換を行う:

\[
\bm{h}^{(l)} = \bm{W}^{\top} \bm{h}^{(l-1)} + b \tag{1.1}
\]

$K^{\text{in}}$個の入力ユニット(スカラー値$h_i$)と,$K^{\text{out}}$個の出力ユニットの全ての結合間に,スカラー値の重みパラメータ$w_{(i,j)}$が割り当てられる.

誤差逆伝搬によりネットワークを学習すると,全結合層のパラメータとして,$K^{\text{in}} \times K^{\text{out}}$個の $w_{(i,j)}$と,それらに共通するバイアス値 $b$の値が学習される.

1.1.2 ニューロンごとの計算をグループ化して整理

1.1.1節および式(1.1)は,これは$K^{\text{out}}$個のニューロン(図1では3個の出力)から構成された全結合層を,一括で表現した式である.これをニューロンごとに,グループ化してわけた形式についても整理しておきたい.

ニューラルネットワークでは,各$j$番目の出力$\bm{h}_{j}^{(t)}$を担当するニューロン(ユニット)が,それぞれ以下の線形識別関数を構成するのであった:

\[
h_{j}^{(l)} = \sum^{K_{out}}_{i} w_{(i,j)} h_i^{(l-1)} + b \tag{1.2}
\]

この式(1.2)が,各ニューロンユニットの処理であり,式(1.1)はあくまでそれらをまとめたものであることを,忘れないようにしたい.テキストなどの解説においては,活性化関数 (リンク先,図1-(a)を参照)では,「ユニット→活性化関数」というペアを意識するので,サブグループとしてのニューロンは,意識しやすい.

※ 「全結合層」という名前からだと,ユニットのグループ構造がすぐ思い出せないので,全結合という命名は,好ましい呼び名ではない.名前に込められた意味が曖昧だったから,「線形層」とも呼ばれるようになった(3節)とも,管理人は考える.

以上,1.1節をまとめると,「全結合」層と呼ぶが,実際のところは上記(1.2)のニューロン$K_{out}$ 個から構成されていて,ニューロンごとにグループ化されたものである. 図1でも,結合を「青・緑・赤」に3グループに色分けすることで,各ニューロンのかたまり3つも見やすいように描いた.

1.2 次元削減と次元削減への使用

全結合層の変換(式(1.1))には,入出力ベクトルの次元数の低下・上昇を担当させて学習させることもできる.

次元削減層として低次元表現への埋め込みに用いられたり(例:自然言語処理などでone-hot 表現から,埋め込み層で,LSTM・Transformerなどへの入力を作成する).

その逆で,低次元のボトルネックを形成したのちに,次元上昇層として用いられることも多い (例;オートエンコーダのDecoderや,深層生成モデルのGenerator内の各線形層,また,マルチヘッドアテンションの最終層など).

2. DNN内での,全結合層の役割の遷移

コンピュータビジョン業界における,全結合層の役割が時代ごとにかわっていく.よって,「CNN以前→ CNN → Transformer 登場以降」の3段階で考えた際に,どのように全結合層の役割が変遷したかを確認しておきたい.

2.1 畳み込み層に主役を取られる

画像認識では,CNNが主役の頃は畳み込み層が中心になり,終盤層で全結合層を識別器としてのみ用いた.よって,3層MLPの時代と比べると,ネットワーク全体における全結合層が占める割合が減ったことにより,重要性が減った.

また,物体認識向けCNNバックボーンも,終盤層が全結合層からグローバル平均プーリングに差し替えられ,全結合層の出番が減る.また,セマンティックセグメンテーション向けに登場したFCN (Fully Convolutional Network)や,FCNを物体認識向けに使うようになったSSDなどでは,全結合層はほとんど使われなくなる.

2.2. Transformer流行で,主役の座が復活

近年コンピュータビジョンやVision-Languageでも主役となってきたTransformerでは,2つの主要部分ブロックである「マルチヘッドアテンション」と「トークン位置ごとに使うFNN」において,全結合層を沢山使用する.ゆえに,Transformer世代では今度は,畳み込み層があまり使われなくなり,全結合層の方が再び主役部品となって重要度が復活してきている (実際はマルチヘッドアテンションの単位が,主役部品ではあるが).

ただ,3種の主な線形計算層の「(1)全結合層 (MLP的な使用) (2) 畳み込み層 (3) アテンション機構」のうち,どれがどのくらい効いているかが,2020年以降のディープラーニング(特にViT界隈)では,決定的な解が示されておらず,どれがよいかは非常に流動的である.よって,断定的に「この層が一番有効と」決めつけて取り組まない方が好ましいと,個人的には考える.

3. 全結合層の呼びわけにおける注意・注目点

線形層という呼び方(3.1節)と,密結合という呼び方(3.2節)について,それぞれ「呼び分け」の理由がテキストなどには書いていなく,思い出せず混乱することもあると思う.よって,この3節にメモとして整理しておきたい.

3.1 線形層より「全結合層」と呼びたい理由

畳み込み層も,全結合層と同じく線形層(線形計算しか行わない層)の一種であるので,「線形層(Linear Layer)」のことを,全結合層と呼ぶと少し曖昧になる.同じく線形変換である畳み込み層との区別が本当はつきづらい.よって,この記事で紹介した層は,全結合層(もしくは「密結合層」)と呼ぶことにして,線形層とは呼ばない方が,全結合以外の線形層(畳み込み層など)と,きちんと区別できる呼び方なので本当は好ましい.

しかし,現実問題として全結合層のことを「線形層(Linear)」と呼ぶ慣習が広まってしまった現実がある.例えばPyTorchの全結合層は「Linearクラス」となってしまっている.また,英語の論文でも,よく線形層(Linear layer)と呼ばれてきた.

例えば,皆さんもご存知のように,Transformerの元論文でも,図中での呼び方を含め,全結合層は「Linear」と書かれている (※ アカデミック業界では,呼び名をPyTorch等の主要な Deep Learning フレームワークのクラス名に揃えておくことで,読者の脳内変換コストを減らして,内容をすぐ理解しやする意図もあると思うが).

以上のように,現実的には全結合層は「線形層」ともよく呼ばれるので,このLinear (Layer)という呼び方にも慣れておく必要がある.

3.2 密接続 v.s 疎接続

全結合層を,密接続(Dense Connection)あるいは密層(Dense Layer)と呼ぶこともある.その理由は,畳み込み層が,同じ線形層の中でも「疎」な相関接続に相当することによる.よって,2者を対照的に「密結合(である全結合層)」と「疎結合(である畳み込み層)」のようにそれぞれ呼ぶようになった.

※ 正しくは「Global演算」なのが全結合であり,局所ごとの「Local演算(よって,全結合層よりは疎な接続)」であるのが畳み込み層である

[復習] 全結合層と異なり,畳み込み層重み共有局所的な(疎な)接続により,画像認識向けの,効率的で省パラメータのディープニューラルネットワークを,CNNとして実現することができた (※ より詳しくはCNNの記事を参照).

逆に言うと,Deep Learning以前のテキストや論文中では,全結合層に対して「Dense( v.s Sparse)という呼び分けはされない」とも言える.畳み込み層が対比相手として存在して,初めて「密な(全)接続」であると呼べる.

関連書籍

References

参照外部リンク