TigerCow.Door

'딥러닝 이론'에 해당되는 글 2건


안녕하세요. 문범우입니다.

지난 포스팅에서 CNN에 대해서 알아보았습니다.

이번 포스팅에서는 이어서, CNN에서의 pooling과 나머지 것들에 대해서 알아보도록 하겠습니다.


* 해당 포스트의 모든 내용은 김성훈 교수님의 '모두를 위한 딥러닝'을 바탕으로 제작되었습니다.

관련한 상세 내용은 아래 링크를 참고해주세요.

https://hunkim.github.io/ml/



1. Pooling



Convolution Neural Network의 전체적인 구조를 위의 그림과 같이 확인해보면, Convolution과 RELU가 붙어져 있으며 중간에 한번씩 POOL을 하게 됩니다.


이때 진행되는 POOL이라는 것이 무엇인가 알아보도록 하겠습니다.


pooling이라는 것을 먼저 간단히 생각해본다면, sampling이라고 생각하면 됩니다.

우리가 입력 이미지에 대해서 위의 그림과 같이 convolution layer를 만드는데, 여기서 하나의 layer만 뽑아내고 이를 resize하는 과정을 pooling이라고 합니다.

복잡한 것이 아니고, 하나의 예를 들어서 pooling을 진행해보도록 하겠습니다.


pooling에서도 많이 사용되는 max pooling은 아래 사진과 같이 진행됩니다.


pooling에서는 우리가 지난 포스팅에서 알아보았던 filter라는 개념이 다시 사용되는데, 위의 사진과 같이, 2x2 형태의 필터를 이용하며, 이때 stride는 2로 설정하였습니다.

그럼 필터에서 어떠한 값을 어떻게 추출할 것인지가 문제가 됩니다.

이때 위에서 말했듯, max pooling을 사용하면 그림의 오른쪽과 같이 나오게 됩니다.


이런식으로 처리하는 것이 pooling입니다.



2. Others



정리를 해보자면, 지난 포스팅에서 배운 Convolution 을 통해 나온 벡터 값을 RELU 함수에 입력하고, 그 과정 중간에 위에서 배운 pooling과정을 진행하여 resize하는 방법을 진행합니다. 물론 layer를 어떻게 설정하느냐는 모델을 만드는 여러분의 몫입니다.

그리고 마지막 과정에서 보통 pooling을 진행하는데, 예를 들어 pooling을 통해 3x3x10의 형태로 결과가 나왔다면 이것을 x 값으로 하여 일반적인 Neural network를 구성하면 됩니다.

블로그 이미지

Tigercow.Door

Back-end / Python / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요


안녕하세요. 

이번 포스팅에서는 지난 포스팅에 이어 Softmax classifier의 cost 함수에 대해서 알아보도록 하겠습니다.


* 해당 포스트의 모든 내용은 김성훈 교수님의 '모두를 위한 딥러닝'을 바탕으로 제작되었습니다.

관련한 상세 내용은 아래 링크를 참고해주세요.

https://hunkim.github.io/ml/



1. Softmax classifier



우리가 지난 포스팅에서 학습한바와 같이, 위의 사진에서 오른쪽에 x 표가 되어있는 것보다는 제일좌측에 있는 하나의 행렬을 곱함으로써 하나의 벡터로써 결과가 나오게 됩니다.



즉 위와 같이 간단하게 생각해볼 수 있고, 빨간색 글씨 처럼 위에서 부터 a, b, c가 될 확률로 볼 수 있습니다.

그런데 빨간색으로 나와있는 숫자보다, 우측 알파벳 옆에 쓰인 검정색 글씨 처럼 각각이 0과 1사이의 값을 갖고 세개의 합이 1이되게 한다면, 우리는 각각의 값을 확률처럼 이용할 수 있게 됩니다.

확률처럼 이용할 수 있다는 것은 추후 우리가 분류를 할때 더 편하게 사용할 수 있기 때문에 우리는 각각의 값이 0~1사이의 값을 가지고 그들의 합이 1이 되도록 하려고 합니다.

그리고 그러한 것을 해주는 것이 바로 Softmax 입니다.



위와 같은 구조를 같는 Softmax 함수를 통해 각각의 값을 확률로써 볼 수 있습니다.



그리고 위의 사진처럼, 각각의 확률 값을 보면서 제일 큰 값을 1로 만들고 나머지를 0으로 만드는 One-Hot Encoding을 이용합니다. 이는 텐서플로우에서 max 등의 함수를 이용하면 쉽게 구현할 수 있습니다.


이렇게 해서 Hypothesis를 완성했으면 이제 Cost 함수를 만들어야 합니다.

그리고 그 후에 cost 값을 최소화 하면 됩니다.

먼저, Cost 함수를 살펴보겠습니다.



그림에서와 같이, 좌측에 있는 값이 Y hat으로써 우리가 Hypothesis를 통해 얻은 값이며 오른쪽의 값이 실제 Y의 값입니다.

그럼 왜 위와 같은 Cost함수가 나오는지 살펴보겠습니다.



위와 같이, 실제 값 L 이 [ 0 1 ]로 존재할때, 우리가 Y hat 값으로 [ 0 1 ]과 [ 1 0 ]일 때 위에서 세운 Cost 함수로 cost를 계산해보면 올바르게 예측한 [ 0 1 ] 에서는 cost 값이 0이 나오고 틀리게 예측한 [ 1 0 ] 에서는 cost 값이 무한대가 되게 됩니다.

따라서 우리가 세운 Cost 함수가 올바른 것을 알 수 있습니다.



그런데 이러한 Cost 함수는 우리가 지난 포스팅에서 알아보았던 Logistic cost 함수와 동일합니다.

식을 보았을 때는 매우 다르게 보이는데 어떻게 같은건지, 다음 포스팅에서 확인해보도록 하겠습니다.



그럼 마지막으로 cost를 최소화 하기위한 작업을 해야합니다.



지난 포스팅들에서 했던 것처럼 Gradient descent 를 이용하면 됩니다.

직접적으로 우리가 미분을 다루지는 않지만 미분을 통해 기울기를 구해서 그것을 통해 그래프상에서 내려가며 cost를 최소화 한다고 생각하시면 됩니다.

블로그 이미지

Tigercow.Door

Back-end / Python / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요