시뮬레이션으로 데이터를 만든다
없는 것을 계산으로 만들기
앞 편의 두 번째 접근을 자세히 본다. 실제 사례가 없으니 계산으로 만들어내는 것.
발상은 이렇다. 도로의 구조와 재료는 알려져 있다. 차량이 지나갈 때 어떤 힘이 작용하는지도 안다. 그러면 공동이 있을 때 도로가 어떻게 반응하는지 계산할 수 있다.
그 계산 결과가 학습 데이터가 된다. 공동의 크기와 깊이와 위치를 바꿔가며 수천 번 계산하면, 수천 개의 (조건, 응답) 짝이 생긴다.
이런 방식을 물리 기반 데이터 생성이라 부른다. 실제 사례를 기다리지 않고 시작할 수 있다는 것이 핵심 이점이다.
무엇을 계산하나
계산 모델을 세우려면 몇 개의 층을 쌓아야 한다.
① 지반과 포장. 4편에서 본 층 구조를 모델로 만든다. 표층, 기층, 노상. 각 층의 두께와 강성을 넣는다. 그리고 어느 위치에 얼마 크기의 빈 공간이 있다고 설정한다.
② 하중. 바퀴가 지나가며 누르는 힘. 차량 무게와 속도에 따라 달라진다.
③ 응답 계산. 그 하중에 대해 도로가 얼마나 처지고 어떻게 되튀는지 계산한다. 이 부분이 유한요소해석의 영역이다.
④ 차량을 통과시킨다. 도로의 응답이 타이어와 서스펜션을 거쳐 차체로, 폰으로 전달되는 과정. 17편의 시스템 관점이 여기서 쓰인다.
⑤ 폰이 기록하는 신호로 변환. 표본율, 잡음, 거치 상태를 반영한다.
다섯 층을 통과시키면 “이런 공동이 있을 때 폰이 기록할 신호”가 나온다.
이 방법이 주는 것
① 정답이 확실하다. 우리가 공동을 설정했으므로, 그 신호에 어떤 공동이 대응하는지 정확히 안다. 실제 데이터로는 절대 얻을 수 없는 것이다.
② 조건을 마음대로 바꿀 수 있다. 공동 크기를 조금씩 키워가며 “언제부터 신호에 나타나는지” 볼 수 있다. 탐지 한계를 미리 알 수 있다.
이게 실용적으로 아주 중요하다. 만약 계산 결과가 “지름 2미터 이상의 공동만 신호에 나타난다”고 하면, 우리 방법의 한계가 정해진다. 그보다 작은 것은 못 잡는다는 것을 미리 아는 것이다.
③ 무엇을 봐야 하는지 힌트를 준다. 3부에서 남긴 문제 — 어떤 특징을 봐야 하는가 — 에 대해 시뮬레이션이 후보를 제시한다. 16편에서 이야기한 세 후보(대역 크기, 봉우리 위치, 뾰족함) 중 어느 것이 공동에 민감한지 계산으로 비교할 수 있다.
④ 극단 조건을 만들 수 있다. 실제로는 드물거나 위험한 상황도 계산으로는 자유롭게 만든다.
그런데 이 방법의 함정
여기가 이 편의 핵심이다. 시뮬레이션 데이터에는 근본적인 위험이 있다.
시뮬레이션은 우리가 모델에 넣은 것만 재현한다.
넣지 않은 요인은 데이터에 나타나지 않는다. 그러면 그 요인이 실제로 중요했을 때, 모델은 그것을 전혀 모르는 상태로 현실에 나간다.
우리 모델에서 빠질 가능성이 높은 것들을 세어보자.
- 지반이 층마다 균일하다고 가정 — 실제는 불균일하다
- 재료가 선형 탄성이라고 가정 — 실제 아스팔트는 온도와 하중에 따라 성질이 바뀐다
- 공동이 단순한 형태라고 가정 — 실제는 불규칙하다
- 지하수와 매설물의 영향 미포함
- 주변 차량과 도로 진동의 배경 미포함
- 노면 자체의 거칠기 분포 단순화
이 목록은 계속 늘어난다. 그리고 실제 도로는 우리 모델보다 항상 복잡하다.
결과: 시뮬레이션만 잘 맞히는 모델
이 격차가 만드는 구체적인 실패가 있다.
시뮬레이션 데이터로 학습한 모델은 그 데이터의 특징을 아주 잘 잡아낸다. 정확도가 높게 나온다. 그런데 그 특징 중 일부는 실제 도로에 없는 것이다. 모델이 우리 계산의 습관을 배운 것이다.
그리고 실제 데이터에 넣으면 성능이 뚝 떨어진다.
더 나쁜 것은 이 실패를 알아채기 어렵다는 점이다. 시뮬레이션 데이터로 시험하면 잘 나오니까. 실제 데이터로 시험할 방법이 없으면(우리가 그렇다) 문제를 발견하지 못한다.
어떻게 완화하나
이 문제에 대한 대응 방법들이 있다.
① 다양성을 억지로 넣는다. 모델 조건을 하나로 고정하지 않고, 지반 강성·층 두께·재료 성질을 넓은 범위에서 무작위로 흔들어가며 시뮬레이션한다. 그러면 모델이 특정 조건에 특화되지 않는다.
이 접근은 “현실을 정확히 맞추려 하지 말고, 현실이 들어갈 만큼 넓은 범위를 덮으라”는 것이다. 로봇 학습 분야에서 효과가 확인된 방법이다.
② 실제 데이터를 섞는다. 시뮬레이션만 쓰지 않는다. 실제 주행에서 얻은 신호를 배경으로 깔고, 그 위에 시뮬레이션으로 만든 공동 응답을 더한다. 이러면 실제 잡음과 배경 조건이 살아 있다.
③ 실제 데이터로 검증한다. 시뮬레이션으로 학습하고, 사람 신고가 있는 실제 데이터로 성능을 확인한다. 학습과 검증의 출처를 다르게 하는 것이다.
④ 결론을 시뮬레이션에만 의존하지 않는다. 22편의 세 접근을 함께 쓴다. 시뮬레이션이 예측한 패턴이 실제 데이터에서도 사람 신고와 겹치는지 확인한다.
두 프로젝트가 겹치는 지점
여기서 짚어둘 것이 있다. 같은 팀이 진행하는 다른 프로젝트가 수치해석 플랫폼이다. 유한요소해석으로 물리 문제를 푸는 도구.
이 편에서 필요한 계산이 정확히 그런 종류의 계산이다. 도로 구조에 하중을 주고 응답을 계산하는 일.
즉 한쪽 프로젝트의 도구가 다른 쪽 프로젝트의 데이터 생성에 쓰일 수 있다. 두 사업이 별개로 보이지만 기술적으로는 연결되어 있다.
다만 규모가 다르다. 폰에서 몇 초에 도는 계산과, 학습 데이터를 수천 건 만드는 계산은 다른 환경이 필요하다. 후자는 서버에서 오래 돌리는 작업이다.
정직한 위치
이 편을 마무리하며 현재 상태를 분명히 해두자.
시뮬레이션 기반 데이터 생성은 계획이다. 아직 하지 않았다. 필요한 것들이 있다.
- 도로 구조 모델을 세우고 실제 값으로 채우기
- 차량 전달 모델 만들기
- 계산 규모를 감당할 환경
- 그리고 결과가 그럴듯한지 확인할 기준
특히 마지막이 어렵다. 시뮬레이션이 맞는지 확인하려면 실제 데이터가 필요하고, 실제 데이터가 없어서 시뮬레이션을 하는 것이니 순환이 생긴다.
그래서 현실적인 순서는 이렇다. 1단계로 실제 데이터를 먼저 모으고, 그 데이터로 시뮬레이션을 교정하고, 교정된 시뮬레이션으로 부족한 사례를 채운다.
시뮬레이션이 출발점이 아니라 실제 데이터를 보강하는 도구가 되는 것이다. 순서를 뒤집으면 검증 없는 모델이 만들어진다.
다음 편 예고 — physical AI란 무엇인가. 요즘 자주 쓰이는 이 말이 실제로 무엇을 뜻하는지, 우리 문제에서 어떤 의미인지 정리한다.
「우리 동네가 먼저 안다」는 5부 30편으로 이어집니다. 지금 읽은 글은 4부 physical AI의 2번째(전체 제23회)입니다.