본문 바로가기

딥러닝 & 머신러닝/강연

그래비티 클래스 2주차 강의 내용 정리

 

1주차는 딥러닝과 머신러닝, 데이터 사이언스의 차이점과 딥러닝에 필요한 전반적 기초 지식을 배웠다면, 2주차부터는 본격적으로 딥러닝의 큰 분야들에 대해서 자세히 배우기 시작했다. 2주차땐 컴퓨터 비전 관련 내용들을 들을 수 있었다. 내가 관심있는 분야가 컴퓨터 비전이기에 흥미롭게, 그리고 집중해서 들었다. 아는 내용이 많긴 했지만 또 내가 모르는 부분이나 긴가민가했던 부분을 잡을 수 있었다. 그리고 Object Detection 이나 Segmentation 분야에도 관심을 가질 수 있었다. 강사님이 유쾌하고 재밌게, 친절하게 알려주셔서 더욱 좋았던 강의였다.


이미지에 미분을 적용하면 밝기값이 변한다.

 

필터가 인풋을 돌아다니면서 필터값에 인풋 값을 곱해준다 -> 컨볼루션

 

큰 이미지 중에서 줄이고 줄여서 제일 중요한 것만 표현하길 원함 -> 컨볼루션의 핵심

 

공식에서 패딩에 2가 붙는 이유: 좌우에 패딩이 둘 다 붙기 때문에

 

이미지에서 특징점을 뽑아내고, 뽑아낸 특징점을 가지고 분류할 것이다.

 

Backbone network: 연구자들이 좋다고 한 네트워크고, 어떤 모델이든 백본 네트워크가 앞에 붙어있다.

 

1epoch: 전체 데이터를 한 번 돌았다.

 

AlexNet: ReLU를 사용한 최초의 논문, ReLU로 인해 학습이 빨라지고 잘되었다.

 

DropOut: 데이터를 너무 다 외워버리니까 그러지 못하도록 막는 것. MLP를 몇 개 끊어버림.

 

5*5 커널과 3*3커널 2개가 똑같다. 7*7커널과 3*3커널 3개가 똑같다 (= 같은 영역을 본다)

근데 파라미터 수는 3*3 여러 개 쌓은 게 더 많다.

-> 같은 영역 (receptive field)을 볼 수 있음에도 불구하고 파라미터 수는 더 적다.

 

FC layer가 파라미터 수를 가장 많이 먹는다. 그래서 요즘엔 Global Average Pooling을 FC layer 대신에 쓰는 경우도 있다. 기능은 비슷하기 때문.

 

파라미터 수: 커널 가로 * 커널 세로 * 이전에 들어온 채널 수 * 나갈 채널 수

파라미터 수가 많다는 건 컴퓨터 ram이 기억할 게 많다는 것

 

인셉션 모듈에선 여러 개를 통과시켰다가 다시 합쳐준다는 게 dense 한 거고, 전체 구조가 생각보다 sparse 하다. (22층만 있어서) sparse: 드랍아웃을 넣는 것처럼 뭔가 듬성듬성하게 모델을 짜보고 싶다.

 

1*1 컨볼루션 썼을 땐 이미지를 내가 원하는 만큼 잘라 쓸 수 있다. 물론 정보가 줄어들긴 하지만, 그래도 좀 가볍게 만들고 싶어서 채널 수를 좀 잘라내는 걸 감수한다.

 

맥스풀링은 파라미터가 없다. 그래서 굳이 1*1 컨볼루션을 통해 파라미터를 줄여서 맥스풀링을 거칠 필요가 없다.

파라미터 = 가중치, 가중치는? 커널 안에 담겨있다. 맥스풀링에는? 커널이 없다! 그래서 코드 상에서도 model.summary() 했을 때 parameter가 풀링 층에는 0으로 뜬다.

 

resnet은 그래디언트 배니싱 문제 때문에 생긴 건 아니다. 그 문제는 이전에 다 해결되었다고 논문에서 가정함. 논문에선 레이어를 깊게 쌓았는데도 성능이 안 오르는 것에 대해 문제 제기한 것.

 

residual은 x를 살린다. skip connection은 weight layer를 건너뛰었다. weight layer를 믿으면 상관이 없지만, 걔네가 무슨 짓을 해서 잘못 알아들었을 수도 있으니까 정보를 한 번 더 주는 것이다. 더해줄 땐 이미지 사이즈가 같아야 된다.

 

papers with code: 다양한 분야의 논문과 코드가 있는 사이트

 

semantic segmentation: 양을 그저 양, 사람을 사람으로만 본다

instance segmentation: 양을 양1, 양2 등등으로 본다

색칠한 것처럼 보이게 하는 걸 mask라고 함

 

R-CNN: 처음 CNN이 여기 물체가 있는 것 같다고 알려주고, 다음 CNN이 그 물체가 뭔지 맞춰본다.

 

이미지를 학습할 때, 잘라준 후에 그걸 모두 같은 사이즈로 맞춰준 후에 다음 레이어에 넘겨줘야 한다.

 

regression은 이 반의 평균이 몇 점일 것 같아? 이런 걸 맞추는 것이다. bounding box를 정답지로 주고, 그 bounding box를 가장 잘 그리게 하는 것을 regression으로 해주어야 한다.

 

이미지에 시간 정보를 주기 위해, 3d-ConvNet 같은 걸 만들었다. 가로, 세로, 시간. 또는 LSTM과 Convnet을 결합.

 

어떤 걸 하고 싶느냐에 따라서 네트워크를 붙이면 된다. mask를 하고 싶으면 Conv 층을 붙이거나, 분류도 하고 싶으면 거기다가 class box를 붙이면 된다.

 

knowledge distilation: student는 teacher를 따라가도록 한다. teacher는 잘 학습된 모델이고, 핸드폰에 심을 student는 training 데이터뿐만 아니라 teacher에 의해 학습된 모델이다.

 

러닝 레이트: 학습을 얼마나 빠른 주기로 할지, 옵티마이저: 학습을 어떤 방법으로 할지

 

t-sne, PCA, LDA: 차원을 축소하는 방법

 

loss function을 어떻게 설계할지 고민하는 것도 중요하다.

 

이미지를 정수로 나타내면 8비트, 0~255이고 실수로 나타내면 0~1이다. 정수로 훈련시키고 실수로 출력을 하면 다 까맣게 나올거다. 보통은 float16으로 정보를 표현. 삼성 같은 곳은 정보를 int4 까지 줄인다.

signal processing, information theory 등을 배우면 이미지는 어떤 신호로 처리해야 되는지 등등을 알 수 있다.

 

데이터를 모으는 것: 샘플링

 

어떤 종류의 데이터는 많은데 어떤 종류는 적은 것: class imbalance

ex) 폐렴 환자의 CT 사진은 많은데 기흉 환자의 CT 사진은 적다 -> 둘의 연관성을 찾으려고 할 때 데이터 수가 차이나서 문제 발생