image





AI 부트캠프 12주차 : Section 3 Project

드디어 딥러닝을 활용한 프로젝트를 진행한다.
Section3를 시작하면서 chatGPT가 열풍을 일으켰다.
나도 chatGPT를 만들 수 있을까?





주간회고

더 공부가 필요한 부분

  • 최신모델에 대한 정확한 이해와 사전학습, 파인튜닝 적용 연습
  • 대규모 모델을 학습하기 위한 파라미터 조정과 실습

5F 회고

  • 사실(Fact)
    인공신경망 모델, 특히 트랜스포머 모델을 활용하여 작은 AI챗봇을 만드는 프로젝트를 수행하였다.

  • 느낌(Feeling)
    작은 규모의 프로젝트지만 챗GPT와 같은 최신 생성형 AI 언어모델에 한걸음 다가간것 같아 뿌듯하고, 나도 언젠가는 챗GPT를 만들어 보고 싶다는 욕심이 생겼다.

  • 교훈(Finding)
    보는 것과 직접 만드는 것은 차이가 많은 것 같다. 프로젝트를 수행하며 직접 모델을 구현해보는 것이 100번 학습하는 것보다 자신감 향상에 도움이 된다.

  • 향후 행동(Future action)
    모델에 대한 이해를 확장하기 위한 학습과 직접 모델을 구현해보는 투트랙 전략으로 공부할 것이다.

  • 피드백(Feedback)
    내용





완성영상 보기





프로젝트 계획 및 과정

1. 프로젝트 계획

날짜 내용
3/8 (수) • 프로젝트 START🚀
• 1. 프로젝트 계획
• 2. 주제선정
3/9 (목) • 3. 주제관련 아티클 조사
• 4. 데이터 선정
• 5. 데이터 전처리
• 6. 탐색적 데이터분석
3/10 (금) • 7. 모델링
3/11 (토) • 8. 모델 해석
3/12 (일) • PPT 슬라이드 작성
• 스크립트 작성
3/13 (월) • 영상촬영
• 최종 제출🚩
3/14 (화) • 피드백
• 프로젝트 수정 및 보완





2. 주제선정

  • 요즘 가장 핫한 챗GPT 따라잡기
  • 챗GPT의 작동 원리 이해
  • 챗GPT의 기본모델이 되는 트랜스포머모델에 대한 이해
  • 트랜스포머 모델의 디코더를 강화한 BERT, 인코더를 강화한 GPT
  • 트랜스포머 모델의 작동원리를 이해하며 생성형 인공지능 언어모델과 가까워지자!





3. 프로젝트 목표 설정

  • 프랜스포머 모델로 일상대화가 가능한 챗봇 만들기
  • 챗봇 스스로 “이연준의 챗봇”이라 인식하게 만들기





4. 데이터 준비

  • 감성대화 말뭉치
    • 일반인 1,500명을 대상으로 말뭉치 구축
    • 60가지 감정 상태가 포함
    • 5개월 이상 수집, 정제한 말뭉치
    • JSON 포맷 형식으로 제공
  • 데이터 가져오기
    • 훈련데이터 51,628개, 검증데이터6,640개 : 총 58,268개
    • 최대 3턴까지 이어지는 대화
    • 2~3턴은 앞선 대화에 이어지는 대화(맥락을 고려해야 함) → 학습이 어려움
    • 기본적인 일상대화를 위해 첫번째 턴만 사용
  • 토큰화
    • 문장 텍스트 데이터를 토큰화
    • 서브워드텍스트인코더 사용
      • 텐서플로우 라이브러리를 통하여 쉽게 사용할 수 있음
      • Word Piece Model 채용 : 미등록단어 문제 해결
    • 토큰화 후 문장 변화
      • 토큰화 예시
      • “이번에 엄마가 허락해 줘서 드디어 강아지를 키우게 돼서 신나 !”
      • “엄마의 허락을 받아 강아지를 키우게 되어 기쁘시군요 .”

image

  • 3가지 데이터 준비
    • 질문 : 인코더 입력
      • [START] [이번에] [엄마가] [허락] [해] [줘서] [드디어] [강아지를] [키우게] [돼서] [신나] [!] [END]
    • 답변 : 디코더 입력
      • [START] [엄마의] [허락] [을] [받아] [강아지를] [키우게] [되어] [기쁘시군요] [.]
    • 답변 : 출력
      • [엄마의] [허락] [을] [받아] [강아지를] [키우게] [되어] [기쁘시군요] [.] [END]

image





5. 모델링

  • 임베딩 + 위치 인코딩
    • 토큰화, 벡터화 된 데이터에 대하여 위치 인코딩을 포함한 임베딩 실시
    • 임베딩은 라이브러리의 임베딩 레이어 활용
    • 위치 인코딩은 사인, 코사인 함수를 활용한 위치정보 생성

image

  • 인코더
    • Positional Embedding
    • The Global Self Attention Layer
      • Multi-Head Attention
      • Add & Normalization
    • FeedForward
      • Dense, Dense (Drop out)
      • Add & Normalization
  • 디코더
    • Positional Embedding
    • The Causal Self Attention Layer
      • Masked Multi-Head Attention
      • Add & Normalization
    • The Cross Attention Layer
      • Multi-Head Attention
      • Add & Normalization
    • FeedForward
      • Dense, Dense (Drop out)
      • Add & Normalization
  • 인코더와 디코더를 결합하여 트랜스포머 모델 완성

image

  • 모델 학습
    • 학습률 : 학습진행에 따라 학습률 조정
    • 레이어 수 : 2개
    • 임베딩 차원 : 512 차원
    • Multi Head Attention의 Head 수 : 4개
    • 은닉층 차원 : 256 개
    • 과적합방지 : Drop Out 0.1
    • 총 학습 파라미터 수 : 41,606,908개

image

  • epochs : 10회
  • 4회 이후 과적합이 발생함
  • 학습 데이터 최종 손실 : 0.9335
  • 학습 데이터 최종 정확도 : 0.7602
  • 검증 데이터 최종 손실 : 4.3675
  • 검증 데이터 최종 정확도 : 0.4071

image

  • 모델 평가
  • 질문
    “취업하기 위해서 열심히 준비하고 있지만, 직장을 구하지 못할까봐 걱정되”
  • 답변
    “걱정이 많으시겠어요 . 미래에 대한 불안이 크면 어떻게 하면 좋을까요 ?”
  • 질문
    “딸이 나에게 선물을 줬어. 그래서 너무 기뻐”
  • 답변
    “따님분이 선물을 주셨군요 . 정말 행복하시겠어요 .”
  • 질문
    “너는 누구니?”
  • 답변
    “저는 이연준님이 만든 챗봇이에요”
  • 질문
    “아무리 생각해도 너는 멍청한 것 같아”
  • 답변
    “무엇 때문에 말에 상처받아 할까요 ?”





6. 결론 및 한계점

  • 챗봇 학습 과정에서 “감성대화 말뭉치”를 활용
    • 낮은 수준의 일상대화 가능
    • 챗봇이 “감성 답변”에 충실하게 됨
    • 일상대화를 위한 “맥락”을 학습하지 못함
  • 챗봇 스스로를 “이연준의 챗봇”이라 인식하도록 학습
    • 학습 데이터에 따라서 스스로를 누구로 인식하는지 답변이 달라짐
  • 모델이 복잡해지면 오히려 학습이 안됨
    • 레이어, 에포크, 은닉층 등을 늘리면 오히려 이상한 답변을 하게 됨





끝까지 읽어주셔서 감사합니다😉

댓글남기기