畳み込みニューラルネットワーク(CNN)の設定項目の中でも、ストライドは最も基本的でありながら、出力サイズの計算問題として試験に直結する重要キーワードです。「フィルタをどれだけずらして動かすか」というシンプルな概念を、計算式まで含めてしっかり理解しましょう。

📖 ひと言でいうと

ストライドとは、畳み込み処理でフィルタ(カーネル)を入力データ上で移動させるときの「歩幅」、つまり1回ごとに何ピクセルずらすかを指定する設定値です。

身近な例えでは、雑巾がけの拭き方を思い浮かべてください。床を1列ずつ丁寧にずらして拭けば隅々まできれいになりますが時間がかかり、2〜3列飛ばしで拭けば速く終わるかわりに拭き残しが出ます。厳密には「拭き残し」ではなく、ストライドを大きくすると出力される特徴マップが粗く(小さく)なり、細部の情報が失われる可能性がある、ということです。

🖼 1枚でわかるストライド

ストライド=フィルタを動かす歩幅
  • 定義 — フィルタを入力データ上で移動させる間隔
  • ストライド1 — 1ピクセルずつ移動し、全体を詳細にスキャン
  • ストライド2以上 — 移動幅が広がり、出力特徴マップが小さくなる
  • トレードオフ — 計算量削減・軽量化 ⇔ 細部情報の損失
  • 出力サイズ — (W+2P-F)/S+1 で計算できる(試験頻出)
つくもち屋「G検定対策」SUMMARY

📘 公式テキストの説明

フィルタ(カーネル)を入力データ上で移動させる際の間隔を指す。ストライドが1の場合、フィルタは1ピクセルずつ移動し、入力データ全体を詳細にスキャンする。一方、ストライドを2や3など大きく設定すると、フィルタの移動幅が広がり、出力される特徴マップのサイズが小さくなる。これにより、計算量の削減やモデルの軽量化が可能となるが、細部の情報が失われる可能性もあるため、ストライドの設定はモデルの目的や入力データの特性に応じて慎重に選択する必要がある。

要するに、ストライドは「精度と効率のダイヤル」です。小さくすれば入力をくまなく調べる代わりに計算が増え、大きくすれば計算は軽くなる代わりに情報が粗くなります。どちらが正解というものではなく、タスクとデータに応じて設計者が選ぶハイパーパラメータの1つです。

🔍 しっかり理解する

ストライドを変えると何が起きるか

畳み込みでは、フィルタを入力の左上から右下へスライドさせながら、重なった領域の積和演算を繰り返します。ストライドはこのスライドの1歩の大きさです。

フィルタを配置
入力の左上に重ねる
積和演算
重なる領域で計算し出力1マス分を得る
Sピクセル移動
ストライドの分だけ右へずらす
端まで繰り返し
行末なら次の行へ。全体で特徴マップ完成

ストライドが1なら出力のマス目は密に並び、2なら1つ飛ばしになるため、出力の縦横サイズはおよそ半分になります。つまりストライドを大きくすることは、特徴マップのダウンサンプリング(縮小)を兼ねているのです。実際、プーリング層の代わりにストライド2の畳み込みで縮小を行うネットワーク設計もあります。

出力サイズの計算式(試験頻出)

入力の幅をW、フィルタサイズをF、パディングをP、ストライドをSとすると、出力特徴マップの幅は次の式で求められます。

出力サイズ = (W + 2P - F) / S + 1

例1: 入力28×28、フィルタ3×3、パディング0、ストライド1の場合 (28 + 0 - 3) / 1 + 1 = 26 なので出力は26×26です。

例2: 入力28×28、フィルタ3×3、パディング1、ストライド2の場合 (28 + 2 - 3) / 2 + 1 = 27/2 + 1 = 13.5 + 1 → 割り切れないときは切り捨てて13 + 1 = 14 となり、出力は14×14です。

Sが分母にあることからわかる通り、ストライドを2倍にすれば出力サイズはおよそ半分になります。G検定では数値を当てはめて出力サイズを選ばせる計算問題が想定されるので、この式は使えるようにしておきましょう。

何のために大きなストライドを使うのか

ストライドを大きくする動機は、公式テキストにある通り「計算量の削減やモデルの軽量化」です。出力が小さくなれば、その後の層の計算もメモリも減ります。一方で、小さな物体や細かいテクスチャの検出が重要なタスクでは、粗いスキャンによって手がかりを取りこぼす恐れがあります。高解像度の入力を扱う初期の層でストライド2を使ってサイズを落とし、以降は1で細かく処理する、といった使い分けが典型的です。

💡 具体例で考える

手書き数字認識の入力画像28×28ピクセルを例にします。3×3フィルタをストライド1で適用すると出力は26×26で、数字の輪郭のわずかな曲がりも捉えられます。同じフィルタをストライド3にすると出力は約9×9まで縮み、計算は速くなりますが、「3」と「8」を分ける細かい曲線の違いが潰れてしまうかもしれません。数字認識のような細部が命のタスクでは小さいストライドが安全、というわけです。

逆に、4K解像度の監視カメラ映像から「人がいるかいないか」だけを判定するなら、1ピクセル単位の情報は不要です。最初の層で大きめのストライドを使って画像を大胆に縮小すれば、精度をほぼ保ったまま処理速度を大きく稼げます。

⚠️ よくある誤解・紛らわしい用語

💡 ポイント
  • パディングとの混同 — パディングは入力の周囲に値を追加して出力サイズの縮小を防ぐ手法、ストライドはフィルタの移動間隔です。出力サイズの式では、Pは分子でサイズを増やす方向、Sは分母でサイズを減らす方向に働きます。
  • Dilated Convolutionとの混同 — ストライドは「フィルタ自体をどれだけずらすか」、Dilated Convolutionは「フィルタ内部の要素間にどれだけ隙間をあけるか」です。前者は出力を小さくし、後者は出力サイズを保ったまま受容野を広げます。
  • 「ストライドを大きくすると必ず精度が下がる」は言い過ぎ — 細部情報が失われる可能性はありますが、タスクによっては影響が小さく、計算効率とのバランスで慎重に選択するのが正しい理解です。
  • プーリングとの関係 — どちらも特徴マップを縮小できますが、ストライド付き畳み込みは学習可能な重みを使った縮小、プーリングは最大値や平均値を取る固定的な縮小という違いがあります。

📝 試験でのポイント

💡 ポイント
  • 「フィルタを移動させる際の間隔」という定義の穴埋め・正誤問題が基本形です。
  • 「ストライドを大きくする→出力特徴マップが小さくなる→計算量削減・軽量化、ただし細部情報が失われる可能性」という因果の連鎖を問う選択肢が想定されます。
  • 出力サイズ計算 (W+2P-F)/S+1 に具体的な数値を入れて答えさせる問題に備え、例題を1〜2回手で計算しておきましょう。
  • パディング・Dilated Convolutionと役割を入れ替えた誤答選択肢に注意してください。

📚 まとめ

ストライドは、畳み込みでフィルタを動かす歩幅を決めるハイパーパラメータです。1なら入力全体を詳細にスキャンし、2以上にすると出力特徴マップが小さくなって計算量を削減できる一方、細部の情報が失われる可能性があります。出力サイズは (W+2P-F)/S+1 で計算でき、この式はG検定の計算問題対策として必須です。「歩幅・出力サイズ・トレードオフ」の3点で整理して覚えましょう。