1. 全結合層 (fully-connected layer)とは [概要]
全結合層 (fully-connected layer, 全连接层)とは,ニューラルネットワークにおいて,前後の層と密に全てのニューロン同士が接続(connect)している層である.全結合層の役割は,隣接する2層間の全てのニューロンユニット間において,単純な「線形重みパラメータによる線形識別的な変換」を行い,入力ベクトル表現の変換を実施することである(1.1節).入出力のベクトル間での線形変換を通して,特徴の抽出や,次元の削減・上昇 (1.2節) なども担当する層である.
この記事では,概要を整理したのち(1.1節, 1.2節),「全結合層の役割の遷移(CNN時代→Transformer時代)」(2節)と,全結合層に複数ある呼び名の「呼び分けの注意点・注目点」(3節)についてまとめたい.
全結合層の(元の英語の)呼び方としては,fully-connected layerの他にも,線形層 (Linear layer),密接続層(dense connection layer), アフィン層 (Affine layer)などがある.このサイト↑では,よく使用される上に意味の曖昧性もない「全結合層」を主に用いる.英語圏では FC layerという略称もよく使われる.3節(3.1)では,この呼びわけについても整理したい.
※ 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つとして使用される.これにより「(マルチヘッドアテンションブロック中心で設計して) 畳み込み層は用いないネットワーク設計」を用いる傾向も増している(※その後,2022年以降に畳み込み層は復権してきているが).言い換えると,コンピュータビジョンやNLPなどの,主要パターン認識分野では「全結合層2層まで + ReLU型の活性化関数」の構成のMLPブロックの使用頻度が増してきているとも言える.
1.1 全結合層の構造と定式化
ここでは$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)という呼び分けはされない」とも言える.畳み込み層が対比相手として存在して,初めて「密な(全)接続」であると呼べる.
関連書籍
- Pythonで学ぶ画像認識 (機械学習実践シリーズ) 【📖紹介記事】, 田村 雅人, 中村 克行, インプレス, 2023.
- 第4章 画像分類(物体認識) p98 ~
- 全結合層 (p98)
- 第4章 画像分類(物体認識) p98 ~
- 深層学習 改訂第2版 (機械学習プロフェッショナルシリーズ) 岡谷貴之,講談社,2022
- 5 畳み込みニューラルネットワーク
- 5.1 単純型細胞と複雑型細胞 (p77)
- 5 畳み込みニューラルネットワーク
- Probabilistic Machine Learning: An Introduction, Kevin Patrick Murphy , MIT Press, 2022.
- 13.1 Neural networks for structured data – introduction
- ビジュアルテキスト パターン認識 荒井 秀一,森北出版, 2021/3/31.
- 3層ニューラルネットの,懇切丁寧で図つきのわかりやすい解説がある.