본문 바로가기

전체 글

(75)
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과..
A Neural Algorithm of Artistic Style 구현 VGG-19는 이렇게 생겼다. tf.keras.applications.VGG19(include_top=False 한줄로 불러올 수 있다. style loss를 구하는 코드는 위와 같다. Correlation을 구하기 위해 filter output 행렬을 자기 자신의 전치행렬과 곱연산을 한 후 squared-error를 구한다. 총 5개의 error에 대해 0.2씩의 가중치를 곱한 후 더해 total style loss를 구한다. 논문을 읽으면서 궁금했던 점은 왜 제일 깊은 layer에서 content reconstruction을 하지 않는가 였다. 좋은 성능의 image classifier가 content를 잘 분리해내기 때문에 그 당시 논문에서 VGG를 가져다가 쓴 것인데, VGG의 성능을 완전히 사용..
A Neural Algorithm of Artistic Style Image의 content와 style을 이용해서 unique visual experiences를 만들어내는 것은 인간에게는 쉬운 일이지만 기계에게는 어려운 일이다. 이 논문에서는 image를 content와 style로 분리할 수 있고, 어떤 이미지에서 content를 분리한 후 다른 이미지의 style과 융합하면 화풍을 바꿀 수도 있다는 것을 보여주었다. Input image가 CNN 계층을 거치면서 결국에는 detailed pixel value 보다는 actual content를 인식하게 되는데, 이러한 특성을 이용하면 image에서 content를 분리해 낼 수 있다. CNN이 처음에는 부분적이고 단순한 feature를 인식하지만 깊게 들어갈 수록 더 복잡한 feature를 잡아내는 것을 이용한 ..
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 ..