4. Teaching Deep Learners to Generalize

4.1. Introduction

신경망의 성능이 잘 나오려면 일반화 성능이 좋아야 한다. 일반화는 모든 기계 학습 용례에서 중요하다. 과적합의 정도는 모델의 복잡도와 사용 가능한 데이터의 수에 모두 의존한다. d차 다항식 회귀에서 학습 표본 수가 (d+1) 이하면 이를 완전히 모델링할 수 있지만, 그런다고 일반화 오차가 좋다는 보장은 없다. 모델의 능력과 제한된 데이터에서의 성능간 트레이드오프를 편향-분산 트레이드오프라 한다. 과적합인지 알려면 같은 테스트 집합에 다른 학습 집합을 사용했을 때 성능차가 큰지, 학습 오차와 관측되지 않은 테스트 집합에 대한 오차의 차가 큰지를 보면 된다. 이를 위해 테스트 집합이 아니라 학습 집합 중 일부를 분리해 검증용으로 쓰기도 하는데 이를 검증 집합이라 한다. 신경망에서 과적합을 방지하는 몇몇 방법들이 있다: 징벌 기반 정규화, 일반적 또는 맞춤형 앙상블 방법, 이른 중단, 사전학습, 연속화와 커리큘럼 방법, 도메인 특정 직관 기반 매개변수 공유.

정규화의 몇몇 형태는 입력 데이터나 은닉 변수에 노이즈를 중비하는 것과 비슷하다. 과적합을 피하는 가장 쉬운 방법은 작은 망을 만드는 것이지만, 큰 망을 만들고 이를 정규화하는 것이 낫다. 지도학습은 비지도학습보다 과적합에 더 취약하므로 일반화의 주 대상이 된다.

4.2. The Bias-Variance Trade-Off

편향-분산 트레이드오프는 유한 데이터 셋에서 더 강력한 모델이 항상 더 좋은 예측 성능을 보이는 것은 아니라는 것이다. 편향은 모델의 가정을 단순화함으로써 발생할 수밖에 없는 오차이다. 분산은 데이터가 제한되고 모델의 매개변수가 많을 때 모델의 매개변수를 통계적으로 강건한 방식으로 배울 수 없음에 의해 발생한다. 노이즈는 데이터의 자체적 오차에 의햅 ㅏㄹ생한다.

4.2.1. Formal View

데이터 D가 분포 B를 따른다 하자. 실제로 사용가능한 데이터의 수는 유한할 것이다. 이 때 y_{i} = f(\mathbf{z}_{i}) + \epsilon_{i}의 관계가 성립한다 하자. 이 때 f를 모델링하는 근사는 \hat{y}_{i} = g(\mathbf{z}_{i}, \mathcal{D})일 것이다. 오차는 이 근사와 실제 분포의 차이다. 이 때 평균제곱오차의 기대값은 편향의 제곱 + 분산 + 노이즈와 같다.

4.3. Generalization Issues in Model Tuning and Evaluation

첫 번째 문제는 모델 튜닝과 초매개변수 선택에서 나타나는데, 이는 별도의 검증 집합으로 해결해야 한다. 검증 집합은 테스트 집합과도 달라야 한다. 그러므로 데이터 셋은 세 부분으로 나뉘어야 한다: 학습 모델을 만드는 학습 데이터. 모델 선택과 매개변수 조정을 하는 검증 데이터. 조정된 모델의 정확도를 테스트하는 테스트 데이터.

4.3.1. Evaluating with Hold-Out and Cross-Validation

테스트 셋은 마지막에 한 번만 사용되어야 한다. 학습-테스트 집합을 나누는 기준과 학습-검증 집합을 나누는 기준은 개념적으로 같다.

Hold-Out

홀드아웃 방법에서 객체들의 일부가 모델 학습에 쓰이고 나머지는 테스팅에 쓰이며, 이는 간단하고 효율적인 방법이다.

Cross-Validation

교차 검증법에서 데이터는 균일하게 q등분되고 (q – 1)개가 학습에, 하나가 테스트에 쓰이고 이것을 q번 반복한다.

4.3.2. Issues with Training at Scale

