TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 25 READS

주차 방법을 코딩하지 않고 진화시킨다면? 유전 알고리즘으로 자율주차 자동차 만들기

주차 방법을 코딩하지 않고 진화시킨다면? 유전 알고리즘으로 자율주차 자동차 만들기
SOURCE IMAGE · HACKER NEWS
주차 방법을 코딩하지 않고 진화시킨다면? 유전 알고리즘으로 자율주차 자동차 만들기

주차하는 법을 코드로 가르치지 않는다면?

자율주차 기능을 만든다고 생각해 볼게요. 보통은 이렇게 접근하잖아요. 센서로 주변 거리를 재고, 차가 어디쯤 있는지 판단하고, 핸들을 언제 얼마나 꺾을지 규칙을 하나하나 짜는 거죠. 그런데 규칙이 조금만 복잡해져도 if문이 끝없이 늘어나고, 예외 상황마다 코드를 고쳐야 해요.

개발자 Oleksii Trekhleb(자바스크립트 알고리즘 저장소로 유명한 분이에요)은 2021년에 전혀 다른 방법을 시도했어요. 주차하는 법을 아예 코딩하지 않고, 자동차가 스스로 진화해서 주차를 배우게 만든 거예요. 여기에 쓰인 게 바로 유전 알고리즘(Genetic Algorithm)이에요. 몇 년 된 글이지만 머신러닝의 기본 감각을 잡기에 이만한 예제가 드물어서 다시 소개해 볼게요.

유전 알고리즘, 이게 뭐냐면

이름 그대로 생물의 진화를 흉내 낸 최적화 방법이에요. 과정은 생각보다 단순해요.

1. 무작위 유전자를 가진 개체를 잔뜩 만들어요 (첫 세대).
2. 각 개체가 얼마나 잘하는지 점수를 매겨요. 이걸 적합도(fitness)라고 불러요.
3. 점수가 좋은 개체일수록 부모로 뽑힐 확률을 높여요.
4. 두 부모의 유전자를 섞어 자식을 만들어요 (교차, crossover).
5. 자식 유전자 일부를 아주 낮은 확률로 무작위로 뒤집어요 (돌연변이, mutation).
6. 이렇게 만든 새 세대로 2번부터 반복해요.

처음에는 차들이 제멋대로 움직여요. 벽에 박고, 제자리에서 빙빙 돌고요. 그런데 세대가 쌓이면 아주 조금이라도 주차 자리에 가까이 간 차의 유전자가 살아남으면서, 점점 그럴듯한 주차 실력을 가진 차가 나타나요. 누구도 주차 요령을 알려주지 않았는데 말이에요.

자동차의 뇌는 딱 두 개의 공식

이 프로젝트에서 흥미로운 건 자동차의 뇌가 정말 단순하다는 점이에요. 신경망처럼 층을 쌓은 게 아니라, 센서 값에 계수를 곱해 더하는 선형 공식 두 개가 전부예요.

그러니까 이 차의 유전자는 결국 이 공식들에 들어가는 계수 묶음이에요. 저자는 이 계수들을 부동소수점 숫자처럼 비트 단위로 표현해서 긴 0과 1의 문자열, 즉 게놈으로 만들었어요. 부동소수점을 직접 쪼개 부호, 지수, 가수 비트로 나누는 과정도 글에 친절하게 설명되어 있어서, 평소에 float가 메모리에 어떻게 저장되는지 헷갈렸던 분들께도 좋은 복습이 돼요.

적합도 함수는 차의 네 바퀴 위치와 주차 칸 모서리 사이의 거리로 계산해요. 거리가 짧을수록 좋은 개체인 거죠. 이렇게 점수 기준 하나만 잘 정의하면, 나머지는 진화가 알아서 해줘요.

브라우저에서 바로 돌려볼 수 있어요

구현은 TypeScript와 React, 3D 렌더링은 Three.js 기반, 충돌과 움직임은 물리 엔진으로 처리했어요. 브라우저에서 시뮬레이션을 직접 돌리면서 세대 수, 개체 수, 돌연변이 확률 같은 값을 바꿔볼 수 있고, 잘 학습된 게놈을 저장해 두었다가 불러올 수도 있어요. 수십 세대쯤 지나면 차들이 꽤 그럴싸하게 주차 칸으로 미끄러져 들어가는 모습을 볼 수 있어요.

업계 맥락: 요즘은 누가 이걸 쓰나요?

솔직히 말하면 실제 자율주행 업계는 유전 알고리즘으로 주차 로직을 만들지 않아요. 테슬라나 웨이모 같은 곳은 대규모 딥러닝, 모방 학습, 강화학습을 중심으로 움직이죠. 강화학습(RL)은 보상을 받으며 시행착오로 배운다는 점에서 유전 알고리즘과 목적이 비슷하지만, 경사하강법으로 신경망 가중치를 정교하게 업데이트한다는 점에서 훨씬 효율적이에요.

그럼에도 유전 알고리즘 같은 진화 전략(Evolution Strategies)은 여전히 쓰여요. 미분이 불가능한 문제, 예를 들어 회로 설계, 스케줄링, 게임 AI 파라미터 튜닝, 하이퍼파라미터 탐색 같은 곳에서요. 과거 OpenAI가 진화 전략이 강화학습의 대안이 될 수 있다는 연구를 발표한 적도 있고요. 요즘은 LLM이 코드를 생성하고 평가 점수로 걸러내며 더 나은 알고리즘을 찾는 방식도 연구되는데, 크게 보면 생성하고, 평가하고, 좋은 걸 남긴다는 진화적 발상과 닮아 있어요.

한국 개발자에게 주는 시사점

이 프로젝트의 진짜 가치는 교육용이라는 데 있어요. 머신러닝을 공부하려고 하면 보통 파이토치나 텐서플로부터 시작하는데, 그러면 라이브러리 사용법에 파묻혀서 학습이 무엇인지 체감하기 어렵거든요. 반면 이 예제는 행렬 연산도, GPU도 필요 없어요. 적합도 함수 하나, 교차와 돌연변이 함수 몇 개면 기계가 배운다는 게 무엇인지 눈으로 확인할 수 있어요.

프론트엔드 개발자라면 특히 추천해요. 익숙한 TypeScript와 React로 되어 있어서 코드를 읽기 쉽고, Three.js와 물리 엔진을 곁들인 시뮬레이션 구조도 함께 배울 수 있어요. 사이드 프로젝트로 적합도 함수를 바꿔보거나, 센서 개수를 늘려보거나, 선형 공식을 작은 신경망으로 바꿔보는 식으로 확장해 보면 좋은 포트폴리오 거리가 될 거예요.

마무리

정답을 코딩하는 대신, 좋은 답을 알아보는 기준만 코딩한다. 이게 이 프로젝트가 보여주는 머신러닝의 본질이에요.

여러분이라면 이 방식을 어떤 문제에 적용해 보고 싶으세요? 규칙으로 짜기엔 너무 복잡했던 실무 문제 중에, 적합도 함수만 잘 정의하면 진화로 풀 수 있을 것 같은 게 있었는지 궁금해요.


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://trekhleb.dev/blog/2021/self-parking-car-evolution/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...