기간 : 10/20 ~ 10/24


📕9주차 리뷰

자연어 처리가 평상시 사용하는 언어를 다루는 영역이다보니 활용도도 높아보이고 배우면서도 재밌다. 그리고 그와 별개로 상당히 헷갈리고 어렵다. 모델에 대한 이해도를 확실히 잡아놔야겠다. 원리적인 부분에 집착하기보단 우선 이 모델이 뭐를 받아서 뭐를 뱉고, 어떤 특징을 가지고 있는지를 체크하고 넘어가려 한다.

 

해커톤 사전과제 제출이 끝났다. 팀원들과 여러 테스트를 해보고 다같이 보는 곳에서 제출했지만 솔직히 합격할지는 모르겠다. 요구사항이 너무 모호했고, 동시다발적으로 갱신되어야 하는 내부값이 많았는데 우리는 각 값을 따로따로 확인하는 식으로 테스트를 해서 어느 부분에 빼먹은게 있을 수도 있겠다. 그래도 과정에서 많이 배우고 많은 경험을 했기에 상당히 만족스럽다.


  • 순차 데이터(Sequential Data): 텍스트, 시계열, 음성처럼 데이터의 순서가 의미를 갖는 데이터
  • 시퀀스 모델링: 순차 데이터의 패턴을 학습하는 방법론

순환 신경망(RNN)

순환 구조를 가지는 모델

각 시점(time step)에서 이전 시점의 정보(은닉 상태 Ht-1)를 현재 시점의 입력(Xt)과 함께 받아 현재의 은닉 상태(Ht) 생성

  • 이 은닉 상태를 통해 과거의 정보를 기억한다.

  • 각 time step이 하나의 layer 역할을 하므로, 역전파를 Through Time (시간을 거슬러) 방식으로 진행
  • 입력 데이터를 요약하고, 새로운 입력이 들어올 때마다 기억을 수정
  • 모든 입력을 처리한 후 남은 기억은 시퀀스를 전체적으로 요약하는 정보로 활용
  • 입력마다 기억을 갱신하며 순환적으로 진행 → 영단어 외우듯 반복 암기

장기 의존성 문제 (Long-Term Dependency)

시퀀스가 길어질수록 맨 처음의 정보가 뒤쪽까지 전달되기 어려워(기울기 소실) 장기적인 패턴을 학습하기 어려움

 

입출력 형식

One-to-One One-to-Many Many-to-One Many-to-Many
(Sequence Labeling)
Many-to-Many
(Encoder to Decoder)
하나를 받아 하나 출력 하나를 받아 시퀀스 출력 시퀀스를 받아 하나 출력 각 요소마다 라벨 매핑
(입출력 길이 동일)
입력과 출력이 유동적
이미지 분류 이미지 캡셔닝, AI 노래 감정 분석, 스팸 탐지 품사 태깅, 객체 인식 번역, 챗봇, AICC

LSTM(Long Short-Term Memory)

RNN의 장기 의존성 문제를 해결하기 위해 고안된 모델

 

셀 상태(Cell State, Ct)

장기 기억을 담당하는 별도의 정보 저장소

정보가 큰 손실 없이 전달될 수 있도록 함

 

게이트(Gates): 셀 상태의 정보를 제어하는 장치

  • 망각 게이트(Forget Gate, Ft): 과거 정보(이전 셀 상태 Ct-1)를 얼마나 잊을지 결정
  • 입력 게이트(Input Gate, It): 현재 입력으로 들어온 새로운 정보를 얼마나 저장할지 결정
  • 출력 게이트(Output Gate, Ot): 현재 셀 상태의 정보를 얼마나 출력(다음 은닉 상태 Ht로)할지 결정

양방향 LSTM (Bidirectional LSTM)

데이터를 순방향과 역방향으로 동시에 처리하여 문장의 양쪽 문맥을 모두 학습하는 기법


GRU(Gated Recurrent Unit)

LSTM의 구조를 더 단순화한 모델

셀 상태와 은닉 상태를 하나의 은닉 상태로 통합하고 게이트를 리셋과 업데이트 2개만 사용

  • 리셋 게이트 (Reset Gate): 과거의 은닉 상태를 얼마나 무시할지(잊을지) 결정
  • 업데이트 게이트 (Update Gate): 과거의 은닉 상태와 현재 계산된 정보를 얼마나 조합하여 다음 은닉 상태($h_t$)를 만들지 결정

언어 모델링(Language Modeling, LM)

단어 시퀀스(문장)에 확률을 할당하는 모델

주어진 단어들 다음에 어떤 단어가 올 확률을 예측

  • 통계 기반(n-gram): 연속된 n개의 단어 묶음을 기반으로 확률을 계산. 문맥이 n개로 제한되고 데이터 희소성 문제
  • 신경망 기반(NNLM, RNN 등): 단어를 임베딩 벡터로 변환하고 신경망을 이용해 문맥을 학습

퍼플렉서티(Perplexity, PP)

언어 모델이 얼마나 '헷갈려하는지'를 나타내는 지표

값이 낮을수록 성능이 좋음


신경망 기계 번역(NMT)

seq2seq (Sequence to Sequence)

하나의 시퀀스를 다른 시퀀스로 변환하는 구조
→ 기계 번역, 텍스트 요약, 챗봇 등

  • 인코더(Encoder): 문장 전체의 의미를 하나의 고정된 크기의 Context Vector로 압축
  • 디코더 (Decoder): 인코더가 전달한 컨텍스트 벡터를 입력받아 한 단어씩 순차적으로 생성하여 출력
  • 압축 과정에서 정보 손실을 무시할 수 없는 문제점이 있음
    → Attention 기법과 Transformer의 등장으로 이어짐

Teacher Forcing

디코더가 다음 단어를 예측할 때 모델 자신이 이전에 예측한 단어 대신 실제 정답 단어를 입력으로 넣어주는 기법

 

"I am a" 다음에 "student"를 예측해야 할 때,

  • 모델이 실수로 "I am a teacher"라고 예측했더라도
  • 다음 단어를 예측하기 위한 입력값으로 정답인 student를 넣어줌

학습 초기 불안정성을 줄이고 수렴 속도를 향상시켜주지만 노출 편향(Exposure Bias) 문제가 있음

  • 학습 시에는 틀린 답을 내도 정답으로 커버해주지만
  • 정답이 없는 실제 추론 시에는 틀린 답을 내도 그대로 안고 가야하니
  • 작은 오류가 연쇄적으로 커질 수 있음

온실 속 화초처럼 곱게 자란 애라서 자기 실수로부터 회복할 방법을 배우지 못함

 

💡Scheduled Sampling

노출 편향을 해결하기 위한 기법

  • 처음에는 100% 정답 단어를 입력해주다가
  • 실제 예측값과 정답값을 번갈아가며 입력
  • 번갈아가는 비율은 하이퍼 파라미터 튜닝으로 최적점을 찾아야 함

+ Recent posts