나의 AI와 ML에서의 25년 모험

1 day ago 2

  • AI/ML쪽에서 일할 의도는 전혀 없었음
  • 그저 업무에 필요한 도구를 사용하다 보니 자연스럽게 AI나 ML을 사용하게 됐고, 결국에는 이 분야에 발을 들이게 됨 (CMU 부교수)
  • 새해를 맞아 2000년으로 돌아가 참여했던 주요 AI/ML 프로젝트를 회고해 봄

If문과 랜덤 숫자: 초기 프로그래밍 경험

  • 비디오 게임으로 시작:
    • 타마고치에서 영감을 받아 VB6로 가상 펫 게임 개발 시도.
    • 타이머와 조건문을 활용해 간단한 논리 구현:
      • 10초마다 배고픔 수치 증가.
      • 배고픔이 특정 수준을 넘으면 3초마다 건강 감소.
      • 건강이 0이 되면 펫이 쓰러짐.
    • 결과: 단조롭고 재미없는 게임.
  • 고등학교 시절 게임 개발:
    • 2D 우주 슈팅 게임 개발:
      • 플레이어가 적의 파도(waves)를 방어하며 파워업을 수집.
    • 적의 등장 패턴은 랜덤 숫자와 게임 플레이 통계(플레이 시간, 발사 횟수, HP 등)를 활용한 긴 if문으로 구현.
    • 결과:
      • 게임이 약간 동적이고 예측 불가능하게 느껴짐.
      • 그러나 흥미가 오래 지속되지 않아 플레이어들이 금방 그만둠.
  • AI 개념 탐구:
    • 2000년대 중반, Programming Game AI by Example 책을 구매해 게임에 AI를 구현하는 방법 학습.
    • 초기에는 활용하지 못했으나 이후 프로젝트에서 큰 도움이 됨.
  • 이 시기의 경험은 더 복잡하고 흥미로운 게임 메커니즘을 실험하는 데 기반이 되었음

상태 머신과 고차 함수: 대학 시절 게임 개발

  • 게임의 진화:
    • 대학 시절, 게임 개발 수준을 한 단계 높여 수백만 명이 플레이한 게임 제작.
    • 일부 게임은 수익 창출까지 성공.
    • 프로그래밍 실력이 성숙해지면서 책에서 배운 내용을 실전에 활용 가능.
  • 기술 적용:
    • 유한 상태 머신(Finite State Machine):
      • 적의 행동 패턴 구현에 활용.
    • 팩토리 패턴:
      • 오브젝트 생성 및 관리.
    • 고차 함수(Higher-order Functions):
      • 적과 무기의 동작을 조합 가능하게 설계.
      • 예시:
        • 무기는 좌우 25도 진폭으로 진동하며 좁은 원뿔 형태로 탄환을 발사.
        • 탄환은 근처 목표물에 약간 유도되고, 1% 확률로 리코셰(튕김) 발생.
  • 게임의 생동감:
    • 게임 상태와 플레이어 입력을 기반으로 동적(dynamism) 요소를 점진적으로 추가.
    • 무작위성과 조합성을 활용해 변화 추가.
    • 이러한 접근법은 적 행동뿐만 아니라 스프라이트, 파티클 이펙트, 사운드 효과, 탄환, 애니메이션 등 게임 전반에 레이어 방식으로 적용.
  • 결과:
    • 게임이 더 생동감 있고 재미있어짐.
    • 그러나 이는 AI가 아니라, 잘 설계된 if문과 함수 호출의 조합일 뿐이라는 깨달음.
  • 게임이 "살아있는" 듯한 느낌을 줄 수 있었으나, 이 단계에서는 여전히 수작업으로 설계된 논리와 함수의 활용임을 깨달음.

