과적합 : 훈련데이터에 대한 정확도는 높아지지만 새로운 데이터에선 정확하게 동작하지 않는 상태
이를 막는 방법
데이터 양이 적을 때 데이터의 특정 패턴이나 노이즈까지 쉽게 암기하므로 과적합 발생이 쉽다.
만약 데이터의 양이 적다면 의도적으로 기존 데이터를 조금씩 변형하거나 추가하는 데이터 증식(또는 증강)을 사용하기도 한다. 이미지의 경우 데이터 증식이 많이 사용되는데 이미지를 돌리거나 노이즈를 추가하고 일부분을 수정하는 방식으로 증식, 텍스트의 경우 번역 후 재번역을 통해 새로운 데이터를 만들어내는 역변역의 방법이 있다.
은닉층의 수나 매개변수의 수로 결정되는 복잡도를 줄인다.
복잡한 모델을 간단하게 하는 방법으로 가중치 규제가 있다.
L1 규제 : 가중체 w들의 절대값 합계를 비용 함수에 추가.
L2 규제 : 모든 가중치 w들의 제곱합을 비용 함수에 추가.
L1 규제는 기존 비용함수에 모든 가중치에 대해 를 더 한 값
L2 규제는 기존 비용함수에 모든 가중치에 대해 를 더 한 값
는 규제 강도를 정하는 하이퍼 파라미터이고 클 수록 매개 변수를 찾는 것보다 규제를 위해 추가된 항들을 작게 유지하는 것을 우선시한다는 의미.
이 두 식 모두 비용 함수를 최소화하기 위해서는 가중치 w들의 값이 작아져야 한다는 특징이 있다.
라는 수식이 있을 때 L1 규제를 사용하니 가 0이 되었다면 이는 사실 모델의 결과에 별 영향을 주지 못하는 특성임을 의미.
L2 규제는 가중치들의 제곱을 최소화하므로 w의 값이 완전히 0이 되기보다는 0에 가까워지기는 경향을 띈다.
L1 규제는 어떤 특성들이 모델에 영향을 주고 있는지를 정확히 판단하고자 할 때 유용합니다.
만약, 이런 판단이 필요없다면 경험적으로는 L2 규제가 더 잘 동작하므로 L2 규제를 더 권장
인공 신경망에서 L2 규제는 가중치 감쇠(weight decay)라고도 부릅니다.
랜덤으로 뉴런의 일부를 사용하지 않는 경우.
케라스에선 아래의 방식으로 드롭아웃 사용
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dropout, Dense
max_words = 10000
num_classes = 46
model = Sequential()
model.add(Dense(256, input_shape=(max_words,), activation='relu'))
model.add(Dropout(0.5)) # 드롭아웃 추가. 비율은 50%
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5)) # 드롭아웃 추가. 비율은 50%
model.add(Dense(num_classes, activation='softmax'))
기울기 소실과 폭주
소실 : 역전파 과정에서 기울기가 점차 작아져 가중치가 업데이트 되지 않는 상태
폭주 : 반대로 기울기가 점차 커져 비정상적으로 큰 값이 되며 발산하는 상태
이를 막는 방법
from tensorflow.keras import optimizers
Adam = optimizers.Adam(lr=0.0001, clipnorm=1.)
1) 세이비어 초기화(Xavier Initialization)
균등분포 또는 정규분포로 초기화 할 때 두 가지 경우로 나뉘며 이전 층 뉴런 개수와 다음 층 뉴런 개수를 가지고 식ㅇ을 세운다.
균등 분포를 사용하여 가중치를 초기화할 경우 다음과 같은 균등 분포 범위를 사용
정규 분포로 초기화할 경우에는 평균이 0이고, 표준 편차 σ가 다음을 만족하도록 한다.
세이비어 초기화는 여러 층의 기울기 분산 사이에 균형을 맞춰서 특정 층이 너무 주목을 받거나 다른 층이 뒤쳐지는 것을 막는다
세이비어 초기화는 시그모이드 함수나 하이퍼볼릭 탄젠트 함수와 같은 S자 형태인 활성화 함수와 함께 사용할 경우에는 좋은 성능을 보이지만, ReLU와 함께 사용할 경우에는 성능이 좋지 않음
ReLU 함수 또는 ReLU의 변형 함수들을 활성화 함수로 사용할 경우에는 다른 초기화 방법을 사용하는 것이 좋은데, 이를 He 초기화(He initialization)라고 한다.
2) He 초기화(He initialization)
He 초기화(He initialization)는 세이비어 초기화와 유사하게 정규 분포와 균등 분포 두 가지 경우로 나뉩니다. 다만, He 초기화는 세이비어 초기화와 다르게 다음 층의 뉴런의 수를 반영하지 않습니다. 전과 같이 이전 층의 뉴런의 개수를 이라고 해보자
He 초기화는 균등 분포로 초기화 할 경우에는 다음과 같은 균등 분포 범위를 가지도록 한다.
정규 분포로 초기화할 경우에는 표준 편차 σ가 다음을 만족하도록 한다.
1) 내부 공변량 변화(Internal Covariate Shift)
층 별로 입력 데이터 분포가 달라지는 형상
2) 배치 정규화(Batch Normalization)
한 번에 들어오는 배치 단위로 정규화.
배치 정규화는 각 층에서 활성화 함수를 통과하기 전에 수행
요약하면 입력에 대해 평균을 0으로 만들고, 정규화를 합니다.
그리고 정규화 된 데이터에 대해서 스케일과 시프트를 수행합니다.
이때 두 개의 매개변수 γ와 β를 사용하는데, γ는 스케일을 위해 사용하고, β는 시프트를 하는 것에 사용하며 다음 레이어에 일정한 범위의 값들만 전달되게 합니다.
Input : 미니 배치
Output :
μ_{B} ← \frac{1}{m} \sum_{i=1}^{m} x^{(i)} \text{ # 미니 배치에 대한 평균 계산}
σ^{2}_{B} ← \frac{1}{m} \sum_{i=1}^{m} (x^{(i)} - μ_{B})^{2}\text{ # 미니 배치에 대한 분산 계산}
\hat{x}^{(i)} ← \frac{x^{(i)} - μ_{B}}{\sqrt{σ^{2}_{B}+ε}}\text{ # 정규화}
y^{(i)} ← γ\hat{x}^{(i)} + β = BN_{γ, β}(x^{(i)}) \text{ # 스케일 조정(γ)과 시프트(β)를 통한 선형 연산}
배치 정규화는 학습 시 배치 단위의 평균과 분산들을 차례대로 받아 이동 평균과 이동 분산을 저장해놓았다가 테스트 할 때는 해당 배치의 평균과 분산을 구하지 않고 구해놓았던 평균과 분산으로 정규화
3) 배치 정규화의 한계
(1) 미니 배치 크기에 의존적
너무 작은 배치 크기에서는 잘 동작하지 않을 수 있다.
(2) RNN에 적용 어렵다
RNN은 각 시점마다 다른 통계치를 가진다. 이를 해결하기 위해 층 정규화 사용
우선 배치 정규화를 시각화
이 3이고 특성의 수가 4일 때의 배치 정규화

반면 층 정규화는
