TIL - 2023.09.12

배엘리·2023년 9월 13일
0

TIL

목록 보기
18/23

🍔 오늘 배운 것

오늘은 저번에 배웠던 CNN, RNN을 이어 다양한 convolutional network 기법들을 배웠다. 다양한 기법이라고 해도 ResNet 나오기 전이라 이제는 역사속으로 사라졌지만 그래도 ResNet이 어떻게 나오게 됐는지, 각 기법들의 shortcomings이 무엇이었는지 알 수 있는 시간이었다.

LeNet, AlexNet, VGGNet

  • AlexNet은 첫번째 CNN 기반 모델로 ImageNet Large Scale Visual Recognition Challenge(1000개 클래스의 사진을 구분하는 대회)에 참가한 모델이다.
  • 여담으로 이 대회는 ResNet이 사람의 오분류율인 5% 이하의 성과를 보여주며 폐지되었는데 솔직히 이게 뭐가 어렵지 하다가 강사님이 '참개구리'와 '황소개구리'를 구분하는 것과 비슷하다고 말씀하셔서 ResNet이 엄청 대단하게 느껴졌다ㅋㅋㅋ

여기서는 모든 모델의 특징이나 배운 점을 쓰기보다는 그냥 모델 구조에 대해서만 훑고 넘어가려고 한다.

AlexNet

  • 처음으로 ReLU를 사용하고
  • Norm Layer를 제안했다.
  • 단점이 많은 SGD를 사용했고 7개의 모델을 Ensemble 했다.

AlexNet의 모델 구조

  • 2개의 CPU가 병렬처리 되어 이루어진다.
    - 이걸로 spatial size를 줄이고, 채널 수를 증가할 수 있게 되었다.
    • 고차원의 정보를 channel에 담을 수 있게 되엇다.

conv1 -> Max pooling -> normalization -> conv2 -> max pooling2 -> norm2 -> conv3 -> conv4 -> conv5 -> max polling3 -> FC6 -> FC7 -> FC8

  • 따라서 8개의 layer로만 이루어져 있다.

VGGNet

"작은 filter, 더 깊은 Network"

  • VGGNet은 16~19개의 레이어로 이루어져 있다.
  • 3 x 3 크기의 필터만 사용했는데, AlexNet과 다르게 2 X 2 Max Pooling을 stride 2를 사용했다.
    => 즉 spatial size가 1/2씩 줄어들게 된다.

여기서 중요하게 언급하신 부분이 작은 필터가 효과적이다 이 부분인데,

작은 필터

  • 3 x 3 필터를 3번 쌓는다고 생각해보자. 그러면

(c는 채널 수)
(3 x 3 x c) 가 총 c개 있으니 -> 332c23 * 3^2c^2개의 파라미터를 가진다.
반대로,

  • 7 x 7 Conv를 한번 사용한다고 해도 72c27^2c^2개를 가지게 된다.

즉, 333^3은 27이니, 727^2 49보다 작다. 그래서 작은 필터를 여러번 쌓아올리는 것이 더 효율적이고, 이렇게 하면 더 많은 non-linearity를 표현 할 수 있다.

ResNet

ResNet은... 많이 배웠지만... 배울 수록 새로운...
이건... TIL이니...간단하게....

대충 ResNet의 background는 이렇다.

  1. 레이어를 깊게 쌓는다 -> Training 성능이 올라가야 한다. (Test는 일단 배제)
  2. 근데 56개 레이어 쌓아보니까 Training, Test 모두 정확도가 떨어진다.
  3. 둘 다 정확도가 떨어지니 overfitting의 상황이 아니다. 이게 뭐지? -> 아 모델이 깊어서 최적화하는데 문제가 있구나!

Residual mapping

  • 얘는 어제 공부한 Skip Connection이다.
  • 잔차를 학습하는 건데, 원래 일반 신경망은

X>Conv1>ReLU>Conv2>H(X)>ReLU>...X -> Conv1 -> ReLU -> Conv2 -> H(X) -> ReLU -> ...
이런 식으로 진행된다.

반면에 Residual Block은 H(X)를 직접 학습하는 것에 초점을 두지 않고 Residual을 학습하는데 초점을 맞춘다.

여기서 우리는 F(X)=H(X)XF(X) = H(X) - X를 학습하려고 한다.

Residual Block

  • 위 이미지와 같이 두 개의 Conv 층으로 이루어져 있다.
  • 위 VGGNet과 비슷하게 Stride 2를 적용한 Conv로 spatial space를 줄인다. (여기는...다시 확인해 봐야할 듯)

Bottleneck 구조

  • 보틀넥은 입력으로 받은 channel 수를 중간과정에서 줄여주어 중간에서 연산 과정을 빠르게 하고 메모리 사용량을 줄이기 위해 사용된다.
  • 연산능력의 향상을 위해 정보 손실을 trade off한다.

numpy

  • 기본 문법, 슬라이싱, shape, ...

pytorch

  • 파이토치 기본 문법
  • auto_grad()

🍕 오늘 느낀 점

스터디가 7시쯤 끝나서 저녁 안먹고 바로 공부했더니 오래동안 집중하기는 힘들었다.. (그래서 저녁으로 내 자신에게 햄버거를 사줬다. 롯데리아 핫치킨(?) 인가 핫크리스피치킨 맛있었습니당...

오늘 매니저님과 공부계획을 점검했는데 9월에는 새로운 걸 중점으로 가보기보다는 파이토치, 기본 이론들을 조금 복습하고 확실히 내 걸로 만드는데 집중하기로 했다. 실습할 때 파이토치에 대한 기본 개념이 부족하니 공부하기가 어려웠다. 그래서 어제는 배운 이론은 훑기만 하고 파이토치 기본 문법을 다시 훑었다. 많이 배우지는 못했지만 그래도 어떤 특정 함수를 사용할 때 주의할 점, 이 함수가 도대체 뭘 하는지 알 수 있어서 좋았다. 내일은 신경망 파이토치...할건데 오늘 배운거 까먹지 않고 잘 써먹을 수 있도록 해야겠다!

0개의 댓글