책 : 밑바닥부터 시작하는 딥러닝 1 chapter 5 오차역전파법에 사용하기 위한 활성화 함수를 구현하자. (ReLU, sigmoid) 1. ReLU 계층 활성화함수로 사용되는 ReLU 함수와 이에 대한 dy/dx는 다음과 같다. 순전파와 역전파의 그림은 다음과 같이 나타낼 수 있다. 코드는 다음과 같다. (설명 : 주석 참고) class Relu: def __init__(self): self.mask = None def forward(self, x): # 순전파, x : 입력값 (array) self.mask = (x dL/dy * dy/dx =0 dx = dout # 순전파 입력값 x의 원소 중 0보다 큰 값에서는 dy/dx=1 => dL/dy * dy/dx = dL/dy return dx 2. s..
오차 역전파법 : 신경망의 가중치 매개변수에 대한 손실함수의 기울기를 빠르게 구하기 위함 (효율적으로) 계산 그래프 : 계산 과정을 그래프로 나타낸 것 (노드와 엣지 이용) 순전파 : 순서대로 진행한 것 역전파 : 역으로 계산한 것 => 이를 이용해 미분을 구한다. 연쇄 법칙 이용해 계산 그래프의 역전파 계산 덧셈의 경우 z=x+y 일 때 dz/dx=1, dz/dy=1 이므로 역전파시 E값에 1을 곱한다. (E=dL/dz) 곱셈의 경우 z=x*y 일 때 dz/dx=y, dz/dy=x 이므로 역전파시 x방향 E값에 y, y방향 E값에 x를 곱한다. (E=dL/dz) 예제) 다음 그림과 같은 경우에서 역전파법으로 계산 그래프를 완성하자. 코드 class MulLayer: def __init__(self): ..
공부 : 밑바닥부터 시작하는 딥러닝 1 chapter 4.5~4.6 1. 2층 신경망 클래스 구현 (필요한 내용 주석으로) import sys, os sys.path.append(os.pardir) from common.functions import * from common.gradient import numerical_gradient class TwoLayerNet: # 2층 신경망, input_size = 입력층 노드 수, hidden_size = 은닉층 노드 수, output_size = 출력층 노드 수 def __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01): self.params = {} self.params['..
공부 : 밑바닥부터 시작하는 딥러닝 1 chapter 3,4 신경망 학습 절차 1. 미니 배치 훈련 데이터 중 일부를 랜덤하게 가져온다. 이 데이터를 미니 배치라 한다. 미니 배치의 손실 함수값을 줄이는 것이 목표 2. 기울기 산출 미니 배치의 손실 함수값을 줄이기 위해 가중치 매개변수의 기울기를 구한다. 기울기는 손실함수 값을 가장 작게 하는 방향을 제시한다. 3. 매개변수 갱신 가중치 매개변수를 기울기 방향으로 아주 조금 갱신한다. 4. 반복 1~3을 반복한다. 1. 배치 배치 : 하나로 묶은 입력 데이터 ex) MNIST에는 0~9의 글씨가 60,000개 있다. 이 중 10,000개의 테스트 데이터를 불러온다. 이 10,000개를 100개씩 묶는다. mnist파일과 load_mnist, sample..