CNN(畳み込みニューラルネットワーク)におけるストライド(stride)とは、畳み込みフィルタやプーリングの窓を、入力データ上でどの間隔で動かすかを指定する設定です。
簡単に言えば、「次に処理する位置へ、何ピクセル分ジャンプするか」を決めるパラメータです。
ストライドが処理結果に与える影響
ストライドの値は、出力される特徴マップの大きさ・解像度・情報量に直接影響します。
- ストライドが小さい
→ フィルタを細かく動かす
→ 出力は大きく、位置情報が細かく残る - ストライドが大きい
→ フィルタを飛び飛びに動かす
→ 出力は小さくなり、情報は間引かれる
このためストライドは、「どれだけ細かく特徴を見るか」と「どれだけ計算量を抑えるか」のバランスを決める重要な要素になります。
ストライド1の場合の特徴
ストライドを1に設定すると、フィルタは1ピクセルずつ順番に移動します。
この設定では、
- 画像内の細かな位置関係を捉えやすい
- エッジや小さな模様など、局所的な特徴を逃しにくい
- 出力サイズが大きくなりやすい
という特徴があります。
そのため、特徴抽出を重視する層ではストライド1がよく使われます。
ストライド2以上の場合の特徴
ストライドを2以上にすると、フィルタは1ピクセルおき、あるいはそれ以上の間隔で移動します。
この場合、
- 出力の縦横サイズが小さくなる
- 情報が圧縮され、計算量やメモリ使用量が減る
- 小さな特徴や細かい位置情報は失われやすい
という傾向が出ます。
そのため、ストライドを大きくすることはダウンサンプリング(解像度を下げる処理)として機能します。
ただし、「必ず半分のサイズになる」といった単純な話ではなく、実際の出力サイズはパディングの設定や入力サイズにも影響されます。
パディングとの関係で注意すべき点
ストライドの挙動は、パディング設定と密接に関係しています。
- パディングを行わない場合
→ フィルタが端まで届かず、出力が想定以上に小さくなる - パディングを行う場合
→ 出力サイズをある程度保ちやすくなる
特に「same」と呼ばれるパディング方式では、フレームワーク側が自動的に余白を調整し、ストライドが1のときは入力と同じ大きさの出力になるよう設計されています。
一方、ストライドが2以上の場合は、入力サイズが偶数か奇数かによって、「ちょうど半分」になったり「少しズレたサイズ」になったりします。
プーリング層におけるストライド
ストライドは畳み込み層だけでなく、プーリング層でも使われます。
代表的なのが、
- 2×2のMax Pooling
- ストライド2
という組み合わせです。
この設定では、画像の縦横サイズを効率よく縮小しつつ、重要な特徴(最大値)だけを残すことができます。
ストライド付き畳み込みとプーリングの使い分け
近年のCNN設計では、
- プーリング層を使う
- ストライドを大きくした畳み込みで代用する
という両方の設計が存在します。
ストライド付き畳み込みの特徴は、
- 重みを学習できる
- 情報の残し方をモデル自身が最適化できる
という点です。
そのため最近のモデルでは、ダウンサンプリングをストライド付き畳み込みで行う構成も多く見られますが、プーリングが不要になったわけではなく、モデル設計やタスクに応じて使い分けられています。
ストライドと受容野の関係
ストライドを大きくすると、1つの出力ユニットが参照する入力範囲は、結果として広がりやすくなります。
ただしこれは、
- フィルタサイズ
- 層の深さ
- 拡張畳み込み(dilation)
などと組み合わさって決まるものであり、ストライド単独で受容野が決まるわけではありません。
重要なのは、ストライドを大きくすると「広く、粗く」見る傾向になるという点です。
実務・設計上の考え方
実務的には、次のような考え方がよく採られます。
- 初期層
→ ストライドを大きめにして早めに解像度を下げる - 中間層
→ ストライド1で丁寧に特徴抽出 - 後半層
→ 再びストライドを使って情報を集約
つまりストライドは、モデル全体の情報の流れを設計するためのレバーとも言えます。
まとめ
- ストライドは「フィルタをどの間隔で動かすか」を決める設定
- 出力サイズ・計算量・情報密度に大きな影響を与える
- 大きくすると速く・粗く、小さくすると遅く・丁寧になる
- パディングや入力サイズと組み合わせて考える必要がある
以上、CNNのストライドについてでした。
最後までお読みいただき、ありがとうございました。
