딥러닝에서 풀링층이란?
📂機械学習딥러닝에서 풀링층이란?
概要
人工ニューラルネットワークにおけるプーリング層とは、入力データの次元を局所的な単位で減らす関数を指す。指定された領域で最大値のみを残すものを最大値プーリング、指定された領域の平均値を残すものを平均値プーリングという。
定義
m×m 行列 X=[Xij]に対して、次の関数を最大値プーリングmax poolingと呼ぶ。
Pmax:Rn×nX→R↦max{Xij:1≤i,j≤m}
次の関数を平均値プーリングaverage poolingと呼ぶ。
Pavg:Rn×nX→R↦m21i=1∑mj=1∑mXij
説明
プーリングという名前がついているが、実際にはなくても構わない。上記の定義を見れば、単に最大値や平均とだけ呼んでも同じ意味である。プーリング層とは、入力データを小さな領域に分割し、各領域に対してプーリング演算を適用する関数を指す。すなわち、次のように再定義することができる。k∈Nとn=kmに対して、以下のように定義される関数Pmax:M(Rn×n)→M(Rm×m)を最大値プーリング層max pooling layerと呼ぶ。
YYij=Pmax(X)=max{X(i−1)k+p,(j−1)k+q∣1≤p,q≤k}.
次のように定義されるPavg:M(Rn×n)→M(Rm×m)を平均値プーリング層average pooling layerと呼ぶ。
YYij=Pavg(X)=k21p=1∑kq=1∑kX(i−1)k+p,(j−1)k+q
ジュリアのディープラーニングパッケージFlux.jlで簡単な行列について計算すると以下の通りである。
julia> using Flux
julia> mp = MaxPool((2,2))
MaxPool((2, 2))
julia> ap = MeanPool((2,2))
MeanPool((2, 2))
julia> A = collect(1.0:16.0) |> x->reshape(x, 4,4,1,1)
4×4×1×1 Array{Float64, 4}:
[:, :, 1, 1] =
1.0 5.0 9.0 13.0
2.0 6.0 10.0 14.0
3.0 7.0 11.0 15.0
4.0 8.0 12.0 16.0
julia> mp(A)
2×2×1×1 Array{Float64, 4}:
[:, :, 1, 1] =
6.0 14.0
8.0 16.0
julia> ap(A)
2×2×1×1 Array{Float64, 4}:
[:, :, 1, 1] =
3.5 11.5
5.5 13.5