배치 정규화(Batch Normalization)는 정규화를 모델에 들어가는 입력 데이터뿐만 아니라 모델 내부 히든층의 입력 노드에도 적용하는 것이다. 배치 정규화를 적용하면 매 층마다 정규화를 진행하므로 가중치 초기값에 크게 의존하지 않는다. 즉, 가중치 초기화의 중요도가 감소한다. 또한 과적합을 억제한다. 즉, 드롭 아웃(Drop out)과 L1, L2 정규화의 필요성이 감소한다. 가장 큰 장점은 학습 속도도 빨라진다는 것이다. 배치 정규화를 사용하기 위한 함수/라이브러리 배치 정규화는 하나의 레이어로써 Dense 레이어와 활성화 함수 사이에서 작용한다. 따라서 이번 실습에서는 기본 모델을 생성할 때 활성화 함수와 똑같은 역할을 하는 Activation 레이어를 따로 활용해야 한다. tf.keras...
드롭 아웃(Drop Out)은 모델이 과적합되는 것을 막기 위한 가장 보편적인 정규화(Regularization) 기법 중 하나이다. 드롭 아웃은 데이터를 학습할 때, 일부 퍼셉트론(뉴런)을 랜덤하게 0으로 만들어 모델 내부의 특정 가중치(Weight)에 치중되는 것을 막는다. 이를 통해 모델이 일부 데이터에 가중되는 것을 막고 일반화된 모델을 만들 수 있다. 드롭 아웃을 사용하는데 있어 주의할 점은 학습이 끝난 후 테스트 과정에서는 드롭 아웃을 사용하면 안된다는 점이다. 이번 실습에선 드롭 아웃을 적용한 모델과 적용하지 않은 모델의 차이를 보자. 드롭 아웃을 사용하기 위한 함수/라이브러리 tf.keras.layers.Dropout(prob) prob : 드롭 아웃을 적용할 확률 (0.1 ~ 0.5) i..
L1 정규화 L1 정규화는 가중치(weight)의 절댓값에 비례하는 손실(loss)이 기존 손실 함수(loss function)에 추가되는 형태이다. TotalLoss=Loss+λw∑∣W∣ L1 정규화는 모델 내의 일부 가중치를 0으로 만들어 의미있는 가중치만 남도록 만들어주고, 이를 통해 모델을 일반화시킬 수 있다. 다른 말로 Sparse Model을 만든다라고도 한다. L1 정규화를 적용하기 위해 사용하는 함수/라이브러리 tf.keras.layers.Dense(kernel_regularizer = tf.keras.regularizers.l1(ratio)) ratio : 가중치에 L1 정규화를 적용하는 비율 (0.001 ~0.005) L2 정규화 L2 정규화는 가중치의 제곱에 비례하는 손실이 기존 손..
과적합(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): ..