DenseNet (G検定)

DenseNet

1. 定義と概要

DenseNetとは、Gao Huang氏らが2017年に発表した論文『Densely Connected Convolutional Networks』で提案された、畳み込みニューラルネットワーク(CNN)です。この論文は同年のCVPRでベストペーパー賞を受賞しています。

ネットワーク内にはDense Block(層を密に接続する基本構成単位)があります。その中の各層は、それより前のすべての層が出力した特徴マップ(畳み込み処理で抽出した画像の特徴を数値の配列として表したもの)を入力として受け取ります。

その際、チャネル(画像データにおける色や特徴の種類を表す軸)方向に連結(Concatenate。複数のデータをそのまま並べてつなぎ合わせる処理)して受け渡します。層数がLのDense Block内では、通常のL本の接続に対し、L(L+1)/2本の直接接続が生まれる計算です。

CNNは層を深くするほど表現力が高まる一方、層を伝わるうちに学習の手がかりとなる勾配が薄れていく勾配消失問題(層を深くするほど学習の手がかりとなる勾配が伝わりにくくなる現象)が課題でした。ResNetは、前の層の出力を後の層の出力に要素ごとに足し合わせるスキップ結合(層を飛び越えて情報を伝える結合の仕組み)で、この課題に対応したネットワークです。

DenseNetはさらに接続を密にし、前の層の特徴マップを足し算ではなく連結して渡す設計に踏み込みました。この結果、ResNetと同程度の精度を、より少ないパラメータ数(学習によって調整する数値の総数)で達成しているのです。

2. 試験対策ポイント

G検定における中心的な論点は、Dense Block内の各層が、それより前のすべての層の特徴マップを連結して受け取る仕組みです。前の層の出力を要素ごとに足し合わせるResNetの加算(Addition。複数のデータを同じ位置どうし足し合わせる処理)との違いが、DenseNetを理解するうえでの土台になります。

各層が新たに生み出す特徴マップの数、すなわちチャネル数はGrowth Rate(k。小さく固定された調整値で、層を重ねても特徴マップの総数が際限なく膨らまないよう制御する役割を持つ)と呼ばれるハイパーパラメータ(学習開始前に人が設定する調整値)で決まります。

Dense Block同士の間にはTransition Layer(バッチ正規化・1×1畳み込み・平均プーリングで構成され、特徴マップのサイズとチャネル数を圧縮する層)が置かれ、計算量を抑える働きをします。名前の似た構成要素が続くため、それぞれの役割を対応させて覚えておくと混乱しにくくなります。

構成要素 役割
Dense Block 層を密に接続する基本構成単位。各層が前のすべての層の特徴マップを連結して受け取る
Growth Rate(k) 各層が新たに生み出す特徴マップの数を小さく固定し、総数が膨らみすぎないよう抑える
Transition Layer Dense Block同士の間で特徴マップのサイズとチャネル数を圧縮し、計算量を抑える

特徴の再利用と密な接続により、勾配消失問題の緩和、特徴の伝わりやすさの向上、パラメータ数の削減という複数の利点が同時に得られる関係にあります。画像分類の精度はResNetと同程度でありながら、パラメータ数は半分以下に抑えられています。

一方で、パラメータ数の少なさとメモリ効率の良さは同じ意味ではありません。Dense Block内の各層は、前のすべての層の特徴マップを保持し続ける必要があるため、学習時のメモリ消費はかえって増える傾向があります。パラメータ効率とメモリ効率を混同しない点も、この分野の試験対策における論点です。

3. 関連概念との比較・相違点

ResNetとの設計上の最大の違いは、前の層の出力を次の層へどう渡すかという点にあります。ResNetはスキップ結合で前の層の出力を後の層の出力に要素ごとに加算するのに対し、DenseNetはDense Block内で前のすべての層の特徴マップをチャネル方向に連結します。

加算はチャネル数を変えずに情報を足し合わせる処理であるのに対し、連結はチャネル数を増やしながら情報をそのまま並べて残す処理であり、後続の層がどちらの情報も参照できる点で扱いが異なります。同じ水準の精度を目指す設計でありながら、情報の渡し方という土台の部分で、両者は異なる選択をしているのです。

