딥러닝에서 풀링층이란?
📂머신러닝딥러닝에서 풀링층이란?
개요
인공신경망에서 풀링층이란, 입력 데이터의 차원을 국소적인 단위로 줄이는 함수를 말한다. 지정된 영역에서 최댓값만을 남기는 것을 최대값풀링, 지정된 영역의 평균값을 남기는 것을 평균값풀링이라 한다.
정의
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