본문 바로가기
인공지능 (AI)

36번째 이야기 - 케라스, 스트라이드, 패팅, 손실함수, 풀링(pooling)

by Ψβ⅓ 2024. 6. 2.

코드는 함수형태로 되어 있어 개념이해를 먼저 하시는게 여러모로 좋은 듯 합니다.

 

코드는 케라스를 활용하면 아래 내용으로 인자값 설정만 해주면 됩니다.

 

from keras.layers import Conv2D model.add(Conv2D(filters=16, kernel_size=2, strides='1', padding='same', activation='relu'))

 

 

스트라이드와 패딩의 목적을 정리해봅시다. 하나는 이미지의 중요 디테일을 놓치지 않고 다음 층으로 전달하기 위함입니다(스트라이드가 1이고, 패딩을 사용하면 이미지 크기를 같게 유지할 수 있음).

두 번째는 이미지의 공간적 정보 계산의 부하를 적절한 수준으로 감소시키기 위함입니다. 제로 패딩을 통해 출력의 크기를 유지하면서도 값을 0으로 내어 적절히 무시할 수 있게 합니다.

합성곱에서 중요하게 세팅해주어야 하는 하이퍼파라미터 5개를 살펴보았습니다. 합성곱층의 수가 늘어나면 신경망이 학습해야 하는 파라미터의 수가 기하급수적으로 늘어나게 됩니다. , 계산 복잡도가 증가하고, 학습 시간도 늘어나게 됩니다.

기억합시다. 손실함수의 값을 줄이고, 정확도를 증가시키는 것이 신경망 학습의 목표입니다. 그러나 계산 복잡도에 따른 학습 시간은 Trade-Off의 관계입니다. , 신경망 학습의 목표 만큼이나 계산 복잡도를 줄여 학습 시간을 줄이는 것은 매우 중요합니다.

그렇다면 파라미터의 개수를 줄여 계산 복잡도를 줄여주어야 한다는 말인데(...) 방법이 없을까요?

, 이제 합성곱층 바로 다음 단계인 풀링(Pooling)에 대해 살펴볼 차례가 되었군요. 다음 글에서 풀링(Pooling)층이 왜 존재하며, 여기에서 어떤 일이 벌어지는지 살펴보도록 하겠습니다.

 

 

풀링층 모습

 

 

 

미리 위 그림의 의미를 잘 살펴보면 다음 글이 도움이 됩니다.

입력층에서 28×28×1의 이미지가 합성곱층에서는 28×28×10의 차원으로 깊이가 깊어집니다(1에서 10으로 두꺼워짐).

이렇게 증가한 파라미터로 인한 계산복잡도를 줄여주기 위해 풀링층이 있습니다.

풀링층에서는 28×28×10 사이즈의 특성맵이 14×14×10으로 변합니다. 깊이는 그대로 인데 이미지 가로, 세로의 사이즈가 줄었네요. 아하?! 여기에 풀링층의 핵심이 있습니다.

 

 

 

 

<합성곱 신경망에서의 이미지 압축 프로그램! 풀링층을 살펴봅시다>

 

풀링층 모습

 

위 그림의 예에서는 합성곱 신경망에서 합성곱 층을 통과하면 입력층의 28×28×1 이미지가 28×28×10의 특징맵으로 바뀝니다. , 깊이가 깊어지게 되어(마치 부피가 증가하는 것처럼) 최적화해야 할 파라미터의 수가 급격히 늘어나게 된다고 말씀드렸습니다.

파라미터의 수가 증가하면 학습 시간이 오래 걸립니다. 바쁘다 바빠 현대사회에서 이런 단점은 치명적입니다. 이를 극복하게 해주는 것이 바로 이번 글에서 설명드릴 풀링층입니다.

풀링(Pooling) 또는 서브샘플링(Subsampling)이라 불리는 이 층은 신경망의 가로와 세로의 크기를 줄여 다음 층으로 전달하는 파라미터의 수를 감소시켜줍니다.

, 풀링층의 목적은 다시 한번 말씀 드리지만 합성곱에서 만든 특징 맵(28×28×10)을 다운 샘플링(14×14×10)해서 파라미터의 수를 줄여 계산 복잡도를 낮춰주는 데 있습니다.

보통 CNN에서는 합성곱층 사이에 풀링층을 끼우는 형태를 취합니다.

 

 

풀링층 연산

 

 

그렇다면 풀링층에서는 어떻게 입력과 출력의 사이즈(28×28×10)14×14×10으로 줄일 수 있는 것일까요? 그것이 궁금합니다.

합성곱층에서는 합성곱 연산이 이루어지듯, 풀링층에서도 풀링 연산이 행해집니다. 풀링 연산에는 최대 풀링과 평균 풀링이 있습니다. 먼저 가장 흔히 쓰이는 최대 풀링을 다음 글에서 살펴보죠.

댓글