부트캠프/SK Networks AI Camp 10기

[플레이데이터 SK네트웍스 Family AI 캠프 10기] 11주차 회고

kqe123 2025. 3. 23. 21:38

 

1. Intro

11주차가 끝났다. 지난주 RNN했을때 엄청 어려웠었는데, 이번주 내용은 정말 멍때리다가 끝난 것 같다. seq2seq, attention 등 여러 기술을 생으로 구현하는 코드를 봤는데, 나만 아니라 모두가 멘탈이 나간것 같았다... 강사님도 우리의 분위기를 아는지 코드 이해못해도 그냥 원리만 이해해도 된다고 하셨다. 그래서 코드 이해는 포기하고 개념 이해에 집중했다.

 

2. 배웠던 내용

LSTM

  • Vanilla RNN의 단점 : 관련 정보와 그 정보를 사용하는 지점 사이 거리가 멀 경우 역전파시 그래디언트가 점차 줄어 학습능력이 크게 저하됨. 이를 기울기 소실 문제라고 부름.
  • LSTM : 이 문제를 극복하기 위해서 고안된 것이 바로 LSTM!
  • 셀 상태(Cell State)와 게이트(Gates) 구조를 도입하여 중요한 정보를 오랫동안 유지 가능
    • 입력 게이트(Input Gate): 현재 입력을 얼마나 반영할지 결정
    • 망각 게이트(Forget Gate): 과거 정보를 얼마나 잊을지 결정
    • 출력 게이트(Output Gate): 다음 타임스텝으로 어떤 정보를 보낼지 결정

 

GPU

  • GRU는 LSTM과 비슷한 이유로 만들어졌으며, LSTM보다 구조가 단순하다.
    • Update Gate : LSTM의 Forget Gate와 Input Gate를 합친 Gate로 이전의 정보를 얼마나 통과시킬지 결정하는 Gate이다.
    • Reset Gate : 이전 hidden state의 정보를 얼마나 잊을 지를 결정하는 Gate로 Sigmoid 활성함수를 통과시켜 0 ~ 1 사이의 범위로 잊을 정보의 양을 결정

 

 

Seq2seq

  • Seq2Seq : 번역기에서 대표적으로 사용되는 모델로, 인코더와 디코더로 구성
  • Encoder : 문장을 이해한다.
    • 1. 인코더의 은닉 상태를 적절한 값(ex. 영벡터)으로 초기화
    • 2. 매 시점(time step)원문의 단어(token)가 입력되면(단어의 임베딩이 입력되면) 인코더는 이를 이용해 은닉 상태를 업데이트를 한다.
    • 3. 입력 시퀀스의 끝까지 이 과정을 반복하면 인코더의 최종 은닉 상태는 입력 시퀀스의 정보를 압축 요약한 정보를 담고 있게 됨.
    • 4. 이 마지막 시점에서의 인코더 은닉 상태를 컨텍스트 벡터라고 하고, 이 값은 디코더로 넘어간다.
  • Decoder : 새로운 문장을 생성한다.
    • 1. 디코더는 전달받은 컨텍스트 벡터로 자신의 은닉 상태를 초기화
    • 2. 그리고 매 시점 자신이 바로 직전 시점에 출력했던 단어를 입력으로 받아, 자신의 은닉 상태를 업데이트하고, 이를 이용해 다음 단어를 예측한다. (최초 시점에서는 시퀀스 시작을 의미하는 <sos> 토큰(Start Of Sequence)을 입력으로 받는다.)
    • 3. 이 과정을 정해진 반복 횟수 또는 시퀀스 끝을 나타내는 <eos> 토큰(End Of Sequence)이 나올 때까지 수행한다.

 

Attention

  • seq2seq 방식 : “i am a student.”가 인코더 데이터일때 “나는”이라는 단어를 예측할때 “i am a student.” 문장 전체를 사용한다. 즉, 한 단어를 예측하는데 문장 전체를 사용
  • Attention 방식 : “나는”이라는 단어를 예측할 때 입력 시퀸스의 각 토큰과의 유사도를 각각 계산하여 가장 중요한 단어에 집중 -> 유사도를 계산해서 가장 중요한 단어에 집중
  • 1. 어텐션 스코어(유사도)를 구함. → 점곱(Dot Product) 연산을 사용하여 유사도를 계산

  • 2. 소프트맥스(softmax) 함수를 통해 어텐션 분포(Attention Distribution)를 구함.

  • 3. Attention Score를 Value 벡터에 곱해 가중 평균을 계산합니다.

  • 4. 어텐션 값과 디코더의 t시점의 은닉 상태를 연결한다. (concatenate)

  • 5. Dense layer와 softmax를 적용한다.

 

 

