CNN의 뿌리라고 할 수 있다. ILSVRC 2012에서 처음으로 딥러닝 모델로 다른 모델을 압도하면서 우승했다.
2012년 이후로 ILSVRC에서는 AlexNet을 다듬어서 성능을 높이려는 시도를 하고 있었다. VGGNet은 딥러닝 모델 중 최초로 16-19 layer까지 쌓아서 성능을 끌어올렸다.
"parameter 4개로 코끼리 모양도 구현하겠다. 5개로는 코도 움직일 걸?" - 폰 노이만
줄여서 batch norm, 더 간단하게는 bn이라고도 부른다. 이 연구에서 parameter를 업데이트 하면서 layer의 데이터 분포가 바뀌는 현상을 Internal Covariate Shift(ICS)라고 정의했다.
GoogLeNet을 읽다가 같이 읽은 논문. 기존의 CNN에서 사용하는 연산을 조금 바꿔서 표현력을 좀더 키우고 싶었던 모양이다.
딥러닝에서 유명한 짤이다. 코드명이 인셉션이라서 그런지 Reference 1번에 위 이미지 주소를 달아놨고 딥러닝 분야의 유명한 밈이 됐다.
CNN의 게임 체인저. 아직도 ResNet에서 못 벗어났다고 하는 말이 있을 정도다. 기존에 19-30 layer에 그친 depth를 152 layer까지 폭발적으로 늘리면서 ILSVRC 2015에서 우승했다.
CNN은 pooling layer로 feature map의 크기를 점점 줄이면서 이미지의 특성을 뽑아서 제일 마지막에 나오는 feature map을 활용한다. 연구자들은 CNN에서 중간에 버려지는 feature map이 아까웠던 모양이다.
AlexNet 이후로 CNN은 덩치를 키우는 방식으로 정확도를 높여왔고 그 꽃이 ResNet이다. 이후의 CNN연구는 두 방향으로 갈린다. 정확도를 높이거나 연산효율을 높이거나. 이 연구에서는 두 가지를 동시에 높이려고 시도했다.
CNN은 spatial dimension과 depth dimension이 가진 신호를 마구 뒤섞는다는 점을 주목하고 channel 방향으로 늘어선 정보들도 활용할 수 있을 거라고 생각했다. 이 연구에서 제안한 방법으로 ILSVRC 2017에서 우승했다.
모델학습에서 가장 중요한 hyperparameter 하나를 고르라면 learning rate를 고를 거다. 과제마다, 모델구조마다, optimizer마다, 학습데이터마다 요구하는 learning rate가 다르다. Andrej Karpathy는 이런 농담도 했다.
신경망을 학습하는 것은 쉬운 일이 아니다. 특히 신경망이 깊어지면 학습하는데 닥치는 어려움들은 여러 학습기법의 발달로 해결할 수 있었지만 Training speed는 극복하기 어려웠다.
대표적인 1 stage detector의 SOTA model이다. bbox와 object classfication을 한 방에 예측하고 있어서 2 stage detector보다 간단한 구조를 가진다. 그래서 비교적으로 빠르다.
그동안 분류과제에서 loss function은 주로 softmax를 기반으로 한 cross entorpy를 썼다. 현실에서는 원하는 만큼의 data를 확보하는 게 어려울 수도 있고 같은 category안에 있는 data를 분류해야 할 때도 있다.
ResNet에서는 degradation을 identity mapping으로 해결하면서 gradient flow를 원활하게 하면 layer를 더 쌓으면서 성능향상도 기대할 수 있다는 점을 밝혔다. 그러면 극단적으로 모든 layer를 mapping하면 어떻게 될까?
모델을 generalize하는데 많은 시간이 들어간다. 좀 다른 말로 overfitting을 막는 일이다. 특히 optimizer로 해결하는 방법에는 L2 regularization, weight decay가 있다고 알려져 있지만 잘 쓰기란 쉽지 않다.
"L2 regularization과 weight decay는 같다." 많은 자료에서 이렇게 소개한다. tensorflow와 pytorch에서도 두 가지를 혼용해서 구현하고 있다. 여기에 그렇지 않다고 주장한 연구자들이 나왔다.
수능문제를 풀 때 과목을 넘나들면서 묻는 문제유형이 있다. "글쓴이(화자)의 의도로 올바른 것은?" 다른 사람의 의도를 알고 싶어하는 건 인간의 본능인 것 같다. 요즘은 사람속 뿐만 아니라 흔히들 블랙박스라고 부르는 머신러닝 model의 속도 알고 싶어한다.
모델이 발전할수록 모델이 요구하는 메모리와 용량이 커진다. 실시간으로 응답해야 하거나 개인정보처럼 민감한 정보를 처리하는 경우라면 반드시 온디바이스에서 처리해야 한다. 문제는 온디바이스의 메모리와 용량은 서버만큼 넉넉하지 않다.
요즘 회사에서 YOLO v3를 구현하는 김에 세미나를 해달라는 부탁을 받았다. 그래서 하는 정리.