Deep learning 53

12. 학습 관련 기술들(4) - 오버피팅, 가중치 감소, 드롭아웃

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 기계학습에서는 오버피팅이 문제가 되는 일이 많다. 오버피팅이란 신경망이 훈련 데이터에만 지나치게 적응되어 그 외의 데이터에는 제대로 대응하지 못하는 상태를 말한다. 1. 오버피팅 오버피팅은 주로 다음의 두 경우에 일어난다 1. 매개변수가 많고 표현력이 높은 모델 2. 훈련 데이터가 적음 이처럼 정확도가 크게 벌어지는 것은 훈련 데이터에만 적응(fitting)해버린 결과이다. 훈련 때 사용하지 않은 범용 데이터에는 제대로 대응하지 못하는 것을 이 그래프에서 확인할 수 있다. 2. 가중치 감소 오버피팅 억제용으로 예로부터 많이 이용해온 방법 중 가중치 감소(weight decay)라는 것이 있다. 이는 학습 과정에서 큰 가중치에 대해서는 그..

11. 학습 관련 기술들 (3) - 배치 정규화

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 앞 절에서는 각 층의 활성화값 분포를 관찰해보며, 가중치의 초깃값을 적절히 설정하면 각 층의 활성화값 분포가 적당히 퍼지면서 학습이 원활하게 수행됨을 배웠다. 그렇다면 각 층이 활성화를 적당히 퍼뜨리도록 강제해보면 어떨까? 실은 배치 정규화(Batch Normalization)가 그런 아이디어에서 출발한 방법이다. 1. 배치 정규화 알고리즘 배치 정규화가 주목받는 이유는 다음과 같다. 1. 학습을 빨리 진행할 수 있다 2. 초깃값에 크게 의존하지 않는다 3. 오버피팅을 억제한다 배치 정규화의 기본 아이디어는 앞에서 말했듯이 각 층에서의 활성화값이 적당히 분포되도록 조정하는 것이다. 그래서 다음 그림과 같이 데이터 분포를 정규화하는 '배치..

10. 학습 관련 기술들(2) - 가중치의 초깃값

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 신경망 학습에서 특히 중요한 것이 가중치의 초깃값이다. 1. 초깃값을 0으로 하면? 가중치 감소는 간단히 말하자면 가중치 매개변수의 값이 작아지도록 학습하는 방법이다. 만약 가중치의 초깃값을 모두 0으로 설정한다면 어떨까? 오차역전파법에서 모든 가중치의 값이 똑같이 갱신되기 때문에 그러면 안된다. 이러한 가중치가 고르게 되어버리는 상황을 막으려면 초깃값을 무작위로 설정해야 한다. 2. 은닉층의 활성화값 분포 입력 데이터로서 1000개의 데이터를 정규분포로 무자구이로 생성하여 이 5층 신경망에 흘린다. 이번에는 표준편차가 1인 정규분포를 이용한다. 이 분포된 정도(표준 편차)를 바꿔가며 활성화값들의 분포가 어떻게 변화하는지 관찰하는 것이 ..

9. 학습 관련 기술들 (1) - 매개변수 갱신(SGD,모멘텀,AdaGrad,Adam)

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 이번 장에서는 신경망 학습의 핵심 개념들을 공부한다. 이번 장에서 다룰 주제는 가중치 매개변수의 최적값을 탐색하는 최적화 방법, 가중치 매개변수 초깃값, 하이퍼파라미터 설정 방법 등, 모두가 신경망 학습에서 중요한 주제이다. 오버피팅의 대응책인 가중치 감소와 드롭아웃 등의 정규화 방법도 간략하게 설명하고 구현해본다. 마지막으로 최근 많은 연구에서 사용하는 배치 정규화도 짧게 알아본다. 이번 장에서 배우는 기법을 이용하면 신경망(딥러닝) 학습의 효율과 정확도를 높일 수 있다. 1. 매개변수 갱신 신경망 학습의 목적은 손실 함수의 값을 가능한 한 낮추는 매개변수를 찾는 것이였다. 이는 곧 매개변수의 최적값을 찾는 문제이며, 이러한 문제를 푸..

9. 오차역전법(3) - 오차역전법 구현하기

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 1. 신경망 학습의 전체 그림 지금까지 설명한 오차역전파법이 등장하는 단계는 두 번째인 '기울기 산출' 이다. 앞에서는 기울기를 구하기 위해서 수치 미분을 사용했는데 수치 미분은 구현하기 쉽지만 계산이 오래걸렸다. 오차역전파법을 이용하면 느린 수치 미분과 달리 기울기를 효율적이고 빠르게 구할 수 있다. 2. 오차역전파법을 적용한 신경망 구현하기 import sys,os sys.path.append(os.pardir) import numpy as np from common.layers import * from common.gradient import numerical_gradient from collections import Ordered..

