Group Study (2024-2025)/Machine Learning 심화

[ML심화] 3주차 스터디

withyou__ 2024. 10. 15. 23:49
Lecture 5 Convolutional Neural Networks

CNN

CNN의 역사

  • "perceptron"을 구현한 최초의 기계
    • Perceptron"은 우리가 배운 Wx + b와 유사한 함수 사용 → 하지만 출력 값이 1 또는 0임
    • 가중치 w를 update하는 rule 존재 → Backprop 과 유사 (그 당시에는 backprob이라는 개념이 없어서 가중치를 이리저리 조절하면서 맞춤)
  • Frank Rosenblatt의 Mark I Perceptron machine (1957)
    • 최초의 Multilayer Perceptron Network → 이 시점에 neural network와 비슷한 모양 하기 시작 BUT Backprob 같은 학습 알고리즘 안 존재Widrow와 Hoff가의 Adaline and Madaline (1960)
  • Rumelhart가 최초의 Backporp 제안(1986)
    • 우리에게 익숙한 Chain rule과 Update rule을 볼 수 있음
    • 최초로 network를 학습시키는 것에 관한 개념 정립
    • BUT 그 이후 NN 더 크게 못만듦
  • Geoff Hinton 과 Ruslan Salakhutdinov의 DNN 학습가능성(2006)
    • 효과적 BUT backprop위한 아주 세심한 초기화 필요해짐 → 초기화를 위해선 전처리 과정 +RBM을 이용해서 각 히든레이어 가중치를 학습 필요
  • NN 열풍 (2012)
    • NN이 음성 인식에서 아주 좋은 성능 보임
  • Hinton lab의 Alex Krizhevsky에서 영상 인식에 관한 landmark paper(2012)
    • ImageNet Classification에서 최초로 NN을 사용 → 결과 놀라움
    • Alexnet - ImageNet benchmark의 Error 극적으로 감소시킴
  • 1980의 neocognitron
    • simple/complex cells의 아이디어를 사용한 최초의 NN
    • Fukishima는 simple/complex cells을 교차시킴
      • Simple cells은 학습가능한 parameters 가지고 있음
      • Complex cells은 pooling과 같은 것으로 구현했는데 작은 변화에 Simple cells보다 좀 더 강인
  • Yann LeCun이 최초로 NN을 학습시키기 위해 Backprob과 gradient-based learning을 적용(1998)

그렇다면 오늘날의 ConvNets은 어떻게 사용되나?

  • AlexNet의 ImageNet 데이터 분류 결과 ex> 꽃 검색 시에 학습된 특징이 유사한 것을 매칭시키는데 아주 강력함
  • Detection - 영상 내에 객체가 어디에 있는지 잘 찾아냄
    • ex>버스나 보트 찾아내고 네모박스를 정확히 그림
  • segmentation - 단지 네모박스 치는 것이 아닌 나무나 사람 등을 구별하는데 픽셀 하나 하나에 레이블링 하는 것
  • 자율 주행 자동차에도 이용
  • 비디오에도 활용 - 단일 이미지의 정보뿐 아니라 시간적 정보도 같이 활용
  • pose recognition - 어깨나 팔꿈치 같은 다양한 관절 인식 가능
  • 게임도 가능

Fully Connected Layer

  • FC Layer에서 하는 일은 어떤 벡터를 가지고 연산을 하는 것
  • 아래 그림을 설명하자면 입력으로 32 x 32 x 3 의 이미지 존재 → 이 이미지를 길게 펴서 3072차원의 벡터로 만들고 가중치 W를 벡터와 곱함 (=Wx)
  • 그리고 activation 얻음
  • Convolution Layer와의 차이는 Convolution Layer는 기존의 구조를 보존시킨다는 것

Convolution Layer

  • 어떻게 수행하나?
    • 필터는 입력의 깊이만큼 확장됨 → 하나의 필터는 아주 작은 부분만 취할 수 있음(3232중에 55만 취함) 하지만 깊이는 전체 깊이 취함
    • 필터를 이미지의 어떤 공간에 겹쳐 놓고 내적 수행
    • 그리고 필터의 각 w와 이에 해당하는 이미지 픽셀을 곱해줌
      • 필터가 553이라는 것은 그만큼 곱연산을 한다는 것
    • Convolution은 이미지의 좌상단부터 시작하고 필터의 중앙에 값을 모음
    • 그리고 필터의 모든 요소를 가지고 내적을 수행하게 되면 하나의 값 얻음
    • 그리고 슬라이딩함
      • 어떻게 슬라이딩할지 선택 가능한데 슬라이딩 여부와 상관없이 입력 값 두개 뽑아서 연산 수행도 가능

