본문 바로가기

수업 정리(개인용)/cs231n

(18)
CS231n Lecture 13 : Generative Models Unsupervised learning에는 label이 없다. 대신 데이터 자체의 hidden structure를 학습한다. Unsupervised learning을 푸는 것 만으로 visual world의 underlying structure를 알게 된다. 가령 자기 자신을 복원시키는 오토 인코더는 실제 데이터의 의미있는 feature를 찾아낼 수 있다. Generative model의 목적은 데이터의 density를 닮는 것이다. 다양한 곳에 적용할 수 있는데, 시계열 데이터를 생성해서 RL에 사용할 수 있다고 한다. 또한 latent representation을 배우는 것도 유용하다. 갈래는 위와 같이 나눠진다. Explicit density 모델에서는 likelihood p(x)가 명확하게 정의되..
CS231n Lecture 12 : Visualizing and Understanding CNN 내부에서 무슨 일이 일어나고 있는가? Explainability는 ML에서 중요한 주제 중 하나이다. 단순히 AI를 믿고 안믿고를 떠나서, 모델을 잘 이해해야 개선하는 것도 가능할 것이다. 이번 장에서는 CNN 내부의 시각화와 이해에 대해 다룬다. Explainability와 interpretability의 의미 차이에 대해 조사를 해봤는데, article마다 다르게 정의하고 있으므로 정확한 차이를 알 수는 없었다. 다만 딥러닝 내부의 블랙박스를 다루는 도메인은 explainable ML이라고 부르는 것 같다. 사실 CNN의 첫 번째 feature map을 시각화 하는 것은 쉬운데, 가령 input이 rgb 이미지라서 depth가 3이라면 각 filter의 depth도 3이므로 그냥 띄우면 된다...
CS231n Lecture 11 : Detection and Segmentation Classification 외에 이런 task에 대해 배워 볼 것이다. Semantic Segmentation은 pixel-wise classification이다. Classification + Localization은 하나의 object에 대해 수행하는 detection이다. Object detection은 거기서 object가 여러 개 나올 수 있다는 점만 다르다. Instance Segmentation은 Semantic Segmentation에서, 같은 class도 instance 별로 구분할 수 있다. 우측 하단의 그림을 보면 semantic segmentation에서는 각 pixel이 cow인지만 관심이 있고, cow class의 instance 별로 구분을 짓지는 않고 있다. 이 문제를 어떻게..
CS231n Lecture 10 : Recurrent Neural Networks 지난 시간에 배웠던 네트워크들을 간단하게 리뷰하고 넘어간다. VGG나 GoogLeNet은 2014년 Batch Normalization이 나오기 전의 모델이다. 이런 깊은 망을 학습시키는 것은 굉장히 어려웠고, VGG는 첫 11 layer들을 먼저 학습시킨 뒤 쌓아가는 식으로 학습했다. GoogLeNet의 auxiliary classifier도 실제로 classification을 위해 붙인게 아니고 gradient vanishing 때문이었다고 한다. ResNet에서는 L2 regularization을 적용해서 weight 값들을 0으로 가게 유도했다고 한다. 첫 아이디어 자체가 이미 잘되는 shallow한 모델 뒤에 identity mapping layer를 쌓으면 적어도 성능이 떨어지지는 않아야 한다..
CS231n Lecture 9 : CNN Architectures ConvNet을 실제로 적용해서 거의 처음 좋은 결과를 얻었던 LeCun의 LeNet이다. AlexNet의 첫 layer의 output size와 parameter 수는 몇 개일까? 다시 한번 풀어보자. AlexNet이 사용한 방법들. 추가적으로, 모델을 vram에 올리기 위해 반으로 쪼갰다. Feature map이 절반으로 쪼개져서, 같은 gpu에 없는 feature map은 보지 못한 채로 연산된다. 마지막에 fcn을 거치면서 서로 다른 gpu간의 정보 공유가 이루어진다. ZFNet이 AlexNet의 hyperparameter를 만져서 다음 해에 imageNet에서 우승했다. 2014년에 등장한 VGG는 backbone 모델로 많이 쓰인다. 3x3의 작은 필터를 깊게 쌓았다. 왜 그랬을까? 3x3 필..
CS231n 2017 Lecture 8 : Deep Learning Software GPU가 강점을 보이는 연산은 행렬 곱이다. 행렬 곱은 벡터 내적을 여러 번 하는 것이기 때문에 병렬로 처리하면 엄청나게 빠르다. NVIDIA GPU를 쓰자. GPU에 최적화된 프로그래밍을 위해 NVIDIA에서 cuda라는 언어를 제공, 하지만 고수준 API들을 쓰지 직접 cuda를 쓸 일은 없다. CPU와 GPU간의 엄청난 성능 차이를 확인할 수 있고, cuda를 직접 짠 것과 cuDNN을 사용한 것의 차이도 확인할 수 있다. 거의 3배 가량의 차이가 나므로 그냥 cuDNN을 쓰자. 사실은 우리는 tensorflow나 pytorch를 쓸 것이기 때문에 그 조차도 할 필요가 없을 것이다. Training 시에 bottleneck을 막는 방법으로 1. 데이터를 모두 RAM에 올리기 2. SSD 쓰기 3. ..
CS231n 2017 Lecture 7 : Training Neural Networks II 오랜만에 본다. 저번 강의에서 다룬 normalization에 대한 첨언이다. 같은 classifier라도 data의 value가 크면, weight가 약간만 바뀌어도 classification 결과가 바뀔 수 있다. Normalization을 통해 model을 좀 덜 sensitive 하게 만들 수 있다. 오늘 배울 것들 SGD의 단점1 : Gradient에만 의존하기 때문에 상대적으로 완만한 방향으로는 진전이 느리고 경사가 급한 방향으로 많이 이동해서 지그재그로 경사면을 내려간다. 위 그림을 가로 축 w1, 세로 축 w2라고 생각하면, w1의 gradient가 w2의 gradient에 비해 많이 낮다. 이럴 때 condition number가 높다고 한다. 차원이 늘어나면 가장 낮은 gradient와..
CS231n 2017 Lecture 6 : Training Neural Networks I 이번 강의의 overview이다. 다양한 non-linear function에 대해 알아볼 것이다. Sigmoid는 위와 같이 생겼다. 3가지 문제점이 있는데, 1. 중심에서 멀어지면 gradient가 죽는다. 2. Output이 0~1이므로 zero-centered 되어 있지 않다. 3. exp() 함수가 비용이 크다. 1,3은 직관적으로 이해가 가는 부분이다. 그런데 zero-centered는 왜 문제가 되는걸까? 저기서 w1,w2,...wn의 local gradient가 x1,x2...xn이다. 그런데 x가 이전 layer의 sigmoid를 거쳐서 나온 값이라고 하면 x는 모두 양수이다. L = w1x1 + w2x2 ... 라고 하자. Chain rule을 적용할 때 L의 gradient와 w의 l..