Transformer

  • Transformer : 자연어 처리(NLP)와 시계열 예측 같은 다양한 분야에서 사용되는 딥러닝 모델 구조
  • Transformer와 seq2seq의 차이 :
    • seq2seq에서는 Encoder 연산이 끝난 후에 Decoder 연산이 시작된다면, Transformer는 Encoder와 Decoder가 같이 연산이 일어난다.
    • seq2seq에서는 Attention을 이용하기 때문에 RNN을 사용한다면, Transformer는 Self-Attention을 사용하기 때문에 RNN을 사용하지 않는다.

 

MLM(Masked Language Model)

  • MLM : 문장 속 일부 단어를 가리고 예측하는 방법 → 문장 이해에 강점
  • MLM 훈련 과정 :
    1. 훈련 텍스트 시퀀스에서 일부 토큰을 임의로 선택하여 마스킹함. 보통 15%의 토큰을 마스킹
    2. 마스킹을 할 토큰의 80%는 <mask>라는 특수 토큰이 들어감. 이 <mask> 토큰은 모델이 해당 위치에 있는 단어를 추론할 때 사용됨. 10%는 랜덤 토큰이 들어가고, 나머지 10%는 그대로 둡니다.
    3. 마스킹된 문장을 모델에 입력하고, 마스킹된 위치에 있는 단어를 추론하도록 함.
    4. 추론한 단어와 정답 단어 간의 오차를 계산하여 모델을 학습
  • 대표적인 예시는 BERT

 

CLM(Causal Language Model)

  • CLM : 이전 단어들을 보고 다음 단어를 예측 → 문장 생성에 강점
  • 이전 토큰들이 주어졌을 때 다음에 나올 토큰 중 가장 높은 확률을 선택하기 때문에 CLM으로 생성한 텍스트는 자연스럽다는 장점이 있습니다.
  • 대표적인 예시는 GPT

 

openai api를 활용한 간단 실습

  • 먼저 디렉토리를 만들고 github에 올린다. ( 추후에 추가해나갈 예정)

  • load_dotenv() : .env 파일에 저장된 환경 변수를 불러와 시스템 환경 변수로 설정함.
  • st.chat_input() : 입력창 생성
  • completion.choices[0].message.content : GPT 모델이 생성한 첫번째 응답을 가져옴.

  • 구현 결과

 

 

3. 느낀점

🧐Facts (내가 한 일) 

LSTM, attention, seq2seq, Transformer 등 여러가지 NLP 기술을 배웠고, 다음주 LLM 강의를 위한 맛보기로 openai에서 api를 가져와 실습도 해보았다. 

 

🎶Feelings ( 나의 감정적인 반응, 느낌 ) 

강사님이 이번주가 제일 어려운 내용이라고 언급하셨는데 진짜로 제일 어려운것 같다. 이론부분도 이해하기 어려운데 코드는 더더욱 이해가 가지 않았다. 그래서 어쩔수 없이 코드는 생략하고 이론을 이해하는데 집중 했던 것 같다.

 

🎓Findings ( 배운 것 ) 

NLP에서 쓰이는 기술들이 이런것들이 있고, 복잡하게 짜여있구나를 깨달았다. 그리고 openai의 api를 가져와서 실습했을 때는 복잡한 코드덩어리만 보다가 내가 직접 챗봇을 사용해보니 훨씬 재밌었다. 

 

🏢Future ( 미래 ) 

다음 주는 LLM을 배울 예정이다. 이번주에 배웠던 내용보다는 당연히 쉬울 것이고, 사실상 6개월짜리 교육의 메인 dish라 할수 있는 내용이라 멍때리면서 들었던 이번주보다는 더 집중해서 듣을 예정이다!