[Deep learning Application] Lecture 6 : Neural Network
선형 분류기의 한계
- 선형 분류기를 시각적으로 보면 각 클래스당 하나의 템플릿만 학습을 한다.
- 기하학적으로 보면 오직 직선 형태의 경계만 그릴 수 있다. ex) XOR 문제
-> 즉, 두 클래스 사이의 복잡한 관계를 정확하게 분리할 수 없다.
Feature Enginnering
- 그렇다면 입력에서 바로 출력을 매핑하는 대신 입력을 잘 나타내는 특징(feature)를 추출하면 어떨까?
- 극좌표계로 변환을 한 공간에서는 선형 분리가 가능해진다.
Image Features
- 앞에서 본 2D 점 분류보다 실제 이미지 분류 문제가 훨씬 복잡하지만 아이디어는 같다.
- 직접 pixel-class보다는 이미지 특징을 뽑는 것이다.
ex) Color Histogram, Histogram of Oriented Gradients, Bag of Words
- 이런 특징들을 사용해서 분류기에 넣기 전에 사전추출 방식으로 사용한다.
이미지 분류기의 구조
- 기존의 방식은 다음과 같이 특징 추출과 분류기를 분리해서 설계한다.
- 이미지 x -> 특징 추출 -> 특징 벡터 z -> 분류기 f(z) -> 예측 y
- 딥러닝은 특징추출과 분류를 한 번에 학습한다. 이것을 end-to-end 학습이라고 한다.
01 Neural Networks
- 퍼셉트론 (Perceptron)은 생물학적 뉴런에서 영감을 받은 구조이다.
- Dendrite (수상돌기) : 여러 입력을 받는다.
- Cell body (세포체) : 입력을 통합한다.
- Axon (축삭) : 출력 신호를 전달한다.
- 각 입력 xi에 가중치 wi를 곱하고 전부 더한 뒤, 활성화 함수 ϕ에 넣어서 결과를 결정한다.
- ϕ = σ : logistic regression
- ϕ = I : linear regression
* AND 게이트
![]() |
![]() |
- ϕ(z) = 1 if z > r
- 임계값 r = 0.5로 설정하면 적절한 가중치를 찾을 수 있다. (w1 = 0.4, w2 = 0.4)
* XOR 문제
![]() |
![]() |
- XOR 문제는 단일 퍼셉트론으로 분리가 불가하다.
- 그렇기 때문에 다수의 퍼셉트론을 조합해야 한다. -> Multi-layer
Multiple perceptron
- 퍼셉트론은 여러 개를 조합해서 온닉층을 구성한다.
- XOR 문제는 다음과 같이 해결한다.
- 이렇게 두 개의 퍼셉트론을 이용해서 비선형 경계를 학습할 수 있다.
![]() |
![]() |
-> sigle layer -> MLP
Activation Function
- 활성화 함수가 없다면 신경망은 선형 함수에 불과하다.
- 비선형 활성화 함수를 넣어야 복잡하고 비선형적인 결정 경계를 학습이 가능하다.
- 대표적인 활성화 함수들은 다음과 같이 있다.
1. Sigmoid
2. tanh
3. ReLU
4. Leaky ReLU
5. ELU
6. Maxout
- ReLU는 현재 딥러닝에서 default 값으로 가장 많이 사용된다.
- 계산이 매우 빠르고 gradient가 0이 되는 구간이 없기 때문에 빠른 수렴이 가능하다.
Universal Approximation Theorem
- 보편 근사 정리는 은닉층 하나만 있어도 충분히 많은 뉴런을 넣으면 임의의 연속 함수를 근사할 수 있다는 이론이다.
-> 즉, 신경망은 뉴런을 조합해서 복잡한 계산 구조를 만들 수 있다는 것이다.
* Cybenko–Hornik–Funahashi 정리
- 위 형태의 식으로 구간 [0,1]에서 정의된 임의의 연속 함수 F(x)를 원하는 정확도로 근사할 수 있다.
- 결론적으로 신경망은 어떤 비선형 함수든 학습할 수 있다.
- 그리고 그 비선형 함수는 신경망을 이용해서 근사된다.
- 근사 성능을 향상시키기 위해 은닉 노드의 수를 증가시킬 수 있다.
- 뉴런이 하나, 즉 단일 직선일 때는 단 하나의 선형 결정 경계만 생성할 수 있다.
- 뉴런 수가 많을수록 표현 능력 (capacity)가 커진다.
- 깊은 신경망 (depp networks)은 비슷한 파라미터를 가진 얕은 신경망보다 더 뛰어난 성능을 낸다.
-> 더 높은 표현력을 가지기 때문이다.
- 이는 계층적 특징 학습(hierarchical feature learning)이 가능하기 때문이다.
-> 위 그림에서 똑같은 75개의 weights지만,
2개의 비선형 층은 15가지 방식으로 표현이 가능하고 4개의 비선형 층은 125가지 방식으로 표현이 가능하다.
- 기존 머신러닝에서는 사람이 설계한 알고리즘을 사용해서 고정된 feature vector을 추출했다.
-> 이것을 Feature Extraction 박스라고 한다.
- 그 다음 분류기 f가 이 벡터를 10개의 클래스 점수를 출력하는 방식으로 진행한다.
* training은 분류기 f에만 적용된다.
- 현재 딥러닝은 전체 신경망이 end-to-end 방식으로 학습되어 특징 추출기 + 분류기 전체가 함께 학습된다.
- 신경망은 여러 은닉층을 거쳐 추출한 특징 벡터에 대해 마지막 출력층은 다음과 같은 선형 방정식을 적용한다.
- 여기서 h가 마지막 은닉층의 출력이고 W와 b는 학습된 파라미터이다.
- 이 구조는 전통적인 softmax 분류기와 동일한 구조이다.
- 작은 데이터셋에는 수작업으로 설계된 특성이 더 잘 작동할 수 있다.
- 큰 데이터셋에서 수작업은 모델이 복잡한 패턴을 학습하는데 한계가 된다.
- 예전엔 데이터가 부족해 사람이 직접 특징을 추출하는 것이 효율적이었고, 지금과 같이 데이터와 연산 자원이 충분하면 모델이 자동으로 최적의 특성을 학습하는 것이 더 강력하는 것이다.
Backpropagation: Computing Gradients
- 경사하강법은 손실함수 L을 각 파라미터(가중치)에 대해 미분한 값이다.
- 각 기울기(gradient)는 해당 파라미터가 잘못된 예측에 어느 정도 영향을 미쳤는지 나타낸다.
Computational Graph
- 계산 그래프는 복잡한 수식을 연산 단위로 나눠서 시각화하는 개념이다.
- f(x, W) = Wx + b
-> 위 식을 노드 단위로 나눠보면 x : 행렬 곱 Wx
+ : bias 더하기 +b
- 이렇게 각 연산 단계를 나누고 각 단계에서의 미분도 역방향으로 계산하면
- 전체 Loss에 대한 각 파라미터의 미분이 구해진다.
Chain Rule
- Chain Rule은 여러 함수가 합성되어 있을 때 미분을 수행하는 법칙이다.
- Chain Rule은 역전파의 핵심 원리이다.
- Upstream Gradient : 이전 노드에서 내려온 미분값
- Local Gradient : 현재 노드에서의 연산에 대한 미분
- Downstream Gradient : 위 둘을 곱한 값으로 다음 노드로 전달
Patterns in Gradient Flow
Forward and backward propagation
- Forward : 연산 결과를 계산 및 gradient 계산에 필요한 중간 값을 메모리에 저장한다.
- Backward : chain rule을 적용하여 loss 함수의 입력들에 대한 gradient 계산한다.
Backpropagation with Vectors and Matrices
Vector Derivatives
- Scalar -> Scalar
- Vector to Scalar
- Vector to Vector
Model Selection and evaluation
Evaluation Strategy
- 큰 모델을 충분히 학습하면 training loss는 항상 감소한다.
- 하지만 우리는 단순히 패턴을 암기하는 모델이 아닌, 일반화된 모델이 필요하다.
- 이를 위해 테스트 목적만을 위해 우리의 데이터에서 일부를 떼 테스트 데이터를 따로 분리해준다.
-> 이제 우리는 training error를 low하는 것보다 test error를 low하는 모델을 선택해야 한다.
-> test data는 절대로 훈련하면서 사용하면 안 된다.
- Training data : 학습에 사용한다.
- Validation data : 하이퍼파라미터 튜닝 등 모델 선택에 사용한다.
- Test data : 절대 훈련에 사용하지 않고 최종 성능 평가용이다.
- 테스트 분할 방법은 일반적으로 전체 데이터 중 10%~20%를 test set으로 무작위로 분할한다.
Choosing Hyperparameters
- 딥러닝에서는 하이퍼파라미터가 매우 많다.
- Model hyperparameters : layers, layer width, activation ...
- Learning hyperparameters : learning rate, decay schedule, optimizer
- 대부분은 직접 학습을 반복하며 실험적으로 선택해야 한다. : data driven-approach (데이터 기반 접근)
-> 다양한 하이퍼파라미터 조합으로 여러 모델을 학습하고 그 성능을 비교하여 최적의 조합을 선택한다.
-> 검증용 (validation set)으로 사용해야 한다.
Train/Validation/Test Splits for Model Selection
- 1단계: training set을 사용하여 모델을 학습한다.
- 2단계: validation set으로 모델 성능을 평가한다.
- 3단계: 다양한 하이퍼파라미터 조합에 대해 1~2단계를 반복하고 가장 좋은 성능을 보이는 조합을 선택한다.
- 4단계: 선택된 하이퍼파라미터로 training + validation 데이터 전체를 이용해 모델을 다시 학습한다. (optional)
- 5단계 : 이 모델을 test set에서 최종적으로 평가한다.
* test set은 4단계가 완료되기 전까지 사용하면 안 된다.
K-Fold Cross Validation
- 전체 데이터셋을 K개의 동일한 fold로 나눈다.
- 각 반복에서는 K-1개의 fold를 training, 나머지 1개를 validation으로 사용하여 모델을 학습한다.
- 위 과정을 K번 반복하여 매번 다른 fold를 validation용으로 사용한다.
- 마지막으로, K개의 평가 점수를 평균해서 모델의 일반화 성능을 추정한다.
-> 이러한 과정으로 데이터 분할의 무작위성에 대한 강인성(robustness)을 높일 수 있고,
-> 일반화 성능에 대해 더 신뢰할 수 있는 추정치를 얻을 수 있다.