GPS의 불확실성은 일반적으로 개방된 하늘 아래 장시간 측위 등 특정 조건에서만 원형으로 근사할 수 있음, 사실 전체적인 오차 모델은 훨씬 복잡하며 다양한 방식의 오차 측정이 존재함, 이 점은 위치를 점 하나로 취급하기 어렵게 만드는 여러 상황에서 중요해짐, 예를 들어 자율주행차의 경우, 위치 추정 불확실성이 비원형적인 다중 경로 현상에 의해 지배되는 사례를 자주 만나게 됨, 이런 난관을 깊이 고민하다 보면 결국 파티클 필터 같은 기법을 다시 발명하는 지점에 도달하게 됨
차량용 GPS는 보통 여러 센서와 추가 가정으로 보완함, 특히 속도계, 나침반, 그리고 차량이 지도 위의 도로 중 어느 하나에 있을 것이라는 지식 등이 중요하게 작용함, 또한 마지막 전원 종료~재시작 사이에 위치 변화가 없을 것이란 가정을 통해 빠른 측위가 가능함
라이다(Lidar) 점들은 사실 단순한 점이 아니라, 가장 가능성 높은 위치를 중심으로 하는 타원체 형태로 존재함
University of Cambridge에서 Uncertain<T>(James Bornholt)와 관련 연구에 영감을 받아 프로세서 마이크로아키텍처를 설계함, 파라메트릭 분포(Gaussian, Rayleigh 등)뿐 아니라 임의의 샘플 집합을 레지스터/메모리에 로드해 프로그램 값이 비파라메트릭 분포로 산술 연산을 따라 전파되도록 설계함, 이 기술을 기반으로 Signaloid라는 스핀오프 기업이 시장에 진출 중이며, 나도 이를 상태 추정(예: 파티클 필터)에 적용하는 연구를 진행 중임 논문 링크
프로그래밍에서 변수에 수학적인 변수의 ‘명세’가 담길 수 있다는 개념을 이해하면, 현대 AI의 근간이 되는 놀라운 가능성이 열림, y = m * x + b라는 익숙한 수식을 생각하면, 이들이 모두 리터럴일 때는 단순 렌더 함수에 불과하지만, 만약 변수들이 도출된 연산 경로의 전체 구조를 담고 있다면, 연산 방향에 따라 값을 예측해 렌더링(포워드 패스)하거나, 자동으로 그래디언트/미분을 구해 신경망 학습까지 연결시킬 수 있음, 이러한 산출 결과를 수학적으로 샘플링하면 모델을 형성하는 가중치 획득이 가능함, 딥러닝의 각 레이어는 이렇게 설계되어 있으며, PyTorch 같은 시스템은 연산의 조합만 명시해도 최적의 코드로 컴파일할 수 있음, 즉 Uncertain<T>는 시작점에 불과하며, 모든 숫자 변수가 언제든 후보 값의 메타데이터로 정의되고, 이 메타데이터를 변수값 더하기만큼 손쉽게 조작할 수 있다고 상상해보면 매우 흥미로운 실험이 됨
이거 정말 흥미롭게 들림, 머신러닝이나 수학 지식이 많지 않은 나 같은 사람도 쉽게 이해할 수 있도록 설명해줄 수 있는지 궁금함
PL(프로그래밍 언어) 중에서 이런 개념을 언어 수준에서 지원하는 사례가 실제로 존재하는지 궁금함
이 댓글이 변수, 함수, 선형 시스템을 한데 섞어 얘기하는 것 같은데, 굳이 이렇게 합칠 필요는 없는 것 같음
여러 변수 간의 공분산도 이 방식으로 처리할 수 있는지가 궁금함, 예를 들어 측정 대상 객체의 위치 자체도 오차가 있을 수 있고 내 위치 오차와 이 둘이 상관관계를 가질 수도 있음(GPS가 같은 시점에 측정됐다면 더더욱), 타입 시스템에 단변량 모델만 있다면 쓸모는 있겠지만, 공분산까지 다룬다면 훨씬 강력하고 정확한 사용이 가능할 것이라 생각함
샘플링 기반 접근법을 쓰면 공분산 모델링이 자동으로 포함됨, 특정 평가 과정에서 여러 번 쓰이는 리프 값을 한 번만 샘플링 하면 되는데, 실제로 해당 구현이 그렇다는 걸 아래 코드에서 확인할 수 있음 Uncertain.swift 코드
프로그램이 실제 사용 중에 공분산을 ‘학습’할 수 있을지 오래전부터 궁금했음, 변수들을 독립적으로 모델링하면 계속해서 실제와 어긋나게 될 것 같음, 그리고 규모가 큰 프로그램에서는 모든 변수 쌍의 상관관계를 수동으로 고려하는 게 사실상 불가능함, 어쩌면 자동으로 학습하는 방식을 고안해야 할 것 같음
만약 양자역학을 제대로 모델링하려면 서로 얽혀 있는 변수 집합마다 복소수 형태의 파동함수를 연관시켜야 함
기계공학 도면 등에서 가공 작업자와 소통할 때 ‘공차’라는 개념을 사용함, 예: 10cm +8mm/-3mm 식으로 허용 범위를 위아래로 명확히 표시함, GPS 기반 “거의 도착했나요?” 같은 질문 역시, 오차의 방향성을 이해하고 불확실성의 ‘방향’에 따라 더 나은/나쁜 경우를 구분하는 게 중요할 것으로 기대함
이 표기 방식이 아쉬운 점은, 어떤 경우에는 “절대로 최대/최소 범위를 넘기지 않는다”는 의미이고, 어떤 경우에는 “10% 확률로만 범위를 넘긴다”는 뜻으로 해석될 수 있다는 점임
일의 계획 수립 등에서 자주 쓰이는 세 점 방식(낙관적, 현실적, 비관적) 산정도 비슷함, 매우 단순한 확률분포라도, 불확실성이 개입된 모든 분야에선 확률분포 기반의 관점이 훨씬 명확함을 제공함
이 개념은 과거에 여러 차례 ‘간격 산술(interval arithmetic)’이란 이름으로 구현되었음, Boost와 flint 등에서도 지원함 Boost Intervalflint(arb), 이렇게 반복적으로 재발견됐음에도 불구하고 왜 본격적으로 주류가 되지 않는지 궁금함, 혹시 실제 현장에서 써보고 별로라서 포기한 사람 있다면 얘기를 들어보고 싶음
본문에서는 Uncertain<T>가 GPS 불확실성에 Rayleigh 분포를 사용한다고 설명함, Rayleigh 분포는 균등분포가 아니라 실세계의 오차 분포를 더 잘 모델링함, 예를 들어 Boost 라이브러리에서 (-2,2)*(-2,2)를 계산하면 (-4,4)로 나오는데 실제 확률적으로는 극단값 동시 발생 가능성이 훨씬 낮으므로 대략 (-2.35,2.35)정도가 더 현실적임
물리학에서는 오차 전파(error propagation)를 초반에 배우게 됨, 오차가 가우시안 분포라고 가정하면 아주 우아하게 계산되지만, 실제로는 측정치의 대부분이 가우시안 분포를 따르지 않고, 비확률적(시스템적) 오차가 문제가 되며, 이를 제대로 다루기는 어렵기 때문에 자동 오차 전파는 거의 쓸모가 없는 경우가 많음, 대부분의 경우 수동 분석이 필요함
이 글이 왜 주목받는지 잘 모르겠음, 이 프로젝트는 간격 산술만이 아니라 다양한 불확실성 분포를 지원함
단순한 Boolean 등의 타입은 간단하게 추론이 가능해서 제약도 명확함, 반면 물리적 불확실성은 복잡해서 도메인마다 모델이 달라야 하고, 한 번 복잡한 불확실성을 다루기로 한 이상, 그냥 이쁘게 패키징된 라이브러리보다 해당 목적에 특화된 전문 모델을 쓰는 게 더 바람직함
간격 산술은 연산 속도가 단순 수치 연산보다 상수 배 느릴 뿐 큰 차이는 없고, 모든 연산에 대해 고유의 가장 정밀한 간격 결과가 존재함, 그러나 정밀도가 항상 보장되는 것은 아님, 본문과 같이 샘플링하는 연산 그래프는 느리지만 대신 실제 오차 모델에 더 정확하게 접근할 수 있음, 정밀도를 빼앗기는 추상 도메인이 없어도 되는 장점이 있음
내가 만들고 싶던 데이터 타입은 어떤 값이 주어진 확률분포(혹은 확률 밀도 함수) 내에서 얼마만큼 알려져 있는지를 표현하는 것임, 그리고 각각의 변환 과정에도 그만큼의 불확실성이 추가됨, 관측이 늘어날수록(혹은 조건부 분류가 달라질수록) 이 확률분포의 집합이 계속 정제되는 흐름을 상상함, 궁극적으로 이런 분포 기반의 무작위 결과 케이스들을 시뮬레이션해보는 게 목표였음
이 개념은 오래된 Functional Pearl “Probability Functional Programming”과도 밀접한 관련이 있음 PDF 링크, 정말 멋짐, 나는 Haskell 입문 수업 첫 시간에 Monty Hall 문제를 확률 모나드로 시연하는 걸로 시작함, 두 전략의 승리 확률을 정수 분수로 활짝 계산해 보여줌
Hacker News 의견