딥러닝 12

[Deep Learning from Scratch] 8. 딥러닝

드디어 책의 마지막 장이다. 한동안 바빠서 책을 마무리하지 못해 슬펐다.. 이번 장에서는 새로운 내용을 배운다기보다는 유용한 딥러닝 모델에 어떤 것이 있는지, 어떤 이유로 딥러닝이 주목받는지 등을 알아본다. 우리가 자주 사용했던 MNIST 데이터셋은 알고리즘의 정확도를 비교하기 위한 공개된 데이터셋이다. 순위를 확인해보면 Neural Network를 이용한 모델들이 순위권에 위치해있다. 상위 기법들을 참고해보면 Ensemble, learning rate reduction, data augmentation 등의 기법을 활용하여 정확도를 올린 것을 알 수 있다. 이중에서 data augmentation(데이터 확장)은 기존 데이터의 수가 적을 때 효과적인데, 입력 이미지를 회전 또는 이동시켜 데이터를 '인위..

딥러닝 2023.06.26

[Deep Learning from Scratch] 7. 합성곱 신경망(CNN)

이번 장에서 배울 CNN은 이미지 인식 분야에서 거의 모든 기법의 기초이다. CNN의 구조를 파악하고 어떻게 작동하는지 알아보자. 지금까지 본 신경망은 인접하는 계층의 모든 뉴런과 연결된 형태였다. 이를 완전연결(fully-connected; 전결합)이라 한다. 그리고 완전연결된 이 계층을 Affine 계층이라고 부른다. 기존의 신경망에서는 Affine 계층 다음에 활성화 함수로 연결되어 있다. 하지만 CNN에서는 활성화함수 앞뒤로 Conv(합성곱 계층)와 Pooling(풀링 계층)이 연결된다. (Pooling은 생략되기도 한다.) 이를 그림으로 나타내면 다음과 같다. 지금까지 본 신경망이 'Affine-ReLU(or 활성화 함수)'의 연결이었다면, CNN은 'Conv-ReLU-(Pooling)'의 연결..

딥러닝 2023.05.30

[Deep Learning from scratch] 6. 학습 관련 기술들

신경망 학습의 목적은 loss(cost)를 가능한 한 낮추는 최적의 매개변수를 찾는 것이며, 이 과정을 최적화(optimization)이라 한다. 이번 장에서는 여러 방법들이 각각 어떤 특징을 가지고 있는지 살펴보고 weight의 초기값이나 hyperparameter를 어떻게 구하는지 등을 자세히 알아보자. 지금까지 사용한 최적화는 매개변수의 기울기(미분)을 이용하는 확률적 경사 하강법(SGD)이란 방법이다. SGD의 수식은 다음과 같다. W : 갱신할 weight parameter 에타 : 학습률(learning rate) W에 대한 L의 편미분 : loss function의 gradient SGD를 코드로 구현하면 다음과 같다. class SGD: def __init__(self, lr=0.01): ..

딥러닝 2023.05.24

[Incarnate the Algorithm] PCA & K-means Clustering

unsupervised learning은 입력값인 x만 존재하고 output이 존재하지 않는다. PCA(Principal Component Analysis)와 K-means Clustering(이하 K.C)은 대표적인 unsupervised learning이다. PCA는 대표적인 dimension reduction기법 중에 하나다. PCA를 알기 위해서는 encoding과 decoding이 필요하다. 먼저, 공차한계(tolerance)혹은 분산팽창요인(VIF)가 현저하게 높아지거나 낮아지는 것을 방지하기 위해 mean centering을 사용한다. 각 data를 데이터의 평균(mean)으로 빼주는 것을 말한다. 이제 encoding과 decoding을 알아보자. N-dim data x_p에 대해 모든 v..

딥러닝 2023.05.23

[Deep Learning from scratch] 5. 오차역전파법

앞 장에서는 신경망의 weight parameter에 대한 cost function의 기울기를 수치 미분을 사용했다. 수치 미분은 단순하고 구현하기 쉽지만, 연산이 오래 걸린다는 단점이 존재한다. 오차역전파법(Backward propagation)은 비교적 복잡한 구조를 가지지만, 연산이 빠르고 효율적이다. 오차역전파법에 대한 자세한 설명은 책에 나와있다. 계산그래프를 통한 설명을 차근차근 따라가면 쉽게 이해할 수 있다. 간단하게 핵심만 정리해보면 다음과 같다. 1) 덧셈 노드의 역전파 : 입력 신호를 그대로 다음 노드로 전달한다. 2) 곱셈 노드의 역전파 : 순전파의 입력 신호를 서로 바꿔서 역전파의 입력 신호와 곱한다. 3) ReLu 계층과 Sigmoid 계층 구현 : 앞장에서 배운 것과 1,2를 토..