일차 논리, 지식 표현, 서포트 벡터 머신, 신경망: 대학원 초기 경험

  • 석사 과정 시작:
    • 졸업 후 마감 직전에 석사 과정에 등록.
    • 선택할 수 있는 수업이 제한적이었고, AI와 신경망 강의를 수강.
    • 원래 희망했던 컴파일러 강의 대신 선택한 강의들에 실망:
      • 실습이나 구현 없이 고차원적 이론 중심.
      • 정의를 두고 많은 논의가 이루어짐.
  • AI 강의:
    • Artificial Intelligence: A Modern Approach (Third Edition) 교재 사용.
    • 계획, 에이전트, 일차 논리, 지식 표현 등의 개념을 학습.
    • 문제를 사고하는 새로운 어휘를 배웠지만 실제 적용에는 어려움.
  • 신경망 강의:
    • 퍼셉트론, 서포트 벡터 머신(SVM), 피드포워드 네트워크, 홉필드 모델, 역전파(backpropagation) 등 이론 학습.
    • 실습에 대한 명확한 지침 부족:
      • "MATLAB 패키지를 찾아보라"는 교수의 답변에 좌절.
  • 저대역폭 화상 채팅 프로그램 개발:
    • OpenCV로 얼굴 감지 및 영역 추출:
      • 입꼬리 상태, 왼쪽 눈썹의 위치, 오른쪽 눈이 열려 있는지 등을 분류.
      • 수백 개의 라벨링된 얼굴 이미지를 데이터베이스에서 수집.
      • 분류된 이진 상태를 소켓을 통해 전송, OpenGL로 아바타 렌더링.
    • 결과:
      • 조명 변화에 민감하고, 파라미터 수정이 어려우며, 학습에 오랜 시간이 소요.
      • OpenCV 사용이 까다롭고 프로그램 수정이 번거로움.
  • 성과:
    • 여러 시행착오를 통해 많은 것을 배움.
    • 2013년 1월, 초기 데모 영상을 업로드하며 공유:
      • 데모 영상은 비록 아마추어적이지만 1000회 이상의 조회 수 기록.
  • 이 시기는 이론을 실제로 구현하고 문제를 해결하는 방법을 배우는 중요한 성장의 과정이었음

의사결정트리, 클러스터링, 추천 알고리즘: 박사 과정에서의 경험

  • 연구 목표:
    • 코드 편집기의 로그 데이터를 분석해 다음과 같은 문제 해결 시도:
      • 프로그래머가 코드에서 막히거나 길을 잃었는지 식별.
      • 프로그래머가 다음에 탐색할 파일 예측.
      • 관심 있는 코드를 정확히 추천.
  • 활용된 통계적 방법:
    • C4.5 알고리즘: 의사결정트리 생성.
    • K-평균(K-means) 및 DBSCAN: 이벤트 클러스터링.
    • Apriori 및 협업 필터링: 이벤트 간 연관성 탐색.
    • 결과:
      • 간단한 방법이지만 놀라울 정도로 강력한 성능을 보여줌.
      • 대부분의 경우, 복잡한 신경망보다 이러한 방법이 충분히 효과적임.
  • 성과:
    • 논문 발표, 여러 인턴십 경험, 개발자 도구 제작.
    • 박사 과정 졸업에 성공.
  • 관련 자료:
    1. 논문: 개발자가 정보를 찾는 방식에 대한 데이터 분석
      Foraging and Navigations, Fundamentally: Developers Predictions of Value and Cost (PDF))
    2. Microsoft 인턴십 보고서: 코드 리뷰 봇 제작 경험
      When users never use the features they asked for
  • 박사 과정 동안 통계적 기법을 활용해 실질적인 문제를 해결하며 학계와 실무에서 모두 의미 있는 성과를 달성

지능형 사용자 인터페이스: 교수로서의 연구 시작

  • 새로운 연구 방향 설정:
    • 2018년, 테뉴어 트랙 교수로서 **지능형 개발자 도구(Intelligent Developer Tools)**를 연구 주제로 선택.
    • 초기에는 개념이 모호했지만, 예측 모델을 사용해 프로그래머의 오해를 사전에 식별하고 수정하는 프로젝트로 시작.
  • 첫 번째 연구 제안서:
    • 프로젝트 목표:
      1. 초보 프로그래머가 프로그램 동작에 대해 가지는 오해를 식별하기 위해 프로그램 분석 기술 및 예측 모델 활용.
      2. 프로그래머를 방해하지 않으면서 오해를 수정하고 논리를 설명.
      3. 의도치 않은 프로그램 동작 변화를 포착하는 테스트 코드를 생성해 미래의 오해 방지.
    • 요약:
  • 두 번째 프로젝트:
    • 프로그래머의 정보 필요성을 예측하고 실시간으로 사용자 인터페이스를 생성하는 연구.
    • 예시:
      • Git 히스토리를 탐색하는 프로그래머에게 추천 커밋 세트를 시각화해 제공.
  • 연구 통합:
  • 성과와 한계:
    • 프로젝트는 보조금을 받으며 성공적으로 시작되었으나, 연구가 본격적으로 진행되기 전에 교수직에서 사임.
  • 이 시기는 지능형 사용자 인터페이스에 대한 연구를 구체화하고 큰 비전을 설계한 중요한 전환점이었음

프로그램 합성과 대규모 언어 모델(LLMs): Microsoft에서의 경험

마무리

  • 즐거운 25년이었음
  • 앞으로의 계획은 무엇? 계속 가르치고, 배우고, 만들어 볼 예정

Read Entire Article