본문 바로가기

전체 글

(35)
슈퍼마리오 1을 플레이하는 AI를 만드는 방법(2) 1부에서는 슈퍼마리오 1의 현재 화면을 전처리하기 위해 메모리 뷰어를 뜯어보았고, 땅, 벽돌, 파이프 등의 정적 정보가 있는 메모리 위치를 파악 하였다. 하지만 정적 정보만으로는 인공지능이 적절한 행동을 판단하기에 부족하다. 마리오의 위치, 몬스터의 위치 등 플레이를 함에따라 움직이는 동적정보가 필요하다. 동적 정보들을 저장하고 있는 값들은 메모리의 특정 주소에 저장되어있을 것으로 파악된다. 특히 동적 할당 영역으로 추정되었던 0800 이전의 주소에 있을 것이다. (1부 참고) 주소를 정확히 찾기 위해서는 치트 엔진과 같은 프로그램이 매우 도움이 된다. 내가 원하는 값(예: 점수, 목숨 등)의 주소를 찾기 위해서 해당 값을 검색하거나 값의 변화를 검색해서 원하는 값의 후보 주소들을 줄여준다. 원하는 값의..
슈퍼마리오 1을 플레이하는 AI를 만드는 방법 아주 어릴 적에 슈퍼마리오를 플레이한 적이 있다. 당시에는 그저 빠르게 깨는 방법에만 몰두해서 각종 비밀 루트를 꿰고 다녔었다. 1탄 -> 4탄 -> 8탄으로 가는 루트는 아직도 기억이 난다. 각설하고, 슈퍼마리오1은 닌텐도에서 만든 고전 명작 게임이라고 할 수 있다. 준비물: VirtualNES, Super Mario 1 ROM, CheatEngine, Pycharm 슈퍼마리오를 플레이하는 AI를 만들 수 있을 까? 아직은 잘 모르겠다. 전처리에 기하는 노력과 인공지능의 복잡도는 반비례관계라고 할 수 있다. 전처리를 열심히 하면, 간단한 네트워크만으로도 인공지능을 만들 수 있다. 반면, 전처리 없이 raw 데이터를 가지고 네트워크를 만들어야한다면 네트워크 구조와 깊이가 상당히 복잡해야한다. 고전 컴퓨터..
폴란드 테트리스를 플레이하는 AI를 만드는 방법(2) 지난 시간에 이어서 글을 쓴다. python으로 얻어진 스크린샷에서 필요한 정보들을 얻어보자. 가장 먼저, 현재 주어진 블록의 종류를 알아내보자. 맨 윗줄을 조사하면 주어진 블록의 종류를 알아낼 수 있다. 살짝 보이는 맨 윗줄을 crop한다. 그냥 생각 나는 대로 블록 종류를 판단하는 알고리즘을 다음과 같이 짰다. 1. 한 줄은 10칸으로 이루어져 있다. 쉽게 전처리할 수 있도록 10x1로 리사이즈한다. 2. 리사이즈된 이미지는 RGB이다. RGB의 평균값으로 블록의 종류를 특정할 수도 있지만, 혹시 모르니 HSV 로 바꾸고, Hue(색조)값만 뽑는다. 3. 5번째 칸은 항상 블록의 일부가 포함되어있으므로 5번째 칸의 값을 Hue 값을 블록별로 정리한다. color_block_map={ 43:'S_BLO..
폴란드 테트리스를 플레이하는 AI를 만드는 방법 예전에 했던 잡코딩 중 하나를 소개하려 한다. 테트리스는 전세계에서 오랫동안 많은 사랑을 받은 고전 게임이다. 너무 유명하니까 자세한 설명은 생략한다. 게임의 목적은 5가지 모양으로 구성된 블록들을 통해 한 층을 빼곡히 채우도록 하면 점수를 얻는 간단한 게임이다. 게임 룰 자체는 간단하지만 빠른 속도와 T 스핀 등의 기술을 통해 많은 점수를 얻을 수 있는 만큼 테트리스 고인물도 전세계에 많이 분포해 있다. 테트리스는 넷마블, tetris.io 등 다양한 플랫폼에서 할 수 있는데, 이번 시간에 만져볼 테트리스는 Online Poland Tetris로 정했다. 왜 이름이 폴란드 테트리스 인지는 모르겠다. 준비물은 폴란드 테트리스(TetrisOnlinePoland)와 pycharm(python IDE) 게임을..
Supervised Learning(지도학습) 인공지능을 구현하는 데 있어서 다양한 방법론 들이 존재하는 데, 그중 압도적인 존재감을 자랑하는 방법이 지도학습이다. 지도학습(Supervised Learning)이란, (입력, 레이블)들의 집합으로 이루어진 데이터셋을 학습하여 인공신경망이 입력만 보고도 레이블을 예측할 수 있게 하는 것이다. 예를 들어, 각종 물체이미지들을 물체별로 구분하는 classification task에 대해서 살펴보면, 데이터셋은 (사과 이미지, 사과), (오렌지 이미지, 오렌지), (포도 이미지, 포도) 와 같이 이루어져 있고, 인공신경망은 사과 이미지만 보고도 사과인 지 포도인지 구별할 수 있게 되는 것이다. 지도학습은 아주 다양한 분야에 쓰일 수 있다. logistic regression, linear regression..
수리통계학을 공부해야한다 요며칠 아니, 몇달간 곰곰히 생각해본 결과 내가 하고 싶은 일은 창업 혹은 대학원 진학으로 귀결 된다. 그 이유는 내가 연구에 아주 적성이 맞고 흥미가 있기 때문이다. 특히나 데이터를 통해 분석하고 새로운 수식을 만드는 연구에 대해서 상당한 흥미를 가지고 있다. 새로운 수식을 만들어서 최적화하고 성능을 높이는 데 기여하고 싶다. 결론적으로, 내가 하고 싶은 일을 내가 잘하기 위해서는 창업이 되었든 대학원이 되었든 데이터 분석을 아주 빠삭하게 공부해야한다. 어떤 형식의 데이터가 오든 간에 빠르게 분석하고 전처리하여 완벽한 모델링을 통한 최적화를 할 줄 아는 전문가. 데이터 셋을 분석하고, 필요한 데이터 셋의 크기와 습득 방법 및 비용 문제까지 계산해주는 전문가 바로 그것이 내가 되고 싶은 지향점이다. 단순..
파이썬으로 '크롤링' 하는법 웹크롤링이란 자동으로 웹을 탐색하고 필요한 정보를 긁어(crawl)오는 것을 말한다. 파싱부터 데이터베이스까지 아주 단순한 웹 크롤러를 만들어보고자 한다. 1. HTML 파싱 거의 모든 웹사이트들은 HTML이라는 파일로 어떻게 보여질 지 정해진다. 이 HTML 파일을 통해서 우리가 필요한 정보를 얻을 수 있다. 파싱이란 특정한 의미를 갖는 부분을 자르는 방법을 말한다. 우리가 받아올 HTML 정보는 따로 파싱이 되어있지 않는 형태이기 때문에 파이썬으로 파싱하는 것이 필요하다. HTML 파싱에 필요한 라이브러리는 다음과 같다 pip install requests pip install bs4 reqeusts는 HTTP 프로토콜 명령(GET, POST 등)을 통해 웹사이트의 소스파일(html)을 얻기위해 쓰는..
이해한다는 것에 대해서 어떤 개념을 '이해'했다는 것을 어떤 것일까 추상적인 단어이기 때문에 누군가 어떤 개념을 이해하고 있다는 것을 단순히 파악하기는 매우 어렵다. 그것을 알 방법이 있다면 사교육 과외 학습지 시장에 큰 파급력을 가져올 것이다. 왜냐하면 학생의 이해도를 봄으로써 해당 개념이 이해될 때까지 순차적으로 가르치면 되니까 학생 입장에서도 탄탄한 이해를 기반한 학습을 할 수 있고 수준별로 효율적인 학습도 가능해 질 것이다. 내가 생각하는 이해는 recognize와 recall로 이루어져있다. recognize는 인식이다. 어떤 그림 속에 사람이 몇명이고 고양이가 몇명인 지 안다는 것이다. recall은 떠올리는 것이다. 밀가루, 계란, 설탕, 우유가 있다고 할 때 이들을 가지고 쿠키, 카스테라, 아이스크림 등을 만들 ..