신경망에서는 효율성 문제로 인해 교차검증법은 쓰기 힘들다. 초매개변수 조정 시에도 너무 많이 학습하는 것보다 특정한 조합만 학습하는 것이 좋다.

4.3.3. How to Detect Need to Collect More Data

과적합되었을 때 가장 우선적인 해법은 데이터를 더 모으는 것이지만, 안 된다면 정규화 등을 고려해야 한다.

4.4. Penalty-Based Regularization

징벌 기반 정규화는 과적합을 줄이는 가장 흔한 접근법이다. 모델의 표현력을 과적합을 줄이면서 유지하기 위해 매개변수에 약한 L_{2} 징벌을 가할 수 있다. 모델 업데이트 시 끼치는 효과는 이전의 학습 효과를 조금씩 잊어가는 것과 비슷하다.

4.4.1. Connections with Noise Injection

입력에 노이즈를 주입하는 것은 징벌 기반 정규화와 연관이 있다. 가우시안 노이즈를 입력에 동등하게 주입하는 것은 항등 활성함수가 있는 단일층 신경망에 대해 L_{2} 정규화와 같다. 비선형 활성함수가 있는 신경망에 대해서는 같지는 않지만, 직관적으로는 빗스하다.

4.4.2. L_{1}-regularization

L_{1} 정규화 등 다른 형식의 정규화를 쓸 수도 있다. 이는 L_{2} 정규화와는 달리 망각 메커니즘에서 덧셈적 업데이트를 한다.

4.4.3. L_{1}– or L_{2}-Regularization?

둘 중 어떤 것을 선택해야 할까? 정확도는 대개 L_{2} 정규화가 낫지만, L_{1} 정규화는 해를 희박하도록 유도하는, 즉 특성 선택자로 기능한다는 특징이 있다. 이는 같은 유형의 데이터 셋을 계속해서 학습하지만 데이터 셋의 자연적 특성이 시간에 따라 바뀌지 않을 때 유용하다.

4.4.4. Penalizing Hidden Units: Learning Sparse Representations

징벌 기반 방법은 신경망의 매개변수를 징벌한다. 이외는 은닉 유닛을 징벌할 수도 있다. 가장 간단한 방법은 L_{1}-징벌치를 은닉 유닛에 추가하는 것이다. 역전파 시에 손실 함수는 은닉층의 노드에서도 합해진다. 역전파 알고리즘은 이를 반영해서 변경되어야 한다.

4.5. Ensemble Methods

앙상블 방법은 기계 학습에 널리 쓰이고 두 예는 배깅과 부스팅이다. 배깅은 분산 감소에, 부스팅은 편향 감소에 쓰인다. 신경망은 과적합될 위험이 많은 기법이기 때문에 분산 감소가 더 많이 쓰인다.

4.5.1. Bagging and Subsampling

데이터 셋이 무한정 있다면 어떻게 분산을 줄일 수 있을까? 가장 자연스러운 접근법은 다른 학습 데이터 셋을 반복해서 만들고 이들을 이용해 같은 테스트 객체를 예측하는 것이다. 데이터가 유한할 때 이를 적용하는 기본 아이디어는 기본 데이터의 단일 객체에서 샘플링을 통해 새 학습 데이터 셋을 생성하는 것이다. 이를 평균을 내는데 확률적 출력값에 대해서는 로그값을 평균을 낸다. 배깅과 부분샘플링의 차이는 샘플링된 학습 데이터셋에서 대체가 일어나느냐 아니냐이다. 배깅에서 각 학습 데이터는 대체와 함께 샘플링된다. 부분샘플링에서는 데이터의 표본이 대체 없이 만들어진다. 학습 데이터 셋들에 대해 재샘플링과 모델 생성은 m번 반복되어 m번의 예측이 평균내어진다. 데이터가 충분하면 부분샘플링이 낫고 아니면 배깅이 낫다. 다른 학습 샘플간 겹치는 부분이 생기므로 분산을 완전히 제거할 수는 없다. 단점은 복수의 학습 모델을 만들어야 한다는 것인데, 이는 병렬화해서 해결할 수 있다.

4.5.2. Parametric Model Selection and Averaging

