<h4>CNN: 畳み込み層の出力サイズ計算の基礎</h4>
<p>畳み込みニューラルネットワーク(CNN)において、畳み込み層は入力された特徴マップ(画像など)に対してフィルター(カーネル)を適用し、新たな特徴マップを出力します。このとき、出力される特徴マップの空間的なサイズ(高さと幅)は、いくつかの要因によって決定されます。</p>
<div class="section">
<h5>出力サイズに影響する要素</h5>
<ul>
<li><strong>入力サイズ (W or H):</strong> 入力特徴マップの高さまたは幅。</li>
<li><strong>カーネルサイズ (K):</strong> 畳み込みに使用するフィルター(カーネル)の高さまたは幅。</li>
<li><strong>ストライド (S):</strong> フィルターを入力特徴マップ上でスライドさせる際の移動ステップ幅。</li>
<li><strong>パディング (P):</strong> 入力特徴マップの周囲に追加されるピクセル数(通常は0で埋められる)。パディングは、出力サイズを調整したり、入力の境界付近の情報をより活用したりするために用いられます。</li>
</ul>
</div>
<div class="section">
<h5>出力サイズの計算式</h5>
<p>出力サイズ(高さまたは幅) \(O\) は、上記の要素を用いて以下の一般式で計算できます。</p>
<div class="formula">
$ O = \lfloor \frac{W - K + 2P}{S} \rfloor + 1
lt;/div>
<p>ここで、\(W\) は入力サイズ、\(K\) はカーネルサイズ、\(P\) はパディング、\(S\) はストライドです。\(\lfloor \cdot \rfloor\) は床関数(小数点以下切り捨て)を表します。この式は高さと幅の両方に適用できます。</p>
</div>
<div class=\"section\">
<h5>今回の問題における計算 (高さ)</h5>
<p>問題で与えられたパラメータは以下の通りです。</p>
<ul>
<li>入力高さ (W): 32</li>
<li>カーネル高さ (K): 3</li>
<li>パディング (P): 0</li>
<li>ストライド (S): 1</li>
</ul>
<p>これらの値を上記の計算式に代入します。</p>
<div class="formula">
$O_{height} = \lfloor \frac{32 - 3 + 2(0)}{1} \rfloor + 1 \\\
= \lfloor \frac{29 + 0}{1} \rfloor + 1 \\\
= \lfloor \frac{29}{1} \rfloor + 1 \\\
= \lfloor 29 \rfloor + 1 \\\
= 29 + 1 = 30
$ </div>
<p>したがって、出力特徴マップの高さは <strong>30</strong> となります。幅についても同様に計算すると30になります。</p>
</div>
<div class="key-point">
<div class="key-point-title">パディングなしの場合の出力サイズ</div>
<ul>
<li>パディングがない(P=0)場合、畳み込み演算を行うごとに出力サイズは入力サイズよりも小さくなります(特にカーネルサイズが1より大きい場合)。</li>
<li>ストライドが1の場合、出力サイズは `W - K + 1` となります。今回のケースでは `32 - 3 + 1 = 30` と一致します。</li>
<li>層を重ねるごとに特徴マップが小さくなりすぎると、空間的な情報が失われる可能性があるため、必要に応じてパディング(特にSame Padding)が用いられます。</li>
</ul>
</div>