Lecture4: Introduction to Neural Networks
- CS231n 강의 [1]를 듣고 공부한 내용을 나름대로 정리했다.
- 글에 있는 모든 그림, 표, 예시는 [2]에서 가져왔다.
~ 목차 ~
0. 지난 시간 복습
1. Computational Graph
2. Back Propagation
2.1 개념
2.2 예시
2.3 패턴
2.4 Vectorized 연산
2.5 코드 구현
3. Neural Networks
3.1 개념
3.2 구조
3.3 수식
3.4 실제 뉴런과의 비교
0. 지난 시간 복습
- 지난 시간에 손실함수를 최소로 하는 W값을 구하기 위해 기울기를 통해 optimization을 하는 방법을 소개했다.
- 기울기를 구할 때는 analytic gradient 즉 $\frac{\partial y}{\partial x}$을 사용하는데, 함수가 미분하기 좋으면 기울기를 구하는 것도 쉽지만,
함수가 복잡해서 직접 미분하기 어려우면 기울기를 구하는 것도 어려워진다. 이때 computational graph를 사용한다.
1. Computational Graph
- Computational Graph은 연산을 그래프 형태로 표현한 것이다.
- Multiclass SVM Loss의 식을 computational graph 형태로 표현하면 아래와 같다.
노드 당 연산이 하나씩 들어가고, 순서에 맞춰서 연산이 진행된다.
- 장점: 아무리 복잡한 함수(e.g. AlexNet, Neural Turing Machine)라도 analytic gradient $\frac{\partial y}{\partial x}$를 쉽게 구할 수 있다.
Chain rule을 사용하면 간단한 계산(더하기, 곱하기, 지수함수)들만으로도 $\frac{\partial y}{\partial x}$를 구할 수 있기 때문이다.
그리고 $\frac{\partial y}{\partial x}$를 구할 수 있기 때문에 back propagation 계산도 할 수 있다!
2. Back Propagation
2.1 개념
- Back propagation은 chain rule를 계속 사용해서 모든 변수의 gradient를 구하는 방법이다.
뒤에서 앞으로 오면서 전 단계에서 구한 $\frac{\partial L}{\partial z}$를 활용해서 $\frac{\partial L}{\partial x}$를 구한다.
- 하나의 노드를 기준으로 아래와 같이 계산이 된다.
2.2 예시
- 2가지 예시(단순 버전, 복잡 버전)를 가져왔다. 두 예시 모두 직접 손으로 쓰면서 계산해봤다.
먼저 단순 버전은 아래와 같다.
- 주어진 함수 $f(x,y,z)$와 $x,y,z$값들을 바탕으로 왼쪽에서부터 forward propagation 계산을 해준 뒤,
오른쪽에서부터 돌아오면서 chain rule에 따라서 back propagation을 해주면 된다.
Forward는 핑크색으로, backward는 순서에 따라 빨강 주황 노랑색으로 표시했다.
- 다음은 조금 복잡한 버전이다.
- 주어진 함수 $f(w,x)$와 $w_{0},x_{0},w_{1},x_{1},w_{2}$값들을 바탕으로 왼쪽에서부터 forward propagation 계산을 해준 뒤,
오른쪽에서부터 돌아오면서 chain rule에 따라서 back propagation을 해주면 된다.
Forward는 핑크색으로, backward는 순서에 따라 빨주노초파남보로 표시했다.
함수가 복잡하다보니 계산할 게 많았지만, 알아가는 단계이니 줄여서 쓰지 않고 그냥 다 풀어서 써봤다.
2.3 패턴
- 이렇게 쭉 계산해보면 노드의 종류에 따른 패턴을 찾을 수 있다.
아래의 computational graph를 보면서 패턴을 찾아보자.
- Add 게이트: Gradient Distributor. 연결된 모든 가지들한테 gradient를 그대로 전달한다.
- Max 게이트: Gradient Router. 연결된 가지들 중 max값에만 gradient를 전달한다.
(생각해보면 당연한 이야기이다. 순전파 과정에서 max value만 전달되었기 때문에 유일하게 끝까지 간 값이다.)
- Mul 게이트: Gradient Switcher. 연결된 가지들의 순전파 계산과 역전파 gradient의 곱이 일정하다.
(한 입력의 기울기가 다른 입력의 값에 의해 조정되기 때문이다.)
2.4 Vectorized 연산
- 지금까지는 각 항이 스칼라일 때 연산을 했다.
각 항이 벡터이면, 스칼라일 때와의 계산 기본 원리는 같지만 $\frac{\partial f}{\partial W}$와 $\frac{\partial f}{\partial x}$가 Jacobian matrix가 된다.
- Vectorized된 예시는 다음과 같다.
2.5 코드 구현
- 코드로 구현하면 다음과 같다.
먼저 Computational Graph 클래스를 만들어서 안에 순전파와 역전파를 각각 구현한다.
- 그리고 자주 나오는 노드들을 따로 클래스로 만들어서 안에 순전파와 역전파를 각각 구현한다. 여기서는 mul 게이트를 예시로 들었다.
- 그런 다음 구현한 클래스들을 아래와 같이 조합해서 gradient룰 구할 수 있다.
if __name__ == "__main__":
# Computational Graph 생성
graph = ComputationalGraph()
# Multiply Gate 추가
multiply_gate = MultiplyGate()
graph.add_gate(multiply_gate)
# 순전파 계산
x, y = 2, 3
print("Inputs:", x, y)
z = graph.forward([x, y])
print("Forward Result (z):", z)
# 역전파 계산
dz = 1
gradients = graph.backward(dz)
print("Backward Gradients (dx, dy):", gradients)
3. Neural Networks
3.1 개념
- Neural network는 말그대로 신경망이다.
지금까지 single-layer nework(입력층과 출력층으만 구성)에 대해서 배웠지만, 이제 Multi-Layer Neural Network도 등장한다.
- Multi-layer Neural Network는 아래와 같이 입력층 x, 은닉층 h, 출력층 s로 구성된다.
- 그리고 중간에 나오는 가중치들($w_{1}$,$w_{2}$)은 아래 그림과 같이 대략적인 특징들을 파악하는 역할을 한다.
3.2 구조
- 2-layer Neural Network과 3-layer Neural Network의 구조는 다음과 같다.
(은닉층의 개수를 기준으로 각각 1-hidden-layer Neural Net과 2-hidden-layer Neural Net라고도 불린다.)
3.3 수식
- 각각의 식은 $f=W_{2} max(0,W_{1}x)$과 $f=W_{3} max(0, W_{2} max(0,W_{1}x))$로 표현될 수 있다.
$max(0,x)$는 non-linear activation function으로, 여기서는 ReLU가 사용되었다.
종류는 ReLU 말고도 아래와 같이 다양하다. 상황에 따라서 적합한 것을 골라서 사용하면 된다.
3.4 실제 뉴런과의 비교
- 진짜 뇌속의 뉴런과 구현하고 있는 신경망을 비교해보면 다음과 같다. 비슷한 원리로 작동한다는 것을 알 수 있다.
- 하지만 Neural networks are not really neural하다.
신경망은 뇌를 모방한 수학적 모델일 뿐, 실제로는 작동이 완전히 같지 않다는 점을 유의해야 한다는 것이다.
- 다음 시간에는 Convolutional Neural Network에 대해서 배울 것이다.
참고문헌
[1] Stanford University, "Lecture4, Introduction to Neural Networks," YouTube, Aug. 12, 2017. [Online]. Available:
https://www.youtube.com/watch?v=d14TUNcbn1k&list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv&index=4
[2] F. Li, J. Johnson, and S. Yeung, "CS231n Convolutional Neural Networks for Visual Recognition: Lecture 4 -Introduction to Neural Networks," Stanford Univ., 2017. [Online]. Available:
https://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture4.pdf
'CS231n' 카테고리의 다른 글
[CS231n] Lecture7: Training Neural Networks II (1) | 2024.11.22 |
---|---|
[CS231n] Lecture6: Training Neural Networks I (0) | 2024.11.21 |
[CS231n] Lecture5: Convolutional Neural Networks (0) | 2024.11.20 |
[CS231n] Lecture3: Loss Functions and Optimization (0) | 2024.11.18 |
[CS231n] Lecture2: Image Classification (2) | 2024.11.17 |