본문 바로가기

수업 정리(개인용)/cs231n

(18)
CS231N Spring 2020 Assignment1 : Features yun905.tistory.com/5?category=878116 CS231n 2017 Lecture 3 : Loss Functions and Optimization Lecture 2에서 배운 내용의 review로 시작하는 Justin. Linear classifier는 W를 가지고 있었고, 각 W 값은 해당 픽셀이 얼마나 score에 영향을 끼칠지 결정한다. 이번 시간에 배울 loss function과 optimizatio.. yun905.tistory.com Lecture 3에서도 다루었듯이 image의 raw pixels를 바로 linear classifier에 넣는 것은 좋은 생각은 아니었다. 이런 feature extraction 방법을 통해 얻은 feature를 neural network에 넣..
CS231N Spring 2020 Assignment1 : Two Layer Net 간단한 값들을 가지고 우선 모델의 순전파와 역전파를 구현할 것이다. 이 부분을 implement 하면 된다. 순전파야 단순히 output을 다음 layer의 input으로 주는 구조이므로 어려울 것이 없고, 역전파도 softmax 과제를 잘 했다면 비슷한 방식으로 쉽게 할 수 있다. yun905.tistory.com/11 를 참고하자. 다만 한 가지 다른 부분은 이전 과제에서는 bias trick을 사용해 W에 bias를 끼워넣어서 따로 역전파를 계산해 주지 않아도 되었는데, 여기서는 b가 따로 떨어져 있으므로 계산을 해주어야 한다. Bias는 각 class별로 1개씩 존재하므로 shape이 score(L2).shape[1]과 같을 것이다. 이런 하나의 bias가 X.shape[0]개의 data에 대해 ..
CS231N Spring 2020 Assignment1 : Softmax CIFAR-10 데이터를 이렇게 분할해서 사용할 것이다. softmax.py에 들어가서 softmax_loss_nave를 구현한다. Inline Q1. W가 처음에 0에 가까운 값들로 초기화 되기 때문에, exp 연산을 거치면 score의 모든 값이 1이 되어 버린다. 따라서 softmax를 거친 값은 1/cls_num이고 CIFAR-10의 class 수는 10개 이므로 loss는 -log(1/10)이 된다. Softmax의 computational graph는 위와 같고, 이 그래프를 차분히 해석하면 gradient를 구할 수 있다. 코드는 위와 같다. Regularization을 잊지 말자. Numerical gradient와 비교해서 잘 짰는지 확인하자. Naive 버전을 잘 짰다면 vectoriz..
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 ..