개발자의 스터디 노트
MLP로 성씨 분류하기 (4) : MLP 규제 적용하기 본문
심층 신경망 모델(즉 층이 여럿인 모델)에서는 드롭아웃(dropout)이라고 하는 구조적인 규제 방법이 매우 중요합니다.
드롭아웃이란 무엇일까요?
https://heytech.tistory.com/127
위 포스팅을 참고하면 드롭아웃을 사용함으로써 정규화가 잘된 특정 Feature만을 과도하게 학습함으로써 발생할수 있는 과대적합(Overfitting)을 방지하여 훈련의 안정성을 기대할 수 있습니다.
앞서 성씨 분류 MLP 모델에 드롭아웃을 적용해 봅시다.
class MultilayerPerceptron(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
"""
매개변수 :
input_dim(int): 입력 벡터 크기
hidden_dim(int) : 첫 번째 Linear 층의 출력 크기
output_dim(int) : 두 번째 Linear 층의 출력 크기
"""
super(MultilayerPerceptron, self).__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.fc2 = nn.Linear(hidden_dim, output_dim)
def forward(self, x_in, apply_softmax=False):
"""MLP의 정방향 계산
매개변수:
x_in (torch.Tensor): 입력 데이터 텐서
x_in.shape는 (batch, input_dim)입니다.
apply_softmax (bool): 소프트맥스 활성화 함수를 위한 플래그
크로스-엔트로피 손실을 사용하려면 False로 지정해야 합니다.
반환값:
결과 텐서. tensor.shape은 (batch, output_dim)입니다.
"""
intermediate_vector = F.relu(self.fc1(x_in))
prediction_vector = self.fc2(F.dropout(intermediate_vector, p=0.5))
if apply_softmax:
prediction_vector = F.softmax(prediction_vector, dim=1)
return prediction_vector
훈련의 정확도를 보면 드롭아웃을 적용하기 전보다 훈련 정확도는 조금 낮아졌지만 훈련 데이터와 시험 데이터에 대한 정확도 차이가 줄어드는것을 확인할 수 있습니다.
'파이썬 > 파이토치 자연어처리' 카테고리의 다른 글
CNN을 사용한 성씨 분류(1) - 학습 준비하기 (0) | 2022.02.23 |
---|---|
CNN 하이퍼 파라미터 (0) | 2022.02.22 |
MLP로 성씨 분류하기 (3) : 평가, 추론, 분석 하기 (0) | 2022.02.19 |
MLP로 성씨 분류하기 (2) : 학습 하기 (0) | 2022.02.19 |
MLP로 성씨 분류하기 (1) : 학습 준비하기 (0) | 2022.02.18 |