신경망 생성의 하나의 난관은 초매개변수와 활성 함수 등의 선택이다. 이를 모델 선택이라 한다. 심층 학습의 문제는 가능한 설정의 수가 많을 수 있다는 것이다. 복수의 설정을 평균내는 접근법은 병렬화가 가능할 경우에만 유용하다.

4.5.3. Randomized Connection Dropping

다층 신경망에서 다른 층간 연결을 무작위로 끊는 것은 모델의 다양성을 불러온다. 이는 분류뿐만 아니라 다른 예측 문제에도 쓰일 수 있다.

4.5.4 Dropout

드롭아웃은 신경망 앙상블을 만들 때 간선 샘플링 대신 노드를 무작위로 없애는 것이다. 없앨 노드는 입력/은닉층으로부터만 샘플된다. 연결 무작위 끊기와 다른 점은 다른 샘플된 네트워크간 가중치가 공유된다는 것이다. 학습 샘플의 각 미니배치마다 다른 신경망이 쓰이므로 샘플되는 신경망의 수는 매우 많다. 모델간 앙상블을 쓸 때는 모델들의 예측값의 기하평균을 쓸 수 있지만, 기하평균낸 클래스들의 확률이 합이 1이 되도록 맞춰 줘야 한다. 그 대신에 전방 망을 통해 전방 전파를 할 때 각 가중치 노드에 그 노드가 샘플링될 확률을 곱하는 방법이 있다. 이를 가중치 스케일링 추론 법칙이라 한다. 이는 선형 활성 함수를 가진 망에서는 정확하지만 비선형 활성 함수를 가진 망에서는 정확하진 않지만, 실제로는 잘 동작한다. 드롭아웃의 주 효과는 정규화를 학습 과정에 넣는 것이다. 드롭아웃은 효과적이지만 정규화 방법이기 때문에 표현력을 줄이므로 큰 모델에 대해서 쓰는 것이 좋다.

A Note on Feature Co-adaptation

드롭아웃이 왜 작동하는지를 이해하려면 특성 상호 적응의 개념을 이해할 필요가 있다. 신경망의 어떤 부분의 업데이트가 느리면 어떤 특성들은 유용하지 못할 것이고 다른 특성들이 이 특성들에 적응할 것이다. 드롭아웃은 입력과 활성 노드들 중 일부만 쓰게 함으로써 이를 막는다.

4.5.5. Data Perturbation Ensembles

드롭아웃은 데이터에 간접적으로 노이즈를 더하는 앙상블 법으로도 볼 수 있지만 명시적으로 데이터에 변화를 줄 수도 있다. 가장 간단한 경우엔 입력 데이터에 작은 노이즈를 줘서 예측하는 것을 반복한 뒤 이를 평균낼 수도 있다. 노이즈를 은닉 층에 더할 수도 있지만 이 경우 주의 깊게 노이즈를 줘야 한다. 또는 데이터 셋 증강을 할 수도 있다.

4.6. Early Stopping

신경망의 경사 하강법은 수렴 시까지 최적화하면 과적합될 수 있다. 이에 대한 자연스러운 해결책은 검증 집합에서의 오차가 계속 늘어나기 시작하면 중단하는 이른 중단이다. 검증 집합을 학습 집합에서 떼어내는 것이 비효율적이라고 생각할지 모르지만 데이터 유실 효과는 크지 않다. 이른 중단의 이득 중 하나는 학습 과정을 크게 바꾸지 않으면서 신경망에 쉽게 추가될 수 있다는 것이다. 이는 최적화 과정에 제약 조건을 추가하는 정규화의 일종으로도 볼 수 있다.

4.6.1. Understanding Early Stopping from the Variance Perspective

편향-분산 트레이드오프를 이해하는 방법 하나는 최적화 문제의 참 손실 함수는 데이터가 무한정 있어야만 재구성될 수 있다는 것이다. 경사 하강법은 이른 중단을 썼을 시 참 손실 함수에 대한 좋은 해법을 낸다.

4.7. Unsupervised Pretraining

