KR20220129120A - 제네릭 빌딩 블록 창출을 위한 유전 프로그래밍 사용 - Google Patents

제네릭 빌딩 블록 창출을 위한 유전 프로그래밍 사용 Download PDF

Info

Publication number
KR20220129120A
KR20220129120A KR1020227022798A KR20227022798A KR20220129120A KR 20220129120 A KR20220129120 A KR 20220129120A KR 1020227022798 A KR1020227022798 A KR 1020227022798A KR 20227022798 A KR20227022798 A KR 20227022798A KR 20220129120 A KR20220129120 A KR 20220129120A
Authority
KR
South Korea
Prior art keywords
program
input
population
new
seed list
Prior art date
Application number
KR1020227022798A
Other languages
English (en)
Inventor
데이비드 제임스 란데타
Original Assignee
네츄럴 컴퓨테이션 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 네츄럴 컴퓨테이션 엘엘씨 filed Critical 네츄럴 컴퓨테이션 엘엘씨
Priority claimed from PCT/US2020/015873 external-priority patent/WO2021112899A1/en
Publication of KR20220129120A publication Critical patent/KR20220129120A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/086Learning methods using evolutionary algorithms, e.g. genetic algorithms or genetic programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2457Query processing with adaptation to user needs
    • G06F16/24578Query processing with adaptation to user needs using ranking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/12Computing arrangements based on biological models using genetic models
    • G06N3/126Evolutionary algorithms, e.g. genetic algorithms or genetic programming

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Physics & Mathematics (AREA)
  • Biophysics (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Physiology (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Genetics & Genomics (AREA)
  • Databases & Information Systems (AREA)
  • Stored Programmes (AREA)
  • Complex Calculations (AREA)
  • Debugging And Monitoring (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)
  • Read Only Memory (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)
  • Character Discrimination (AREA)

Abstract

방법은 제네릭 계산 빌딩 블록을 진화시킨다. 방법은 무작위로 생성된 프로그램을 이용하여 부모 모집단을 초기화시킨다. 방법은 또한 무작위로 생성된 테스트 입력의 리스트를 획득한다. 방법은 무작위로 생성된 이진 문자열의 입력-출력 쌍을 포함하는 목표 데이터 세트를 생성한다. 방법은 또한 목표 데이터 세트의 입력-울력 쌍에 기초하여, 각각의 프로그램에 적합성 스코어를 할당하는 적합성 함수를 적용한다. 방법은 프로그램에 유전 연산자를 적용하고, 신규 조건을 만족하는 자손을 선택함으로써 시드 리스트를 성장시킨다. 신규 조건은 무작위로 생성된 테스트 입력의 리스트에 대한 별개의 및 고유의 출력을 산출하는 프로그램의 능력을 나타낸다. 방법은 종료 조건이 만족될 때까지 반복한다. 종료 조건은 시드 리스트에서 하나 이상의 유선 프로그래밍 인스턴스를 해결하는 프로그램의 능력을 나타낸다.

Description

제네릭 빌딩 블록 창출을 위한 유전 프로그래밍 사용
본 출원은 2019년 12월 6일 제출된 미국 가출원 제62/944,468호의 이익을 주장하고, 해당 내용 전체는 본 개시에 포함된다.
본 개시는 유전 프로그래밍(genetic programming) 시스템에 관한 것으로서, 보다 상세하게 유전 프로그래밍 인스턴스 시딩(seeding)을 위한 제네릭 빌딩 블록을 창출하기 위해 유전 프로그램을 적용하는 시스템, 방법 및 장치에 관한 것이다.
유전 프로그래밍(GP)은 컴퓨터 프로그램 코드와 자연적 유전자 코드 간의 유사성을 이용하는 생물학적 영감을 받은 기계 학습(biologically-inspired machine learning)의 한 형태이다. 다른 형태의 기계 학습에 비해 GP가 갖는 장점은 생물학적 유기체의 복합 기능을 DNA에 압축하는 것과 동일한 방식으로 정보를 압축할 수 있는 능력이다. 정보를 압축할 수 있는 능력은 지적으로 행동하는 것과 밀접하게 관련된다. GP 시스템의 또 다른 장점은 이러한 시스템이 의사를 결정하는 방법을 설명할 수 있다는 점이다. 예를 들어, GP 시스템이 산출한 프로그램 코드는 사람이 읽을 수 있는 프로그래밍 언어로 표현될 수 있다. 그에 반해, 심층 신경망은 의사 결정 방법에 대한 설명을 제공하지 않는 블랙 박스다. 신경망은 인간 지능에서는 발견되지 않는 취성(brittleness)과 같은 취약점을 드러내는 경향이 있다. 해당 시스템이 유용한 한계에 도달해 다른 기술의 도움 없이 제네릭적인 인공 지능의 목표를 달성할 수 없다는 우려가 커지고 있다.
빌딩 블록 가설은 GP가 실용적인 이유에 대한 정당성으로 종종 사용된다. 직관적으로, 무작위로 프로그램을 생성하고 각각을 시도하여 주어진 문제를 해결하는 프로그램을 검색하는 일은 프로그램 크기에 따라 기하급수적인 시간이 필요한 것처럼 보이기 때문에 GP는 실용적으로 보이지 않는다. 빌딩 블록 가설은 완벽한 프로그램을 생성하기 보다는 상대적으로 짧은 프로그램 프래그먼트(fragment)나 빌딩 블록만을 생성해야 한다고 주장한다. 이러한 빌딩 블록은 솔루션에 대한 훌륭한 근사치를 제공하는 프로그램에 존재하는 경향이 있다. 병렬 계산을 이용해 많은 빌딩 블록을 동시에 찾을 수 있고 GP에서 사용되는 유전 연산자는 빌딩 블록을 합리적으로 훌륭한 솔루션으로 결합하도록 설계된다.
빌딩 블록 가설이 참이라고 가정해도, 짧은 빌딩 블록만 결정해야 한다고 해도 새로운 GP 인스턴스의 경우 새로운 빌딩 블록 세트를 결정해야 하는 문제가 여전히 존재한다. 이는 동일한 빌딩 블록을 계속 검색함으로써 계산 리소스가 낭비되는 것을 의미할 수 있다.
많은 GP 시스템은 고려 중인 특정 문제를 해결하는데 유용할 것으로 예상되는 손으로 코딩한 (hand-coded) 빌딩 블록으로 프로그램의 초기 모집단을 시딩함으로써 본 문제를 해결한다. 예를 들어, 만약 문제가 주어진 이미지 속 물체 사이의 거리를 추정하는 것이라면 모집단은 삼각 함수 및 상수 값 ^π 으로 시드될 수 있다. 이러한 접근법의 단점은 목표가 인공 지능을 산출하는 것일 때 인간 지능에 의존한다는 점이다. 또한, 해당 접근법은 인간의 편견을 시스템이 주입할 수 있는 기회를 제공한다.
따라서, 다양한 문제를 해결하는데 사용할 수 있는 제네릭 계산 빌딩 블록을 산출할 필요가 있다.
유전 프로그래밍 인스턴스(예를 들어, 이미지 처리 응용)에 대한 프로그램 초기 모집단을 시딩하는데 손으로 코딩한 빌딩 블록 대신 이러한 제네릭 계산 빌딩 블록을 사용한다. 해당 블록(코드 파밍(code farming)이라고도 함)을 창출하는 프로세스는 그 자체가 GP의 인스턴스다. GP 시스템은 일부 실시예에 따라 프로그램 모집단 내에 제네릭 빌딩 블록을 산출한다.
첨부된 청구항 각각의 범위 내의 다양한 시스템, 방법 및 장치 구현에는 여러가지 양상이 있고, 이 중 그 어떤 단일 하나도 본 개시에 기술된 바람직한 속성을 단독으로 책임지지 않는다. 첨부된 청구항 범위를 제한하지 않고 일부 눈에 띄는 특징을 기술한다. 본 논의를 고려한 후, 특히 “상세 설명”이라는 제목의 섹션을 읽은 후, 커패시턴스(capacitance) (또는 로딩), 전력 및 잡음 제한(noise limitation)을 설명하며 인터페이스 링크에서 성능 향상을 위해 다양한 구현의 특징을 어떻게 사용하는지 이해한다.
본 개시에 따르면 다양한 문제를 해결하는데 사용할 수 있는 제네릭 계산 빌딩 블록이 생성될 수 있다.
본 개시를 보다 더 자세히 이해할 수 있도록, 일부가 첨부된 도면에 예시된 다양한 구현의 특징을 참고하여 보다 구체적으로 설명한다. 그러나 첨부된 도면은 단순히 본 개시의 보다 관련 있는 특징을 예시하고 따라서 제한적이라고 간주해서는 안 되며 설명을 위해 다른 효과적인 특징을 인정할 수 있다.
도1는 일부 실시예에 따라 유전 프로그래밍 인스턴스를 시딩하는 제네릭 빌딩 블록을 창출하기 위하여 유전 프로그래밍을 사용하는 시스템의 블록도이다.
도2는 일부 실시예에 따라 유전 프로그래밍 인스턴스를 시딩하는 제네릭 빌딩 블록을 창출하기 위하여 유전 프로그래밍을 사용하는 시스템의 흐름도이다.
일반적인 관례에 따라 도면에 예시된 다양한 특징은 일정한 비율로 축척해 그릴 수 없다. 따라서, 다양한 특징의 치수는 명확성을 위해 임의적으로 확대하거나 축소할 수 있다. 또한, 일부 도면에는 주어진 시스템, 방법 또는 장치의 모든 구성요소가 나타나지 않을 수 있다. 마지막으로, 명세서 및 도면 전체에서 동일한 특징을 나타내기 위해 동일한 참조 번호를 사용한다.
본 개시에 기술된 다양한 구현에는 유전 프로그래밍 인스턴스를 시딩하는 제네릭 계산 빌딩 블록을 창출하기 위해 유전 프로그래밍을 사용하는 시스템, 방법, 및/또는 장치가 포함된다.
첨부된 도면에 예시된 예시 구현의 완전한 이해를 제공하기 위해 본 개시에 다수의 세부 사항을 기술한다. 그러나 본 발명은 많은 특정 세부 사항 없이 실행될 수 있다. 또한, 본 개시에 기술된 구현의 보다 관련 있는 양상을 불필요하게 이해하기 어렵게 만들지 않기 위해, 잘 알려진 방법, 구성요소 및 회로에 대해서 하나도 빠짐없이 상세한 방식으로 기술하지는 않았다.
도1은 유전 프로그래밍을 사용하는 제네릭 계산 빌딩 블록을 창출하는 시스템(100)의 도표다. 특정한 구체적인 특징이 예시되었으나, 기술 분야에서 통상의 지식을 가진 자는 본 개시에서 다양한 기타 특징이 간결성을 위해, 그리고 본 개시에 기재된 예시 구현의 보다 관련 있는 양상을 이해하기 어렵게 만들지 않기 위해 예시되지 않았음을 이해할 것이다.
GP 시스템은 다양한 방식으로 구현될 수 있지만, 일반적으로 프로그래밍 언어 선택, 부모 프로그램(parent program)을 자식 프로그램(child program)으로 재조합하는 유전 연산자 세트, 해결할 목표 문제 및 주어진 프로그램이 목표 문제를 얼마나 잘 해결하는지 결정하는 적합성 함수(fitness function)를 명시한다. 일반적으로, 프로그램 모집단은 무작위로 생성된 코드로 초기화되고, 그 후 어떤 적합성 문턱값을 초과하는 프로그램 획득과 같이 어떤 종료 기준이 충족될 때까지 다음 단계가 반복된다:
1. 적합성 함수를 적용해 모집단에서 각 프로그램 스코어(score)를 산출한다.
2. 룰렛 휠 선택(roulette wheel selection)과 같은 확률론적 방법을 이용해 스코어에 따라 프로그램을 선택한다.
3. 유전 연산자를 선택된 프로그램에 적용해 새로운 모집단을 산출한다.
도1을 다시 참조하면 서버(102)는 일반적으로 하나 이상의 프로세서(들), 메모리(104), 전원, 입력/출력(I/O) 서브시스템 및 이러한 구성요소를 상호 연결하는 통신 버스를 포함한다. 프로세서(들)은 메모리(104)에 저장된 모듈, 프로그램 및/또는 명령을 실행하고 이를 통해 일부 실시예에 따라 본 개시에 기술된 방법을 포함해 처리 동작을 수행한다. 일부 실시예에서, 서버(102)는 시각화를 나타내는 디스플레이(예를 들어, 스냅샷 또는 프로그램)를 포함하기도 한다.
일부 실시예에서, 메모리(104)는 하나 이상의 프로그램(예를 들어, 명령 세트), 및/또는 데이터 구조를 저장한다. 일부 구현을 통해, 메모리(104) 또는 메모리(104)의 비-일시적 컴퓨터 판독가능 저장 매체는 다음 프로그램, 모듈 및 데이터 구조, 또는 그 서브셋(subset) 또는 슈퍼셋(superset)을 저장한다:
- 운영 시스템;
- 다음을 포함하는 제네릭 빌딩 블록 생성 모듈(들)(120):
-- 적합성 함수(2)(122), 이에 대한 예는 일부 실시예에 따라 하기에 기술됨;
-- 프로그램(106)의 모집단 세대(하기 기술)를 진화시키기 위해 사용되는 대표 연산자(예를 들어, 선택, 돌변연이, 교차)를 포함하는 제네릭 연산자(들)(124); 그리고
-- 목표 데이터 세트(112)(하기 기술)를 생성하는 목표 데이터 세트 생성(126);
- 다음을 포함하는 데이터 구조(150):
-- 내장형(self-contained) 프로그램(예를 들어, 선택된 프로그래밍 언어 규칙을 준수하는 프로그램)인 프로그램이나 프로그램 프래그먼트(예를 들어, 코드 단편(snippets))를 포함하는 프로그램(106) 모집단;
-- 선택적으로, 함수 시그니처(signature)(108) (하기 기술);
-- 하기 기술된 유전 프로그래밍 인스턴스를 시드하는데 사용되는 제네릭 빌딩 블록 생성 모듈(120)의 출력인 시드 리스트(110); 그리고
-- 하기 기술된 목표 데이터 세트(들)(112)
상기 식별된 모듈(예를 들어, 명령 집합을 포함하는 프로그램 및/또는 데이터 구조)은 별도의 소프트웨어 프로그램, 절차, 또는 모듈로 구현될 필요가 없고, 따라서 이러한 모듈의 다양한 서브셋은 다양한 구현을 통해 결합되거나 또는 그렇지 않으면 재배열될 수 있다. 일부 실시예에서, 메모리(104)는 상기 식별된 모듈의 서브셋을 저장한다.
일부 실시예에서, 데이터베이스(130)(예를 들어, 로컬(local) 데이터베이스 및/또는 원격(remote) 데이터베이스)는 상기 식별된 하나 이상의 모듈 및 모듈과 연관된 데이터를 저장한다. 또한, 메모리(104)는 상기 기술되지 않은 추가 모듈을 저장할 수 있다. 데이터베이스(130)은 프로그램(106)의 스냅샷, 함수 시그니처(108), 시드 리스트(110) 및/또는 목표 데이터세트(112)를 저장한다. 일부 실시예에서, 메모리(104) 또는 메모리(104)의 비-일시적 컴퓨터 판독가능 저장 매체에 저장된 모듈은 하기 기술된 방법으로 각각의 동작을 이행하기 위한 명령을 제공한다. 일부 실시예에서, 이러한 모듈의 일부 또는 전부는 모듈 기능의 일부 또는 전부를 포함하는 특수 하드웨어 회로로 구현될 수 있다. 상기 식별된 하나 이상의 요소는 하나 이상의 프로세서(들)에 의해 실행될 수 있다.
일부 실시예는 유선 및/또는 무선 연결을 통한 로컬 및/또는 광역 통신 네트워크(예를 들어, 인터넷)를 통해 서버(102)를 클라이언트 장치, 데이터베이스(130)와 같은 하나 이상의 장치에 통신 가능하도록 연결하는 I/O 서브시스템을 포함한다. 일부 실시예는 시스템 구성요소 간 통신을 상호 연결 및 제어하는 회로(칩셋이라고도 함)를 선택적으로 포함하는 통신 버스를 포함한다.
시드 리스트(110)의 프로그램 및/또는 데이터베이스(130)에 저장된 스냅샷은 유전 프로그래밍 인스턴스(140)를 시드 및/또는 테스트하는데 사용된다. 유전 프로그래밍 인스턴스(140)의 예에는 (하기 기술된) 수기(handwritten) 텍스트의 이미지 처리 또는 인식이 포함된다. 일부 실시예에서, 인스턴스(140)는 시드 리스트(110)가 (그 예가 하기 기술된) 종료 조건을 충족하는지 여부를 결정하기 위해 사용되는 유전 프로그래밍 인스턴스를 저장한다.
제네릭 빌딩 블록 창출을 위한 유전 프로그래밍 사용 방법 예시
본 방법은 일부 실시예에 따라 유전 프로그래밍 인스턴스를 시딩하는 제네릭 빌딩 블록을 창출하기 위해 유전 프로그램을 사용한다. 상기 방법 또는 프로세스(코드 파밍이라고도 함)는 GP의 인스턴스이다. 상기 방법은 입력-출력 쌍이 무작위적으로 생성되는 입력-출력 쌍의 주어진 데이터 세트와 최대한 유사하게 매치(match)하는 프로그램(들)을 산출한다. 일부 실시예는 프로그램 모집단의 각 새로운 세대와 함께 새로운 목표 데이터 세트를 무작위로 생성한다. 일부 실시예에서, 모집단은 항상 존재하는 다양한 가능성 있는 솔루션으로 진화한다.
본 프로세스를 성공적으로 구현할 수 있는 GP 인스턴스의 속성에 대한 래티듀드(latitude)는 광범위하다. 일부 실시예는 (i) 프로그래밍 언어가 튜링(Turing) 기계가 인코딩할 수 있는 함수를 인코딩할 수 있음을 의미하는 튜링 컴플리트(Turing Complete)이고, (ii) 유전 연산자가 어떤 형태의 성적 재조합, 예를 들어 교차를 구현하고, 그리고 (iii) 유전자형(genotype) 간 적합성 변화량(variation)이 재조합 레이트(recombination rate)에 비해 작음을 의미하는 약한 선택 가정(weak selection assumption)이 적용되는 것을 요구한다. 요건 (i)은 프로세스를 통해 발견된 빌딩 블록의 재사용 가능성을 보장한다. 요건 (ii) 및 (iii)은 프로그램이 제네릭 블록임을 보장한다.
일부 실시예에서, 본 프로세스는 프로그램 프래그먼트인 제네릭 빌딩 블록을 산출한다. 일부 실시예에서, 프로그램 모집단 내 특정 프래그먼트를 빌딩 블록으로 식별하는 대신, 프로세스를 통해 산출된 전체 프로그램을 빌딩 블록으로 사용한다. 일부 실시예에서, 정확한 빌딩 블록이 모집단 어딘가에 존재하는 한, GP 역학은 빌딩 블록을 결정 또는 선택해 GP 인스턴스에 대한 솔루션으로 결합한다.
일부 실시예에서, GP의 새로운 인스턴스가 제네릭 빌딩 블록을 통해 시드될 때마다, 최초 모집단이 코드 파밍 프로세스에 의해 산출된 프로그램에서 선택된다. 일부 실시예는 프로세스에 의해 산출된 프로그램의 마지막 세대에서 프로그램을 선택한다. 일부 실시예는 프로세스의 각 세대에서 가장 알맞은 프로그램을 취해 프로그램 모음에서 빌딩 블록을 선택하는데, 보다 늦은 세대가 선호된다. 일부 실시예는 프로세스의 각 세대에 적합성 함수를 적용해 가장 높은 적합성 스코어를 가진 프로그램을 복사한다. 일부 실시예에서, 연결(ties)은 임의적으로(arbitrarily) 해제(break)된다. 일부 실시예는 가장 적합한 프로그램을 초기에 비어 있고 시드 리스트라고 하는 지속(persistent) 프로그램 리스트 끝에 추가한다. 일부 실시예에서, 새로운 GP 인스턴스가 초기 모집단 크기 n을 요구할 경우, 시드 리스트의 마지막 n개의 엔트리가 선택된다. 일부 실시예에서, 시드 리스트는 프로세스의 최종 산출물이다.
일부 실시예는 모집단 초기화를 위해 리스트를 사용하기 전 필터를 시드 리스트에 적용해 중복 표현형(phenotype)(즉, 프로그램이 인코딩한 함수)을 제거한다. 필터링 단계는 모집단 크기를 제한하는데 도움을 준다. 일부 실시예는 하기 기술한 함수 시그니처를 사용하는 기술을 사용해 확률적인 면에서 중복 표현형을 탐색한다.
GP의 잘 알려진 문제는 충분히 다기능의(rich) 프로그래밍 언어로 -구체적으로, 튜링 컴플리트인 것으로- 된 무작위로 생성된 프로그램이 항상 입력을 무시하고 일정한 출력을 산출하는 함수와 같은 단순(trivial) 함수를 인코딩하는 경향이 있다는 것이다. 이는 GP 시스템이 절대 높이 올라갈(aloft) 수 없다는 것; 다시 말해, 관심 동작(behavior)을 절대 산출할 수 없음을 의미한다. 또한, 비단순 동작이 산출된다 해도, 유전 연산자에 의해 쉽게 파괴된다는 점에서 손상되기 쉬운 경향이 있으므로, 시스템은 높이 오른 상태로 유지될 수 없다. 이론상으로, 높이 올라가 유지될 확률은 충분히 커다란 프로그램 모집단을 유지함으로써 증가시킬 수 있으나, 여기에는 막대한 계산 리소스가 필요할 수 있다. 일부 실시예는 높이 유지하기 위하여 하기 기술된 기술의 일부를 사용한다.
일부 실시예에서, 적합성이 높은 특정 개체나 프로그램은 한 세대에서 다음 세대로 생존한다는 추가 보증(assurance)을 제공받는다. 다양한 실시예에서, 본 개시에 기술된 아이디어는 시드 리스트를 사용해 구현될 수 있다.
일부 실시예에서, 현재 모집단의 작은 서브셋은 한 세대에서 다음 세대로 생존할 일반적인 확률보다 더 높다. 일부 실시예에서, 현재 모집단과 별개의 시드 리스트는 새로운 조건을 충족시키는 현재 모집단에서 프로그램 사본을 추가하여 커진다.
일부 실시예에서, 시드 리스트는 비일상적인(unusual) 방법으로 부모 선택 프로세스에 참여한다. 기존의 유전 프로그래밍에서는, 룰렛 휠을 돌려 현재 모집단에서 다음 부모를 선택한다. 일부 실시예에 따라, 휠을 돌리기 전, 앞면을 얻을 확률이 낮은 상태에서 (예를 들어, 확률=1/16) (예를 들어, 베르누이 분포를 창출하기 위해) 편향된 (biased) 동전을 뒤집는다. 동전 앞면이 나올 경우, 일부 실시예는 부모 선택을 위해 휠을 돌리지 않고 현재 모집단에서 부모를 선택하지 않는다. 대신, 일부 실시예는 균일한 확률 분포를 사용해 시드 리스트에서 부모를 선택한다 (즉, 시드 리스트의 각 프로그램이 선택될 확률은 동일하다). 한편, 동전 뒷면이 나올 경우, 일부 실시예는 정상적으로 진행해 휠을 돌려 현재 모집단에서 부모를 선택한다. 일부 실시예에서, 이런 전체 프로세스는 부모를 선택할 때마다 반복된다.
일부 실시예에서, 시드 리스트는 프로세스의 최종 산출물(코드 파밍이라고 도 함)이다. 일부 실시예에서, 시드 리스트에 가장 최근 추가된 프로그램은 보다 먼저 추가되었던 프로그램보다 GP 인스턴스 시딩에 더 유용한 것으로 간주된다.
일부 실시예에서, 시드 리스트는 전 세대에 걸쳐 지속되고 초기에는 비어 있다. 각 세대에서, 적합성 함수를 현재 모집단에 적용한 후, 현재 모집단에서 다음 조건을 만족시키는 모든 프로그램(개체라고도 함)을 시드 리스트에 추가한다.
a. 이것은 (하기 기술된) 명백히 단순하지 않은 개체다.
b. 이것이 인코딩하는 함수는 시드 리스트에 있는 기타 다른 프로그램이 인코딩한 것과 다르다. 이것은 시스템 초기화 중 테스트 입력의 지속 리스트를 무작위로 생성하고 테스트 입력에 대한 별개의 출력 시퀀스를 가지고 있는 경우 그리고 가지고 있을 경우에만 후보 함수가 별개의 것이라고 선언해 확률론적인 면에서 효율적으로 결정된다. 이러한 출력 시퀀스를 함수의 시그니처라고도 한다.
일부 실시예에서, 비단순 함수가 시드 리스트에 추가된다는 어떤 보증을 제공하기 위해, 적합성 함수는 단순 함수를 인코딩하는 프로그램의 명백한 케이스를 표시(flag)하고, 이에 따라 가능한 가장 낮은 스코어를 할당 받도록 변경된다. 일부 실시예는 프로그램의 자동화된 구문(syntactic) 분석(analysis)을 이용해 입력이 절대 읽히지 않을 것이라고 결정하기 때문에, 프로그램은 이를 실행하지 않고도 단순한 것으로 표시될 수 있다. 구문 분석을 통해 프로그램에 읽기 명령이 있는지 혹은 해당 명령이 분명하게 도달할 수 없는지 여부가 결정된다. 분명하게 단순한 프로그램에는 실행 시도가 이루어질 때 비정상적으로(abnormally) 종료되는 프로그램이 포함된다. 여기에는 기억 공간 또는 총 실행 시간과 같은 계산 리소스 한계를 초과하는 프로그램이 포함된다. 일부 실시예는 오류 없는 프로그램을 추진하기 위하여 가능한 가장 낮은 적합성 스코어를 해당 프로그램에 할당한다.
상기 기술된 바와 같이, 시드 리스트에 있는 프로그램에 주어지는 장점은 낮은 확률로 다음 세대의 부모가 되겠다는 개체의 선택이 현재 세대가 아닌 시드 리스트에서 발생한다는 것이며, 이 경우 시드 리스트의 모든 프로그램은 선택될 수 있는 확률이 동일하다.
진도 측정
일부 실시예는 진도(progress)를 측정하고 본 섹션에 기술된 기술 중 일부를 사용해 프로세스 종료를 위해 충분한 진행이 이루어졌는지 여부를 결정한다.
일부 실시예는 시드 리스트의 크기를 사용한다. 예를 들어, 시드 리스트가 꾸준한 속도로 성장하고 있을 경우, 꾸준한 진행이 이루어진다. 일부 실시예에서, 시드 리스트에 최소 소정의 개수의 프로그램이 있다면(예를 들어, 수천 개의 프로그램), 프로세스는 종료된다.
일부 실시예에서, 보다 리소스 집약적(resource-intensive)이지만 보다 신뢰할 수 있는 접근법은 다양한 문제를 나타내는 GP 인스턴스의 시험조(test suite) 내에서 모집단을 초기화하기 위해 시드 리스트 사본을 주기적으로 (예를 들어, 프로세스를 수백 번 반복할 때마다) 사용하기 위해 사용된다. 일부 실시예는 테스트 결과가 시간이 지남에 따라 개선되고 있는지 결정한다. 테스트 결과가 수용 가능한 솔루션을 제공할 경우, 프로세스를 종료한다.
스냅샷
일부 실시예는 프로세스가 일시 중단하고 추후 재개할 수 있도록 허가하는데 필요한 데이터로 구성된 시스템의 스냅샷을 로드하거나 저장한다. 일부 실시예에서, 스냅샷은 다음 요소 중 일부 또는 전부를 포함한다:
- 프로그램의 현재 모집단 및 적합성 스코어
- 시드 리스트 및 해당되는 시그니처
- 시그니처를 결정하기 위한 테스트 입력의 리스트
목표 데이터 세트
일부 실시예에서, 목표 데이터 세트는 프로세스의 각 새로운 세대와 함께 무작위로 생성된다. 일부 실시예에서, 목표 데이터 세트는 입력-출력 쌍으로 구성된다. 일부 실시예는 (i) 최종 산출물(예를 들어, 시드 리스트)을 다양한 상황에서 재사용 할 수 있는 정도 그리고 (ii) 산출 가능한 속도 및 효율성을 포함하는 다양한 요인을 유지해 입력-출력 쌍에 대한 포맷을 결정한다. 예를 들어, 최종 산출물이 광범위한 문제에 대하여 재사용 할 수 있어야 하는 경우, 입력-출력 쌍은 유한하다는 것 외에 그 어떤 길이 제한도 없는 이진 문자열 쌍으로, 이는 해당 문자열이 모든 정보를 인코딩할 수 있기 때문이다. 일부 실시예는 잘 알려진 균일 밀도 함수의 변형인 확률 밀도 함수를 사용해 임의의 길이의 이진 문자열을 무작위로 생성한다. 일부 실시예는 L(x) = 2-2l(x)-1에 의해 정의된 확률 밀도 함수를 사용하는데, 여기서 x는 길이 l(x)의 임의의 문자열이다.
일부 실시예는 여전히 입력-출력 쌍을 무작위로 생성하는 반면, 입력-출력 쌍을 특정 문제 도메인에 적절한 포맷으로 제한한다. 예를 들어, 일부 실시예는 순수 가우시안 잡음을 입력으로, 균일하게 무작위한 레이블(label)을 출력으로 사용하며 이미지 분류의 문제 도메인에 적절한 무작위 데이터 세트를 생성한다.
도메인-특정(domain-specific) 목표 데이터 세트
본 섹션에서는 목표 데이터 세트의 도메인-특정 양상을 기술하고 그 후 설명의 편의를 위해 목표 데이터 세트의 무작위적 양상을 기술한다.
목표 데이터 세트의 도메인-특정 양상의 경우, 모든 문제 도메인에서 입력을 실수 시퀀스 X = (x1, ..., xn)를 이용해 식별하고 해당 출력을 이와 유사하게 실수 시퀀스 Y = (y1, ..., ym)를 이용해 식별한다고 가정한다. 예를 들어, 이미지 분류 시, n이 입력 이미지에서 픽셀 수인 가운데 각 xi는 픽셀 강도를 나타낼 수 있다. 이 경우, yj는 입력 이미지가 j번째 레이블을 갖는 확률이고 m은 이미지가 가질 수 있는 고유의 레이블 수이다.
다음으로, 목표 데이터 세트의 무작위적 양상을 이해하기 위하여, 문제 도메인과 관계없이, 관심을 가질만한 모든 입력-출력 쌍의 거대 데이터 세트 D를 상상한다. 입력-출력 쌍 (X, Y)을 D에서 균일하게 무작위로 선택한다고 가정한다. X의 각 xi는 잘 알려진 확률 분포 pi(x)를 갖고, 이와 유사하게 Y의 각 yj는 잘 알려진 확률 분포 pj(y)를 갖는다. 그 후, 본 도메인에 대한 입력-출력 쌍(Xrand, Yrand)을 무작위로 생성하기 위해, 일부 실시예는 그들 각각의 확률 분포에 따라 Xrand에 각 xi를, Yrand에 각 yj를 무작위로 생성한다. 본 프로세스를 t번 반복해, 일부 실시예는 데이터 세트 Drand = ((X1, Y1), ..., (Xt, Yt))를 무작위로 생성한다. 이미지 분류의 경우, 예를 들어, pi(x)는 모든 가능한 픽셀 강도 범위에 대한 가우시안 분포이고 pj(y)는 모든 가능한 확률 범위(즉, 0부터 1)에 대한 가우시안 분포이다.
적합성 함수
적합성 함수는 유전 프로그래밍(GP)의 확률론적 성격을 나타낸다. 기준 충족 여부와 관계없이, GP는 각 프로그램에 프로그램이 기준을 충족하는 정도를 측정하는 적합성 스코어를 할당한다. 이는 “적합성 함수 적용”이라고도 한다. 일반적으로 스코어는 실수 범위에 포함된다. 스코어가 높은 프로그램은 스코어가 낮은 프로그램보다 다음 세대의 부모로서 선택될 가능성이 더 높다. 그러나, 가능한 가장 낮은 스코어를 받은 프로그램일지라도 부모로 선택될 가능성이 0보다 크기 때문에 해당 프로그램은 폐기(discard)될 수도 있고 폐기되지 않을 수도 있다.
일부 실시예에서, 적합성 함수는 주어진 프로그램이 인코딩한 함수가 얼마나 잘 현재 목표 데이터 세트와 매치하는지 측정한다. 일부 실시예에서, 적합성 함수는 약한 선택 가정을 충족하는데, 이는 모든 유전자형(프로그램)의 적합성이 간격 [1 - ε, 1+ ε] 내에서 서로 가까움을 의미하고, 따라서 유전자형 g의 적합성은 Fg = 1 + εΔg로 나타낼 수 있고, 여기서 ε는 작다고 가정하는 선택 강도이고 Δg ∈ [-1, 1]는 유전자형의 차등 (differential) 적합성이라 한다. 일부 실시예에서, 이러한 요건은 Δg를 적절하게 정의함으로써 충족된다. 예를 들어, Δg = -1는 g가 모집단의 다른 구성 요소(즉, 프로그램)와 관련된 목표 데이터 세트와 최악으로 매치함을 의미하고, Δg = 1는 g가 모집단의 다른 구성 요소와 관련하여 최상으로 매치함을 의미한다. 즉, 적합성 함수는 프로그램이 목표 데이터 세트와 얼마나 잘 매치하는지를 측정하기 위하여 주어진 프로그램에 -1과 1 사이의 차등 적합성 값을 할당하고, 여기서 더 큰 값은 더 나은 매치성을 나타낸다.
일부 실시예는 매치로 간주되는 것에 대해 완화된 정의를 사용한다. 일부 실시예는 출력 간 정확한 매치를 요구하는 대신 출력 간 상호관계 정도를 고려한다. 일부 실시예는 수용 가능한 솔루션을 찾을 수 있는 가능성을 증가시키기 위해 본 전략을 사용한다. 예를 들어, 일부 실시예는 완벽한 솔루션으로 쉽게 변환된다는 점을 고려해 정확하게 매치하도록 목표 출력의 정반대(비트 면에서)를 산출하는 프로그램을 고려한다.
목표 데이터 세트가 입력-출력 쌍의 시퀀스 D = ((X1, Y1), ..., (Xt, Yt))라고 가정하고, 주어진 프로그램이 함수 f를 인코딩한다고 가정한다. D의 각 쌍 (X, Y)의 경우, X는 실수의 시퀀스 X = (x1, ..., xn)이고 Y는 실수의 시퀀스 Y = (y1, ..., ym)이다. 함수 f는 출력으로 시퀀스 Y' = (y1', ..., ym')를 산출하며 입력으로 X를 수용할 수 있는 함수이다. 일부 실시예는 Y 와 Y’ 사이의 매치성을 측정하고, 그 후 차등 적합성 값 d를 산출하기 위해 D의 각 (X, Y)에 대한 값을 합한다. 일부 실시예는 Y의 각 yj가 잘 알려진 확률 분포 pj(y)를 갖고, 따라서 각 yj가 잘 알려진 평균 값 uj을 갖는다는 사실을 이용한다. yj에 대해 가능한 값의 범위가 둘로 분할되는 것으로 간주할 수 있고, 여기서 오른쪽 분할부(partition)는 평균보다 큰 모든 값을 포함하고 왼쪽 분할부는 평균 이하의 모든 값을 포함한다. 일부 실시예는 양 값이 모두 동일한 분할부에 있을 경우 값 yj가 값 yj'와 “매치한다”고 정의한다.
일부 실시예는 차등 적합성 d를 계산하기 위하여 다음 알고리즘을 사용한다:
1. 실수인 변수 r을 0으로 초기화한다.
2. D의 각 (X, Y)의 경우, 다음을 수행한다:
a. 상기 기술한 바와 같이 Y' 를 계산한다.
b. 1과 m 사이의 각 위치 j의 경우, 다음을 수행한다:
i. yj가 yj'와 매치할 경우, r에 1을 더한다.
ii. r에서 1을 차감한다.
3. d = absolute_value(r) / (m * t)를 계산한다.
본 알고리즘은 0과 1 사이의 d 값을 생성한다. 일부 실시예는 F = 1 + (e * d)으로 적합성 스코어를 계산하고, 여기서 e는 작은 양의 상수 값으로 가정되는 선택 강도이다.
즉, F를 이산 확률 변수로 간주할 때, 이는 모든 계산 가능 함수 f에 대하여 동일한 평균 및 동일한 분산을 가져야 한다. 또한 함수 f는 해당 함수가 존재할 경우 항상 역함수와 동일한 적합성 스코어를 할당 받아야 한다.
확률론적 선택
일부 실시예는 확률론적 선택 방법(“룰렛 선택” 또는 “적합성 비례 선택”이라고도 함)을 사용한다. 부모의 선택은 룰렛 휠을 돌려 수행되며, 여기서 모집단 내 각 프로그램이 해당 프로그램의 적합성 스코어에 비례하는 휠 상의 공간을 할당받는 것으로 한다. 즉, 휠을 충분한 횟수만큼 돌려 다음 세대의 부모를 모두 선택한다. 본 단계는 단순히 “선택(selection)”이라고 하고, 돌연변이(mutation) 또는 교차(crossover)와 같은 유전 연산자 중 하나로 간주되기도 한다.
일부 실시예는 다른 선택 방법(예를 들어, 기성(off-the-shelf) GP 소프트웨어에서 매우 인기 있는 토너먼트 선택)을 사용한다.
제네릭 빌딩 블록
일부 실시예에서, 성적 재조합이 있을 때의 진화는 모집단 내 대립 유전자(즉, 프로그램 프래그먼트)의 혼합 가능성을 최대화한다. 특정 유전자의 대립 유전자(즉, 프로그램 프래그먼트의 유전자좌(locus))의 혼합 가능성은 해당 대립 유전자가 다른 유전자의 대립 유전자와 결합하여 적합성이 높은 개체를 형성할 수 있는 정도이다. 개체 프로그램의 적합성이 이것이 모집단 내 다른 개체와 관련된 무작위하게 생성된 데이터 세트와 얼마나 잘 매치하는지를 기반으로 할 경우, 혼합 가능성이 높은 대립 유전자는 제네릭 계산 빌딩 블록에 정확히 매치한다. 약한 선택이 성적 재조합과 함께 존재할 경우, 대립 유전자의 혼합 가능성은 전 세대에 걸쳐 누적되어 측정된다. 따라서, 혼합 가능성이 높은 대립 유전자는 다양한 문제에 대한 좋은 솔루션을 제공하는 프로그램 군에 존재하는 코드 프래그먼트와 매치한다. 해당 대립 유전자는 제네릭 빌딩 블록이다.
도2는 일부 실시예에 따라 유전 프로그래밍 인스턴스를 시딩하는 제네릭 빌딩 블록을 창출하기 위해 유전 프로그래밍을 사용하는 방법에 대한 흐름도이다. 상기 방법은 일부 실시예에 따라 서버(102)와 같은 서버(또는 서버의 프로세서)에 의해 수행된다. 도2에 나타난 흐름도의 단계에서는 상기 기술된 기법이 사용된다. 일부 실시예에서, 상기 방법은 시작(start-up) 매개변수(예를 들어, 관련 도메인에 대한 매개변수 세트, 프로그램의 최대 크기, 프로세스 최대 반복 횟수 등)를 읽어 (202) 시작된다(200). 시작 매개변수의 예는 일부 실시예에 따라 “이미지 분류를 위한 제네릭 빌딩 블록 창출 및 사용 예시”이라는 제목의 섹션에서 하기 제공된다. 일부 실시예는 (시드 리스트를 획득하기 위한) 프로세스의 새로운 인스턴스 생성 여부를 결정한다(204). 새로운 인스턴스가 아닐 경우, 프로세스는 (하기 기술된) 시스템의 스냅샷을 로딩한다(222).
일부 실시예는 (상기 기술된) 무작위로 생성된 프로그램을 통해 모집단(예를 들어, 프로그램(106)의 모집단)을 초기화한다(206). 또한 일부 실시예는 (상기 기술된, 예를 들어, 목표 데이터 세트 생성 모듈(126)을 이용해) 목표 데이터 세트를 무작위로 생성한다. 일부 실시예는 (상기 기술된, 예를 들어, 적합성 함수 모듈(122)을 이용해) 적합성 함수를 모집단 내 프로그램에 적용한다(210). 일부 실시예는 (상기 기술된) 스냅샷을 찍거나 포착할지 여부를 결정(212)하고, 그렇게 결정된 경우 시스템의 스냅샷을 (예를 들어, 데이터베이스(130)에) 세이브(216)하거나 저장한다. 일부 실시예는 종료 조건 충족 여부를 결정(218)한다. 예를 들어, 스냅샷 내 시드 리스트는 시드 리스트가 하나 이상의 유전 프로그래밍 인스턴스를 해결하는지 여부를 테스트하기 위해 사용된다. 종료 조건이 충족될 경우, 상기 방법은 실행을 완료(220)한다. 그렇지 않을 경우, 프로세스는 계속해서 유전 연산자(예를 들어, 선택, 돌연변이, 교차)를 다음 세대 모집단 획득을 위해 모집단에 적용한다. 프로세스(즉, 214, 208, 210, 212, 216, 및 218 단계)는 종료 조건이 충족될 때까지 반복된다.
일부 실시예에 따라, 방법은 제네릭 계산 빌딩 블록을 진화시킨다. 상기 방법은 서버(또는 컴퓨터)에 의해 수행된다. 예를 들어, 상기 방법은 서버(102)(또는 서버(102) 모듈 중 하나)에 의해 수행된다. 상기 방법은 함수를 인코딩하는 무작위로 생성된 프로그램으로 부모 모집단을 초기화한다. 또한 상기 방법은 무작위로 생성된 테스트 입력 리스트 획득 단계를 포함한다. 상기 방법은 무작위로 생성된 이진 문자열의 입력-출력 쌍을 포함하는 목표 데이터 세트를 생성한다. 또한 상기 방법은 적합성 스코어를 할당하는 적합성 함수를 부모 모집단 내 각 프로그램에 적용한다. 적합성 스코어는 최소 목표 데이터 세트의 입력-출력 쌍을 매치하는 프로그램 능력을 나타낸다. 또한 상기 방법은 신규 조건을 충족시키는 부모 모집단 내 프로그램 사본으로 시드 리스트를 초기화시킨다. 신규 조건은 무작위로 생성된 테스트 입력 리스트에 대한 별개의 그리고 고유의 출력을 산출할 수 있는 프로그램 능력을 나타낸다. 시드 리스트에는 유전 프로그래밍을 위해 초기 모집단을 시딩하는 제네릭 프로그램 빌딩 블록이 포함된다. 또한 상기 방법에는 시드 리스트의 종료 조건이 충족되었는지 여부를 결정하는 단계가 포함된다. 종료 조건은 하나 이상의 유전 프로그래밍 인스턴스를 해결할 수 있는 시드 리스트 내 하나 이상의 프로그램 능력을 나타낸다. 종료 조건이 충족되지 않았다는 결정에 따라, 상기 방법은 프로그램의 현재 자손(offspring) 모집단을 획득하기 위해 최소 하나의 유전 연산자를 부모 모집단에 적용한다. 상기 최소 하나의 유전 연산자에는 상기 하나 이상의 유전 프로그래밍 인스턴스를 해결하기 위해 프로그램의 적합성 스코어를 기반으로 시드 리스트 성장을 위해 부모 모집단에 적용된 연산자가 포함된다. 또한 상기 방법에는: (i) 무작위로 생성된 이진 문자열의 입력-출력 쌍을 포함하는 새로운 목표 데이터 세트를 생성하는 단계; (ii) 새로운 적합성 스코어를 할당하는 적합성 함수를 현재 자손 모집단 내 각 프로그램에 적용하는 단계(새로운 적합성 스코어는 최소 새로운 목표 데이터 세트의 입력-출력 쌍을 매치하는 프로그램 능력을 나타낸다); (iii) 시드 리스트에 상기 신규 조건을 충족하는 현재 자손 모집단 내 프로그램 사본을 첨부(append)하는 단계; 그리고 (iv) 상기 종료 조건이 충족될 때까지 상기 최소 하나의 유전 연산자를 현재 자손 모집단에 적용해 프로그램의 새로운 자손 모집단을 획득하고 프로그램의 새로운 자손 모집단을 현재 자손 모집단으로 설정하는 단계를 반복하는 단계를 포함한다.
일부 실시예에서, 상기 방법은 복수의 문제를 나타내는 유전 프로그래밍 인스턴스의 시험조 내에서 모집단을 초기화시키기 위해 시드 리스트를 사용하는 단계; 그리고 시험조의 시험 결과를 기반으로 종료 조건이 충족되었는지 여부를 결정하는 단계를 포함한다.
일부 실시예에서, 상기 방법은 상기 최소 하나의 유전 연산자를 현재 자손 모집단에 적용할 때 베르누이 분포를 기반으로 현재 자손 모집단 내 프로그램에 대한 시드 리스트 내 프로그램을 부모로 선택하는 단계를 추가로 포함한다. 시드 리스트 내 각 프로그램이 부모로 선택될 확률은 동일하다.
일부 실시예에서, 프로그램의 신규 조건 충족 여부에 대한 결정은 프로그램이 무작위로 생성된 테스트 입력에 대해 시드 리스트 내 프로그램을 통해 인코딩된 함수로 인해 생성된 출력 시퀀스와는 별개의, 무작위로 생성된 테스트 입력에 대한 출력 시퀀스를 생성하는 함수를 인코딩한다는 결정을 기반으로 한다.
일부 실시예에서, 상기 방법은 시드 리스트 내 각 프로그램에 대해 무작위로 생성된 테스트 입력에 대한 프로그램을 통해 인코딩된 함수로 인해 생성된 출력 시퀀스를 포함하는 함수 시그니처를 결정 및 저장하는 단계; 그리고 함수 시그니처를 색출(retrieve)하는 단계를 포함한다. 이와 같은 일부 실시예에서, 프로그램이 시드 리스트 내 프로그램을 통해 인코딩되는 함수와는 별개의 함수를 인코딩한다는 결정은 프로그램이 무작위로 생성된 테스트 입력에 대해 함수 시그니처와는 별개의 출력 시퀀스를 생성하는 함수를 인코딩한다는 결정을 기반으로 한다.
일부 실시예에서, 종료 조건은 최소 시드 리스트 크기에 따라 달라진다(예를 들어, 수천 개의 프로그램, 그 후 상기 방법이 중단된다).
일부 실시예에서, 종료 조건은 최소 시드 리스트가 소정의 성장률로 성장하고 있다는 결정에 따라 달라진다.
일부 실시예에서, 상기 방법은 적합성 함수를 적용할 때 임의로 연결(ties)을 해제하는 단계를 추가로 포함한다.
일부 실시예에서, 상기 방법은 시드 리스트를 초기화하고 시드 리스트에 첨부할 때 입력을 읽지 않는 단순 함수를 인코딩하는 시드 리스트에서 프로그램을 폐기하는 단계를 추가로 포함한다.
일부 실시예에서, 상기 방법은 입력을 읽지 않는 단순 함수를 인코딩하는 프로그램을 식별하기 위해 구문 분석을 수행하는 단계를 추가로 포함한다.
일부 실시예에서, 상기 방법은 시드 리스트를 초기화하고 시드 리스트에 첨부할 때 비정상적인 런타임 동작(예를 들어, 실행 시도 시 비정상적으로 종료되는 프로그램)을 갖거나 비정상적인 리소스 요건(예를 들어, 메모리 공간 또는 총 런타임과 같은 계산 리소스 한계를 초과하는 프로그램)을 갖는 함수를 인코딩하는 시드 리스트에서 프로그램을 폐기하는 단계를 추가로 포함한다.
일부 실시예에서, 상기 방법은 시드 리스트 내 소정의 개수의 프로그램을 이용해 유전 프로그래밍의 새로운 인스턴스에 대한 초기 모집단을 시딩하는 단계를 추가로 포함한다. 일부 실시예에서, 시드 리스트에 가장 최근 추가된 프로그램이 초기 모집단을 시딩할 때 더 일찍 추가된 프로그램보다 선호된다.
일부 실시예에서, 상기 최소 하나의 유전 연산자는 선택 연산자, 돌연변이 연산자 및 교차 연산자 중 하나 이상이다.
일부 실시예에서, 무작위로 생성된 이진 문자열의 입력-출력 쌍의 각 입력은 입력 확률 분포를 기반으로 생성되고, 무작위로 생성된 이진 문자열의 입력-출력 쌍의 각 출력은 출력 확률 분포를 기반으로 생성된다. 일부 실시예에서, 입력 확률 분포는 픽셀 강도 범위에 대한 가우시안 분포이고, 출력 확률 분포는 [0.0, 1.0]에 대한 가우시안 분포이다.
일부 실시예에서, 적합성 함수는 동일 적합성 스코어를 동일 입력에 대해 비트식(bitwise) 반대 출력을 산출하는 함수를 인코딩하는 프로그램에 할당한다. 즉, 일부 실시예에서, 목표 출력의 (비트식 의미에서) 정확한 반대를 산출하는 프로그램은 정확히 매치하는 것만큼 적합하다.
일부 실시예에서, 적합성 함수는 프로그램 출력과 목표 데이터 세트 간의 매치 정도를 측정하기 위해 프로그램에 -1에서 1 사이의 적합성 스코어를 할당하는데, 값이 클수록 더 높은 매치 정도를 나타낸다.
일부 실시예에서, 상기 하나 이상의 유전 프로그래밍 인스턴스는 (하기 기술된) 수기(handwritten) 숫자의 부분적인 분류를 위한 유전 프로그래밍 인스턴스를 포함하고, 무작위로 생성된 이진 문자열의 입력-출력 쌍은 MNIST 데이터베이스 이미지를 기반으로 생성되며, 상기 방법은 2000회 반복 후 상기 방법을 종료하는 단계를 포함한다.
이미지 분류를 위한 제네릭 빌딩 블록 창출 및 사용 예시
본 섹션은 일부 실시예에 따라 이미지 분류를 위한 제네릭 블록 창출 및 사용 예시에 대해 기술한다. 일반적으로, 이미지는 하나 이상의 레이블과 연관된다. 예시를 위해, 이미지가 두 개의 레이블 중 하나만 가질 수 있다고 가정한다. 각 픽셀 값이 단일 비트가 되도록 이미지 데이터를 단순화한다. 예를 들어, 각 픽셀은 검정색(0) 이거나 하얀색(1)이다. 또한 각 이미지가 정확히 28행 x 28열의 픽셀이라고 가정한다. 본 도메인의 데이터 세트는 D = ((X1, y1),..., (Xt, yt))의 형식을 갖는다. D의 각 (X, y)는 X가 입력 이미지 X = (x1, ..., xn)을 나타내는 입력-출력 쌍이고, 여기서 n은 28 × 28 = 784, 각 xi는 위치 i에서 픽셀 강도를 나타내는 단일 비트(0 또는 1)이고, y는 이미지 X와 연관된 레이블을 나타내는 단일 비트이다.
제1단계에서, 일부 실시예는 본 도메인에 적절한 매개변수를 이용해 도2를 참고해 상기 기술된 프로세스를 통해 제네릭 빌딩 블록을 창출한다. 그 후, 제2 단계에서, 이러한 일부 실시예는 제1단계의 최종 산출물(예를 들어, 시드 리스트)을 사용해 본 도메인의 특정 문제를 나타내는 2개의 GP 인스턴스 시험조에서 초기 모집단을 시드한다.
본 실험에서 GP 인스턴스를 위해 사용되는 프로그래밍 언어가 별첨(Appendix)에 기술된 퍼셉트론 튜링 머신(Perceptron Turing Machines)(PTMs)의 언어라고 가정한다. 상기 언어는 튜링 컴플리트이고 신경 진화(neuro-evolution)의 한 형태를 허용하는데, 이는 각 프로그램이 인공 신경 망(artificial neural network)(ANN)을 생성함을 의미한다. 모든 GP 인스턴스에 공통적인 관련 PTM 설정 매개변수는 다음과 같다:
- 상태의 수는 512이다.
- 테이프의 수는 2고 각 테이프의 길이는 5비트이므로, 이미지의 행 인덱스 또는 열 인덱스를 인코딩한다. 두 가지 테이프 모두 입력 인덱스 테이프이고, 출력이 단일 비트이기 때문에 출력 인덱스 테이프는 존재하지 않는다.
- 모든 프로그램에는 고정된 길이의 명령 4,096개가 있다.
- 다음과 같이 프로그램에 의해 생성된 ANN에 대한 리소스 한계를 설정한다.
-- 최대 노드 수는 50,000이다.
-- 최대 깊이는 100이다.
-- 최대 팬아웃은 16이다.
리소스 한계가 초과될 경우, 이는 오류로 간주되고, 이 경우 프로그램에는 가능한 가장 낮은 적합성 스코어가 할당된다.
다음 유전 연산자는 본 실험에서 사용되는 모든 GP 인스턴스에 공통적이다.
- 유전자별로(gene-by-gene) 작동하며 0.5의 비율로 균일 교차를 사용한다.
- 유전자형의 방식으로(genotype-wise) 작동하며 0.003 비율의 비율로 순열 연산자를 사용한다. 즉, 각 자손에 대하여, 0.003의 확률로, 해당 유전자를 무작위로 치환한다.
- 유전자 방식으로(gene-wise) 작동하며 0.001의 비율로 돌연변이 연산자를 사용한다. 즉, 각 자손의 각 유전자에 대하여, 0.001의 확률로, 대립 유전자를 다른 대립 유전자로 변경한다.
예시 1 단계: 제네릭 빌딩 블록 창출
프로세스에 대한 GP 인스턴스를 다음과 같이 설정한다.
- 모집단 크기는 1,024이다.
- 무작위 목표에서 입력-출력 쌍의 수에 32를 사용한다.
- 무작위 목표에서 입력 픽셀 값과 출력 레이블 값 모두에 사용되는 자연 확률 분포는 0과 1의 값 확률이 동일한 베르누이 분포이다 (각 확률은 0.5이다).
- 함수 시그니처 생성에 이용되는 테스트 입력의 수에 32를 사용한다.
- 선택 강도에 0.5를 사용한다.
- 현재 모집단보다 시드 리스트에서 부모를 선택할 확률에 0.0625를 사용한다.
- 시드 200,000개(즉, 시드 리스트 내 프로그램)를 발견한 경우 프로세스를 종료한다.
프로세스는 반복적이며 일부 인스턴스에서는 각 세대에 대한 수백 개의 프로그램을 산출한다. 예를 들어, 프로세스를 2,289번 반복하면 (즉, 2,289 세대) 시드 200,000개가 산출된다.
예시 2 단계: 수기 숫자의 부분적 분류
시험조의 경우, 일부 실시예는 수기 숫자를 분류하는 단순화된 형식의 변이를 해결하도록 설계된 2개의 GP 인스턴스를 사용한다. 0부터 9까지의 모든 숫자를 인식하고자 하는 대신, 단순화된 문제(부분적 분류라고도 함)에서는 10개의 숫자 중 2개만 인식하고자 시도한다. GP 인스턴스 A가 숫자 0과 1을 구별하고자 시도하고, GP 인스턴스 B가 숫자 6과 7을 구별하고자 시도한다고 가정한다.
훈련 및 테스트 데이터 세트의 경우, 일부 실시예는 정확한 분류와 함께 수기 숫자의 스캔된 이미지를 포함하는 MNIST 데이터베이스의 서브셋을 사용한다. 이미지는 훈련 및 테스트 데이터 세트(예를 들어, 각각 60,000개 및 10,000개 이미지로)로 나뉜다. 이미지는 그레이스케일로 28x28 픽셀 크기이다. 일부 실시예는 원래 범위가 0부터 255인 각 픽셀 값이 단일 비트로 변환되도록 모든 이미지를 재포맷하고, 여기서 0은 간격 [0, 127]에 해당되고 1은 [128, 255]에 해당된다. GP 인스턴스 A는 숫자 0과 1의 이미지만 포함하는 훈련 및 테스트 데이터 세트의 서브셋을 사용하고, GP 인스턴스 B는 6과 7의 이미지만을 사용한다.
GP 인스턴스 A와 B 모두 다음과 같은 설정 속성을 갖는다:
- 일부 실시예에서, 훈련 및 테스트 데이터 세트는 각 사이즈 t = 32의 미니 배치(mini-batch)로 무작위로 분할된다. 모든 세대에서, 다음 훈련 미니 배치 D는 회전 순서에 따라 선택되고, 해당 세대의 적합성 스코어에 대한 근거로 사용된다.
- 현재 모집단에서 적합성 스코어 F를 프로그램 g에 할당하기 위해, 일부 실시예는 다음과 같이 먼저 차등 적합성 d를 계산한다.
-- 실 변수 r을 0으로 초기화한다.
-- D의 각 (X y)의 경우, 다음을 수행한다:
--- 입력 이미지 X에 프로그램 g를 실행한다.
--- g를 완료될 때까지 실행해 출력 y를 산출하면, r에 1을 더한다.
--- 그렇지 않으면, r에서 1을 차감한다.
-- t로 나눈 d = r를 계산한다.
이를 통해 d는 -1과 1 사이의 값을 갖게 된다. 적합성 스코어는 F = 1 + εd로, 여기서 ε는 상수 값이 0.5인 선택 강도이다.
- 모집단 크기는 256이다.
- 종료 조건은 다음과 같다. 모든 세대에서, (연결(ties)을 임의로 해제한 경우) 적합성 스코어가 가장 큰 프로그램 g은 스코어를 다시 획득하지만, 매번 회전 순서에 따라 테스트 데이터 세트에서 다음 미니 배치를 사용한다. g가 훈련 및 테스트 미니 배치 모두에서 만점을 받은 경우, g가 솔루션인 상태에서 프로세스는 성공적으로 종료된다. 2,000 세대 내에서 이러한 솔루션을 찾지 못한 경우, 프로세스는 실패로 종료된다.
또한, 각 GP 인스턴스는 무작위로 (초기화 무작위 모드) 또는 제1 단계에서 산출된 마지막 256개의 프로그램(또는 시드)을 사용해 (초기화 시드 모드) 모집단을 초기화 시킬 수 있는 선택권을 갖는다. 일부 실시예는 각 모드에서 소정의 횟수만큼 (예를 들어, 10번) 각 GP 인스턴스 A와 B를 실행한다. 한 실험에서, 획득한 결과는 다음과 같다:
- 무작위 모드에서 GP 인스턴스 A는 1회 성공 및 9회 실패를 산출했다.
- 시드 모드에서 GP 인스턴스 A는 8회 성공 및 2회 실패를 산출했다.
- 무작위 모드에서 GP 인스턴스 B는 0회 성공 및 10회 실패를 산출했다.
- 시드 모드에서 GP 인스턴스 B는 6회 성공 및 4회 실패를 산출했다.
이렇게, 도2를 참조하여 상기 기술된 프로세스는 이러한 GP 인스턴스에 (전통적인 모집단 시드 방법에 비해) 유의미한 성능 향상을 제공한다.
수치 관계 학습 적용 예시
본 섹션에서는 일부 실시예에 따라 수치 관계 학습을 위한 제네릭 빌딩 블록 창출 및 사용 예시를 설명한다. 문제가 실수의 주어진 시퀀스가 특정 관계 내의 멤버십 조건을 충족하는지 여부를 결정할 수 있는 컴퓨터 프로그램을 찾는 것이라고 가정한다. 일부 실시예에서, 훈련 목적으로, 관계를 충족시키지 않는 시퀀스 예시 뿐만 아니라 관계를 충족시키는 시퀀스 예시의 데이터 세트가 존재한다. 본 도메인의 데이터 세트는 D = ((X1, y1),..., (Xt, yt))의 형식을 갖는다. D의 각 (X, y)는 X가 입력 시퀀스 X = (x1, ..., xn)를 나타내는 입력-출력 쌍으로, 여기서 n은 관계를 통해 결정된 소정의 양의 정수이고, 각 xi는 관계를 통해 결정되는 연관 확률 분포 pi (x) 를 지닌 실수이며, y는 X가 관계에 속하는지 (y = 1) 또는 X가 관계에 속하지 않는지 (y = 0) 여부를 나타내는 단일 비트이다.
예를 들어, 주식 거래자가 이러한 데이터 세트를 개발할 수 있는데, 여기서 X는 회사 측 대차 대조표에 있는 정보이고 y는 회사 주식을 매수해야 하는지 아니면 매도해야 하는지 여부를 나타낸다. 본 실험에서, 설명을 위하여, n = 3을 가정하고, 가우시안 분포(평균 0 및 분산 0.5)를 x1, x2, x3 각각에 사용한다고 추가로 가정한다. 출력 y는 값이 0과 1일 확률이 같은 (각 0.5의 확률) 베르누이 분포를 갖는다.
일부 실시예의 경우, 2가지 단계가 존재한다. 제1단계에서, 일부 실시예는 본 도메인에 적절한 매개변수를 사용해 도2를 참조하여 상기 기술된 프로세스를 통해 제네릭 빌딩 블록을 창출한다. 그 후, 제2단계에서, 일부 실시예는 제1단계의 최종 산출물(시드 리스트)을 사용해 본 도메인 내 특정 문제를 나타내는 GP 인스턴스 2개의 시험조에서 최초 모집단을 시드한다. 후술된 바와 같이, 상기 결과와 최초 모집단을 무작위로 시딩하는 전통적인 접근법으로 획득한 결과의 비교를 통해, 도 2를 참조해 상기 기술된 프로세스의 장점이 드러났다.
본 실험에서 모든 GP 인스턴스에 사용된 프로그램 언어가 주소가 https://github.com/arturadib/shash-a인 월드 와이드 웹(World Wide Web)에서 이용할 수 있는 2011년 “Slash/A:(정량) 선형 유전 프로그래밍을 위한 프로그래밍 언어 및 C 라이브러리(Slash/A: A programming language and C++ library for (quantitative) linear genetic programming)"에 기술된, Artur B. Adib가 개발한 Slash/A 언어라고 가정하고, 그 개시 내용은 참조로 본 개시에 전부 포함된다. Slash/A 언어는 모든 입력 및 출력이 배정밀도 부동 소수점 형태의 실수이기 때문에 수치 관계 구현에 이상적인 튜링 컴플리트 명령적 프로그래밍 언어이다. 다음 예는 2가지 입력을 읽고, 이를 합산해, 그 결과를 출력으로 반환한다.
input/ # get the next number from the input buffer and save it to register F
0/ # set register I = 0
save/ # save content of F into data vector D[I] (i.e. D[0] := F)
input/ # get another input, save to F
add/ # add to F current data pointed to by I (i.e. F := F + D[0])
output/. # append F to the output buffer
(Input/ # 입력 버퍼에서 다음 수를 가져와 이를 레지스터 F에 저장한다.
0/ # 레지스터 I는 0이라고 설정한다.
save/ # F의 내용을 데이터 벡터 D[I]에 저장한다(즉, D[0] := F).
input/ # 또 다른 입력을 가져와 F에 저장한다.
Add/ # F에 I가 가리키는 현재 데이터를 추가한다(즉, F := F + D[0]).
Output/.# F를 출력 버퍼에 첨부한다.)
Slash/A는 각 무부호(unsigned) 정수가 언어 내 고유 명령에 매핑되는 가운데 무부호 정수 배열인 바이트코드 형식으로 텍스트 형식으로 주어진 프로그램(예를 들어, 상기 텍스트)을 변환하는 함수를 포함하는 C++ 라이브러리로 구현된다. 이는 라이브러리에 포함된 Slash/A 인터프리터(interpreter)가 사용하는 바이트코드 형식이다. 일부 실시예는 바이트코드 형식을 GP에 대한 유전자형으로 사용하며 유전 연산자를 구현한다. 예를 들어, 돌연변이 연산자는 바이트코드에 있는 무작위로 선택된 무부호 정수를 (설정 가능한 명령 세트의 명령 수로 결정된) 적절한 숫자 범위에 있는 새롭게 무작위로 선택된 무부호 정수로 단순 교체한다. 인터프리터는 0으로 나누기, 또는 유효한 메모리 범위를 벗어난 인덱싱과 같은 오류는 묵시적으로 무시하지만, 해당 사건에 대한 통계는 추적하여, 프로그램이 단순한지 여부를 결정하기 위한 커스텀 조건을 정의할 수 있다.
모든 GP 인스턴스에 공통적인 관련 Slash/A 설정 매개변수는 다음과 같다:
- 숫자 리터럴(numeric literals)의 수는 16이다. 일부 실시예는 루핑(looping) 또는 고급 수학(예를 들어, 삼각 함수)을 포함하지 않는 디폴트 명령 세트의 서브셋을 사용한다. 일부 실시예는 다음 C++ 코드를 사용해 명령 세트의 새로운 인스턴스를 생산한다.
SlashA::InstructionSet* NewInstructionSet() {

SlashA::InstructionSet* iset_ptr = new SlashA::InstructionSet(16);
iset_ptr->insert_DIS_IO(); // input/output commands
iset_ptr->insert_DIS_memreg(); // memory-register commands iset_ptr->insert_DIS_regreg(); // register- register commands iset_ptr->insert_DIS_basicmath(); // basic math (plus, minus, times, divide)
iset_ptr->insert_DIS_misc(); // the do-nothing instruction "nop"
return iset_ptr;
}
- 메모리 명령에 사용되는 데이터 벡터 길이는 10이다.
- 프로그램은 고정된 길이의 100개의 명령을 갖는다.
- 프로그램이 단순하다고 간주되기 때문에, 프로그램이 출력을 산출하지 못하거나 또는 프로그램이 출력 산출 전 입력을 읽지 못하는 경우 가장 낮은 적합성 스코어가 할당된다.
다음 유전 연산자는 일부 실시예에 따라 모든 GP 인스턴스에 공통적이다:
1. 0.5의 비율로 일점 교차 연산자를 사용한다.
2. 유전자형 별로 작동하며 0.012 비율의 비율로 순열 연산자를 사용한다. 즉, 각 자손에 대하여, 0.012의 확률로, 유전자를 무작위로 치환한다.
3. 유전자별로 작동하며 0.004의 비율로 돌연변이 연산자를 사용한다. 즉, 각 자손의 각 유전자에 대하여, 0.004의 확률로, 대립 유전자를 다른 대립 유전자로 변경한다.
일부 실시예는 프로그램의 출력 값 r은 출력 버퍼에 추가되는 제1값이고, 후속 값은 무시한다는 규정을 사용한다. 일부 실시예는 r > 0일 경우 b = 1, 그렇지 않으면 b = 0을 설정해 r을 비트 값 b에 매핑한다.
예시 1 단계: 제네릭 빌딩 블록 창출
프로세스에 대한 GP 인스턴스는 다음과 같이 설정된다.
1. 모집단 크기는 1,024이다.
2. 무작위 목표 D에서 입력-출력 쌍 수에 t = 32를 사용한다. 일부 실시예에서, D의 데이터 요소는 상기 기술된 바와 같이 가우시안 및 베르누이 분포를 사용해 생성된다.
3. 적합성 스코어 F를 현재 모집단의 비단순 프로그램 g에 할당하기 위하여, 일부 실시예는 다음과 같이 목표 데이터 세트 D를 고려해 차등 적합성 d를 계산한다:
실수 변수 r을 0으로 초기화한다.
D의 각 (X, y)에 대하여, 다음을 수행한다:
입력 X에 프로그램 g를 실행한다.
g가 출력 y를 산출할 경우, 1을 r에 추가한다.
그렇지 않으면, r에서 1을 차감한다.
d = absolute_value(r) / t 라 한다.
이를 통해 d는 0과 1 사이의 값을 갖게 된다. 적합성 스코어는 F = 1 + εd로, 여기서 ε은 상수 값이 0.5인 선택 강도이다. 이런 방식으로 적합성을 계산하는 동기는 무작위 목표 시스템에 대한 두 가지 핵심 요건을 충족시키는 것이다:
a. F가 이산 확률 변수로 간주될 때, 각 비단순 프로그램에 대해 동일한 평균 및 분산을 가져야 한다.
b. 프로그램을 통해 인코딩된 함수는 해당 함수가 존재하는 경우 항상 그 역함수와 동일한 적합성 스코어를 할당 받아야 한다. 이 경우, 원본이 0을 출력할 때마다 다른 프로그램이 1을 출력할 수 있고, 반대의 경우도 마찬가지이기 때문에, 역이 존재한다.
4. 함수 시그니처 생성에 사용되는 테스트 입력의 수에 32를 사용한다.
5. 선택 강도에 0.5를 사용한다.
6. 현재 모집단보다 시드 리스트에서 부모를 선택할 확률에 0.0625를 사용한다
7. 200,000개의 시드가 발견되면 프로세스를 종료한다.
프로세스는 반복적이며 일부 인스턴스에서는 각 세대에 대한 수백 개의 프로그램을 산출한다. 예를 들어, 프로세스를 3,498번 반복하면 (즉, 3,498 세대) 시드 200,000개가 산출된다.
예시 2 단계: 수치 관계 학습
시험조의 경우, 일부 실시예는 각각 3개의 입력이 있는 특정 수치 관계를 학습하도록 설계된 GP 인스턴스 2개를 사용한다. GP 인스턴스 A의 경우, 주어진 입력 시퀀스 X = (x1, x2, x3)는 강하게 증가할 경우, 즉 조건 x1 < x2 < x3을 충족시킬 경우 관계가 있다.
일부 실시예에서, GP 인스턴스 B는 다음 조건을 사용해 X가 x1 2 + x2 2 > x3 2 라인 관계에 있는지 여부를 결정한다.
일부 실시예는 (상기 기술된) 가우시안 및 베르누이 분포를 사용해 거의 동일한 수의 긍정 및 부정 예를 갖는 훈련 및 테스트 데이터 세트를 무작위로 생성한다. 구체적으로, 반드시 생성되어야 하는 각 입력-출력 쌍 (X, y)의 경우, 일부 실시예는 다음을 수행한다:
- y를 생성한다.
- 관계 내의 멤버십이 y와 매치할 때까지 X를 반복 생성한다.
GP 인스턴스 A 및 B는 모두 다음 설정 속성을 갖는다.
- 모든 세대에서, 일부 실시예는 (샹기 기술된) 크기 t = 32의 새로운 훈련 데이터 세트 D를 생성하고, 새로운 훈련 데이터 세트를 해당 세대에 대한 적합성 스코어에 대한 근거로 사용한다.
- 적합성 스코어 F를 현재 모집단 내 비단순 프로그램 g에 할당하기 위해, 일부 실시예는 다음과 같이 차등 적합성 d를 우선 계산한다.
-- 실 변수 r을 0으로 초기화한다.
-- D의 각 (X, Y)의 경우, 다음을 수행한다:
--- 입력 X에 프로그램 g를 실행한다.
--- g가 출력 y를 산출할 경우, 1을 r에 추가한다.
--- 그렇지 않으면, r에서 1을 차감한다.
-- t로 나눈 d = r를 계산한다.
이를 통해 d는 -1과 1 사이의 값을 갖게 된다. 적합성 스코어는 F = 1 + εd로, 여기서 ε은 상수 값이 0.5인 선택 강도이다.
- 모집단 크기는 256이다.
- 종료 조건은 다음과 같다. 모든 세대에서 (연결(ties)이 임의로 해제된 경우) 적합성 스코어가 가장 큰 프로그램 g는 스코어를 다시 획득하지만, 이번에는 사이즈가 t인 새로 생성된 테스트 데이터 세트를 사용한다. g가 훈련 및 테스트 데이트 세트 모두에서 만점을 받은 경우, g가 솔루션인 상태에서 프로세스가 성공적으로 종료된다. 2,000 세대 내에서 이러한 솔루션을 찾지 못한 경우, 프로세스는 실패로 종료된다.
또한, 각 GP 인스턴스는 무작위로 (초기화 무작위 모드) 또는 제1단계에서 산출된 마지막 256개의 시드를 사용해 (초기화 시드 모드) 모집단을 초기화 시킬 수 있는 옵션을 갖는다. 일부 실시예는 각 모드에서 소정의 횟수만큼 (예를 들어, 10번) 각 GP 인스턴스 A와 B를 실행한다. 한 실험에서, 획득한 결과는 다음과 같다:
- 무작위 모드에서 GP 인스턴스 A는 6회 성공 및 4회 실패를 산출했다.
- 시드 모드에서 GP 인스턴스 A는 10회 성공 및 0회 실패를 산출했다.
- 무작위 모드에서 GP 인스턴스 B는 1회 성공 및 9회 실패를 산출했다.
- 시드 모드에서 GP 인스턴스 B는 6회 성공 및 4회 실패를 산출했다.
이렇게, 도2를 참조하여 상기 기술된 프로세스는 이러한 GP 인스턴스에 (전통적인 모집단 시드 방법에 비해) 유의미한 성능 향상을 제공한다.
본 개시에서 사용하는 용어는 단순히 특정 실시예를 설명하기 위한 것으로, 청구항을 제한하기 위함이 아니다. 실시예 및 첨부한 청구항 설명에서 사용되는 바와 같이, 단수형 “a”, “an” 및 “the”는 문맥상 명확하게 달리 명시하지 않는 한 복수형 또한 포함하는 것으로 의도된다. 또한 본 개시에서 사용되는 용어 “및/또는(and/or)”은 하나 이상의 연관된 나열 항목의 가능한 모든 조합을 의미하고 포함하는 것으로 이해한다. 또한 본 개시에서 사용될 때 “포함하다(comprises)” 및/또는 “포함하는(comprising)”라는 용어는 명시된 특징, 정수, 단계, 동작, 요소 및/또는 구성 요소의 존재를 명시하나, 하나 이상의 다른 특징, 정수, 단계, 동작, 요소, 구성 요소 및/또는 그 그룹의 존재 또는 추가를 배제하지 않는다.
본 개시에서 사용되는 바와 같이, “만약(if)”라는 용어는 명시된 선행 조건이 문맥에 따라 참인 “때(when)” 또는 “따라(upon)” 또는 “결정에 대하여(in response to determining)” 또는 “결정에 의거하여(in accordance with a determination)” 또는 “발견에 대하여(in response to detecting)”을 의미하는 것으로 해석될 수 있다. 이와 유사하게, “만약 [명시된 선행 조건이 참이라고] 결정된다면” 또는 “만약 [명시된 선행 조건이 참이라면]” 또는 “[명시된 선행 조건이 참]일 때” 라는 문구는 "결정에 따라" 또는 "결정에 응답하여" 또는 "결정에 따라서" 또는 "검출에 따라" 또는 "검출에 대하여" 명시된 선행 조건이 문맥에 따라 참임을 의미하는 것으로 해석할 수 있다.
전술 내용은 설명을 목적으로 특정 실시예를 참조하여 기술되었다. 그러나 상기 예시적 논의는 하나도 빠뜨리는 것 없이 완전히 하고자 하거나 본 발명을 개시된 정확한 형식으로 제한하고자 하지 않는다. 상기 교시 내용을 고려하여 많은 수정 및 변경이 가능하다. 실시예는 본 발명의 원리와 그 실질적인 적용을 가장 잘 설명하기 위해 선택되고 기술되어, 이로 인해 다른 당업자는 고려되는 특정 용도에 적합한 다양한 수정을 통해 본 발명 및 다양한 실시예를 가장 잘 활용할 수 있다.
별첨(Appendix)
Figure pct00001
Figure pct00002
Figure pct00003
Figure pct00004
Figure pct00005
Figure pct00006
Figure pct00007
Figure pct00008
Figure pct00009
Figure pct00010
Figure pct00011

Claims (20)

  1. 제네릭 계산 빌딩 블록의 진화 방법으로서, 상기 방법은:
    함수를 인코딩하는 무작위로 생성된 프로그램으로 부모 모집단을 초기화하는 단계;
    무작위로 생성된 테스트 입력의 리스트를 획득하는 단계;
    무작위로 생성된 이진 문자열의 입력-출력 쌍을 포함하는 목표 데이터 세트를 생성하는 단계;
    상기 부모 모집단의 각 프로그램에 적합성 스코어를 할당하는 적합성 함수를 적용하는 단계, 여기서 상기 적합성 스코어는 적어도 상기 목표 데이터 세트의 상기 입력-출력 쌍을 매치하는 프로그램의 능력을 나타냄;
    신규 조건을 충족하는 상기 부모 모집단 내 상기 프로그램의 사본으로 시드 리스트를 초기화하는 단계, 여기서 상기 신규 조건은 상기 무작위로 생성된 테스트 입력의 리스트에 대한 별개의 및 고유의 출력을 생성할 수 있는 프로그램의 능력을 나타냄;
    상기 시드 리스트의 종료 조건이 충족되었는지 여부를 결정하는 단계, 여기서 상기 종료 조건은 하나 이상의 유전 프로그래밍 인스턴스를 해결하는 상기 시드 리스트 내 하나 이상의 프로그램의 능력을 나타냄;
    상기 종료 조건이 충족되지 않았다는 결정에 따라:
    프로그램의 현재 자손 모집단을 획득하기 위해 최소 하나의 유전 연산자를 상기 부모 모집단에 적용하는 단계, 여기서 상기 최소 하나의 유전 연산자는 상기 하나 이상의 유전 프로그래밍 인스턴스를 해결하기 위한, 프로그램의 적합성 스코어를 기반으로, 상기 시드 리스트의 성장을 위해 상기 부모 모집단에 적용된 연산자가 포함됨; 및
    이하의 단계들을 상기 종료 조건이 충족될 때까지 반복하는 단계를 포함하고, 상기 이하의 단계들은:
    무작위로 생성된 이진 문자열의 입력-출력 쌍을 포함하는 새로운 목표 데이터 세트를 생성하는 단계;
    상기 현재 자손 모집단 내 각 프로그램에 새로운 적합성 스코어를 할당하는 상기 적합성 함수를 적용하는 단계, 여기서 상기 새로운 적합성 스코어는 적어도 상기 새로운 목표 데이터 세트의 상기 입력-출력 쌍을 매치하는 프로그램의 능력을 나타냄;
    상기 시드 리스트에 상기 신규 조건을 충족하는 상기 현재 자손 모집단 내 프로그램의 사본을 첨부하는 단계; 및
    상기 최소 하나의 유전 연산자를 상기 현재 자손 모집단에 적용하여 프로그램의 새로운 자손 모집단을 획득하고 프로그램의 상기 새로운 자손 모집단을 상기 현재 자손 모집단으로 설정하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서,
    복수의 문제를 나타내는 유전 프로그래밍 인스턴스의 시험조 내에서 모집단을 초기화시키기 위해 상기 시드 리스트를 사용하는 단계; 및
    상기 시험조의 시험 결과를 기반으로 상기 종료 조건이 충족되었는지 여부를 결정하는 단계를 더 포함하는, 방법.
  3. 제 1 항에 있어서,
    상기 최소 하나의 유전 연산자를 상기 현재 자손 모집단에 적용할 때, 베르누이 분포를 기반으로, 상기 현재 자손 모집단 내 프로그램에 대한 상기 시드 리스트 내 프로그램을 부모로 선택하는 단계를 더 포함하고, 여기서 상기 시드 리스트 내 각 프로그램이 부모로 선택될 확률은 동일(equally liked to be selected)한, 방법.
  4. 제 1 항에 있어서,
    프로그램의 상기 신규 조건 충족 여부에 대한 결정은:
    상기 무작위로 생성된 테스트 입력에 대해, 상기 시드 리스트 내 프로그램에 의해 인코딩된 함수에 의해 생성된 출력의 시퀀스와는 별개의, 상기 무작위로 생성된 테스트 입력에 대해, 출력의 시퀀스를 생성하는 함수를 프로그램이 인코딩한다는 결정에 기반하는, 방법.
  5. 제 4 항에 있어서,
    상기 시드 리스트 내 각 프로그램에 대해, 상기 무작위로 생성된 테스트 입력에 대한 상기 프로그램에 의해 인코딩된 함수에 의해 생성된 출력의 시퀀스를 포함하는 함수 시그니처를 결정 및 저장하는 단계; 및
    상기 함수 시그니처를 색출하는 단계를 더 포함하고;
    상기 프로그램이 상기 시드 리스트 내 프로그램에 의해 인코딩되는 함수와는 별개의 함수를 인코딩한다는 결정은:
    상기 무작위로 생성된 테스트 입력에 대해, 상기 함수 시그니처와는 별개의 출력의 시퀀스를 생성하는 함수를 상기 프로그램이 인코딩한다는 결정에 기반하는, 방법.
  6. 제 1 항에 있어서,
    상기 종료 조건은 상기 시드 리스트 크기에 적어도 의존하는, 방법.
  7. 제 1 항에 있어서,
    상기 종료 조건은 상기 시드 리스트가 소정의 성장률로 성장하고 있다는 결정에 적어도 의존하는, 방법.
  8. 제 1 항에 있어서,
    상기 적합성 함수를 적용할 때 임의로 연결을 해제하는 단계를 더 포함하는, 방법.
  9. 제 1 항에 있어서,
    상기 시드 리스트를 초기화하고 상기 시드 리스트에 첨부할 때, 입력을 읽지 않는 단순 함수를 인코딩하는 프로그램을 상기 시드 리스트로부터 폐기하는 단계를 더 포함하는, 방법.
  10. 제 9 항에 있어서,
    입력을 읽지 않는 단순 함수를 인코딩하는 프로그램을 식별하기 위해 구문 분석을 수행하는 단계를 더 포함하는, 방법.
  11. 제 1 항에 있어서,
    상기 시드 리스트를 초기화하고 상기 시드 리스트에 첨부할 때, 비정상적인 런타임 동작을 갖거나 비정상적인 리소스 요건을 갖는 함수를 인코딩하는 프로그램을 상기 시드 리스트로부터 폐기하는 단계를 더 포함하는, 방법.
  12. 제 1 항에 있어서,
    상기 시드 리스트 내 소정의 개수의 프로그램을 이용해 유전 프로그래밍의 새로운 인스턴스에 대한 초기 모집단을 시딩하는 단계를 더 포함하는, 방법.
  13. 제 1 항에 있어서,
    상기 최소 하나의 유전 연산자는 선택 연산자, 돌연변이 연산자, 및 교차 연산자 중 하나 이상인, 방법.
  14. 제 1 항에 있어서,
    무작위로 생성된 이진 문자열의 상기 입력-출력 쌍의 각 입력은 입력 확률 분포를 기반으로 생성되고, 무작위로 생성된 이진 문자열의 상기 입력-출력 쌍의 각 출력은 출력 확률 분포를 기반으로 생성되는, 방법.
  15. 제 14 항에 있어서,
    상기 입력 확률 분포는 픽셀 강도 범위에 대한 가우시안 분포이고, 상기 출력 확률 분포는 [0.0, 1.0]에 대한 가우시안 분포인, 방법.
  16. 제 1 항에 있어서,
    상기 적합성 함수는 동일 입력에 대해 비트식 반대 출력을 산출하는 함수를 인코딩하는 프로그램에 동일 적합성 스코어를 할당하는, 방법.
  17. 제 1 항에 있어서,
    상기 적합성 함수는 상기 프로그램의 출력과 목표 데이터 세트 간의 매치의 정도를 측정하기 위해 -1과 1 사이에서, 값이 클수록 더 높은 매치 정도를 나타내는, 적합성 스코어를 프로그램에 할당하는, 방법.
  18. 제 1 항에 있어서,
    상기 하나 이상의 유전 프로그래밍 인스턴스는 수기 숫자의 부분적인 분류를 위한 유전 프로그래밍 인스턴스를 포함하고, 무작위로 생성된 이진 문자열의 상기 입력-출력 쌍은 MNIST 데이터베이스로부터의 이미지를 기반으로 생성되며, 상기 방법은 2000 회 반복 후 상기 방법을 종료하는 단계를 더 포함하는, 방법.
  19. 데이터 시각화를 생성하는 컴퓨터 시스템에 있어서, 상기 컴퓨터 시스템은:
    하나 이상의 프로세서; 및
    메모리를 포함하고,
    상기 메모리는 상기 하나 이상의 프로세서에 의해 실행되도록 설정된 하나 이상의 프로그램을 저장하고, 상기 하나 이상의 프로그램은:
    함수를 인코딩하는 무작위로 생성된 프로그램으로 부모 모집단을 초기화하는 것;
    무작위로 생성된 테스트 입력의 리스트를 획득하는 것;
    무작위로 생성된 이진 문자열의 입력-출력 쌍을 포함하는 목표 데이터 세트를 생성하는 것;
    상기 부모 모집단의 각 프로그램에 적합성 스코어를 할당하는 적합성 함수를 적용하는 것, 여기서 상기 적합성 스코어는 적어도 상기 목표 데이터 세트의 상기 입력-출력 쌍을 매치하는 프로그램의 능력을 나타냄;
    신규 조건을 충족하는 상기 부모 모집단 내 상기 프로그램의 사본으로 시드 리스트를 초기화하는 것, 여기서 상기 신규 조건은 상기 무작위로 생성된 테스트 입력의 리스트에 대한 별개의 및 고유의 출력을 생성할 수 있는 프로그램의 능력을 나타냄;
    상기 시드 리스트의 종료 조건이 충족되었는지 여부를 결정하는 것, 여기서 상기 종료 조건은 하나 이상의 유전 프로그래밍 인스턴스를 해결하는 상기 시드 리스트 내 하나 이상의 프로그램의 능력을 나타냄;
    상기 종료 조건이 충족되지 않았다는 결정에 따라:
    프로그램의 현재 자손 모집단을 획득하기 위해 최소 하나의 유전 연산자를 상기 부모 모집단에 적용하는 것, 여기서 상기 최소 하나의 유전 연산자는 상기 하나 이상의 유전 프로그래밍 인스턴스를 해결하기 위한, 프로그램의 적합성 스코어를 기반으로, 상기 시드 리스트의 성장을 위해 상기 부모 모집단에 적용된 연산자가 포함됨; 및
    이하의 단계들을 상기 종료 조건이 충족될 때까지 반복하는 것에 대한 명령을 포함하고, 상기 이하의 단계들은:
    무작위로 생성된 이진 문자열의 입력-출력 쌍을 포함하는 새로운 목표 데이터 세트를 생성하는 단계;
    상기 현재 자손 모집단 내 각 프로그램에 새로운 적합성 스코어를 할당하는 상기 적합성 함수를 적용하는 단계, 여기서 상기 새로운 적합성 스코어는 적어도 상기 새로운 목표 데이터 세트의 상기 입력-출력 쌍을 매치하는 프로그램의 능력을 나타냄;
    상기 시드 리스트에 상기 신규 조건을 충족하는 상기 현재 자손 모집단 내 프로그램의 사본을 첨부하는 단계; 및
    상기 최소 하나의 유전 연산자를 상기 현재 자손 모집단에 적용하여 프로그램의 새로운 자손 모집단을 획득하고 프로그램의 상기 새로운 자손 모집단을 상기 현재 자손 모집단으로 설정하는 단계를 포함하는, 컴퓨터 시스템.
  20. 디스플레이, 하나 이상의 프로세서, 및 메모리를 구비한 컴퓨터 시스템에 의해 실행되도록 설정된 하나 이상의 프로그램을 저장하는 비일시적 컴퓨터 판독 가능 저장 매체에 있어서, 상기 하나 이상의 프로그램은:
    함수를 인코딩하는 무작위로 생성된 프로그램으로 부모 모집단을 초기화하는 것;
    무작위로 생성된 테스트 입력의 리스트를 획득하는 것;
    무작위로 생성된 이진 문자열의 입력-출력 쌍을 포함하는 목표 데이터 세트를 생성하는 것;
    상기 부모 모집단의 각 프로그램에 적합성 스코어를 할당하는 적합성 함수를 적용하는 것, 여기서 상기 적합성 스코어는 적어도 상기 목표 데이터 세트의 상기 입력-출력 쌍을 매치하는 프로그램의 능력을 나타냄;
    신규 조건을 충족하는 상기 부모 모집단 내 상기 프로그램의 사본으로 시드 리스트를 초기화하는 것, 여기서 상기 신규 조건은 상기 무작위로 생성된 테스트 입력의 리스트에 대한 별개의 및 고유의 출력을 생성할 수 있는 프로그램의 능력을 나타냄;
    상기 시드 리스트의 종료 조건이 충족되었는지 여부를 결정하는 것, 여기서 상기 종료 조건은 하나 이상의 유전 프로그래밍 인스턴스를 해결하는 상기 시드 리스트 내 하나 이상의 프로그램의 능력을 나타냄;
    상기 종료 조건이 충족되지 않았다는 결정에 따라:
    프로그램의 현재 자손 모집단을 획득하기 위해 최소 하나의 유전 연산자를 상기 부모 모집단에 적용하는 것, 여기서 상기 최소 하나의 유전 연산자는 상기 하나 이상의 유전 프로그래밍 인스턴스를 해결하기 위한, 프로그램의 적합성 스코어를 기반으로, 상기 시드 리스트의 성장을 위해 상기 부모 모집단에 적용된 연산자가 포함됨; 및
    이하의 단계들을 상기 종료 조건이 충족될 때까지 반복하는 것에 대한 명령을 포함하고, 상기 이하의 단계들은:
    무작위로 생성된 이진 문자열의 입력-출력 쌍을 포함하는 새로운 목표 데이터 세트를 생성하는 단계;
    상기 현재 자손 모집단 내 각 프로그램에 새로운 적합성 스코어를 할당하는 상기 적합성 함수를 적용하는 단계, 여기서 상기 새로운 적합성 스코어는 적어도 상기 새로운 목표 데이터 세트의 상기 입력-출력 쌍을 매치하는 프로그램의 능력을 나타냄;
    상기 시드 리스트에 상기 신규 조건을 충족하는 상기 현재 자손 모집단 내 프로그램의 사본을 첨부하는 단계; 및
    상기 최소 하나의 유전 연산자를 상기 현재 자손 모집단에 적용하여 프로그램의 새로운 자손 모집단을 획득하고 프로그램의 상기 새로운 자손 모집단을 상기 현재 자손 모집단으로 설정하는 단계를 포함하는, 비일시적 컴퓨터 판독 가능 저장 매체.
KR1020227022798A 2019-12-06 2020-01-30 제네릭 빌딩 블록 창출을 위한 유전 프로그래밍 사용 KR20220129120A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201962944468P 2019-12-06 2019-12-06
US62/944,468 2019-12-06
PCT/US2020/015873 WO2021112899A1 (en) 2019-12-06 2020-01-30 Using genetic programming to create generic building blocks

Publications (1)

Publication Number Publication Date
KR20220129120A true KR20220129120A (ko) 2022-09-22

Family

ID=74882659

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227022798A KR20220129120A (ko) 2019-12-06 2020-01-30 제네릭 빌딩 블록 창출을 위한 유전 프로그래밍 사용

Country Status (7)

Country Link
US (1) US10956129B1 (ko)
EP (1) EP4070245A4 (ko)
JP (1) JP7358645B2 (ko)
KR (1) KR20220129120A (ko)
CN (1) CN115104109A (ko)
CA (1) CA3163782A1 (ko)
MX (1) MX2022006894A (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112908416B (zh) * 2021-04-13 2024-02-02 湖北工业大学 生物医学数据特征选择方法及装置、计算设备及存储介质
CN116202611B (zh) * 2023-05-06 2023-07-14 中国海洋大学 一种基于元学习的小样本声速剖面反演方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1204920A1 (en) 1999-07-16 2002-05-15 Lamarck, Inc. Fault tolerant and combinatorial software environment system, method and medium
US7127436B2 (en) * 2002-03-18 2006-10-24 Motorola, Inc. Gene expression programming algorithm
GB0228751D0 (en) 2002-12-10 2003-01-15 Bae Systems Plc Method of design using genetic programming
WO2018224165A1 (en) 2017-06-09 2018-12-13 Huawei Technologies Co., Ltd. Device and method for clustering a set of test objects
EP3683763A4 (en) 2017-09-11 2020-09-16 Fujitsu Limited INFORMATION PROCESSING DEVICE, INFORMATION PROCESSING METHOD AND INFORMATION PROCESSING PROGRAM

Also Published As

Publication number Publication date
CA3163782A1 (en) 2021-06-10
CN115104109A (zh) 2022-09-23
EP4070245A1 (en) 2022-10-12
MX2022006894A (es) 2022-09-09
JP2023509583A (ja) 2023-03-09
JP7358645B2 (ja) 2023-10-10
EP4070245A4 (en) 2024-01-03
US10956129B1 (en) 2021-03-23

Similar Documents

Publication Publication Date Title
Nikolentzos et al. Graph kernels: A survey
You et al. Graphrnn: Generating realistic graphs with deep auto-regressive models
Eriksson et al. Active clustering: Robust and efficient hierarchical clustering using adaptively selected similarities
Shonkwiler Parallel genetic algorithms.
Cilibrasi Statistical inference through data compression
CN114117153B (zh) 一种基于相似度重学习的在线跨模态检索方法及系统
EP1506495A1 (en) Gene expression programming algorithm
CN110362723A (zh) 一种题目特征表示方法、装置及存储介质
US11972842B2 (en) Automated feature extraction using genetic programming
KR20220129120A (ko) 제네릭 빌딩 블록 창출을 위한 유전 프로그래밍 사용
CN115293919A (zh) 面向社交网络分布外泛化的图神经网络预测方法及系统
Śmieja et al. Efficient mixture model for clustering of sparse high dimensional binary data
CN115795065A (zh) 基于带权哈希码的多媒体数据跨模态检索方法及系统
Cho et al. Genetic evolution processing of data structures for image classification
WO2015109781A1 (zh) 基于期望最大确定统计模型参数的方法和装置
Simonovsky et al. Onionnet: Sharing features in cascaded deep classifiers
Nandwani et al. Neural learning of one-of-many solutions for combinatorial problems in structured output spaces
KR20230121892A (ko) 유전 프로그래밍을 이용한 자동화된 특징 추출
JP2010033214A (ja) 規則学習方法、プログラム及び装置
Fong et al. Multi-Level Symbolic Regression: Function Structure Learning for Multi-Level Data
WO2021112899A1 (en) Using genetic programming to create generic building blocks
Ramos-Jiménez et al. Induction of decision trees using an internal control of induction
Xie et al. An adaptive error-correcting output codes algorithm based on gene expression programming and similarity measurement matrix
Müller Alignments and beyond: A versatile swarm-based framework for de novo amplicon clustering
DePavia et al. Error-Tolerant Exact Query Learning of Finite Set Partitions with Same-Cluster Oracle

Legal Events

Date Code Title Description
A201 Request for examination