오버피팅 억제법
신경망 학습을 하다보면 오버피팅이 일어날 수 있다. 오버피팅이란 신경망이 훈련 데이터에만 지나치게 적응되어 그 외의 데이터에는 제대로 대응하지 못하는 상태를 말한다. 오버피팅은 주로 매개변수가 많고 표현력이 높은 모델 훈련 데이터가 적은 경우 위 경우에 일어난다. 이를 방지하기 위한 방법을 알아보자. 가중치 감소 가중치 매개변수의 값이 작아지도록 학습하는 방법이다. 오버피팅은 가중치 매개변수의 값이 클 때 발생하는 경우가 많기때문에, 학습 과정에서 큰 가중치에 대해서는 그에 상응하는 페널티를 적용해 오버피팅을 억제시키겠다는 것이다. 그럼 어떻게 작게 만들 수 있을까? 우선 초기값을 아예 작게 만드는 방법을 생각해 볼 수 있다. 그렇다고 아예 0으로 설정해버리면 학습이 되지 않는다.(정확히는 가중치들을 다 같은 값으로 설정하는 경우) 왜냐하면 오차역전파법 에서 가중치의 값들이 똑같이 갱신되기 때문이다.(*연산과 +연산에 있어서 역으로 미분값이 전파될 때를 생각하면 알 수 있다.) 따라서 초깃값을 무작위로 설정해 줘야 하고 이를 위해 다음과 같이 표준편차가 0.1, 0.01과 같은 정규분포를 사용해 초기화 한다. 간단한 가중치 초기화하는 코드를 보자. def __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01): # 가중치 초기화 self.params = {} self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size) self.params['b1'] = np.zeros(hidden_size) self.params['W2'] = weight_init_std * np.random.randn(hidden_size, output_size) self.params[