AI-For-Beginners/translations/ko/lessons/5-NLP/17-GenerativeNetworks/README.md

6.6 KiB

생성 네트워크

강의 전 퀴즈

순환 신경망(RNN)과 Long Short Term Memory Cells(LSTM), Gated Recurrent Units(GRU)와 같은 게이트 셀 변형은 단어 순서를 학습하고 시퀀스에서 다음 단어를 예측할 수 있는 언어 모델링 메커니즘을 제공합니다. 이를 통해 RNN을 생성 작업에 사용할 수 있습니다. 예를 들어 일반적인 텍스트 생성, 기계 번역, 이미지 캡션 생성 등이 가능합니다.

텍스트 입력 중 자동 완성 기능과 같은 생성 작업을 통해 혜택을 받은 경험을 떠올려 보세요. 좋아하는 애플리케이션이 RNN을 활용했는지 조사해 보세요.

이전 단원에서 논의한 RNN 아키텍처에서는 각 RNN 유닛이 다음 숨겨진 상태를 출력으로 생성했습니다. 하지만 각 순환 유닛에 또 다른 출력을 추가하여 시퀀스(원래 시퀀스와 길이가 동일)를 출력할 수도 있습니다. 또한 각 단계에서 입력을 받지 않고 초기 상태 벡터만 받아 시퀀스 출력을 생성하는 RNN 유닛을 사용할 수도 있습니다.

이를 통해 아래 그림에 표시된 다양한 신경망 아키텍처를 구현할 수 있습니다:

일반적인 순환 신경망 패턴을 보여주는 이미지.

이미지 출처: Andrej Karpaty의 블로그 게시물 Unreasonable Effectiveness of Recurrent Neural Networks

  • 일대일은 하나의 입력과 하나의 출력을 가진 전통적인 신경망입니다.
  • 일대다는 하나의 입력 값을 받아 출력 값 시퀀스를 생성하는 생성 아키텍처입니다. 예를 들어, 이미지 캡션 생성 네트워크를 훈련시키고자 한다면, 이미지를 입력으로 받아 CNN을 통해 숨겨진 상태를 얻은 후 순환 체인을 통해 단어별로 캡션을 생성할 수 있습니다.
  • 다대일은 이전 단원에서 설명한 텍스트 분류와 같은 RNN 아키텍처에 해당합니다.
  • 다대다, 또는 시퀀스-투-시퀀스기계 번역과 같은 작업에 해당합니다. 여기서 첫 번째 RNN은 입력 시퀀스의 모든 정보를 숨겨진 상태에 수집하고, 다른 RNN 체인은 이 상태를 출력 시퀀스로 풀어냅니다.

이번 단원에서는 텍스트 생성을 돕는 간단한 생성 모델에 집중할 것입니다. 간단히 하기 위해 문자 수준 토큰화를 사용할 것입니다.

이 RNN을 훈련시켜 단계별로 텍스트를 생성할 것입니다. 각 단계에서 nchars 길이의 문자 시퀀스를 받아 각 입력 문자에 대해 다음 출력 문자를 생성하도록 네트워크에 요청합니다:

단어 'HELLO'를 생성하는 RNN 예제를 보여주는 이미지.

텍스트를 생성할 때(추론 중), 프롬프트를 시작점으로 사용하여 RNN 셀을 통해 중간 상태를 생성한 후 이 상태에서 생성을 시작합니다. 한 번에 한 문자씩 생성하며, 상태와 생성된 문자를 다음 RNN 셀에 전달하여 다음 문자를 생성합니다. 이 과정을 필요한 문자 수만큼 반복합니다.

이미지 출처: 작성자

✍️ 연습: 생성 네트워크

다음 노트북에서 학습을 이어가세요:

부드러운 텍스트 생성과 온도

각 RNN 셀의 출력은 문자에 대한 확률 분포입니다. 생성된 텍스트에서 항상 확률이 가장 높은 문자를 다음 문자로 선택하면 텍스트가 반복되는 패턴을 보일 수 있습니다. 예를 들어, 아래와 같은 경우입니다:

today of the second the company and a second the company ...

하지만 다음 문자에 대한 확률 분포를 보면, 가장 높은 확률과 두 번째로 높은 확률 간의 차이가 크지 않을 수 있습니다. 예를 들어, 한 문자가 확률 0.2를 가지는 반면, 다른 문자는 0.19를 가질 수 있습니다. 예를 들어, 'play'라는 시퀀스에서 다음 문자는 공백이나 e(단어 player에서처럼)가 될 가능성이 거의 동일합니다.

따라서 항상 높은 확률의 문자를 선택하는 것이 "공정"하지 않을 수 있습니다. 두 번째로 높은 확률의 문자를 선택해도 의미 있는 텍스트를 생성할 수 있습니다. 더 현명한 방법은 네트워크 출력이 제공하는 확률 분포에서 문자를 샘플링하는 것입니다. 또한 온도라는 매개변수를 사용하여 확률 분포를 평탄화하거나, 더 가파르게 만들어 높은 확률의 문자에 더 집중할 수 있습니다.

위에 링크된 노트북에서 이 부드러운 텍스트 생성이 어떻게 구현되는지 탐구해 보세요.

결론

텍스트 생성 자체도 유용할 수 있지만, RNN을 사용하여 초기 특징 벡터에서 텍스트를 생성할 수 있는 능력이 주요 이점입니다. 예를 들어, 텍스트 생성은 기계 번역(시퀀스-투-시퀀스, 이 경우 인코더의 상태 벡터를 사용하여 번역 메시지를 생성 또는 디코딩함)이나 이미지의 텍스트 설명 생성(CNN 추출기로부터 특징 벡터를 얻는 경우)에 사용됩니다.

🚀 도전 과제

Microsoft Learn에서 이 주제에 대한 강의를 들어보세요:

강의 후 퀴즈

복습 및 자기 학습

다음 기사들을 통해 지식을 확장해 보세요:

과제

문자별 텍스트 생성 방법을 살펴보았습니다. 실습에서는 단어 수준 텍스트 생성을 탐구할 것입니다.