정확도 올리기

박재형·2025년 3월 21일
post-thumbnail

저번 시간 우리는 이미지 학습 알고리즘을 제작해봤다. 하지만, 정확도가 그다지 높지 않았다. 그 이유는, flatten() 때문이다. 우리가 이미지학습 알고리즘에 flatten()을 사용하게 되면, 2차원 행렬 픽셀인 이미지를 1차원으로 압축하게 되는 것이다.
이 이미지에 flatten()을 쓰게 되면,
이미지가 이런 식으로 변형되어서 이미지 그 자체로의 의미를 잃게 되는 것이다. 또한, 저런 사각형 모양을 학습한 가중치들이 다른 사각형 모양에서는 쓸모가 없어지게 된다.

따라서 이런 문제를 해결하기 위해 만들어진 것이 Convolutional layer이다.Convolutional layer는 이미지를 압축하는 것이 아닌, 이미지에서 중요한 정보와 특징들을 추려 20장의 복사본을 만든다. 예를 들어서, 저런 5X5 픽셀 이미지에서 중요한 정보 (즉, 색상)들을 뽑아서 새로운 이미지들을 만들어 낸다.

이렇게 새로운 이미지를 만들어 내기 위해 이미지들의 특징을 추출하는 필터(?)를 kernel 이라고 한다.

업로드중..
(Sharpen kernel 사용)

이런 식으로 특징들을 살린 이미지를 여러개 학습하게 되어 모델의 정확도가 훨씬 올라가게 된다.

하지만, 이 단순 convolutional layer를 사용했을 때의 문제점이 있는데, 이미지들을 학습할 때 중요한 특징들이 이미지 하단에 있다면, 테스트 이미지에서 그 특징이 이미지 상단에 있으면 같은 이미지가 아닌 확률이 높다고 판단하게 되는 문제점이다. 응용력이 없게 되는 것이다.

그래서 나온 해결책이 Pooling layer이다. Pooling layer는 이미지의 중요한 특징을 추려서 중앙으로 가져오는 과정이다.

그래서 Convolutional과 Pooling layer를 같이 사용하게 되면 특징 추출과, 그 특징을 중앙으로 모아주게 되어 정확도와 응용력 둘 다 높은 모델을 제작할 수 있게 되는 것이다.

다음 시간에는 이 Convolutional layer와 Pooling layer를 이용하여 모델을 수정해보고 정확도가 얼마나 올라갔는지 비교해보겠다.

0개의 댓글