[딥러닝]/[밑바닥부터 시작하는 딥러닝] 9

밑바닥부터 시작하는 딥러닝 3 - 1-2에 대한 질문

1. p.68 class Function: def __call__(self, input): x = input.data y = self.forward(x) output = Variable(y) self.input = input return output def forward(self, x): raise NotImplementedError 여기서 NotImplementedError을 왜 사용하는 것인지? pass를 사용해도 괜찮지 않은 것인지 궁금합니다. 2. 반복문을 이용하여 backward를 구현하는 것이 왜 재귀를 이용한 방법보다 처리 효율이 좋은지? → 재귀방법은 중간 결과를 메모리에 유지하면서 처리를 이어가기 때문 3. (p.82) class Variable: #생략 def backward(self)..

밑바닥부터 시작하는 딥러닝 3 - ch1

수치 미분의 한계 : "자리 수 누락"에 의한 오차, 많은 계산량 자리수 누락: 중앙차분 등 차이를 구하는 계산은 비슷한 값들을 다루므로 계산결과에서 자리수 누락이 생겨서 유효자리수가 줄어들 수 있습니다. 유효자리수가 줄어들게 되면 오차가 발생되기 쉽습니다. 또한 수치 미분은 계산량이 많습니다. 신경망에서 매개변수를 수백만 개 이상 사용하므로 모두를 수치 미분을 사용하여 계산하는 것은 계산량이 비현실적으로 많습니다. 이를 해결하기 위해 역전파가 등장합니다. 하지만 역전파는 알고리즘이 복잡하여 버그가 있기 쉽습니다. 그래서 비교적 쉽고 정확한 수치 미분을 이용하여 역전파 계산 결과를 확인합니다. 이를 기울기 확인(gradient checking)이라고 합니다.

밑바닥부터 시작하는 딥러닝 1 - 4 신경망에서의 기울기

신경망 학습에서 가중치 매개변수에 대한 손실함수의 기울기를 구해야 합니다. 가중치가 W, 손실함수가 L, 형상이 2by3인 신경망을 생각해 봅시다. W $= \begin{pmatrix} w_{11} & w_{12} & w_{13} \\ w_{21} & w_{22} & w_{23} \end{pmatrix}$ 일 때 경사는 $\frac{\partial{L}}{\partial{W}}$로 나타낼 수 있습니다. $\frac{\partial{L}}{\partial{W}} = \begin{pmatrix} \frac{\partial{L}}{\partial{w_{11}}} & \frac{\partial{L}}{\partial{w_{12}}} & \frac{\partial{L}}{\partial{w_{13}}} \\ \f..

밑바닥부터 시작하는 딥러닝 1 - 4 경사 하강법

이 전 포스팅에서 미분을 이용하여 매개변수의 최적값을 찾기 위해 손실 함수를 설정한다고 했습니다. 여기에서는 미분에 대한 이야기를 해보려 합니다. 수치미분, 해석적 미분, 편미분에 대하여 다루어 보고 경사하강법에 대해 소개하겠습니다. 수치 미분 다음 식은 미분을 나타낸 식 입니다. $\frac{df(x)}{dx} = \lim_{h→0}\frac{f(x+h)-f(x)}{h}$ 여기에서 수치미분은 $h$를 아주 작은 값, 예컨데 $h = 10^{-4}$등의 값으로 설정한 후 직접 $\frac{f(x+h)-f(x)}{h}$ 계산을 진행하는 것을 의미합니다. (이론적으로는 $h$값이 작으면 작을수록 좋지만, 컴퓨터의 계산 문제 때문에 일반적으로 $h=10^{-4}$를 이용하면 좋은 결과를 얻을 수 있다고 알려져..

밑바닥부터 시작하는 딥러닝 1 - 4 신경망 학습

신경망 학습이란 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것을 뜻합니다. 기계학습 문제는 데이터를 훈련 데이터와 시험 데이터로 나누어 학습과 실험을 수행합니다. 이는 과적합(overfitting)을피하기 위함입니다. 과적합이란 우리가 학습시킨 데이터가 어느 특정한 데이터에 대해서만 적절한 매개변수를 찾은 경우를 의미합니다. 이런 과적합 상태에서는 범용적으로 사용할 수 없기 때문에 올바르게 학습시키지 못한 것 입니다. 손실함수 손실함수란 신경망 성능의 "나쁨" 상태를 나타내는 지표로, 현재 신경망이 훈련 데이터를 얼마나 잘 처리하지 못하는지를 나타냅니다. 손실함수는 일반적으로 오차제곱합과 교차 엔트로피 오차를 사용합니다. 오차제곱합(sum of squared for error, SSE..

밑바닥부터 시작하는 딥러닝 1 - 3 손글씨 숫자 인식 예제

신경망에서는 우선 훈련 데이터를 사용해 가중치 매개변수를 학습하고, 추론 단계에서 이 매개변수를 사용해 입력 데이터를 분류합니다. 위 사진과 같이 dataset이라는 디렉터리 안에 mnist.py라는 파일이 있습니다. from dataset.mnist import load_mnist (x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False) print(x_train.shape) print(t_train.shape) print(x_test.shape) print(t_test.shape) 우선 위의 코드를 이용하여 로드가 잘 되었나 확인해줍니다. from dataset.mnist import load_mnist import..

밑바닥부터 시작하는 딥러닝 1 - 3 신경망

신경망은 그림과 같이 입력층(Input layer), 은닉층(Hidden Layer), 출력층(Output Layer)로 구성됩니다. 은닉층의 뉴런은 입력층과 출력층과는 달리 보이지 않습니다. $y= \begin{cases} 0, & (w_{1}x_{1}+w_{2}x_{2}+b \le 0) \\ 1, & (w_{1}x_{1}+w_{2}x_{2} +b> 0)\end{cases}$ 위 식을 다음과 같이 표현할 수 있습니다. $y=h(w_{1}x_{1}+w_{2}x_{2}+b)$ $h(x) = \begin{cases} 0 & (x \le 0) \\1 & (x > 0)\end{cases}$ 여기서 이 $h(x)$를 활성화 함수(activation function)라고 합니다. (위의 경우 계단 함수 Step f..

밑바닥부터 시작하는 딥러닝 1 - 2 퍼셉트론

퍼셉트론은 딥러닝의 기원이 되는 알고리즘입니다. 따라서 퍼셉트론을 공부하는 것은 신경망과 딥러닝으로 나아가는 데 중요한 아이디어를 배우는 일입니다. 퍼셉트론을 수식으로 나타내면 다음과 같습니다. $y= \begin{cases} 0, & (w_{1}x_{1}+w_{2}x_{2} \le \theta) \\ 1, & (w_{1}x_{1}+w_{2}x_{2} > \theta)\end{cases}$ 여기서 $x_1, x_2$는 입력 신호, $y$는 출력 신호, $w_1, w_2$는 가중치를 나타냅니다. 수식을 보면 알 수 있듯, 가중치는 해당 노드의 중요도를 나타냅니다. 위 식에 편향을 추가해보겠습니다. $y= \begin{cases} 0, & (w_{1}x_{1}+w_{2}x_{2}+b \le 0) \\ 1, ..

반응형