밑바닥부터 시작하는 딥러닝
-
오차역전파법 - 배치용 Affine 계층딥러닝 2020. 2. 1. 00:06
바로 계산 그래프 보시죠. 입력 하나짜리와 차이점은 X(N, 2) 이 부분밖에 없군요. 하지만 주의할 게 있습니다. 덧셈의 역전파는 오른쪽의 값을 왼쪽으로 그대로 전달하면 되는 것으로 배웠습니다. 여기에서 편향의 역전파는 단순히 그렇게 생각하고 값을 넘기면 안됩니다. 책에서는 이렇게 나옵니다. 순전파의 편향 덧셈은 각각의 데이터(1번째 데이터, 2번째 데이터...)에 더해집니다. ---- 1 그래서 역전파 때는 각 데이터의 역전파 값이 편향의 원소에 모여야 합니다. ---- 2 1번의 의미 입니다. 2번의 의미를 코드로 표현했습니다. import numpy as np dY = np.array([[1, 2, 3], [4, 5, 6]]) print(dY) print("------------") dB = np..
-
오차역전파법 - Affine 계층 구현하기딥러닝 2020. 1. 31. 22:01
신경망의 순전파의 과정을 봅시다. X : 입력값 W : 가중치 매개변수 B : 편향 라고 가정하면 Y = np.dot(X, W) + B .....식 1 Z = H(Y) ......식 2 여기서 Z가 은닉층 1개의 출력값이 됩니다. 식 1 부분이 Affine계층이 하는 일 입니다. 이때, X, W, B 가 각각 (2, ), (2, 3), (3, )인 다차원 배열입니다. 이때의 계산 그래프를 봅시다. 순전파는 EASY한 부분 인지지용~~? 권지지ㅣㅈ지용~~? 그럼 역전파를 볼까요 이렇게 됩니다. W,와 X 위의 T는 전치행렬이라는 뜻입니다. 이렇게 말이죠. 그런데 의문이 듭니다. 수학을 못하지만 최대한 기억을 살려 미분을 해봐도 저 전치행렬이 왜 있는지 모르겠습니다. 책에는 '행렬끼리의 곱을 하기 위해서는 ..
-
오차역전파법 - Softmax-with-Loss계층 구현하기딥러닝 2020. 1. 28. 17:35
잠시 앞의 내용복습을 하겠습니다! 신경망은 그림1과 같은 층들이 여러 개 있는 것입니다. (그림이 조금 엉망이네요...ㅎㅎ) 이때 그림1의 h() 함수를 활성화 함수라고 하죠. 활성화 함수에는 계단, 시그모이드, ReLu 등 이 있습니다. 출력층의 활성화 함수는 항등함수와 소프트맥스 함수가 있습니다. 이제는 각 층을 하나의 클래스로 구현한다고 했습니다. (그림2) 그래서 이제는 소프트맥스함수를 구현해봅시다. 학습과정이므로 손실함수가 필수입니다. 그러므로 손실 구현도 같이 하겠습니다. ! 신경망에서 수행하는 작업은 학습과 추론 두 가지입니다. 추론에서 답을 하나만 낼 때는 소프트맥스 함수가 필요없습니다. 소프트맥스 함수는 입력값을 출력의 합이 1이 되도록 정규화하는 함수이기 때문입니다. (입력값과 출력값이..
-
오차역전파법 - 덧셈 계층, 곱셈 계층딥러닝 2020. 1. 27. 00:39
덧셈 계층과 곱셈 계층을 구현해봅시다. 각각 순전파와 역전파 모두 구현해야겠죠. 우선 덧셈 계층부터 봅시다. 순전파는 그냥 덧셈해주면 됩니다. 역전파는 각 입력에 대해 미분을 해주고 그 값을 곱해주면 됩니다.(합성함수 미분의 원리) 두 개 모두 미분값이 1이군요. 구현해봅시다. class AddLayer: def __init__(self): pass #순전파 def forward(self, x, y): return x + y #역전파 def backward(self, dout): dx = dout * 1 dy = dout * 1 return dx, dy 덧셈 계층은 역전파에서 순전파의 값을 이용하지 않습니다. 그래서 초기화가 필요없습니다.(pass : 아무것도 하지 말라) 곱셈 계층을 봅시다. 순전파는 ..
-
오차역전파법 - 계산 그래프딥러닝 2020. 1. 27. 00:11
왜 오차역전파법을 배우나? 오차역전파법은 가중치 매개변수의 기울기를 계산하는 방법입니다. 굳이 수치미분 대신 사용하는 이유는 오차역전파법이 빠르기 때문입니다. 많은 양의 데이터를 다뤄야하므로 조금이라도 빠른 것이 좋겠죠. 오차역전파법은 계산 그래프를 활용하여 구현되어집니다. 그럼 계산 그래프는 무엇일까요? 요런 것입니다. 저 f의 자리에는 +, -, *, exp(x) 등이 들어갈 수 있겠군요! 사용예시를 봅시다. 화살표의 방향으로 진행하는 것이 순전파입니다. 이 계산 그래프의 특징은 뭘까요? 분할정복처럼 국소적 계산을 전파함으로써 최종결과를 얻을 수 있다는 것입니다. 그렇다면 역전파는 순전파의 역방향일 것이고.. 구하고자 하는 것은 기울기이니.. 계산 그래프의 저런 특징이 기울기 또한 구하기 쉽게 만드는..