심층 신경망은 여러 특성 때문에 학습하기 힘든데, 그 중 하나는 경사 폭발/증발 문제이다. 이는 신경망의 다른 부분이 같은 비율로 학습되지 않기 때문에 생긴다. 신경망의 깊이와 관련된 문제는 어떻게 신경망이 초기화되는지에도 의존한다. 이 때 비지도 사전학습을 통해 좋은 초기화를 할 수 있다. 사전학습에서는 바깥의 은닉층부터 한 번에 한 층씩 탐욕적으로 학습을 한다. 이를 이용해 안쪽의 은닉층을 학습한다. 한 번 학습할 때 중간의 은닉층은 생략되고 바깥의 2개의 은닉층이 한 은닉층으로 포개지며, 이것이 반복된다. 지도학습에 대해서 이것을 하려면 층이 k개인 신경망에 대해서는 2k – 1개 층을 가진 비지도 자가부호화기를 만들면 된다. 이후 출력 노드를 다시 붙이고 역전파를 통해 미세 조정을 한다. 비효율적인 학습으로 인해 특성 상호 적응이 일어나면 거의 반드시 과적합된다. 이 때 사전학습은 모델의 깊이를 완전하게 살릴 수 있게 해 준다. 사전학습을 이해하는 다른 방법 중 하나는 데이터의 반복되는 패턴에 대한 통찰을 준다는 것이다.

4.7.1. Variations of Unsupervised Pretraining

비지도 사전학습을 할 때 한 번에 한 층이 아니라 여러 층을 학습할 수도 있다. 자가부호화기적 사전학습은 양 구조가 대칭이 되도록 강요하는데, 이를 완화하기 위해 부호화-암호화 두 층간에 가중치를 임시로 두고 환원이 끝나면 이를 버릴 수도 있다.

4.7.2. What About Supervised Pretraining?

어떤 경우에서 지도 사전학습은 비지도 사전학습만큼 좋은 성능을 보이지 않지만, 그렇다고 전혀 쓸모가 없는 것은 아니다. 지도 사전학습에서는 자가부호화기적 구조를 쓰지 않고 입력-은닉-출력 구조로 시작해서 한 층씩 추가해 나가지만, 비지도 사전학습과 비교해 보지 않은 데이터셋에서의 오차는 그렇게 좋지는 않다. 지도 사전학습의 문제점은 최초 층들이 출력과 직접적으로 연관되기 때문에 또 다른 형태의 과적합이 생긴다는 점이다. 데이터 분포가 출력과 별 상관이 없는 경우에는 비지도 사전학습보다는 사전학습에 어떠한 직관을 추가해 주는 것이 더 좋을 수도 있다. 이는 분류보다 회귀에서 더 많이 나타난다.

4.8. Continuation and Curriculum Learning

신경망 매개변수를 학습하는 것은 손실 함수가 복잡한 모양을 가진 복잡한 최적화 문제이다. 사전학습은 최적화 문제를 단순화하는 것은 테스트 집합에 대한 더 좋은 최적점을 제공하는 사전 기반이 되기도 한다는 것이다. 이와 밀접한 관련이 있는 것으로 단순한 문제를 푼 뒤 원래 문제로 점점 더 해를 복잡하게 만드는 연속화 학습, 단순한 데이터 객체에 대해 모델을 학습한 뒤 더 복잡한 객체를 점진적으로 학습 집합에 더하는 커리큘럼 학습이 있다.

4.8.1. Continuation Learning

연속화 학습에서는 학습 난이도가 순서대로 증가하는 손실 함수들을 설계해 이를 순서대로 학습하고, 앞에서 학습했던 해를 초기값으로 쓴다. 손실 함수들의 매개변수는 같아야 한다. 한 방법은 분산이 감소하는 순서를 가진 가우시안 분포들을 학습하는 것이다. 단점은 비용이 크다는 것이다.

4.8.2. Curriculum Learning

커리큘럼 학습은 다른 학습 집합은 학습 난이도가 다르다는 가정에 기반한다. 추계적 경사 하강법을 시작할 때 쉬운 학습 집합으로부터 일종의 사전학습을 진행해 이후에 어려운 학습 집합들을 포함해 나간다. 후반 반복에서 쉬운 학습 집합을 빼면 안 된다.

4.9. Parameter Sharing

