밑바닥부터 시작하는 딥러닝 2 - 7장

Jajuna_99·2022년 9월 30일
0

7장 RNN을 사용한 문장 생성

전 장에서 배운 LSTM을 갖고 활용(애플리케이션 개발)하는 장이다.

seq2seq을 배운다.

언어 모델을 사용한 문장 생성(p.290)

  • 언어 모델을 활용하는 대표적인 예로 : 기계 번역, 음성 인식, 문장 생성 등이 있다.

RNN을 사용한 문장 생성의 순서

  • 언어 모델은 주어진 단어들에서 다음에 출현하는 단어의 확률분포를 출력.
    • 여기서, 확률이 가장 높은 단어를 선택하는 '결정적'인 방법
    • 각 후보 단어의 확률에 맞게 선택하는 '확률적' 방법이 있다. -> 매번 샘플링 되는 단어가 다를수 있다.
  • 그러고 나서 방금 생성한 단어를 언어 모델에 입력하여 단음 단어의 확률분포를 얻고 계속 반복하면 된다.

위 방법으로 문장 생성 구현(p.294)

seq2seq(p.299)

시계열 데이터를 다른 시계열 데이터로 변환하는 모델인 seq2seq을 알아보자.

  • 2개의 RNN을 사용하는 구조이며, Encoder-Decoder 모델이라고도 한다.
    • Encoder는 RNN(혹은 LSTM, GRU)을 이용해 시계열 데이터를 hh라는 은닉 상태 벡터로 변환합니다.
    • hh에는 입력 문장을 번역하는데 필요한 정보가 인코딩된다. -> 임의 길이의 문장을 고정 길이 벡터로 변환하는 작업
    • Decoder에 있는 LSTM 계층에는 인코딩된 hh을 입력한다. -> 이전 모델에서는 은닉 상태로 '영벡터'를 받았었다.
    • 이 작은 변화로 언어 모델이 번역도 하는 모델이 되는 것이다. (모델 전체 그림 p.303)
    • 이때 LSTM 계층의 은닉 상태가 Encoder와 Decoder를 이어주는 다리가 된다.
  • 가변 길이의 시계열 데이터를 고정 길이로 변화할 때 자주 쓰는 방식은 패딩(padding)을 사용하는 것이다.
  • 덧셈 데이터셋으로 간단한 seq2seq용 데이터 읽는 코드 구현 (p.307)

seq2seq 구현(p.308)

  • Encoder, Decoder 클래스로 seq2seq 구현, 성능 평가까지 구현하는 절이다.

seq2seq 개선(p.321)

seq2seq모델의 개선안 2개를 소개해주는 절이다.

입력 데이터 반전(Reverse) : 입력 데이터의 순서를 반전시키는 기법. -> 반전 + 우측에 패딩이 남아있다면 우측으로 밀착시키는 것이다. -> 구현(p.321)

엿보기(Peeky) : 최초 시각의 Affine, LSTM 계층에만 Encoder출력 은닉 정보를 보여주는 것이 아닌, 모든 시각의 계층들에게 은닉 정보를 제공하는 기법. -> 은닉 정보 안에는 Decoder에게 유일한 정보나 다름 없다는 것을 고려한 기법이다. -> (p.325)

seq2seq를 이용하는 애플리케이션(p.328)

seq2seq로 만들 수 있는 애플리케이션들을 소개해준다.

  • 기계 번역 : '한 언어의 문장'을 '다른 언어의 문장'으로 변환
  • 자동 요약 : '긴 문장'을 '짧게 요약된 문장'으로 변환
  • 질의 응답 : '질문'을 '응답'으로 변환
  • 메일 자동 응답 : '받은 메일의 문장'을 답변 글'로 변환

위에 예시들은 seq2seq가 적용될 수 있는 구체적인 예시들이다.

이 외에도 구체적이지 않더라고 데이터 전처리를 통해 seq2seq를 적용할 수 있는 예들이 있다.

  • 챗봇, 알고리즘 학습, 이미지 캡셔닝이 그 예이겠다.

요약

뒤 쪽으로 가면 갈수록 작가님의 목차 순서, 즉 빌드업이 훌륭하시다는걸 새삼 느낀다...

책에서 실용적이진 않을지더라도 필요없는 내용은 없다고 느껴진다.

profile
Learning bunch, mostly computer and language

0개의 댓글