本文へ移動

G検定(ジェネラリスト検定)

ぱでぃんぐ

パディング

Padding

パディングとは、畳み込みの前に入力の外周へ値(多くの場合0)を付け足す処理です。付け足さないと、幅mの入力に幅kのカーネルを当てた出力の幅はm-k+1となり、層を通るたびにk-1ずつ縮みます。0を付け足すゼロパディングを使えば、カーネルの幅とは別に出力の大きさを決められます。

詳しい説明

パディングが扱う問題

畳み込み層は、カーネル(小さな重みの並び)を入力の上でずらしながら、重なった部分の値と重みを掛けて足し合わせ、出力の値を1つずつ求めます。カーネルが入力の外へはみ出さない位置だけで計算すると、カーネルを置ける位置の数は入力の幅より少なくなります。そのため出力は入力より小さくなります。

パディングとは、この計算の前に入力の外周へ値を付け足し、入力を広げておく処理です。付け足す値を0にする方法をゼロパディングと呼びます。Goodfellow、Bengio、Courvilleによる教科書「Deep Learning」(2016年)の第9章は、ゼロパディングによって、カーネルの幅と出力の大きさを互いに独立に決められるようになると説明しています。

パディングを加えないときの出力の幅

先の教科書は、外周に何も付け足さず、カーネルが入力の内側に収まる位置だけで計算する畳み込みをvalid畳み込み(valid convolution)と呼んでいます。入力の幅を 、カーネルの幅を とすると、valid畳み込みの出力の幅は次の式になります。

カーネルの左端を置ける位置は、入力の1番目から 番目までだからです。 番目より右に置くと、カーネルの右端が入力の外へはみ出します。出力は入力より だけ短くなり、同書もゼロパディングを使わない場合は層ごとに出力の幅がカーネルの幅より1小さい分だけ縮むと述べています。

数値で確かめる

以下の数値は説明のために作った架空の例です。1次元の入力を 1、3、2、4、0、5 の6個()とし、3個の重みがすべて1のカーネル()を1マスずつずらして当てます。このカーネルは、隣り合う3個の値の合計を求めることになります。

パディングを加えないと、カーネルを置ける位置は4か所です。




出力は 6、9、6、9 の4個で、式の と一致します。入力の両端にある1と5は、それぞれ1回の計算にしか使われていません。

次に、入力の左右に0を1個ずつ付け足して 0、1、3、2、4、0、5、0 の8個にしてから、同じカーネルを当てます。






出力は 4、6、9、6、9、5 の6個になり、元の入力と同じ幅に保たれました。広げた後の入力の幅は8なので、式に当てはめると です。

出力の幅を保つのに必要な0の数

左右に 個ずつ0を付け足すと、入力の幅は になり、出力の幅は になります。これを元の幅 と等しくするには 、つまり とします。カーネルの幅が3なら左右に1個ずつ、幅が5なら左右に2個ずつです。カーネルの幅が偶数のときは が奇数になるので、左右に同じ数ずつ分けることはできません。

層を重ねたときの差

縮み方の影響は、層を重ねると大きくなります。これも架空の例ですが、幅32の入力に対し、幅5のカーネルを使う畳み込み層をパディング無しで重ねると考えます。1層ごとに ずつ縮むので、出力の幅は28、24、20と減り、7層目で になります。8層目では幅がカーネルの幅5より小さい入力に当てることになり、カーネルを置ける位置がなくなります。この条件では、層の数が入力の大きさとカーネルの幅によって上限を決められてしまいます。

各層で左右に2個ずつ0を付け足すと、どの層でも となり、幅は32のまま保たれます。パディングの量を選べるので、カーネルの幅と出力の大きさは、層の数の上限と切り離して決められます。先の教科書が述べる「カーネルの幅と出力の大きさを独立に決められる」とは、このことです。

誤解しやすい点

パディングは入力に新しい情報を加えるものではありません。付け足した0は実際の入力の値ではなく、カーネルを置ける位置を増やすための値です。上の例でも、両端の出力4と5には0が含まれており、内側の出力とは計算に使った実際の値の数が異なります。

出力の大きさを決めるのはパディングだけではありません。カーネルを1回に何マスずつずらすか(ストライド)によっても出力の幅は変わります。このページの例はすべて1マスずつずらす場合の計算です。

試験で問われること

G検定

  • パディングは、畳み込みの前に入力の外周へ値(多くの場合0)を付け足す処理であり、0を付け足す方法をゼロパディングと呼びます。
  • パディングを加えない畳み込み(valid畳み込み)では、入力の幅m、カーネルの幅kに対して出力の幅がm-k+1になり、層ごとにk-1ずつ縮みます。
  • 左右に(k-1)/2個ずつ0を付け足すと、1マスずつずらす畳み込みの出力の幅を入力と同じに保てます。
  • ゼロパディングを使うと、カーネルの幅と出力の大きさを独立に決められるため、出力が縮み切ることで層の数が制限されるのを避けられます。

最終更新日: 2026/09/23