ストライドとは?CNNの畳み込みで使う意味・仕組み・選び方を解説

AIの初心者
「ストライド」って何ですか?CNNで出てくる言葉だと聞いたのですが、まだイメージできていません。

AI専門家
ストライドは、畳み込み処理でフィルターを画像上に何画素ずつ動かすかを表す値です。日本語では「歩幅」と考えると分かりやすいですね。

AIの初心者
フィルターを動かす幅ということですね。ストライドを変えると、何が変わるのでしょうか?

AI専門家
ストライドが1なら1画素ずつ、2なら2画素ずつフィルターをずらします。大きくすると計算は軽くなりますが、細かな特徴を見落としやすくなるため、精度とのバランスが大切です。
ストライドとは。
ストライドとは、CNN(畳み込みニューラルネットワーク)の畳み込み処理で、フィルターを画像上にどれだけの間隔で移動させるかを決める値です。画像認識では、フィルターが画像の一部を順番に調べ、輪郭や模様などの特徴を取り出します。このときの移動幅がストライドです。

ストライドとは何か
ストライドは、畳み込み処理におけるフィルターの歩幅です。たとえば3×3のフィルターを画像に重ね、左上から右方向、次に下方向へ少しずつずらしながら計算するとします。このとき、1画素ずつ動かすならストライドは1、2画素ずつ動かすならストライドは2です。
畳み込みニューラルネットワークでは、入力画像をそのまま丸暗記するのではなく、局所的な模様や境界、明るさの変化を特徴として取り出します。フィルターは小さな窓のような役割を持ち、その窓をどれくらい細かく動かすかが、計算量や出力される特徴マップの大きさに影響します。
ストライドが小さいほど、フィルターは画像を細かく確認します。小さな物体や微妙な輪郭を拾いやすい反面、計算回数は増えます。ストライドが大きいほど、フィルターは飛び飛びに画像を確認します。処理は軽くなりますが、細部を見逃す可能性があります。
ストライドで出力サイズが変わる仕組み
ストライドは、出力される特徴マップのサイズを決める重要な要素です。入力画像の幅、高さ、フィルターのサイズ、パディングの有無が同じでも、ストライドを大きくするとフィルターを置ける位置が少なくなるため、出力サイズは小さくなります。
代表的な1次元方向の出力サイズは、次の式で考えられます。
\(出力サイズ = \left\lfloor \frac{入力サイズ + 2 \times パディング – フィルターサイズ}{ストライド} \right\rfloor + 1\)たとえば入力が5、フィルターサイズが3、パディングが0の場合、ストライド1では出力サイズは3になります。一方、ストライド2では出力サイズは2になります。これは、フィルターを置ける開始位置が少なくなるためです。
初心者が混乱しやすい点は、出力サイズがストライドだけで決まるわけではないことです。パディングを追加すれば周辺部まで計算しやすくなり、フィルターサイズを大きくすれば1回の計算で見る範囲が広がります。ストライドは、それらの設定と組み合わせて特徴マップの解像度を調整する値です。

ストライド1の畳み込み
ストライド1は、CNNの基本的な設定としてよく使われます。フィルターを1画素ずつ動かすため、隣り合う計算範囲が大きく重なります。その分、画像の細かな変化を丁寧に拾いやすくなります。
たとえば、物体の輪郭、小さな模様、わずかな明暗差などを検出したい場合、ストライド1は有利です。特に画像内の対象物が小さいときや、位置の違いが認識結果に大きく関わるときは、粗く間引かないことが重要になります。
ただし、ストライド1は計算回数が多くなります。高解像度画像を何層もの畳み込み層で処理する場合、特徴を細かく捉えられる一方で、学習時間や推論時間、メモリ使用量が増えやすくなります。実務では、必要な精度を保てるかを確認しながら、後段の層や一部の層でサイズを下げる設計がよく行われます。

