이번 장에서는 실제 cnn이 어떤 방식으로 구현되고 있는 지를 알아볼 것이다.
초기 cnn을 발견하신 LeCun 이라는 교수님이다. 이분은 2020년도인가에도 상을 받으셨다고 한다.
지금까지 우리가 배운 것을 보고 위의 그림을 이해 해보자
인풋 이미지는 32*32*1(흑백 이미지이기 때문에 1이다.)이며 6개의 필터를 사용한 것을 알수 있다. 다음 conv연산 이후 하나의 층이 6 layer가 생성 되었지 때문이다. 밑에 영어를 보니 conv 연산에 사용된 필터는 5*5 , stride 1을 사용하였다고 한다. pooling 연산에는 2*2 filter에 stride 2 를 사용 했다고 한다. 한번 풀링을 한 후에 다시 conv 연산에 사용된 필터는 16개이다. layer 가 16개로 늘어났기 때문이다. 사용한 필터의 크기는 5*5*6 일것이다. 이렇게 계속 연산을 해준후 FC 층에서 연산을 해준거라고 볼 수 잇다.
결과적으로 아키텍쳐는 CONV - POOL -CONV - POOL - CONV -FC 라 볼 수있다.
이렇게 우리는 지금까지 공부한 개념을 이용해 논문에 나오는 그림을 이해 할 수 있게 되었다.
이번에는 AlexNet이다. 이 네트워크는 그당시 이미지넷에서 1등을 차지하고 많은 센세이션을 불러 일으켰다는 모델이다. 이 것에 사용된 이미지는 227*227*3 rgb 이미지이며 첫번째 층에서 conv 연산에 11*11*3 의 필터가 stride 4로 사용이 되었으며 96개의 필터를 사용했다. output volume 으로 55*55*96 이라는 층이 나오게 된다. 이렇게 연산을 해주게 된다면 (11*11*3) * 96 이라는 파라미터가 생기게 된다. 여기서 파라미터는 w 이다. (참고로 아웃풋의 크기가 왜? 저렇게 되는지 모르는 분은 11-1을 꼭 다시 보기를 바란다.) 우리는 이 w를 학습하는 것이다.
두번째 층은
pooling 층이며 3*3 filters를 사용하였으며 stride는 2이다. 결과적으로 이미지의 크기만 작아지고 layer의 수는 같다. 사용한 파라미터는 없다.
이렇게 계속 반복이며 마지막으로 왼쪽 아래의 그림을 보면 저렇게 구성 되는 것을 알 수 있으며 우리는 저 그림을 보고 전반적인 모델에 대하여 이해를 할 수 있어야 한다.
세부 사항으로는 처음으로 relu를 적용한 모델이며 dropout 등등 다양한 방식이 사용되었으며 7개의 cnn을 앙상블 하게 되었다고 한다.
다음은 구글 넷인데 이러한 망을 사용했다고 한다. 정말 복잡하다.
다음은 많은 파장을 일으킨 resnet이다. 나도 최근에 프로젝트에 사용한 모델이며 성능이 아주 준수하다.
앞서 배운 알렉스 넷은 8개의 layers, vggnet 16개 이지만 resnet은 무려 152개이다. 당연히 깊이가 증가한 만큼 성능이 뛰어나다 하지만 이러한 resnet은 무작정 층을 쌓은 것이 아니다. 누구나 생각 가능하면 다 놀랄것이 아니기 때문이다. 간략히 설명하면 우리는 층이 깊어지게 되면서 기울기 소실이라는 문제를 만들었지만 relu라는 함수로 극복을 하였다. 하지만 더 층을 쌓으면 성능이 저하되는 이상한 경험을 하게 되었다. 이러한 문제를 해결하고 나온 것이 resnet이다.
(차후에 논문정리에서 꼭 다루어볼 것이다.)
resnet은 쭉 지나가며 계산을 하는 것이 아니라 쩜프를 하며 shortcut이 생기게 된다. 그런 결과 학습이 더 간단해지며 성능이 향상 되는 결과를 내게 되었다. 전체적인 깊이는 깊지만 실제로 학습하는 입장에서는 층이 낮게 느껴지게 된다.
뭐 그후 알파고 등등 이런게 다 cnn 이라고한다.
19*19*48 이미지에 뭐 zero pad 라고 하며 이런것도 있으니 알고 있으면 좋을 듯하다.
cnn끝!
이제 우리는 rnn에 대하여 알아볼 것이다!
'AI > 머신러닝(딥러닝) 정리' 카테고리의 다른 글
12. RNN (0) | 2022.05.07 |
---|---|
11-2. CNN (Convolutional Neural Networks) - Max pooling and others (0) | 2022.05.06 |
11-1. CNN (Convolutional Neural Networks) (0) | 2022.05.06 |
10-3. NN dropout and model ensemble (0) | 2022.05.05 |
10-2. Initialize weights in a smart way (0) | 2022.05.05 |