딥러닝 2023.05.15

[Deep Learning from scratch] 4. 신경망 학습

퍼셉트론과 신경망(딥러닝)의 가장 큰 차이는 데이터로부터 기계가 스스로 학습이 가능하다는 점이다. 데이터를 직선으로 분리가 가능한, 즉 선형 분리가 가능한 문제에서는 퍼셉트론 수렴 정리를 통해 유한 번의 학습으로 해결할 수 있다는 것이 증명되었다. 하지만 대부분의 문제는 비선형 분리 문제이고 이를 퍼셉트론으로는 자동으로 학습할 수 없다. 기계학습은 데이터가 핵심인 문제이다. 사람이 중심이 되어 해결하는 것이 아니라 데이터가 중심이 되어 문제를 해결한다. 이런 방식은 사람의 개입을 최소화할 수 있다. 앞서 다뤘던 손글씨 인식 문제(MNIST dataset)를 생각해보자. 손글씨 이미지를 보고 이를 분류하는 알고리즘을 짠다고 생각해보면 어떻게 해야 할지 쉽사리 떠오르지 않는다. 주어진 데이터를 활용한다면 이..

딥러닝 2023.05.15

[Incarnate the Algorithm] Linear Classification

Classification problem을 해결하는 방법에는 크게 두 가지가 있다. 그 중의 하나인 regression perspective를 다루고자 햔다. 이는 분류 문제를 회귀의 관점에서 바라보는 것이다. multi-class를 분류하는 방법도 있지만 여기서는 2 class classification problem을 다룬다. 2개의 class를 나타내는 output으로 0과 1을 가진다고 하자. 그렇다면 이를 step function으로 나타낼 수 있다. step function은 다음과 같이 0과 1의 output만을 가진다. 하지만 이 function을 이용할 경우 1의 값을 갖는 data를 0으로 잘못 분류하는 경우가 발생할 수 있다, 또한 discrete function이므로 data를 st..

딥러닝 2023.04.11

[Incarnate the Algorithm] Linear Regression

Linear Regression problem은 주어진 (N + 1) - dimension space의 input에 대해 hyperplane을 fitting하는 것이다. hyperplane이란 linear function으로 h(w) = a + b^Tw로 표현된다. (특별한 표기가 없으면 1D 행렬은 열벡터의 형태이므로 w와 행렬곱을 하기 위해 행벡터꼴인 b의 전치행렬(b^T)로 바꿔준 것이다. 구하고자 하는 것은 hyperplane이 정답을 의미하는 output y_p에 대해 최적의 parameter w vector를 구하는 것이다. Linear Regression 문제에서 주로 쓰이는 cost function은 least square cost function이다. 자주 쓰이는 이유는 이 함수가 con..

딥러닝 2023.04.07

[Incarnate the Algorithm] Gradient Descent

gradient descent는 first-order optimization에서 가장 대표적인 알고리즘이다. zero-order optimization에서와 마찬가지로 이전의 위치에서 가장 cost를 적게 줄이는 descent direction을 구해서 다음 위치를 계산한다. 이때, zero-order와는 다르게 미분을 통해 descent direction을 설정한다. w_k = w_(k-1) - alpha * grad[g{w_(k-1)}]이 gradient descent 알고리즘의 식이다. ( 헷갈리지 않도록 다른 괄호로 표기했다 ) # alpha : steplength parameter; 임의로 정할 수 있으면 고정형과 감쇄형이 있다. # grad : (del연산자), 즉 gradient를 의미한다...

딥러닝 2023.04.07

[Incarnate the Algorithm] Zero-order optimization Coordinate Search

머신러닝에는 cost function의 최솟값(최댓값)을 찾기 위한 다양한 알고리즘들이 존재한다. 그중에서도 Zero-order optimization은 미분을 사용하지 않고 원하는 값을 찾아가는 알고리즘들을 말한다. 이번 포스팅에서는 그 중에서도 Coordinate Search라는 방법을 사용해볼 것이다. 임의의 한 점에서 최솟값을 찾기 위한 다음 점으로 나아간다고 생각해보자. cost function(이하 g라고 하겠다)의 입력값이 2차원만 돼도 한 점에서 다음 점으로 나아갈 수 있는 방향은 360도로 무수히 많다. 이 경우에는 연산 횟수가 매우 많아지기 때문에 입력값의 차원의 영향을 크게 받는다. 그렇기 때문에 생각한 것이 한 점에서 다음 방향으로의 축방향만 고려하는 것이다. 입력값이 2차원(예를 ..

딥러닝 2023.03.24