텍스트 생성을 위한 순환 신경망
텍스트 생성을 위한 순환 신경망 최적화 방법
이 글은 AI 번역본입니다. 오역이 의심되는 부분이 있으면 댓글로 알려 주세요.
Created on September 15|Last edited on September 15
Comment
주로 이미지와 ConvNet을 다뤄 왔지만, 최근에는 순환 신경망(RNN)에 관심이 생겼습니다. 다음에 자세히 소개된 텍스트 생성 문제를 다시 살펴보고 싶었습니다. 순환 신경망의 놀라운 효용 그리고 RNN을 더 잘 이해하고, 이를 어떻게 최적화할지 알아보려는 목적도 있습니다.
이 프로젝트를 현대적인 …을(를) 만드는 작업으로 생각하고 싶습니다 로렘 입숨이는 온갖 템플릿에서 자리표시자로 쓰이는 텍스트입니다. 우리는 방대한 텍스트를 읽고, 동일한 문체를 갖춘 “무작위” 텍스트를 생성함으로써 훨씬 더 나은 결과를 만들 수 있습니다.
우리가 만들 모델로 생성한 텍스트 예시는 다음과 같습니다.

요즘 실제 책 대신 생성된 가짜 텍스트만 너무 많이 읽고 있는 것 같아요!
요즘은 사용자 정의 셀과 여러 층을 사용하고, 층 사이에 드롭아웃을 넣은 RNN을 구현하는 일이 꽤 쉽습니다.
self.rnn = torch.nn.LSTM(input_size = input_size, hidden_size = hidden_size, num_layers = num_layers, dropout = dropout)
정의는 여기까지입니다! 안타깝게도 처리해야 할 세부 사항이 아직 꽤 많이 남아 있습니다…
핵심 아이디어는 각 문자를 읽어 원-핫 텐서로 인코딩하고, 이를 RNN에 입력한 뒤 출력값을 다음 문자의 확률 분포로 사용하는 것입니다. 교차 엔트로피 손실과 역전파를 사용하면 예측을 점차 향상시킬 수 있습니다.

모델을 제대로 작동시키기 위해 필수적인 구성 요소들이 있었습니다:
- 훈련 중에는 메모리 사용을 최소화하기 위해 원‑핫 텐서로의 인코딩을 실시간으로 수행해야 합니다.
- 역전파 전에 긴 문자 시퀀스에 대해 손실을 누적해야 하며, 그렇지 않으면 모델이 유의미한 것을 학습하지 못합니다(이렇게 하면 가중치 업데이트가 안정화됩니다).
- 효율적인 학습을 위해서는 여러 개의 시퀀스 데이터를 병렬로 읽어야 합니다.
노트북을 통해 완전한 프로토타입을 만들어 두면, 최적화에 들어가기 전에 구현해야 할 핵심 항목들을 디버깅하고 관찰하는 데 큰 도움이 됩니다. 사실 그런 필수적인 “세부 사항” 중 일부는 나중으로 미뤘을지도 모르고, 어쩌면 영영 손대지 않았을지도 모릅니다…
텍스트를 병렬 배치로 읽기 위해, 가중치가 특정 문맥(즉, 텍스트의 한 구간)에 치우치지 않도록 텍스트를 동일 간격으로 분할합니다. 다음 배치는 각 시퀀스를 계속 따라가며 hidden state의 관련성을 유지합니다.

고작 5분 정도 훈련하고 미세 조정도 그리 많이 하지 않았는데, 꽤 고무적인 결과가 나왔습니다:
"사슴이 남자에게서 들렸다."
“그는 이제 파리의 마지막과 함께 젊은 남자의 무덤을 기념하기를 원하지 않았고, 그녀는”
문을 지닌 아들의 짐을 나르다."
“나는 네가 곧 증명할 거라고 생각해. 네가 일종의 확인을 하게 될 텐데, 그리고 어디에서 대화의 정적이 여전히 이어지는지도 알게 될 거야.”
그 오해의 응축에 관하여. 나는 발랑틴에게 갈 것이고, 그에게 말하라고 한 백작의 불만을 전하겠다."
“그 젊은 남자는 실수투성이였고, 그 순간에도 그랬다.”
이제 순환 신경망의 내부 깊숙한 부분으로 들어가, 이를 최적으로 최적화하는 방법을 탐구해 보겠습니다.

모든 기록된 실행을 분석하고 비교한 끝에 도출한 결론은 다음과 같습니다:
- GRU는 LSTM과 기본 RNN보다 더 효율적이다
- 이 RNN에는 2~3개 층이면 충분히 깊다
- 너비가 깊이보다 훨씬 더 큰 영향을 미친다
- 과적합 징후가 나타난 뒤에만 드롭아웃을 사용하라
- 손실은 약 100자 길이의 시퀀스 단위로 계산하는 것이 좋다(더 긴 시퀀스를 써도 개선 폭은 크지 않음).
- 배치당 여러 시퀀스를 사용하면 성능이 향상되지만, 과적합을 피하기에는 8개면 충분하다.
- 네트워크 아키텍처는 특정 텍스트 길이에 맞게 조정되어야 한다.
참조하시기 바랍니다 W&B 보고서 근거와 도표는 해당 보고서를 참조해 주세요. 저는 새로운 실험을 진행하면서 통찰을 쉽게 기록하고 추적할 수 있도록 그때그때 보고서를 작성했습니다.
흥미롭게도 어떤 텍스트는 다른 텍스트보다 더 예측 가능하다는 점을 알 수 있다. 예를 들어, Internal Revenue Code 보다 훨씬 더 빠르게 학습한다 몽테크리스토 백작, 길이를 10으로 나눈 뒤에도(결과적으로 비슷한 문자 수가 되도록)
모델이 생성한 텍스트만 봐도 그 기반이 무엇인지 짐작할 수 있다는 점을 관찰했다. 예를 들어, Internal Revenue Code로부터 생성된 텍스트는 네트워크가 거기서 무엇을 학습해 기억하고 있는지 ��� 보여 준다. 수많은 개정 조항, 섹션과 하위 섹션, 속성, 그리고 세금 항목들까지!
텍스트의 종류와 상관없이 문법이 대부분 잘 보존된다는 사실은 정말 인상적이며, 주의를 기울이지 않으면 누구든 쉽게 속을 수 있다.
프로젝트 링크:
Add a comment