- 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회 이상의 조회 수 기록.
- 이 시기는 이론을 실제로 구현하고 문제를 해결하는 방법을 배우는 중요한 성장의 과정이었음
의사결정트리, 클러스터링, 추천 알고리즘: 박사 과정에서의 경험
지능형 사용자 인터페이스: 교수로서의 연구 시작
-
새로운 연구 방향 설정:
- 2018년, 테뉴어 트랙 교수로서 **지능형 개발자 도구(Intelligent Developer Tools)**를 연구 주제로 선택.
- 초기에는 개념이 모호했지만, 예측 모델을 사용해 프로그래머의 오해를 사전에 식별하고 수정하는 프로젝트로 시작.
-
첫 번째 연구 제안서:
-
프로젝트 목표:
- 초보 프로그래머가 프로그램 동작에 대해 가지는 오해를 식별하기 위해 프로그램 분석 기술 및 예측 모델 활용.
- 프로그래머를 방해하지 않으면서 오해를 수정하고 논리를 설명.
- 의도치 않은 프로그램 동작 변화를 포착하는 테스트 코드를 생성해 미래의 오해 방지.
- 요약:
-
두 번째 프로젝트:
- 프로그래머의 정보 필요성을 예측하고 실시간으로 사용자 인터페이스를 생성하는 연구.
- 예시:
- Git 히스토리를 탐색하는 프로그래머에게 추천 커밋 세트를 시각화해 제공.
-
연구 통합:
- **"Inquisitive Programming Environments as Learning Environments for Novices and Experts"**라는 큰 비전을 제안.
- 관련 자료:
-
성과와 한계:
- 프로젝트는 보조금을 받으며 성공적으로 시작되었으나, 연구가 본격적으로 진행되기 전에 교수직에서 사임.
- 이 시기는 지능형 사용자 인터페이스에 대한 연구를 구체화하고 큰 비전을 설계한 중요한 전환점이었음
프로그램 합성과 대규모 언어 모델(LLMs): Microsoft에서의 경험
-
Microsoft 합류:
- 2022년 1월, Microsoft의 프로그램 합성 팀에 합류.
- 같은 해 ChatGPT 출시로 AI 기술이 모든 분야에 적용되기 시작, 최적의 시기에 AI 작업에 몰입.
-
AI 적용에 대한 신중한 접근:
- AI 팀 소속이었지만, 강력한 이유가 없는 경우 AI 사용에 반대하는 입장:
- 사용자 문제를 해결하려는 명확한 목표가 있는지 질문.
- 단순한 if 문으로 대체 가능한지 검토.
- 자연어 인터페이스가 적합한 선택인지 고민.
- 관련 의견 공유:
-
주요 프로젝트
-
-
LLM의 주의(attention) 가중치를 활용한 연구:
-
-
데이터 과학용 AI 튜터:
-
IntelliCode 사용자 경험 개선:
-
데이터 과학자를 위한 LLM 기반 도구:
-
학생들을 위한 LLM 기반 도구:
-
기업의 코파일럿(Copilot) 구축 연구:
-
현재 및 향후 활동
-
독립적인 AI 도구 개발:
- Microsoft 퇴사 후 개인 AI 프로젝트에 몰두.
- 주요 도구:
- AI와 LLM을 기반으로 한 다채로운 프로젝트를 통해 혁신적인 솔루션을 개발하며, 지금도 AI 도구 연구와 개발을 지속
마무리
- 즐거운 25년이었음
- 앞으로의 계획은 무엇? 계속 가르치고, 배우고, 만들어 볼 예정