全結合層(fully-connected layer)

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

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

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

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

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

2019年頃以降から,Transformer やそれを用いたBERT,GPTや,ViT・MLP-Mixerなどで「MLP(FFN)ブロック」を中心的なブロックの1つとして使用し,畳み込み層は用いないネットワーク設計を用いる傾向が復活している.コンピュータビジョンや周辺パターン認識分野では「全結合層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$層の全結合層で行う線形変換(このあと式(1.1))の結果として,$\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段階で考えた際に,どのように全結合層の役割が変遷したかを確認しておきたい.

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

一方,近年コンピュータビジョン等でも主役となってきたTransformerでは,マルチヘッドアテンションやFNNにおいて,全結合層を沢山使用する.ゆえに,全結合層がよく使われ,再び主役部品となっている (実際はマルチヘッドアテンションというブロック単位が,主役部品ではあるが).

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

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

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

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

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

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

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

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

3.2 密接続(Dense Connection) v.s 疎接続(Sparse Connection)

全結合層のことを,「密接続(Dense Layer)」とか「密層(Dense Layer)」と呼ぶこともある.

この理由は,CNN登場以降に使用することになった畳み込み層が,同じ線形層でも,「疎」な相関接続であることによる.2者を対照的に「密結合(な全結合層)」と「疎結合(な畳み込み層)」のようにそれぞれ呼ぶようになった.

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

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

関連書籍

References

参照外部リンク