본문 바로가기
  • 비둘기다
  • 비둘기다
  • 비둘기다

분류 전체보기53

[머신러닝, 딥러닝] 오차역전파법 (2) - 계층 이번 페이지에서는 이전 페이지의 예시들을 바탕으로 코드와 함께 다뤄보겠습니다. 먼저 곱셈 계층입니다. class MulLayer: def __init__(self): self.x = None self.y = None def forward(self, x, y): self.x = x self.y = y out = x * y return out def backward(self, dout): dx = dout * self.y # x와 y를 바꾼다. dy = dout * self.x return dx, dy forward()는 순전파, backward()는 역전파이고, dout은 상류에서 넘어온 미분입니다. 이전 페이지에서 살펴봤던 예시를 위의 코드를 기반으로 계산하면 다음과 같습니다. apple = 100 ap.. 2023. 2. 15.
[머신러닝, 딥러닝] 오차역전파법 (1) - 역전파와 계산법칙 이전 장에서는 신경망에서의 가중치 매개변수의 기울기를 수치 미분을 이용하여 구했습니다. 그러나 이 방법의 단점이라고 한다면 오래 걸린다는 것입니다. 그래서 나오는 개념이 이를 보완한 오차역전파법입니다. 오차역전파법은 크게 수식과 그래프로 이해할 수 있습니다. 이번 페이지에서는 계산 그래프 형태를 다룰 것입니다. 계산 그래프는 계산 과정을 그래프로 나타낸 것입니다. 그래프는 자료 구조의 일종으로 복수의 노드와 에지로 표현됩니다. (에지는 노드 사이의 직선을 의미합니다.) 예를 들어 문제가 있습니다. "나는 슈퍼에서 1개에 100원인 사과를 2개 샀다. 이때 지불 금액을 구하시오. 단, 소비세가 10% 부과됩니다." 계산 그래프는 위와 같은 형태로 나올 것입니다. 화살표 위에 적힌 내용은 현재까지의 결과를 .. 2023. 2. 14.
[머신러닝, 딥러닝] 신경망 학습 (4) - 학습 알고리즘 구현 이전까지 다뤘던 개념들을 하나로 정리한 2층 신경망의 학습 코드입니다. from common.functions import * from common.gradient import numerical_gradient class TwoLayerNet: def __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01): # 가중치 초기화 self.params = {} self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size) self.params['b1'] = np.zeros(hidden_size) self.params['W2'] = weight_init_s.. 2023. 2. 13.
[머신러닝, 딥러닝] 신경망 학습 (3) - 수치 미분과 기울기 갑자기 미분이라는 개념이 등장하는 이유는 바로 기울기를 설명하기 위함입니다. 우리는 흔히 미분과 기울기의 연관성에 대해서는 알고 있습니다. 미분하면 가장 먼저 떠오르는 식입니다. 자세하게 다룰 건 아니기에 가볍게 코드 설명으로 넘어가도록 하겠습니다. 먼저 한 가지 미분 계산을 구현해보겠습니다. def numerical_diff(f, x): h = 1e-50 return (f(x + h) - f(x) / h) 아무 문제가 없는 것 같지만 위 코드에도 문제가 있습니다. 첫 번째는 부동소수점 관련 문제입니다. h의 값 때문인데 1e-50은 0이 50개인 0.000...1입니다. 그러나 이 수를 float형 32비트 부동소수점으로 나타내면 0.0이 되어 올바른 계산이 이루어지지 않습니다. 두 번째는 f의 차분인.. 2023. 2. 13.