오버피팅은 보통 다음과 같은 경우에 일어납니다. 1. 매개변수가 많고 표현력이 높은 모델 2. 훈련 데이터가 적을 때 다음의 방법으로 오버피팅을 방지합니다. 1. 가중치 감소 큰 가중치에 대해 그에 상응하는 패널티를 부과하는 방법입니다. 오버피팅은 가중치 매개변수 값이 커서 발생하는 경우가 많습니다. 신경망의 목적은 손실 함수 값을 줄이는 것입니다. 이를 위해 가중치의 L2 norm ( W=(w1, w2, .., wn) => L2=sqrt(w1^2 +w2^2 + ... +wn^2) )를 손실함수에 더합니다. 정확히는 가중치가 W일 때, L2 norm에 따른 가중치 감소는 (1/2)*lambda*(W^2) 이고 이를 손실함수에 더하는 것입니다. lambda는 정규화의 세기를 조절하는 파라미터입니다. 2. ..
배치 정규화는 신경망의 각 층의 활성화값의 분포가 고르게 퍼지도록 강제하는 것입니다. 배치 정규화를 이용한다면, 다음과 같은 이점이 있습니다. 1. 학습을 빠르게 진행 2. 가중치 초기값에 크게 의존하지 않는다. 3. 오버피팅을 억제한다. 배치 정규화는 미니배치를 단위로 합니다. 수식은 다음과 같습니다. B={x1,x2,...}는 미니배치, mu는 평균, sigma는 표준편차입니다. 그리고 미니배치 값을 hat값으로 변환합니다. 그리고 배치 정규화 계층마다 확대와 이동 변환을 수행합니다. 수식은 다음과 같습니다. gamma는 확대, beta는 이동을 담당합니다. 처음은 gamma=1, beta=0으로 잡은 후 학습을 통해 적합한 값으로 조정합니다.
신경망 학습에서 가중치 설정은 중요합니다. 가중치를 엉뚱한 값으로 잡는 순간 학습은 훈련데이터에만 맞는 오버피팅이 일어날 것입니다. 가중치 감소 기법은 가중치 매개변수의 값이 작아지도록 학습하는 방법입니다. 가중치 값을 작아지도록 설정하여 오버피팅을 방지합니다. 가중치를 모든 층에서 같은 값으로 잡는다면, 오차역전파법에서 모든 가중치 값이 똑같은 값으로 전달됩니다. 예를 들어, 2층 신경망에서 1층의 가중치가 모두 같은 값이라면, 1층의 입력값에 상관없이 2층에 가중치가 같은 값이 전달됩니다. 이를 막기 위하여 가중치는 층마다 랜덤한 값으로 골라야하며, 이 가중치는 정규분포 N(0,1)에 적당한 표준편차를 고르면 됩니다. 이를 이용하여 각 층의 활성화 함수 값이 고르게 분포되어야합니다. 잘 알려진 가중치..
1. 최적화 기법 비교 import sys, os sys.path.append(os.pardir) import numpy as np import matplotlib.pyplot as plt from collections import OrderedDict from common.optimizer import SGD, Momentum, AdaGrad, Adam def f(x, y): return x**2 / 20.0 + y**2 def df(x,y): return x / 10.0, 2.0*y init_pos = (-7.0, 2.0) params = {} params['x'], params['y'] = init_pos[0], init_pos[1] grads = {} grads['x'], grads['y'] = ..
공부 : 밑바닥부터 시작하는 딥러닝 1 chapter 6.1 이전에는 매개변수 갱신을 경사 강하법(SGD)을 이용해 구현하였습니다. SGD 이외의 방법에 대해서도 알아봅시다. 매개변수 갱신은 매개변수의 손실함수의 기울기를 최소화하는 방향으로 이루어져야 합니다. 이를 하는 방법에는 SGD, Momentum, AdaGrad, Adam 등이 있습니다. 1. SGD : 확률적 경사 강하법 가장 구현이 쉬운 방법입니다. 하지만 속도가 느리고 경우에 따라 다른 최적화 방법보다 성능이 떨어지기도 합니다. 하지만 아직 많이 사용 중입니다. 식과 코드는 다음과 같습니다. class SGD: def __init__(self, lr=0.01): self.lr = lr def update(self, params, grads)..