과적합(Overfitting)은 모델이 학습 데이터에만 너무 치중되어 학습 데이터에 대한 예측 성능은 좋으나 테스트 데이터에 대한 예측 성능이 떨어지는 경우를 말한다. 모델이 과적합되면 일반화되지 않은 모델이라고도 한다. 과적합이 발생하는 원인은 아래와 같다. 데이터의 퍼진 정도, 즉 분산(variance)이 높은 경우 너무 많이 학습 데이터를 학습시킨 경우 (epochs가 매우 큰 경우) 학습에 사용된 파라미터가 너무 많은 경우 데이터에 비해 모델이 너무 복잡한 경우 데이터에 노이즈 & 이상치(outlier)가 너무 많은 경우 import numpy as np import tensorflow as tf from visual import * import logging, os logging.disable(..
He 초기화 방법은 활성화 함수로 ReLU를 쓸 때 활성화 결괏값들이 한쪽으로 치우치는 문제를 해결하기 위해 나온 방법이다. He 초기화 방법은 앞 레이어의 노드가 n개일 때 표준 편차가 \sqrt{2} / \sqrt{n}2/n인 분포를 사용하는 것이다. 즉 표준 정규 분포를 입력 개수 절반의 제곱근으로 나누어주면 된다. Xavier 초기화 방법은 표준 편차가 1 / \sqrt{n}1/n이라고 한다. ReLU는 음의 영역에 대한 함숫값이 0이라서 더 넓게 분포시키기 위해 \sqrt{2}2배의 계수가 필요하다고 이해할 수 있다. import numpy as np from visual import * np.random.seed(100) def relu(x): result = np.maximum(0,x..
가중치 초기화의 문제를 해결하기 위해 나온 방법 중 하나인 Xavier 초기화 방법은 현재 일반적인 딥러닝 프레임워크들이 표준적으로 이용하고 있다. Xavier 초기화 방법은 앞 레이어의 노드가 n개일 때 표준 편차가 1 / \sqrt{n}1/n인 분포를 사용하는 것이다. 즉 표준 정규 분포를 입력 개수의 제곱근으로 나누어주면 된다. 따라서 Xavier 초기화 방법을 사용하면 앞 레이어의 노드가 많을수록 다음 레이어의 노드의 초깃값으로 사용하는 가중치가 좁게 퍼진다. import numpy as np from visual import * np.random.seed(100) def sigmoid(x): result = 1 / (1 + np.exp(-x)) return result def relu(x): ..
가중치 초기화 문제는 활성화 함수의 입력값이 너무 커지거나 작아지지 않게 만들어주려는 것이 핵심이다. 초기화 설정 문제 해결을 위한 Naive한 방법으론 평균이 0, 표준 편차가 1인 표준 정규 분포를 이용해 초기화하는 방법과 평균이 0, 표준 편차가 0.01인 정규분포로 초기화하는 방법이 있다. 이번 실습에서는 각 방법으로 가중치를 초기화 해보고, 각 경우에 활성화 결괏값들의 분포가 어떻게 변화하는지 확인해자. 실습을 마치고 나면 왜 Naive한 방식으로 가중치를 초기화 해서는 안되는지 알 수 있다. 표준 정규 분포(평균이 0, 표준 편차가 1인 정규 분포)를 따르는 무작위 데이터를 만들기 위한 함수/라이브러리 x = np.random.randn(50,20) : 표준 정규 분포를 따르는 무작위 데이터는..
역전파(back propagation) 알고리즘이란 우리의 목푯값과 실제 모델이 예측한 예측값이 얼마나 차이 나는지 구한 후, 오차값을 다시 뒤로 전파해가며 가중치(weight)들을 업데이트하는 과정이다. 그러나 깊은 층의 모델에선 역전파시에 전달되는 손실 함수(loss function)의 gradient 값에 활성화 함수인 sigmoid 함수의 0에 가까운 기울기 값이 계속해서 곱해지면서 결국 가중치 업데이트가 잘 안되는 문제가 생기는데, 이것이 바로 기울기 소실 문제(Vanishing Gradient)이다. 이번 실습에서는 모델의 층이 깊은 경우 히든층의 활성화 함수가 ‘relu’일 때와 ‘sigmoid’일 때의 모델 정확도를 확인해보고, 왜 최근에는 활성화 함수로 sigmoid를 잘 쓰지 않는지 직..
Adagrad Adagrad(Adaptive Gradient) 최적화 알고리즘은 손실 함수(loss function)의 값을 최소로 만드는 최적의 가중치를 찾아내기 위해 learning rate를 조절해 하강하는 방법 중 하나이다. 기존 방식이 가중치들의 업데이트를 같은 속도로 한꺼번에 하는 방법이었다면, Adagrad는 가중치 각각의 업데이트 속도를 데이터에 맞추어(adaptively) 계산해 적절한 learning rate로 하강하도록 한다. Adagrad tf.keras.optimizers.Adagrad(lr, epsilon, decay) : lr : 학습률 (learning rate) (lr >= 0), 기본값 0.1 epsilon : 연산 시 분모가 0이 되는 것을 막는, 0에 가까운 상수 (e..