유전알고리즘은 다윈의 적자생존 이론을 기본으로, 1975년 존 홀랜드가 고안한 알고리즘입니다. 실제 생물이 진화하는 과정과 같이 교배, 돌연변이, 세대, 인구 등의 개념이 활용되어 전역 최적화 값을 찾을 수 있도록 하는 알고리즘입니다. 저는 해당 알고리즘을 그림에 적용해보았습니다.
만약, 컴퓨터에게 무작위적으로 이미지를 생성하라고 했을 때, 내가 원하는 이미지를 얻기는 수백, 수천, 수만 번을 반복해도 얻기 힘들 것입니다. 하지만 유전 알고리즘을 활용하면, 어느 정도 근사한 이미지를 얻을 수 도 있고 그 과정이 꽤나 흥미롭고 아름답습니다.
by Picasso | by Genetic Algorithm |
---|---|
유전알고리즘을 활용하여 100,000세대까지 이미지를 진화시킨 결과, 피카소의 그림과 유사한 그림이 나타나기 시작했습니다. 단순히 랜덤한 이미지를 100,000개를 생성했다면 이와 같은 이미지는 절대 나타나지 못했을 것입니다.
유전알고리즘에는 염색체, 인구, 교배 등 용어로 인해 복잡할 수 있으나 사실 이해하면 생각보다 단순합니다. 스토리로 풀어보자면 아래와 같지 않을까 생각합니다.
인구
를 만들고 그들에게 랜덤한 유전자
를 주었고유전자
를 가진 45쌍의 커플은 일찍 죽게 되었고, 우등한
유전자인 15쌍만이 교배
를 통해 자식
을 낳을 수 있었으나자식
들 중에서는 부모를 쏙 빼닮은 유전자
를 가진 개체들이 대부분이나 미약한 확률로 부모의 유전자
와는 생판 다른 돌연변이
들이 등장하였다.자식
들 중 또 상대적으로 우월한 유전자
를 지닌 개체들이 살아 남을 수 있게 되는데 여기에는 우연히 만들어진 돌연변이의 유전자
가 더 환경에 적합하여 포함되게 된다.결국 유전알고리즘을 구현하기 위해 필요한 것은 아래와 같습니다
유전자(Chrosome)
: 하나의 개체의 값을 표현하기 위한 데이터인구(Population)
: 유전자들의 집합우등의 기준(Fitness)
: 유전자가 주어진 환경에서 얼만큼 우등한지 계산할 수 있는 산식생존(Selection)
: Fitness값을 기반으로 생존할 개체를 선택교배(Crossoever)
: 자식을 생성하기 위한 유전자간의 교배 규칙돌연변이(Mutation)
: 자식 중 일부를 임의의 값으로 만드는 규칙OpenCV를 활용하여 유전 알고리즘을 기반으로 주어진 이미지와 얼마나 비슷하게 재현해내는지를 구현해보았습니다. 구현을 하는데 사용한 조건은 아래와 같습니다
유전자
: 0~100개의 랜덤한 숫자의 랜덤한 크기, 랜덤한 색상을 가진 원형, 폴리곤 모형인구
: 100개의 유전자 집합우등의 기준
: 원형 이미지와 유전자간의 차의 L2 Norm 값의 평균값생존
: Fitness가 높은 상위 2개 선택교배
: 각 이미지 2개를 랜덤한 가중치로 합성하여 100개의 자식을 생성돌연변이
: 10%의 자식들에게 랜덤한 1~10개의 랜덤한 원, 폴리곤 이미지를 더 생성함결과물을 몇가지 더 공유하면 아래와 같습니다.
Original | by Genetic Algorithm |
---|---|