모델의 매개변수를 줄이는 정규화 형태는 다른 연결간 매개변수를 공유하는 것이다. 이는 두 노드에서 계산한 함수가 어떤 방식으로든 연관이 되어 있을 것이라는 직관에 가정한다. 예로는 자가부호화기에서 대칭되는 가중치를 공유하는 것, 순환 신경망에서 시간축에 따른 층들의 가중치 공유, 컨볼루션 신경망에서 연속된 조각에 대한 가중치가 공유되는 것 등이 있다. 다른 방식으로는 매개변수를 완전히 공유하는 것이 아니라 달라지는 것에 대해 징벌을 주는 약한 가중치 공유가 있다.

4.10. Regularization in Unsupervised Applications

과적합은 비지도학습에서도 일어날 수 있지만 문제가 덜 된다. 하지만 정규화를 쓰는 것이 도움이 되는 비지도학습이 있는데, 예를 들면 은닉층의 유닛 수가 입력층보다 많은 과완전 자가부호화기 등이다.

4.10.1. Value-Based Penalization: Sparse Autoencoders

희박 은닉 유닛을 징벌하는 것은 희박 자가부호화기라는 비지도학습의 적용례가 있다. L_{1} 정규화를 쓸 수도 있고 은닉 유닛들 중 최고 k개만 남길 수도 있다.

4.10.2. Noise Injection: De-noising Autoencoders

잡음 주입은 가중치에 대한 징벌 기반 정규화의 형태이다. 잡음 제거 자가부호화기는 가중치나 은닉 유닛에 징벌을 주는 것이 아니라 잡음을 주입하는 것에 기반하지만, 잡음의 유형은 입력의 특성에 맞아야 한다. 실변수에는 가우시안 노이즈, 이진 변수에는 마스킹 노이즈나 최대/최소 노이즈 등이 쓰인다. 이는 오염된 데이터를 다룰 때 유용하다. 이 때 학습 데이터의 노이즈는 명시적으로 추가되지만 테스트 데이터의 노이즈는 그렇지 않다. 잡음 제거 자가부호화기가 동작하는 방식은 데이터가 삽입된 참 다양체를 학습하는 방식으로 입력에 추가되는 노이즈를 사용하는 것이다.

4.10.3. Gradient-Based Penalization: Contractive Autoencoders

수축 자가부호화기는 입력 값이 작게 변할 때 은닉 표현식이 크게 변하지 않기를 원하는, 강하게 정규화된 부호화기이다. 핵심은 수축 자가부호화기는 입력 값의 작은 변화에만 강건하도록 설계한다는 것이다. 은닉 값이 입력에 대한 작은 경사를 가지면 입력의 작은 변화에 민감하지 않다는 것을 알 수 있다. 이것은 전체 목적 함수를 손실과 정규화 항의 가중치합으로 나타냄으로써 달성한다. 잡음 제거 자가부호화기는 잡음을 명시적으로 추가해서 추계적으로 강건함을 얻지만 수축 자가부호화기는 정규화 항을 추가해 해석적으로 목적을 달성한다. 수축 자가부호화기에서 경사는 결정론적이므로 잡음 제거 자가부호화기와 비교해서 이차 학습 방법을 사용하기 쉽다. 반면에 잡음 제거 자가부호화기는 일차 학습 방법을 사용했을 때 만들기 쉽다.

4.10.4. Hidden Probabilistic Structure: Variational Autoencoders

희박 자가부호화기가 은닉 유닛에 희박성 제한 조건을 거는 것처럼, 변분 자가부호화기는 은닉 유닛에 특정한 확률적 조건을 건다. 가장 간단한 것으로는 은닉층의 활성 함수가 표준정규분포를 따른다는 제한이 있다. 이 때 은닉층의 조건부 분포는 표준정규분포와 달라야 한다. 은닉 변수의 확률분포에 조건을 거는 것은 다른 정규화 기법보다 어렵지만, 해법은 재매개화를 사용해 부호화기가 조건부 표준정규분포를 만들게 한 뒤 은닉 벡터가 이 분포로부터 샘플되게 하는 것이다. 각 오브젝트에 대해 평균 벡터와 표준편차 벡터를 각각 만드는 k차원 활성 함수들이 쓰이며 표준편차 벡터에는 표준정규분포를 따르는 벡터가 곱해진 뒤 평균 벡터가 더해져 최종적으로 은닉 표현식을 만든다. 손실 함수는 재구축 오차와 은닉 표현식의 표준정규분포에 대한 KL 발산을 가중치합한 것이다.