ストライド2以上の畳み込み
ストライドを2以上にすると、フィルターは画像上を飛び飛びに移動します。畳み込みを行う位置が減るため、計算量を減らし、出力される特徴マップのサイズも小さくできます。高解像度画像を扱う場合や、限られた計算資源で推論したい場合には大きな利点があります。
一方で、ストライドを大きくしすぎると、フィルターが確認しない領域が増えます。小さな対象物、細い線、局所的な異常などは、移動間隔の間に埋もれてしまうことがあります。物体検出や医療画像のように小さな特徴が重要なタスクでは、ストライドの大きさが精度低下につながる場合があります。
ストライド2は、特徴マップの縦横サイズをおおむね半分にする目的で使われることがあります。これは処理を軽くするうえで便利ですが、情報を間引いていることも忘れてはいけません。速度を上げたいからといって単純に大きくするのではなく、検証データで精度や見落としを確認することが必要です。
| ストライド | 特徴 | 利点 | 注意点 |
|---|---|---|---|
| 1 | 1画素ずつ細かく移動 | 細部を拾いやすい | 計算量と出力サイズが大きい |
| 2以上 | 間隔を空けて移動 | 処理が軽く、特徴マップを小さくできる | 小さな特徴を見落とす可能性がある |

ストライドとプーリングの違い
ストライドとプーリングは、どちらも特徴マップのサイズ縮小に関係します。ただし、処理の意味は同じではありません。ストライドは畳み込み中にフィルターを動かす間隔であり、プーリングは畳み込み後の特徴マップから代表値を取り出す処理です。
プーリングでは、たとえば2×2の領域から最大値を取り出す最大値プーリングや、平均値を取る平均プーリングが使われます。これにより、少し位置がずれても同じような特徴として扱いやすくなり、モデルが細かな位置変化に過敏になりにくくなります。
一方、ストライドは畳み込み演算そのものの実行位置を決めます。ストライドを大きくすると、そもそも畳み込みを行う回数が減ります。つまり、ストライドは計算する場所を間引き、プーリングは計算後の特徴を要約する処理だと考えると整理しやすくなります。
| 項目 | ストライド | プーリング |
|---|---|---|
| 処理のタイミング | 畳み込み演算中 | 畳み込み演算後 |
| 主な役割 | フィルターの移動間隔を決める | 領域内の代表値を取り出す |
| サイズ縮小の理由 | 計算位置が少なくなる | 複数の値を1つにまとめる |
| 注意点 | 細かな特徴を見落とす可能性 | 局所情報を要約しすぎる可能性 |

ストライドの選び方
ストライドの値は、扱う画像と目的によって変わります。最初に理解しておきたいのは、ストライドには万能な値がないという点です。小さくすれば情報を多く残せますが、計算は重くなります。大きくすれば高速化しやすい一方、重要な特徴を失う可能性があります。
学習の初期段階では、まずストライド1を基準に考えると分かりやすくなります。そのうえで、入力画像が大きすぎる、処理時間が長い、メモリが足りないといった課題がある場合に、ストライド2などで特徴マップを小さくする設計を検討します。
小さな物体を見つけたい場合や、細かな欠陥を検出したい場合は、ストライドを大きくしすぎない方が安全です。反対に、画像全体の大まかな分類が目的で、対象物も大きく写っているなら、途中の層でストライドを使ってサイズを落としても問題が少ない場合があります。
実務では、ストライドの候補をいくつか試し、検証データで精度、推論速度、メモリ使用量を比較します。特にモデルを軽量化したいときは、ストライドだけでなく、画像サイズ、フィルター数、層の深さ、プーリングの使い方もあわせて調整します。
まとめ
ストライドとは、CNNの畳み込み処理でフィルターを何画素ずつ動かすかを表す値です。ストライド1では画像を細かく確認でき、ストライド2以上では計算量と出力サイズを抑えやすくなります。
ただし、ストライドを大きくすると情報を間引くことになります。小さな特徴を見落とす可能性があるため、画像の性質、タスクの目的、必要な精度、利用できる計算資源を見ながら決めることが大切です。プーリングとの違いも押さえておくと、CNNの構造をより理解しやすくなります。
更新履歴
| 日付 | 内容 |
|---|---|
| 2025年1月31日 | 初回公開 |
| 2026年5月13日 | 出力サイズの式とプーリングとの差分を追いやすく補強 |
