Identity Mapping
ディープラーニングにおける恒等写像(identity mapping)について解説します。スキップ接続がどのように勾配消失を防ぎ、Ultralytics YOLO26のようなニューラルネットワークの性能を向上させるかを学びます。
数学および線形代数において、恒等写像または単位行列は、入力として使用された値と全く同じ値を返す関数です。人工知能(AI)およびディープラーニングの文脈では、恒等写像とは、非線形変換を一切行わずに、入力データを畳み込みニューラルネットワーク(CNN)の後続レイヤーへ直接渡すために使用される特定のアーキテクチャ手法を指します。この概念は、2015年の残留ネットワーク(ResNet)の導入によって広く普及し、ディープなコンピュータビジョン(CV)モデルの構造化とトレーニングの方法に革命をもたらしました。
Identity Mappingの仕組み#
ディープニューラルネットワークは、勾配消失問題に頻繁に直面します。誤差逆伝播法において、ネットワークの重みを更新するために使用される誤差信号は、レイヤーを逆方向に伝播するにつれて指数関数的に小さくなり、初期のレイヤーが効果的に学習するのを妨げます。恒等写像は、「スキップ接続」または「ショートカット接続」を作成することでこれを解決します。
連続するレイヤーに全く新しく参照されていないマッピングを強制的に学習させる代わりに、それらは残差関数を学習するように設計されています。数式的に、ブロックへの入力が x である場合、レイヤーは変換 F(x) を学習します。恒等写像は、元の入力 x をその変換の出力に直接追加し、最終的な出力 F(x) + x を生成します。これにより、非常に深いネットワークであっても、勾配がモデルバックボーンを介して妨げなく直接流れることが保証されます。Google DeepMindやOpenAIのような信頼できるAI研究組織は、大規模な基盤モデルでのトレーニングを安定させるために、これらのアーキテクチャ上のショートカットを頻繁に活用しています。
Identity MappingとIdentity Preservationの違い#
恒等写像と、名前の似ているアイデンティティ保持(Identity Preservation)を区別することが重要です。
機械学習(ML)のトレーニングフローを最適化するために設計されたニューラルネットワークの構造上のコーディング機能が恒等写像であるのに対し、アイデンティティ保持は独立したコンピュータビジョンタスクです。アイデンティティ保持は、オブジェクト追跡における異なるビデオフレームにわたる、または生成AIワークフローにおける生成された画像にわたる、特定の人またはオブジェクトの視覚的一貫性を維持することに焦点を当てています。
実社会での応用#
Identity Mappingは、今日実運用で広く使用されている多くの高精度モデルの基本的な構成要素として機能しています。
- 高度なオブジェクト検出: 最新のUltralytics YOLO26を含む最新のリアルタイムアーキテクチャは、特徴抽出レイヤー内に恒等写像を含む高度な残差ブロックを利用しています。これにより、ネットワークの深度が増してもパフォーマンスを低下させることなく、自動運転などの複雑な環境で高速かつ正確な検出を実行できます。
- 画像分類モデル: arXivやIEEE Xplore Digital Libraryなどの学術リポジトリで詳細に文書化されている最先端のビジョンアーキテクチャは、数百のレイヤーを持つモデルのトレーニングを成功させるために恒等写像に依存しています。TensorFlowなどの高水準フレームワークは、これらのショートカットを使用して、大規模なデータセットから非常に複雑な階層的特徴を抽出します。
PyTorchにおけるIdentity Mappingの実装#
カスタムニューラルネットワークを構築する場合、PyTorchなどのディープラーニングフレームワークは、これらのショートカットを簡単に実装するためのネイティブツールを提供します。PyTorch nn.Identityモジュールを明示的に使用するか、nn.Moduleのフォワードパス内で数式的な加算を適用するだけです。
次のスニペットは、恒等写像を利用した基本的な残差ブロックを示しています。データセット管理とモデルトレーニングのためにクラウドベースのUltralytics Platformを利用する開発者は、バックグラウンドでこれらの高度に最適化されたアーキテクチャ構造の恩恵を自動的に受けることに注意してください。
import torch.nn as nn
class ResidualBlock(nn.Module):
def __init__(self, channels):
super().__init__()
# A simple convolutional layer for feature extraction
self.conv = nn.Conv2d(channels, channels, kernel_size=3, padding=1)
# Explicit identity mapping module
self.identity = nn.Identity()
def forward(self, x):
# The block output is the sum of the learned features and the identity map
return self.conv(x) + self.identity(x)





