머신러닝 44

[머신러닝 - 이론] OverFitting, UnderFitting, Cross Validation (과대 적합, 과소 적합, 교차 검증)

앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.10.18 - [Computer Science/머신러닝] - [머신러닝 - 이론] Polynomial Regression (다항 회귀) [머신러닝 - 이론] Polynomial Regression (다항 회귀) 앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.10.18 - [Computer Science/머신러닝] - [머신러닝 - 이론] Linear Regression (선형 회귀) [머신러닝 - 이론] Linear Regression (선형 회귀) 앞의 글을 읽으시면 이해 hi-guten-tag.tistory.com 1. OverFitting, UnderFitting이란? OverFitting은 과잉 적합, 과대 적합으로 불리며, 모델이 훈련 데..

[머신러닝 - 이론] Polynomial Regression (다항 회귀)

앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.10.18 - [Computer Science/머신러닝] - [머신러닝 - 이론] Linear Regression (선형 회귀) [머신러닝 - 이론] Linear Regression (선형 회귀) 앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.04.07 - [Computer Science/머신러닝] - [머신러닝 - 이론] 인공지능이란? (What is artificial intelligence?) [머신러닝 - 이론] 인공지능이란? (What is artificial intellig hi-guten-tag.tistory.com 1. 다항 회귀란? 만약 가지고 있는 데이터가 직선보다 복잡하다면 어떨까요? 여전히 linear model이 nonlin..

[머신러닝 - 이론] Linear Regression (선형 회귀)

앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.04.07 - [Computer Science/머신러닝] - [머신러닝 - 이론] 인공지능이란? (What is artificial intelligence?) [머신러닝 - 이론] 인공지능이란? (What is artificial intelligence?) 들어가기에 앞서서 머신러닝의 대다수의 글은 코드 보다는 수학적 이론, 설명 위주로 할 예정입니다. 저는 원래 설명 - 수학적 이론 - 코드 방식으로 공부하는 bottom-up 방식을 매우 좋아합니다. hi-guten-tag.tistory.com 2022.04.08 - [Computer Science/머신러닝] - [머신러닝 - 이론] 머신러닝의 기초 (Fundamental of Machine Lear..

[머신러닝 - Python] 덧셈, 곱셈 노드 오차 역전파 구현 (Addition, Multiplication Back Propagation Implementation)

class MulLayer: # 곱셈 계층 def __init__(self) -> None: self.x = None self.y = None def forward(self, x, y): # 순전파, x와 y의 값을 저장해야만 backward때 사용할 수 있다. self.x = x self.y = y out = x * y return out def backward(self, dout): # 역전파로 상위 계층에서의 미분 값 * 반대 노드의 값을 출력한다. dx = dout * self.y dy = dout * self.x return dx, dy class AddLayer: # 덧셈 계층 def __init__(self) -> None: pass def forward(self, x, y): # 순전파, ..

[머신러닝 - 이론] 오차 역전파, 오류 역전파 (Back Propagation)

인공지능을 공부하면서 가장 어려웠다고 생각하는 부분입니다. 이해하는 과정이 너무 어려웠고, 구글에 검색해도 죄다 중간 과정은 건너뛰고 결론만 써놓았더라고요.. 아무튼 이해하는데 쉽지 않았고, 이 글도 쓸까 말까 고민했습니다.. 너무 양도 많고 어려워서... 해당 글에서는 온갖 수식과 그림이 난무할 테니 집중해서 읽어주시면 아마 오차 역전파를 이해하는데 큰 도움이 되리라 생각합니다. 0. 시작하기에 앞서 오차 역전파를 설명하는 대표적인 두 가지 방법이 있습니다. 수식을 전개해서 설명하는 방법이 있고, 그림을 그려가며 역전파를 이해하는 방법이 있습니다. 상대적으로 그림을 그려가며 이해하는 방식이 쉽지만, 보다 정확한 이해를 위해서는 결국 수식을 통해 증명해야 합니다. 해당 글에서는 둘 다 섞어서 설명할 계획..

[머신러닝 - 이론] 수치 미분 (Numerical Differentiation)

오차 역전파를 정리하려고 했는데, 그전에 수치 미분을 알아야 할 것 같아서 먼저 정리합니다. 앞선 글에서 설명했던 경사 하강법을 이용하여 에러를 최소화하기 위해서는 현재 상태에서의 기울기를 알아야 합니다. 정확히는 현재의 가중치 및 편차가 오류에 얼만큼의 영향을 끼치는지 알아야 합니다. 만약 손실함수가 \(f(x) = x^2\)이라면 미분을 통하여 \(2x\)를 통해 좌표 (0, 0)이 최소가 됨을 알 수 있습니다. 하지만 현실의 손실 함수는 저렇게 간단하지 않고, 또한 간단히 \(x\)를 통해서 나타나지도 않습니다. 따라서 보다 효율적이게 기울기를 찾아야 하는데, 이때 사용되는 것이 수치 미분과 오차 역전파입니다. 1. 수치 미분이란? 다들 아시겠지만, 미분이란 어느 한 점에서의 기울기를 뜻합니다. 즉..

[머신러닝 - Python] 2층 신경망 구현 (Two Layer Net Implementation)

from audioop import cross import sys, os sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) from common import * import numpy as np class TwoLayerNet: def __init__(self, input_size, hidden_size, output_size, weight_init_std = 0.01) -> None: # 파라미터를 정규 분포로 초기화 함 self.params = {} self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size) self.params['b..

[머신러닝 - Python] 기울기 구현 (Gradient Implementation)

함수 f를 받아서 중앙 차분을 이용하여 수치 미분하는 코드 정확한 미분 값을 구하지는 못하므로 수치 미분이라고 함 아무튼 해당 함수와 특정 좌표를 받아서 h라는 미세한 값을 더하고(A), 뺀 뒤(B), A와 B의 차이를 계산하여 기울기를 구하는 방식 좌표가 n개가 되면 각각의 n의 f 위에서의 기울기를 구한 뒤 반환함 만약 좌표가 2차원이라면 1개의 차원씩 잘라서 계산 후, 반환함 즉, f 함수에서 각각의 좌표에 해당하는 지점에서의 기울기를 구한다. import numpy as np def numerical_gradient(f, x): # 함수 f를 x 좌표에서의 편미분 값을 반환하는 함수 h = 1e-4 grad = np.zeros_like(x) for idx in range(x.size): tmp_v..

[머신러닝 - 이론] 경사 하강법 (Gradient Descent)

1. 경사 하강법의 정의 경사 하강법(傾斜下降法, Gradient descent)은 1차 근삿값 발견용 최적화 알고리즘이다. 기본 개념은 함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다. -위키 백과- 만약 본인이 한 치 앞도 보이지 않는 상황에서 산을 내려가야 하거나, 올라가야 한다면 어떻게 해야할까요? 시각적으로 멀리 있는 산 꼭대기가 보이지 않기 때문에 단순히 근처의 지형을 가지고 판단을 내려야 합니다. 그러므로 현재 위치에서 가장 경사가 높은 곳, 그 곳으로 계속해서 움직이면 '보통'의 경우 산의 정상에 도달 할 수 있습니다. 이는 경사 상승법이라고 하며, 정 반대의 방법으로 계속해서 가장 낮은 곳으로 이동하는 것이 경사 하강법이라고 할 수 ..

[머신러닝 - Python] 손실 함수 - 배치 교차 엔트로피 오차 구현 (Loss Function - Batch Cross Entropy Error Implementation)

cross entropy error의 핵심은 정답에 해당하는 확률 값만 계산한다는 점입니다. 원-핫 인코딩 방식일 때의 코드를 보면 return -np.sum(target * np.log(pred + 1e-7)) / batch_size 라는 코드가 있는데, 이때 target을 log에 곱하는 모습을 볼 수 있습니다. 즉, 원-핫 인코딩 방식이므로 정답에 해당하는 인덱스만 1이고, 나머지 인덱스는 0입니다. 따라서 정답에 해당하는 인덱스를 k라고 한다면, pred[k]의 값만 log취해서 계산합니다. 1 * np.log(pred[k])가 되므로 k에 해당하는 에러율만 나타내고, 나머지 인덱스는 계산하지 않습니다. 마찬가지로 레이블 방식일 때를 보면, return -np.sum(np.log(pred[np.a..