ConvNet

  • 활성화 함수(RELU)가 산재된 컨볼루션 레이어 시퀀스

"Spatial dimension”

  • 내적 수행 → 슬라이드 필터를 한칸씩 옮겨가면서 슬라이딩 실행
  • 움직이는 칸은 stride라고 함
  • 상황에 따라 출력의 사이즈가 어떻게 될 것인지 알 수 있음
    • 입력의 차원이 N이고 필터 사이즈가 F이고 스트라이드가 몇이다 라고 주어지면
    • → 출력의 크기는 (N - F) / stride + 1
  • zero-pad - 출력의 사이즈를 의도대로 만들어 주기 위해서 사용
  • 이미지 가장자리에 0을 채워넣어서 좌 상단의 자리에서도 필터연산을 수행할 수 있게함

  • CNN에는 Conv Layer와 Pooling Layer 존재
  • Pooling Layer는 Representation들을 더 작고 관리하게 쉽게 해줌
    • 작아지면 파라미터의 수가 줄게 되어 이득 + 공간적인 불변성 얻을 수 있음
  • Max pooling
    • 각 공간에서 가장 큰 값을 뽑는 것
    • 사용하는 이유 : Max pooling은 그 지역이 어디든, 어떤 신호에 대해 "얼마나" 그 필터가 활성화 되었는지를 알려줌
Lecture 9 CNN Architecture

AlexNet

  • 최초의 Large scale CNN
  • ImageNet Classification Task을 아주 잘 수행
  • 2012년에 등장해서는 기존의 non-딥러닝 모델들을 능가하는 놀라운 성능을 보여줌
  • AlexNet의 기본 구조 = conv - pool - normalization 구조가 두 번 반복

VGG

  • 훨씬 더 깊어졌고 그리고 더 작은 필터를 사용한다는 것
  • AlexNet에서는 8개의 레이어였지만 VGGNet은 16에서 19개의 레이어를 가짐
  • 작은 필터를 유지해 주고 주기적으로 Pooling을 수행하면서 전체 네트워크를 구성
    • 왜 작은 필터를 사용하는가? 필터의 크기가 작으면 파라미터의 수가 더 적기 때문에 큰 필터에 비해 레이어를 조금 더 많이 쌓을 수 있음 = 작은 필터를 사용하면 Depth를 더 키울 수 있다
  • 모델 성능을 위해서 앙상블 기법을 사용
  • VGG의 마지막 FC-Layer인 FC7
    • 이미지넷 1000 class의 바로 직전에 위치한 레이어
    • 4096 사이즈의 레이어인데 아주 좋은 feature represetation을 가지고 있음
    • 다른 데이터에서도 특징(feature) 추출이 잘되며 다른 Task에서도 일반화 능력이 뛰어남

Google Net

  • 대표 특징: 효율적인 계산에 관한 그들의 특별한 관점이 있다는 것과 높은 계산량을 아주 효율적으로 수행하도록 네트워크를 디자인했다는 점
  • Inception module을 사용
  • 앞서 봤던 모델들과는 다르게 FC-Layer 없음 → 파라미터를 줄이기 위해서

Inception

  • 만들어지게된 배경 - "a good local network typology” 를 디자인 하기 위해
    • "network within a network” 라는 개념으로 local topology를 구현했고 이를 쌓아올림
  • 내부에는 동일한 입력을 받는 서로 다른 다양한 필터들이 "병렬로" 존재
    • 이전 레이어의 입력을 받아서 다양한 Conv 연산을 수행하는 것

ResNet

  • ResNet Block을 하나씩 쌓아 올리는 구조
  • ResNet의 경우 모델 Depth가 50 이상일 때 Bottleneck Layers를 도입
  • 실제 레이어 → 입력 x에 대한 잔차인 변화량만을 학습
  • 출력 → input X와 변화량AlexNet