Training the Variational Autoencoder

변분 자가부호화기의 학습은 어렵지 않다. 손실 함수의 각 항에 대해 경사를 역전파하면 된다. 변분 자가부호화기의 구조는 다른 자가부호화기와 근본적으로 달라 보이지만 연관성이 있다. 잡음 제거 자가부호화기에서 노이즈는 입력에 더해지지만 변분 자가부호화기에는 은닉 표현식에 더해진다. 이는 입력이 은닉 공간의 추계적 영역에 매핑을 하도록 유도하므로 은닉 표현식에 대한 작은 변화가 재구축을 크게 바꾸지 않는다. 이는 수축 자가부호화기에 대해서도 사실이지만 변분 자가부호화기는 은닉 분포가 가우시안이도록 강제한다는 차이가 있다.

4.10.4.1. Reconstruction and Generative Sampling

이 접근법은 축소된 표현식을 만드는 데도 쓰일 수 있다. 하지만 변분 자가부호화기의 흥미로운 적용은 기반 데이터 분포로부터 표본을 추출하는 데 있다. 정규분포에서 점을 추출한 뒤 복호화기에 입력하기만 하면 된다. 이 때 생성된 오브젝트들은 학습 데이터로부터 추출된 것과 비슷하지만 완전히 같지는 않다.

4.10.4.2. Conditional Variational Autoencoders

조건 변분 자가부호화기는 맥락과 연관 있는 추가 조건부 입력을 더하는 것이다. 예를 들면 원본 이미지에 대한 손상된 이미지를 조건부 입력으로 줘 이미지 재구성을 하는 변분 자가부호화기를 학습시킬 수 있다.

4.10.4.3. Relationship with Generative Adversarial Networks

변분 자가부호화기는 생성적 대립쌍 망으로 일컬어지는 다른 층위의 모델과 가깝게 연관되어 있다. 차이점은 대립쌍 망의 결과가 종종 더 현실적이라는 것인데 이 때 복호화기는 좋은 위조본을 만들도록 명시적으로 학습되기 때문이다. 이는 생성된 오브젝트의 품질을 판단하는 판별자를 둠으로써 얻어진다.

4.11. Summary

신경망은 종종 많은 수의 매개변수를 가져서 과적합을 일으킬 수 있다. 한 해법은 망의 크기를 미리 제한하는 것이다. 그러나 이런 접근법은 모델이 복잡하고 충분한 데이터가 있을 때에는 최적이지 못한 해법을 낸다. 더 유연한 접근법은 많은 수의 매개변수가 허용된 조정 가능한 정규화를 사용하는 것이다. 이런 경우 정규화는 매개변수 공간의 크기를 약한 형태로 제한한다. 정규화의 가장 흔한 형태는 징벌 기반 정규화이다. 매개변수에 징벌을 사용하는 것은 흔하지만, 은닉 유닛의 활성함수 값에 징벌을 쓸 수도 있다. 후자는 은닉 유닛의 희박 표현식을 유도한다. 앙상블 학습은 분산을 줄이기 위한 흔한 접근법이며, 드롭아웃 같은 앙상블 방법은 신경망을 위해 특별히 설계되었다. 다른 흔한 정규화 방법에는 이른 중단과 사전학습 등이 있다. 사전학습은 반지도학습의 형태로 작동하는 정규화자로, 간단한 휴리스틱을 통해 초기화를 하고 역전파를 통해 정제된 해를 찾음으로써 단순한 해에서부터 복잡한 해까지 작동한다. 다른 연관된 기법에는 커리큘럼 법과 연속화 법이 있으며 이들 또한 단순한 해에서부터 복잡한 해까지 작동함으로써 낮은 일반화 오차를 갖는 해를 제공한다. 비지도학습에서는 과적합은 덜 중요한 문제지만, 학습된 모델에 구조를 도입하기 위해서 다른 형태의 정규화가 쓰인다.

4.12. Bibliographic Notes

여러 관련된 논의들을 여러 논문들에서 찾을 수 있다.

4.12.1. Software Resources

여러 소프트웨어 리소스도 찾을 수 있다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중