8. 오차역전법(2) - 활성화 함수 계층 구현하기

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 1. ReLU 계층 활성화 함수로 사용되는 ReLU의 수식은 다음과 같다. 바로 위의 식과 같이 순전파 때의 입력인 x가 0보다 크면 역전파는 상류의 값을 그대로 하류로 흘린다. 반면, 순전파 때 x가 0 이하면 역전파 때는 하류로 신호를 보내지 않는다. (0을 보낸다). 계산 그래프로는 다음처럼 그릴 수 있다. 이제 이 ReLU 계층을 구현해보자. 신경망 계층의 forward() 와 backward() 함수는 넘파이 배열을 인수로 받는다고 가정하자. class Relu: def __init__ (slef): self.mask=None def forward(self,x): self.mask=(x

7. 오차역전파법(1)

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 이번 장에서는 가중치 매개변수의 기울기를 효율적으로 계산하는 오차역전파법(backpropagation)을 공부한다. 1. 계산 그래프 다음 문제를 계산 그래프로 나타내보자. 문제: 현빈 군은 슈퍼에서 사과를 2개, 귤을 3개 샀다. 사과는 1개에 100원, 귤은 1개 150원 이다. 소비세가 10%일 때 지불 금액을 구하라. 계산을 왼쪽에서 오른쪽으로 진행하는 단계를 순전파라고 한다. 순전파는 계산 그래프의 출발점부터 종착점으로의 전파이다. 오른쪽에서 왼쪽 방향으로의 전파는 역전파라고 한다. 역전파는 이후에 미분을 계산할 때 중요한 역할을 한다. 계산 그래프의 특징은 '국소적 계산' 을 전파함으로써 최종 결과를 얻는다는 점에 있다. 계산..

6. 신경망 학습 (3) - 학습 알고리즘 구현하기

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 학습 알고리즘 구현하기 신경망 학습의 절차는 다음과 같다. 이는 경사 하강법으로 매개변수를 갱신하는 방법이며, 이때 데이터를 미니배치로 무작위로 선정하기 때문에 확률적 경사 하강법(stochastic gradient descent, SGD) 라고 부른다. 그럼 실제로 손글씨 숫자를 학습하는 신경망을 구현해보자. 여기에서는 2층 신경망(은닉층이 1개인 네트워크)를 대상으로 MNIST 데이터셋을 사용하여 학습을 수행한다. 1. 2층 신경망 클래스 구현하기 import sys,os sys.path.append(os.pardir) from common.functions import * from common.gradient import numer..

5. 신경망 학습 (2) - 기울기

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. def function_2(x): return x[0]**2 + x[1]**2 기울기 모든 변수의 편미분을 벡터로 정리한 것을 기울기(gradient)라고 한다. def numerical_gradient(f,x): h=1e-4 #0.0001 grad=np.zeros_like(x) for idx in range(x.size): tmp_val=x[idx] #f(x+h) 계산 x[idx]=tmp_val + h fxh1=f(x) #f(x-h) 계산 x[idx]=tmp_val - h fxh2=f(x) grad[idx]=(fxh1-fxh2) / (2*h) x[idx] = tmp_val return grad 그런데 이 기울기라는 게 의미하는 것이 무..

4. 신경망 학습 (1) - 손실함수

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다. 기계학습 문제는 데이터를 훈련 데이터와 시험 데이터로 나눠 학습과 실험을 수행하는 것이 일반적이다. 그 이유는 우리가 원하는 것은 범용적으로 사용할 수 있는 모델이기 때문이다. 이 범용 능력을 제대로 평가하기 위해 훈련 데이터와 시험 데이터를 분리하는 것이다. 범용 능력은 아직 보지 못한 데이터(훈련 데이터에 포함되지 않은 데이터)로도 문제를 올바르게 풀어내는 능력이다. 그래서 데이터셋 하나로만 매개변수의 학습과 평가를 수행하면 올바른 평가가 될 수 없다. 참고로 한 데이터셋에만 지나치게 최적화된 상태를 오버피팅(overfitting)라고 한다. 손실함수 신경망은 지표를 기준으로 최적의 매개변수 값을 탐색한다. 이를 손실 함수(loss ..