Haskell 기반 적응형 프로그래밍 DSL
초록
본 논문은 Haskell에 내장된 도메인 특화 언어(DSL)를 설계·구현하여, 피드백에 따라 스스로 값을 조정하는 ‘적응값(adaptive)’을 프로그래머가 손쉽게 정의하고 조합할 수 있게 한다. 타입 클래스와 타입 함수 활용을 통해 적응값의 표현·피드백·값 추출을 추상화하고, 선형 회귀와 멀티암드 밴딧 등 강화학습 기법을 DSL 수준에서 구현한다. 또한 적응값의 수렴·최적성을 이론적으로 보장하고, 실험을 통해 실용성을 검증한다.
상세 분석
이 논문은 Haskell의 강력한 타입 시스템을 활용해 적응형 프로그래밍(ABP)을 지원하는 DSL을 설계한다는 점에서 의미가 크다. 핵심은 class Adaptive a where 라는 타입 클래스이며, 연관 타입 Value a와 Feedback a를 통해 각각 적응값이 현재 제공하는 구체적 값과 외부 피드백의 형식을 지정한다. value :: a -> Value a는 현재 상태를 추출하고, adapt :: Feedback a -> a -> a는 피드백을 받아 새로운 적응값을 생성한다. 이러한 설계는 적응값을 단순히 변수처럼 다루면서도, 내부에 학습률, 통계, 히스토리 등 복잡한 메타 정보를 포함할 수 있게 한다.
구현 예제로는 선형 회귀 모델을 Line 타입으로 정의하고, 각 데이터 포인트를 피드백으로 받아 기울기와 절편을 온라인 방식으로 업데이트한다. 여기서 eta(학습률)와 value = id는 매우 직관적인 형태로 DSL 사용자가 직접 조정 가능하도록 노출된다. 또 다른 예인 멀티암드 밴딧은 Bandit a 타입으로 구현되며, 각 팔(전략)의 누적 보상과 시도 횟수를 PlayMap a에 저장한다. adapt는 새로운 보상을 해당 팔에 누적하고, value는 UCB(Upper Confidence Bound) 공식을 적용해 탐색·활용 트레이드오프를 자동으로 수행한다. 이때 zeroPulls와 sortDesc 같은 보조 함수는 DSL 내부에서 재사용 가능한 패턴으로 제공된다.
특히 파생 인스턴스(derived instances)를 이용해 복합 적응값을 구성한다는 점이 눈에 띈다. 예를 들어 (a,b) 형태의 튜플에 대해 Adaptive a와 Adaptive b가 존재하면, 튜플 전체도 자동으로 Adaptive가 된다. 이는 두 개의 독립적인 적응 전략을 병렬로 학습시키거나, 하나의 적응값을 다른 적응값에 매핑하는 고차원 구조를 손쉽게 만들 수 있음을 의미한다. 또한 함수형 적응값(예: a -> b)을 정의하면, 입력값에 따라 동적으로 적응하는 컨텍스트 적응값을 구현할 수 있다.
논문은 수렴성에 대한 형식적 증명을 제공한다. 특정 클래스의 적응값—예를 들어, 보상이
댓글 및 학술 토론
Loading comments...
의견 남기기