もう一つの比較対象が「Wide ResNet」です。精度や効率を高める方向性が異なり、DenseNetは層どうしの接続を密にして特徴を再利用する方向で設計されているのに対し、Wide ResNetは層の深さではなく各層のチャネル数、すなわち幅を増やす方向で設計されています。

ともにResNetの発展形でありながら、接続の密度を高めるか、幅を広げるかという着眼点の違いが際立ちます。前者のDenseNetは既存の情報をできるだけ再利用して層を積み重ねる発想に立ち、後者のWide ResNetは各層が一度に扱える情報量そのものを増やす発想に立つという関係にあります。

3つのネットワークを、情報の渡し方と設計の軸、そしてチャネル数の扱いという観点で並べると、次の関係になります。

ネットワーク 情報の渡し方・設計の軸 チャネル数の扱い
ResNet スキップ結合で前の層の出力を要素ごとに加算 変えずに情報を足し合わせる
DenseNet 前のすべての層の特徴マップをチャネル方向に連結 増やしながら情報をそのまま並べて残す
Wide ResNet 層の深さではなく各層の幅を増やす 各層が一度に扱えるチャネル数を増やす

この表のとおり、DenseNetは情報の渡し方そのものを、Wide ResNetは1つの層の太さを変えた発展形という整理になります。

4. ビジネス・実務での活用シナリオ

医療画像診断の分野では、胸部X線画像などから疾患の候補を分類するタスクに、DenseNetが使われる事例があります。限られた学習データと計算資源でも高い精度を保つ必要がある現場で、パラメータ数を抑えつつ精度を維持できる点が評価され、分類モデル(画像や数値データをカテゴリーへ振り分けるモデル)の土台として採用されているようです。

製造業の外観検査では、集まる不良品の画像がわずかしかない現場が少なくありません。層間で特徴を再利用しやすいDenseNetの構造は、学習済みモデルを別のタスクに合わせて再利用する転移学習(学習済みモデルを別のタスクに合わせて再利用する手法)と相性よく組み合わされています。

研究開発やモデル選定の場面では、推論(学習済みモデルを使って新しいデータに対する答えを出す処理)の実行時はパラメータ数の少なさが有利に働く一方、学習時はメモリ消費の大きさを踏まえてGPU環境を見積もる必要があります。この兼ね合いが、DenseNetを選ぶかどうかの判断材料になるでしょう。

5. 要点まとめ

  • 「DenseNet」は、Dense Block内の各層をそれ以降のすべての層に直接つなぎ、前の層の特徴マップを連結して受け渡すCNNです。
  • Growth Rate(k)とTransition Layer(Dense Block同士の間で圧縮を行う仕組み)により、少ないパラメータ数で勾配消失問題を緩和しながら精度を高めます。
  • ResNetとは「加算か連結か」、Wide ResNetとは「深さか幅か」という設計思想の違いで比較されます。

6. 確認問題

問1DenseNetのDense Block内では、各層がそれより前のすべての層から出力された特徴マップを連結して入力として受け取る。

解答・解説をみる

○ 正しい

Dense Block構造の中核となる仕組みです。層数がLのDense Block内では、通常のL本の接続に対してL(L+1)/2本の直接接続が生まれます。

問2DenseNetはResNetと同様に、前の層の出力を要素ごとに足し算して次の層に渡す構造を持つ。

解答・解説をみる

× 誤り

正しくは、ResNetが加算するのに対し、DenseNetはチャネル方向に連結します。加算と連結の違いが、両者を分ける設計上の要点です。

問3DenseNetはResNetと比べてパラメータ数を抑えられる一方、Dense Block内の各層が前のすべての層の特徴マップを保持するため、学習時のメモリ消費は増加する傾向がある。

解答・解説をみる

○ 正しい

パラメータ数の少なさとメモリ効率の良さは同じ意味ではありません。密な接続を保持する分だけ、学習時のメモリ消費は大きくなりやすい関係にあります。