Identity Mapping
ディープラーニングにおける恒等写像をご紹介します。スキップ接続が勾配消失を防ぎ、Ultralytics YOLO26のようなニューラルネットワークを支える仕組みを解説します。
数学や線形代数において、恒等写像または単位行列とは、入力として与えられた値とまったく同じ値を返す関数です。人工知能(AI)やディープラーニングでは、恒等写像は非線形変換を加えずに入力データを畳み込みニューラルネットワーク(CNN)の後続層へ直接渡す、特定のアーキテクチャ手法を指します。この概念は、2015年にResidual Networks(ResNet)が登場したことで広く知られるようになり、深いコンピュータービジョン(CV)モデルの構造とトレーニング方法に変革をもたらしました。
恒等写像の仕組み#
深層ニューラルネットワークは、勾配消失問題に悩まされることがよくあります。バックプロパゲーション中、ネットワークの重みを更新する誤差信号は層を逆方向に進むにつれて指数関数的に小さくなり、初期層が効果的に学習できなくなります。恒等写像は、「スキップ接続」または「ショートカット接続」を作ることでこの問題を解決します。
連続する層に、参照先のないまったく新しい写像を学習させるのではなく、残差関数を学習するように設計します。数学的に、ブロックへの入力をxとすると、層は変換F(x)を学習します。恒等写像では、元の入力xをその変換の出力に直接加算し、最終出力F(x) + xを得ます。これにより、非常に深いネットワークでも勾配がモデルバックボーンを通って妨げられることなく直接流れるようになります。Google DeepMindやOpenAIなどの信頼性の高いAI研究機関は、大規模な基盤モデルのトレーニングを安定させるため、このようなアーキテクチャ上のショートカットを頻繁に活用しています。
恒等写像とアイデンティティ保持の比較#
恒等写像と、名前が似ているアイデンティティ保持を区別することが重要です。
恒等写像は、機械学習(ML)の学習フローを最適化するために設計されたニューラルネットワークの構造的なコーディング機能ですが、アイデンティティ保持は別個のコンピュータービジョンタスクです。アイデンティティ保持では、物体追跡において異なる動画フレーム間で、または生成AIのワークフローにおいて生成画像間で、特定の人物や物体の視覚的一貫性を保つことに重点を置きます。
実際のアプリケーション#
恒等写像は、今日の本番環境で使用されている多くの高精度モデルを支える基礎的な構成要素です。
- 高度な物体検出: 最新のリアルタイムアーキテクチャには、最新のUltralytics YOLO26などがあり、特徴抽出層内に恒等写像を含む高度な残差ブロックを使用します。これにより、ネットワークの深さが増しても性能を低下させずに、自動運転などの複雑な環境で高速かつ高精度な検出を実行できます。
- 画像分類モデル: arXivやIEEE Xplore Digital Libraryなどの学術リポジトリに詳しく記録されている最先端のビジョンアーキテクチャは、数百層のモデルを正常にトレーニングするために恒等写像を利用します。TensorFlowなどの高水準フレームワークは、こうしたショートカットを使って大規模なデータセットから非常に複雑な階層的特徴を抽出します。
PyTorchでの恒等写像の実装#
カスタムニューラルネットワークを構築する際、PyTorchなどのディープラーニングフレームワークには、こうしたショートカットを簡単に実装するためのネイティブツールが用意されています。PyTorch nn.Identityモジュールを明示的に使用するか、nn.Moduleのforwardパス内で数学的な加算を行います。
次のスニペットでは、恒等写像を利用した基本的な残差ブロックを示します。データセット管理とモデルのトレーニングにクラウドベースのUltralytics Platformを利用する開発者は、こうした高度に最適化されたアーキテクチャ構造を内部で自動的に活用できます。
import torch.nn as nn
class ResidualBlock(nn.Module):
def __init__(self, channels):
super().__init__()
# 特徴抽出のためのシンプルな畳み込み層
self.conv = nn.Conv2d(channels, channels, kernel_size=3, padding=1)
# 明示的な恒等写像モジュール
self.identity = nn.Identity()
def forward(self, x):
# ブロックの出力は、学習した特徴と恒等写像の合計です
return self.conv(x) + self.identity(x)








