본문 바로가기

수업 정리(개인용)

(55)
CS231n 2017 Lecture 5 : Convolutional Neural Networks Neural Network와 CNN의 역사를 먼저 짚고 넘어간다. Mark 1 Perceptron은 perceptron을 최초로 구현한 기계이다. Update rule이 있었지만 backprop은 없던 시절. 여러 층의 layer을 쌓았던 기계이지만 backprop은 아직 없다. Chain rule을 이용한 backprop의 발견. 크고 깊은 네트워크의 등장. 하지만 아주 신중하게 weight를 초기화 하지 않으면 학습을 시킬 수 없었다. Weight 초기화 방식도 번거롭고 복잡했다. Strong result가 나온건 2010년 이후, speech recognition과 image recognition에서 성능이 좋았다. AlexNet이 등장했다. Hubel과 Wiesel의 고양이 뇌 실험. 알아낸 사실..
CS231N Spring 2020 Assignment1 : SVM(Multiclass Support Vector Machine) 지난 knn 과제처럼 CIFAR-10을 사용한다. 데이터를 나누고 reshape하고 전처리 하는 과정이다. Per pixel mean을 구해 mean image를 구하고 데이터에게 뺄셈한다. Bias를 사용하지 않기 위해 X의 가장 오른쪽 열에 1을 붙여주고 weight의 shape[0]도 한 칸 늘려준다(bias trick). linear_svm.py를 열고 svm_loss_naive를 구현해야 한다. 이중 for문 안에서 우리는 score의 각 원소에 접근할 수 있다. Score[j]는 j번째 class에 해당한다. j==y[i]라면 정답 class인 것이므로 loss에 더해줄 필요가 없으므로 continue 한다. 또한 margin이 0 이하라면 더하지 않는다(hinge loss의 그래프를 떠올리면..
CS231n 2017 Lecture 4 : Introduction to Neural Networks 지난 시간에 배운 gradient descent이다. Analytic gradient를 구할 수 있어야 이 알고리즘을 사용할 수 있다. 그렇다면 복잡한 함수를 어떻게 미분해야 할까? ImageNet에서 활약한 AlexNet이다. 8개의 layer로 이루어진 이런 복잡한 신경망을 각 variable에 대해 미분하는 것은 쉽지 않다. 복잡한 함수를 미분하기 위해 함수를 computational graph로 나타낸 후 backpropagation을 한다. 그래프의 가장 오른쪽에서부터 chain rule을 recursive하게 이용해 한 단계씩 미분하는 것이다. 가령 df/dx를 바로 구하는 것은 힘들지만 df/dq를 알고 있다면 dq/dx만 구해서 곱하면 df/dx를 알 수 있다. 어떤 한 노드의 input과..
CS231n 2017 Lecture 3 : Loss Functions and Optimization Lecture 2에서 배운 내용의 review로 시작하는 Justin. Linear classifier는 W를 가지고 있었고, 각 W 값은 해당 픽셀이 얼마나 score에 영향을 끼칠지 결정한다. 이번 시간에 배울 loss function과 optimization. 우리의 예측의 질을 측정하는 척도가 되는 loss function을 정의하고(질이 좋으면 loss가 낮고 질이 나쁘면 loss가 높게), 그 loss 값을 낮추는 방향으로 W를 optimization 시키자는 아이디어이다. 전반적인 loss function이 돌아가는 모양을 알려준다. 우선 xi와 W가 곱해져서 score를 뱉는다. 이것이 우리의 classifier의 예측이다. 그 score를 yi와 함께 loss function에 넣고 lo..
CS231n 2017 Lecture 2 : Image Classification Lecture 1은 Vision 분야에 대한 전반적인 이야기를 소개했다면, 이번 강의는 좀 더 specific하게 classification으로 들어갈 것이다. Image Classification이 어려운 이유는 무엇일까? 사람이 인지하는 방식과 달리 컴퓨터가 보는 건 숫자의 배열일 뿐이다. 저 숫자들을 보고 cat이라는 idea를 얻는 것은 어렵다. 고양이가 가만히 있다 한들, 고양이를 찍은 시점과 광원에 따라서도 픽셀 값들은 달라진다. 심지어 고양이는 가만히 있지도 않는다. 움직이고 모습을 바꾸기도 한다. 때로는 숨어서 일부만 보이기도 한다. 고양이끼리도 나이, 색깔 등에 따라 모양이 천차만별이다. 사람에게는 쉽지만 기계에게는 너무 어려운 문제이다. Edges를 추출해서 classification ..
CS231n 2017 Lecture 1 : Introduction to Convolutional Neural Networks for Visual Recognition Computer Vision에서 이름 있는 스탠포드 강의인 CS231n이다. 뜨거운 관심을 받고 있는데, 매 년마다 수강생이 두 배씩 는다고 한다. Computer Vision의 중요성에 대해 이야기 하고 있다. Sensor, 즉 카메라 등이 많아지면서 visual data가 ridiculous하게 증가했다고 한다. 인터넷 트래픽의 80%가 video data라고 하니 엄청나다. 하지만 이런 데이터를 활용하는 것은 어려운데, 암흑 물질에 비유하고 있다. 암흑 물질도 우주의 85%를 차지하지만 우리 눈에 보이지 않는 것처럼 visual data를 활용하는 것도 여러 가지 난관이 있다. 이제 vision과 computer vision의 역사를 살펴볼 것이다. Fei Fei 교수가 바톤을 이어받아 vision..
CS231N Spring 2020 Assignment1 : KNN(k_nearest_neighbor) Lecture 리뷰를 먼저 써야 순서가 맞는데, 과제를 너무 재미있게 해서 과제 리뷰부터 하기로 했습니다. 첫번째 과제는 Lecture2에서 배운 KNN입니다. KNN에 대한 설명은 나중에 Lecture2 리뷰에서 다루도록 하겠습니다. 강의는 유튜브에 있는 2017년 버전을 듣지만 과제는 2020년껄 할 수 밖에 없습니다. 전 년도 과제들은 사이트를 닫았더군요. cs231n.github.io/에 가시면 과제를 보실 수 있습니다. 뭔가를 해야 하는 부분은 여기부터죠. 주석에 써 있는 경로에 가서 .py 파일을 idle로 연 뒤 주피터랑 같이 보면서 하면 편합니다. compute_distances_two_loops를 구현하라고 하죠. Two_loops 버전은 쉽습니다. 이중 for문을 돌려서 하면 되니까요...