12주차 · 이전 문자를 기억하며 다음 문자 예측하기

실습 전에

01 현재 문자만으로 충분할까

hello의 두 l 뒤에는 서로 다른 문자가 옵니다. 현재 문자 하나만 보고 다음 문자를 맞힐 수 있을까요?

설명
  • 첫 l 뒤에는 l, 둘째 l 뒤에는 o가 옵니다. 현재 문자만으로 두 상황을 구별할 수 없습니다.
  • 앞에서 읽은 정보를 함께 사용하면 두 위치를 구별할 수 있습니다. 순서가 예측에 필요한 정보가 되는 사례입니다.

관련 개념 복습 ↗

02 분류에 기억을 더하기

다음 문자를 고르는 데에도 앞서 배운 분류 방법을 사용할 수 있을까요?

설명
  • 후보 문자별 점수를 계산하고 정답 문자와 비교하는 것은 분류와 같습니다.
  • RNN은 이전 정보를 Hidden State로 전달해 예측에 활용합니다. 이번 실습에서는 각 위치의 Input·Target과 예측을 나란히 확인합니다.

실습

1. 문자 Batch 구성

  1. 데이터 셀을 실행하고, 세 문장 각각의 Input 문자와 Target 문자를 두 행으로 출력하세요. 같은 열의 Input에 대해 Target이 원문에서 바로 다음 문자인지 대조하세요.
  2. X.shape와 Y.shape를 출력하세요. 각 축에 문장 수·문자 수·Vocabulary 크기 중 해당하는 이름을 붙이세요.
  3. Vocabulary의 문자 목록을 출력하고 공백과 문장부호가 포함되는 위치를 적으세요.

2. RNN 학습

  1. 학습 셀에서 출력한 before_pred[0]과 학습 후 pred[0]을 Y[0]과 문자별로 대조하세요. 학습 전후에 틀린 위치를 각각 적으세요.
  2. 학습한 model에 X[:, :4, :], X[:, :6, :], X[:, :8, :]을 각각 넣으세요. 재학습 없이 torch.no_grad() 안에서 실행합니다.
  3. 입력 Sequence 길이·전체 입력 shape·전체 출력 shape를 세 행의 표로 기록하세요. 길이가 바뀔 때 함께 바뀌는 출력 축을 표시하세요.

제출·저장

코드, 실제 Output·그래프, 직접 작성한 해석을 포함하세요. 제출은 KLAS를 이용하며 기한은 학기 일정과 최신 공지를 확인합니다.

파일명: 이름_학번_12주차.ipynb.

실행 환경을 다시 시작하고 전체 코드를 위에서부터 실행한 뒤 저장하세요.

선택 실습

Batch와 Sequence 축을 서로 바꾼 경우

  1. 세 문장을 사용하는 RNN 학습까지 마친 뒤, 노트북 맨 아래에 Code Cell을 추가하고 다음 코드를 실행하세요.
    for debug_input in [X, X.transpose(0, 1)]:
        with torch.no_grad():
            debug_output = model(debug_input)
        print("Input:", debug_input.shape, "Output:", debug_output.shape,
              "Target:", Y.shape)
  2. Text Cell에 각 호출에서 모델이 해석하는 Batch 크기와 Sequence 길이를 적으세요. batch_first=True에서는 첫 번째 축이 Batch입니다. 세 문장을 각각 하나의 Sequence로 처리하는 입력은 어느 것이며, 다른 호출도 오류 없이 실행되는 이유를 설명하세요.