일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 주피터노트북
- 경사하강법
- deep learning
- random forest
- Python
- 주피터 노트북 테마
- jupytertheme
- Linear Regression
- 모두를 위한 딥러닝
- 주피터테마
- deeplearning
- lol api
- 한빛미디어
- feature scaling
- Udacity
- regression
- 나는리뷰어다2021
- pandas
- MySQL
- 주피터노트북 커널 목록
- Git
- Machine Learning
- GitHub
- 주피터노트북 커널 추가
- 데이터분석
- overfitting
- 주피터노트북 커널 제거
- ubuntu
- 회귀분석
- 딥러닝
- Today
- Total
유승훈
lec09 - XOR with Neural Nets 본문
Logistic Regression 같은 하나의 모델, 유닛으로는 XOR을 풀 수가 없음이 수학적으로 증명되기도 했습니다. 이는 초창기 Neural Net이 각광받지 못한 이유기도 합니다.
하지만 하나가 아니라 여러개를 합치면, 풀 수 있습니다. 그런데 복잡한 모델에서의 Weight와 Bias를 학습시키기가 쉽지 않다는 한계가 있었습니다.
그렇다면 XOR을 어떻게 푸는지 살펴보겠습니다. X를 Input으로 받는 유닛을 두개 만들고, 각 결과인 Y1, Y2를 Input으로 받는 유닛을 한개 만들었습니다. 각 유닛은 고유의 Weight와 Bias를 갖고 있습니다.
X1, X2를 기반으로 각 유닛에서 Y1, Y2를 계산하고, Y1,Y2로 Y_hat을 계산합니다. 모든 유닛은 Wx+b이고, 모든 유닛은 마지막에 활성함수로 Sigmoid를 사용합니다. 이를 통해 여러개의 유닛으로 XOR을 어떻게 푸는지 쉽게 이해할 수 있습니다. 세세한 계산은 두개만 예시로 들었고, 계산 결과를 정리하면
위와 같은 결과를 얻을 수 있습니다.
앞서 계산했던 구조를 정리하면, 위와 같습니다. 이 또한 하나의 Neural Network가 됩니다. 실제로는 각 유닛의 Weight와 Bias를 데이터를 통해서 구하게 됩니다.
우리가 Multinomial Classification에서 Matrix 연산을 활용했던 것을 떠올려 봅시다. 이를 활용하면 여러 Layer들의 연산을 한번에 계산할 수 있습니다. 첫번째 두 유닛의 Weight와 Bias를 Matrix로 합치면 하나의 식인 `K(x)`로 정리할 수 있고, 이를 두번째 유닛에서 받아서 계산하는 것입니다. 그렇다면 우리의 데이터에서 어떤 방식으로 Weight와 Bias를 구할 수 있을까요?
우리에게 익숙한 Gradient Descent를 활용하여 구할 수 있습니다. Cost가 Convex하다면, Inital Value와는 상관없이 최저점을 향해 나아갈 수 있습니다. 다만, 각 Layer의 Weight와 Bias가 Y에 미치는 영향을 알아야 조정할 수 있는데, 모든 Layer에서 계산하기에는 너무 많은 계산량을 필요로 하는 것입니다. 이것이 MLP의 학습이 불가능하다고 했던 이유이기도 합니다.
이를 해결한 것이 Backpropagation입니다. 예측값과 실제값을 비교하여 Error, 즉 Cost를 구하고, 앞으로 가면서 값을 조정해나가는 방식입니다. W,x,b가 Output인 f에 미치는 영향을 각 편미분값을 통해 구할 수 있습니다.
앞의 구조는 상당히 간단합니다. 하지만 구조가 복잡해진다면 어떨까요? 이 또한 차례로 해 나가면 됩니다. 최종 f를 구성하는 a와 b, 그의 Metric을 알고 있기 때문에, a와 b가 f에 미치는 영향을 계산할 수 있습니다. 이렇게 해나가면 초기 Input의 영향력까지 Chain Rule을 활용하여 계산할 수 있습니다.
앞서 배웠던 Sigmoid 함수도 z가 함수값에 미치는 영향을 살펴보고자 미분을 할 때, 위와 같이 계산과정을 전부 그래프의 형태로 분리할 수 있습니다.
Tensorflow가 이런 관점에서 그래프 구조를 활용하고 있습니다. 코드상으로는 함수를 쓰지만, 실제로는 미분을 위해 모든 계산 과정을 하나의 그래프로 만들어서 구현합니다. 함수를 쓰면 Tensorflow에서 알아서 그래프의 구조를 구성하기 때문에, 그래프를 만드는 것에 대해서는 알 필요가 없습니다.
'강의정리 > 모두를 위한 딥러닝 시즌 2' 카테고리의 다른 글
lec11 - Convolutional Neural Network(CNN) (0) | 2021.02.26 |
---|---|
lec10 - Relu, Weight Initialization, Drop out, Batch Normalization (0) | 2021.02.24 |
lec08 - Basic Deep Learning (0) | 2021.02.20 |
lec07 - Application and Tips (0) | 2021.02.16 |
lec06 - Softmax Regression, Classifer의 Cost function (0) | 2021.02.15 |