요약
연구계획에도 작성하였던 것 처럼 1차 모임에는 가벼운 마음으로 논문 7편 정도를 리뷰하였고 1차 모임에서는 CNN설계 방법론적인 내용과 알려진 모델의 설계 아이디어를 배우는데 그 모적을 두고 논문리뷰를 진행 하였습니다.
추후에 진행 사항 공유를 위해 리뷰한 논문 목록은 따로 작성해서 글로 올려놓을 예정입니다.
천천히 학습량과 속도를 늘려 나갈 예정으로 다음 차시때 13-15편정도의 관련 논문을 분석, 리뷰할 예정입니다.
논문 리뷰 요약
Going deeper with convolutions
해당 논문에서는 크게 3가지 논점을 가지고 있는데
첫 번째로 inception module의 사용인데 googlenet을 포함한 나중에 발표하는 논문들에서도 이것을 어떻게 구성하고 반복하고 배치할지를 고민하고 논의하게 됩니다.
두번째로 1 * 1 convolution의 사용입니다. 해당 논문에서 발최한 부분인데 1 * 1 convolution의 사용을 통해 차원감소 등에 목적을 두는 것인데 해당연산을 통해 연산량대비 큰 이득을 설계상 이점으로 챙길수 있다고 합니다.
세 번째로 앞선 2013년도까지의 첼린지에서는 보시는 바와 같이 convolution연산의 개념 뉴럴넷의 개념이 잘 활용되지 못하던 분위기에서 2014년을 기점으로 CNN이 엄청난 성능 도약과 함께 인기를 끌게 됩니다.
그것을 생각해보면 2018년 현재부터 2014년까지 단지 4년의 시간거리밖에 지나지 않았네요. 그 다음 4년은 무슨일이 있을까 궁금합니다.
Rethinking the Inception Architecture for Computer Vision
inception v2로 버저닝되는 업그레이드 버전의 inception 설계 방법론에 대한 논문입니다. 논문 앞단에 연구팀은 4가지 기본적인 설계 원칙을 발표합니다. 해당 4원칙을 기본 골자로 하여 이 논문에서 눈여겨 본것은 convolution 연산 쪼개기 입니다.
굳이 큰 컨볼루션연산을 사용하지 않고 3*3을 여러번 하는 방향으로, 3*3도 1*3, 3*1로 나눠 하는 방법등 논문의 내용에 따르면 5*5를 사용할때보다 더 적은 연산수로 비슷한 효율을 가져올수 있다고 주장합니다. 그런 일련의 과정을 거쳐 최종적으로 설계한 모델 입니다.
해당 과정을 거친후 Batch normalization을 추가한 모델에 대한 성능 개선 정도를 나타내는 도표입니다. BN에 대해서는 밑단에 해당 논문에서 조금 더 언급되겠으나 기존 inception v1., googlenet으로 불리는 모델에 비해 약 7~8퍼센트 정도 성능이 개선된 결과를 확인할수 있습니다.
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
batch normalization은 통계에서 말하는 정규화의 개념을 가져온 것으로 각 배치를 정규화해서 학습해보려는 시도를 담은 논문입니다. 밑에 수식이 나와있는데 복잡해 보이지만 평균을 구하고 분산을 구하고 통계시간에 배웠던 Z-score를 구하는 것과 거의 동일한 과정을 볼 수 있습니다. 해당 변환값을 학습에 사용되는 식, 학습률*변환값 + bias의 모양으로 학습하겠다는 것을 의미합니다.
해당 과정을 거친후 epoch 대비 학습 속도를 보여줍니다. Batch normalization은 학습속도를 조금더 빠르게 해주고 관련 자료를 더 찾아보면 학습률에 따른 여러 문제들을 회피할수 있는 수단으로써 많이 거론되고 있음을 알수 있습니다.
또한 Batch normalization후 결과 비교인데 Max accuracy를 보면 속도와 함께 그 정확도 또한 소폭으로 증가 됨을 볼수 있습니다. 각 모델간의 결과에서 볼수 있듯이 BN과 함께 설계시 sigmoid activation은 피할것을 권장하는 결과를 볼수 있습니다.
Deep Residual Learning for Image Recognition
Residual Networks are Exponential Ensembles of Relatively Shallow Networks
본 논문에서는 Vanishing gradient 문제를 해결하는 방법을 논의한 논문으로 방시 보편적으로 합의된 명제, "네트워크를 깊게 쌓을 수록 성능은 좋아질것이다", 그 명제가 가지고 있는 문제점과 그것의 해결방안으로써의 방법론을 제시한 논문입니다.
위 도표에서 보는 것처럼 실제 실험간 특별한 조치없이 깊게만 쌓았을때 어떤 임계 깊이를 넘어서면 오히려 error rate 가 증가함을 볼수 있습니다.
실제 실험을 반복하여 본 결과, 임계깊이를 넘어서면 gradient가 점점 사라지는 현상이 발생하는데 이것을 보통 Vanishing gradient 문제라고 하고 비슷한 현상이 RNN을 깊게 설계하였을때도 발생합니다. 해당 논문에서는 언급하지 않았지만 RNN의 깊이관련 문제를 해결하는 방법과 CNN의 깊이관련 문제를 해결하는 방법은 비슷한 아이디어로 해결하는데 바로 memory block을 사용하는 것입니다.
residual learning에서의 해법은 그 직전 레이어의 값을 skip connection으로 메모리역할을 하도록 연결해주고, 그 차이를 학습하는 것을 목표로 합니다. 해당 연결부가 일종의 증폭기 역할을 해주어 Vanishing gradiant문제를 줄여줄수 있습니다.
위의 도표는 해당 아이디어를 네트워크 전체로 연결해보는 시도를 도식화 한것입니다.
실험 결과 residual learning의 아이디어를 적용하여 위에서 언급한 보편적으로 어느정도 합의된 명제가 다시 참에 가깝게 됩니다. 최초 아이디어 적용전, 후의 결과를 비교하면 error rate가 많이 줄어든것을 확인할수 있습니다.
Dropout: A simple way to prevent neural networks from overfitting
dropout은 쉽게말해 학습된 뉴럴네트워크의 일부를 버리는 것을 의미합니다. 그 개념도는 아래와 같습니다. 이 단순한 아이디어를 통해 논문의 저자는 과적합화를 피하는 것은 물론 학습성능을 개선했습니다.
밑에 두 테이블은 각각 두가지 데이터 셋에 대해 드랍아웃의 유무에 따른 성능차이 그리고 드랍아웃을 어디에 넣었을때 효율이 개선되었었는지 등을 보여주는 테이블입니다.
그러면 이런 질문이 남습니다. 설계된 네트워크를 일부 버려가며 학습하는것이 성능 개선에 도움이 된다면 얼마나 버릴것인가의 문제가 남는데 보통 github에서 뉴럴네트워크 모델을 설계한 코드를 보다보면 드랍아웃의 정도에 대한 파라미터는 0.5를 많이 주는데 그 이유는 아래와 같이 실험적으로 해보니 0.4 ~ 0.7 사이의 임의 값이 성능이 좋더라 하는 실험적 결과를 바탕으로 임의 설정하는데 그 중앙값에 가까운 0.5를 많이 선택하는 것같습니다.
Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
기존의 Inception-v3에 더하여 residual connection을 하여 Inception-v4를 만들어 성능향상을 다룬 논문입니다. 주요 아이디어는 논문에 나와있듯이 replace the filter concatenation stage of the Inception architecture with residual connection 입니다. 또한 기존 v3모델을 간소화하고 더 많은 inception 구조를 갖는 특징을 가지고 있습니다.
Inception-v4의 구조를 보면, 299x299x3의 입력영상을 9개의 layer를 가진 Stem에 넣어 35x35x384 크기로 feature-map을 생성해 냅니다. 그리고 이와 유사하게 Inception block을 활용하여 inception –A,B,C 를 거치고 Average pooling, Dropout, Softmax를 거쳐 classification을 하게 됩니다. 특이한 점으로는 Inception 모듈 중간에 Reduction 모듈이 있어서 feature-map 사이즈를 줄여주게 됩니다.
Error 그래프는 생략하고 테이블을 통해 성능을 살펴보면, Error %가 줄어들기는 하였지만 확연하게 줄어들었다고는 할 수 없습니다. Table 4에서는 Inception구조가 모두 ResNet만 사용한 network보다는 성능이 좋다는 것을 알려주고 있고, Table 5에서는 성능 향상에 마지막이라고 볼 수 있는 Ensemble을 통해 가장 낮은 Error를 얻은 것을 제시하고 있습니다
Speed/accuracy trade-offs for modern convolutional object detectors
논문의 시작인 Abstract에서 나와 있듯, 이 논문은 기존에 발표된 논문에서 나온 여러 구조에서 speed/memory/accuracy 등을 종합하여 가이드 해준 백과사전(?)같은 존재이다. (~2017년)
이 논문에서 간략하게 각 각에 대해 설명을 해놓았지만 궁금하면 각자 읽어보면 좋을 것 같습니다.
논문에서 사용된 그래프, 표를 중점적으로 설명을 하면
Table 1에서는 해당 논문은 어떤 Meata-architecture을 사용하였고 Feature Extractor는 어떤 것을 사용하였고 등등에 관한 것을 정리해놓았습니다.
Table 2에서는 이 논문에서 비교할 6가지의 feature extractor를 소개하고 ImageNet에 올라와 있는 Top-1 accuracy와 사용된 parameter 수 를 제시해 놓았습니다. Inception-v4에 대한 비교가 없는것이 아쉽습니다.
X 축으로 GPU running Time, Y축으로 mAP 인데, 각 Feature Extrator별로 GPU TIME 대비 mAP를 확인할 수 있습니다.
Figure 3에서 Feature Extractor 마다 meta-architecture 을 바꿔서 측정을 했을 때의 mAP를 확인할 수 있습니다.(가장 좋은 성능 : Inception Resnet V2)
Figure 4에서는 위에서 한 결과를 mAP를 large, medium, small로 나누어 측정한 결과입니다.
Figure 7는 이미지 해상도 300을 넣었을 때 GPU TIME 입니다.
Figure 9는 영상 해상도 300일 때 각 모델에서 사용하는 Memory크기 입니다.
Figure 12는 서로 다른 모델로 detection한 결과를 비교할 수 있습니다.
위 논문은 새로운 아이디어를 통한 구조의 설계와 같은 내용으로 구성된 것이 아닌 각 모델에서 어떤 지표를 사용했을 때 좋은 성능이 나온다는 것을 제시하였습니다. 이러한 점만 참고하여 읽으면 많은 도움이 될 것 같습니다.