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

AI21

[머신러닝, 딥러닝] 오차역전파법 (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.
[머신러닝, 딥러닝] 신경망 학습 (2) - 미니 배치 학습 미니 배치 학습은 경사 하강법에서 발생하는 성능 저하 문제를 해결하기 위해서 등장한 미니 배치 경사 하강법과 유사한 원리를 가지는 학습법입니다. 미니 배치 경사 하강법이 등장하기 이전에도 성능 저하 문제를 해결하기 위해서 여러 방법들이 존재했습니다. 대표적으로는 배치 경사 하강법과 확률적 경사 하강법입니다. 전자는 전체 데이터셋을 하나의 배치(batch)라고 두어 한꺼번에 처리를 하는 것을 의미합니다. 전체를 한꺼번에 처리하기 때문에 누락 없이 꽤 정확한 결과를 가져올 수 있겠지만 반면에 시간이 너무나 오래 걸린다는 단점이 있습니다. 후자는 전자의 시간 문제를 해결하기 위해 고안되었습니다. 그러나 시간이 걸리는 문제는 해결했지만 이번에는 정확도가 떨어지게 되었고, 이로 인해 등장한 것이 미니 배치 경사하.. 2023. 2. 12.