반응형

원래 유전(진화) 알고리즘을 써서 AI를 만들어보고자 하였지만,

세대를 거듭한다고 해서 테스트 점수가 우상향하지 않는 것 같아서,

일단 지도학습을 통해 다시 시도해 보고 있다.

 

https://truemaxdh.github.io/2048-AI/

 

https://truemaxdh.github.io/2048-AI/

Training Evolution Algorithm Guided Training Verify Verify Results TestModel

truemaxdh.github.io

위 사이트 메뉴 중에서,

[Evolution Algorithm]은 일단 보류중이고,

[Guided Training]이 현재 활성화된 상태이다.

[Verify Results]는 나중에 구현할 계획이며,

[Test Model]은 [Guided Training]의 결과로 생성된 모델을 불러와서 테스트해 볼 수 있다.

 

지도학습 방법을 구현하면서,

먼저 시도했던 유전(진화) 알고리즘이 잘 안되던 이유도 몇가지 알게 되었고,

시행착오를 통해 배우게 된 것들도 있다.

  • 입력값, 출력값, 가중치의 초기값 설정 문제
    • 포화(saturation) 발생 방지를 위해, 적절한 범위의 값을 사용해야 함.
    • 타리크 라시드의 [신경망 첫걸음]이라는 책에 의하면, 가중치의 초기값은 다음 범위가 적절
      • 노드로 오는 연결노드의 갯수에 루트를 씌운 값의 역수
    • ReLU의 경우에는, x<0인 경우 f(x)=0이고, 이를 미분하면 기울기가 0이므로, 역전파에 의한 가중치 업데이트가 이루어지지 않아서 문제가 될 수 있다.
      • 이 문제의 해결을 위해 몇가지 방법이 있겠지만, 그중 한가지는 가중치의 초기값을 모두 양의 실수로 초기화하는 방법이 있다.
    • 입력값의 전처리도 중요하다. 이번 경우에는 입력값의 범위를 0.01 ~ 0.99로 조절하였다.
      • 입력 배열(4*4=16)의 수치를 0은0, 0보다 크면 2의 로그값으로 바꾸고,
      • 최대값을 구한 다음,
      • 각 요소를 최대값으로 나누어 주되, 0은 0.01로, 1은 0.99로 변환
    • 출력 노드는 Left, Up, Right, Down의 4개이며, 실제 움직인 방향의 출력값은 1로, 나머지 방향은 0으로 학습시킨다.

위의 원칙들을 적용해서 테스트중이다.

이렇게 해서 지도학습이 잘 진행된다면,

유전(진화) 알고리즘에도 위의 내용들을 적용해서 다시 시도해 보려 한다.

반응형

'머신러닝&인공지능' 카테고리의 다른 글

2048을 Play하는 AI 개발 - 2  (0) 2019.12.01
2048을 Play하는 AI 개발  (0) 2019.11.18
2048과 딥러닝  (0) 2016.08.13
ConvNetJS를 이용한 XOR 분류 테스트  (0) 2016.07.20
언어별 딥러닝 라이브러리  (0) 2016.07.15
반응형

현재 진행중인 내용을 확인해 볼 수 있다.

RunningTest

 

https://truemaxdh.github.io/2048-AI/

 

truemaxdh.github.io

GitHub

 

truemaxdh/2048-AI

AI playing 2048. Contribute to truemaxdh/2048-AI development by creating an account on GitHub.

github.com

 

다음과 같은 테스트를 진행하였다.

  1. weight 초기화시 양의 실수만 사용
  2. weight 초기화시 실수를 사용하고, Node마다 ReLU 적용
  3. weight 초기화시 실수를 사용하고, Node마다 ReLU 적용. workaround(상하좌우 중 1순위 결과가 막히면 2순위, 2순위도 막히면 3순위, 3순위 막히면 4순위) 적용

2,3번에 대한 현재까지의 테스트 결과가, 다음 저장소에 올라와 있다.

테스트 결과

 

truemaxdh/2048-AI

AI playing 2048. Contribute to truemaxdh/2048-AI development by creating an account on GitHub.

github.com

지금까지의 결과를 보면서, 다음과 같은 문제점이 발견된다.

  1. 입력값이 커지면, 결과값도 커짐
    • 점수가 높아지고 입력값이 커짐에 따라, 이전의 학습결과가 무용지물이 될 수 있음
    • 결과값이 일정 범위 내에서 유지되게끔 하는 게 좋을 것 같음
  2. 진화를 하는 게 의미가 없어 보임
    • 세대를 거듭할 수록 최대점수나 평균 점수가 올라가길 바라지만, 실제 결과는 그렇지가 않음
    • 변이만 사용하는 진화 방법에 문제가 있을 수 있음
    • 변이의 방법(기존값 무시하고 신규 random값을 부여)에 문제가 있을 수 있음

 

 

그래서, 다음과 같은 해결책을 적용해서 다시 테스트해 보려 한다.

  1. 결과값 범위 유지
    • 모든 Node에서, 활성화 함수로 ReLU를 적용한 결과에 다시 log를 적용
    • 모든 Node의 결과값이 0, 1로만 나오도록 활성화 함수 수정
    • 전처리를 통해 입력값이 모두 0~1사이의 값을 갖도록 표준화
  2. 진화 방법 조정
    • 교차와 변이의 결합
    • 변이의 방법 조절(기존값에 적절히 작은 값을 증감)

 

한편, 이쯤에서 다른 사람들이 구현한 인공지능 사이트도 참고해 보는 것이 좋을 것 같다.

https://codemyroad.wordpress.com/2014/05/14/2048-ai-the-intelligent-bot/

 

2048 AI – The Intelligent Bot

Introduction In this article, we develop a simple AI for the game 2048 using the Expectimax algorithm and “weight matrices”, which will be described below, to determine the best possibl…

codemyroad.wordpress.com

 

반응형

'머신러닝&인공지능' 카테고리의 다른 글

2048을 Play하는 AI 개발 - 3  (0) 2019.12.22
2048을 Play하는 AI 개발  (0) 2019.11.18
2048과 딥러닝  (0) 2016.08.13
ConvNetJS를 이용한 XOR 분류 테스트  (0) 2016.07.20
언어별 딥러닝 라이브러리  (0) 2016.07.15
반응형

다음 책을 읽으면서, 아이디어가 떠올랐다.

- 줄리안 토겔리우스의 '재미나는 생각, AI와 게임'(줄리안 토겔리우스, 에이콘)

  (원제: Playing Smart: On Games, Intelligence, and Artificial Intelligence, Julian Togelius)

 

딥러닝(DeepLearnng)과 진화 알고리즘(Evolutionary Algorithm)을 토대로,

2048을 Play하는 AI를 만들어보고자 한다.

순전히 재미와 호기심으로 시작하는 것이다.

 

책에 의하면, 게임은 AI를 연구, 발전, 테스트하는데 좋은 재료이고,

AI는 게임을 좀더 재밌고 풍성하게 만드는 기반이 될 수 있다.

 

AI 연구에 있어서 2048 게임의 장점은, 다음과 같은 것들이 있다.

  • 격자(grid)의 크기가 4*4이므로, 학습을 위한 입력 요소가 많지 않다.
  • 소스가 공개되어 있다.(https://github.com/gabrielecirulli/2048)
  • 수정과 재배포에 제한이 거의 없는 MIT 라이센스이다.
  • HTML 및 Javascript로 만들어졌다.(웹에서 실행하기에 적절함)

 

진화 알고리즘은, 100개 정도의 딥러닝 샘플 생성후,

각 샘플마다 게임을 끝까지 진행한 후에,

최종 결과(점수)를 기준으로 상위 50개를 선택하고,

선택된 샘플을 임의 변경한 50개를 추가해서 총 100개를 다시 만든 후에,

같은 과정을 반복한다.

 

특별히 짜여진 계획은 없지만,

다음과 같은 단계로 진행하는 게 좋을 것 같다.

  1. 2048 소스 다운로드 및 분석
  2. 2048 소스를 테스트 용도에 맞게 변경
  3. Javascript로 딥러닝 및 진화 알고리즘 구현
  4. 2048 소스와 알고리즘 결합
  5. 결과 보관소를 마련하고, 그곳에 결과가 잘 저장되도록 구현

 

현재 위와 같은 방법으로 구현되어, 테스트를 진행중이다.

GitHub

 

truemaxdh/2048-AI

AI playing 2048. Contribute to truemaxdh/2048-AI development by creating an account on GitHub.

github.com

 

RunningTest

 

https://truemaxdh.github.io/2048-AI/

 

truemaxdh.github.io

 

반응형

'머신러닝&인공지능' 카테고리의 다른 글

2048을 Play하는 AI 개발 - 3  (0) 2019.12.22
2048을 Play하는 AI 개발 - 2  (0) 2019.12.01
2048과 딥러닝  (0) 2016.08.13
ConvNetJS를 이용한 XOR 분류 테스트  (0) 2016.07.20
언어별 딥러닝 라이브러리  (0) 2016.07.15
반응형

2048 게임을 즐기던 중에 문득,

딥러닝을 통해 컴퓨터가 2048 게임을 학습해서 실행해 보면 재밌겠다는 생각을 해 보았다.

딥러닝으로 바둑도 하고, ATARI의 벽돌깨기 게임도 하는 판에,

2048 게임을 못할 것도 없다는 생각에, 한번 시도해 볼까 하다가

혹시나 해서 인터넷을 검색해 보니,

역시나 벌써 누군가가 하고 있는 것을 발견했다.


YouTube

StackOverflow의 질문과 답변

GitHub에 올라온 소스


참고로, 다음 사이트에서는 

웹상에서 2048 게임을 할 수 있다.

Play 2048!


그리고 다음 블로그에는, 딥러닝은 아니지만 

AI를 통해 2048을 Play하는 내용의 글이 연재되어 있다.

An AI for 2048 

반응형

'머신러닝&인공지능' 카테고리의 다른 글

2048을 Play하는 AI 개발 - 2  (0) 2019.12.01
2048을 Play하는 AI 개발  (0) 2019.11.18
ConvNetJS를 이용한 XOR 분류 테스트  (0) 2016.07.20
언어별 딥러닝 라이브러리  (0) 2016.07.15
CodeOnWeb 소개  (0) 2016.07.14
반응형

ConvNetJS를 이용하면, JavaScript를 이용해 머신러닝을 쉽게 구현하고 테스트할 수 있다.

그래서 연습삼아, 신경망을 통해 XOR을 학습하고 분류하는 과정을 구현해 보았다.

ConvNetJSGetting Started에 나온 Example: Neural Net Classification을 토대로,

Hidden Layer 갯수 및 각 레이어별 뉴런의 갯수를 설정할 수 있게 해 보았다.

신경망에 레이어를 추가하는 개념이 나오기 전까지는 

XOR을 학습하고 분류하는 것이 불가능했다고 하는데, 

실제로 Hidden layer 갯수를 0으로 하고 테스트해 보면,

XOR 분류가 안되는 것을 확인해 볼 수 있다.

 Hidden Layer 갯수

 각 Hidden Layer의 뉴런수


반응형

'머신러닝&인공지능' 카테고리의 다른 글

2048을 Play하는 AI 개발  (0) 2019.11.18
2048과 딥러닝  (0) 2016.08.13
언어별 딥러닝 라이브러리  (0) 2016.07.15
CodeOnWeb 소개  (0) 2016.07.14
MNIST를 통한 Deeplearning 학습 링크  (0) 2016.07.13
반응형

'구슬이 서말이라도 꿰어야 보배'이듯이,

딥러닝도 실습, 개발 및 테스트를 통해서만이 내것이 된다.

그리고, 그러기 위해서는 결국, 개발언어와 그에 맞는 라이브러리를 선택해야 한다.


다음 사이트에, 언어별 딥러닝 라이브러리가 잘 정리되어 있다.

Deep Learning Libraries by Language

프로그래밍 언어별 딥러닝 라이브러리 정리


위 사이트에 보면, Phyton용 라이브러리가 가장 많은 것을 확인할 수 있다.

Theano와 TensorFlow는 이미 조금 알아봤고,

그밖에 다음과 같은 라이브러리들에 관심이 간다.

  1. ConvNetJS
    • JavaScript 라이브러리라서, 별도의 프로그램 설치나 컴파일 등이 필요 없다. 
    • 스탠포드 대학의 Andrej Karpathy에 의해 만들어진 후, 여러 기고자들에 의해 기능이 확장되었다.
    • 별다른 환경 설치가 필요 없는 점, HTML5의 풍부한 표현력을 이용하여 결과를 시각화 하기 좋다는 점 등이 장점일 것 같다.
    • 실제로 예제들을 살펴보면, 다른 라이브러리들과 달리 진행 결과를 눈으로 확인할 수 있게 놀랍도록 잘 보여준다.
  2. Caffe
    • Python 및 C++용 라이브러리
  3. Deeplearning4j
    • Java용 라이브러리
  4. Accord.NET
    • C#으로 만들어진 .NET용 라이브러리


반응형
반응형

머신러닝 관련 이런저런 검색을 하던 차에,

웹을 통해 머신러닝을 포함한 프로그래밍 관련 기술을 배우고,

직접 코딩하고 실행할 수 있는 실습 환경까지 제공되는 사이트를 발견하게 되었다.

CodeOnWeb


현재는 오픈베타 상태라 그런지, 회원 가입 및 사용에 아무런 제약이 없이

무료로 이용할 수 있다.


다음 링크에서 현재 진행중인 강의 목록을 확인할 수 있다.

CodeOnWeb Course


목록 중에, 기계학습/딥러닝에 관한 내용도 있다.

TensorFlow를 통해 딥러닝을 구현하고 테스트하는 내용이 나와 있는데,

TensorFlow 튜토리얼에 나온 내용과 동일하다.

좋은 점은, 웹상에서 강의 내용을 코딩하고 실행까지 해 볼 수 있다는 것이다.

Phyton을 기본 언어로 사용하며, 강의 내용을 실행하는데 필요한 추가 Library들은

이미 서버에 설치되어 있다.

따라서, 사용자는 회원 가입 후 로그인만 하면 

별다른 프로그램 설치 없이 강의를 읽고 실습도 할 수 있다.


서비스를 제공하는 곳은 '래블업'이라는 스타트업이다.

앞으로는 어떨지 모르지만, 

당분간은 자주 애용하게 될 것 같다.




반응형
반응형

머신러닝을 학습할 때 자주 등장하는 예제는 MNIST 분류일 것이다.

MNIST란, 숫자 필기 데이터 모음이며, 

머신러닝 기법간 정확도 비교를 위해 자주 사용된다.

자세한 정의는 다음 링크에 나와 있다.

MNIST database


또한, 딥러닝에 필요한 기능들을 구현해 둔 Library들이 있는데,

내가 찾아본 것은 다음의 몇가지들이다.


위에 열거한 Library들에 대한 Tutorial을 보면,

공통적으로 MNIST 데이터를 사용하는 예제들이 나온다.


Theano

TensorFlow



반응형

'머신러닝&인공지능' 카테고리의 다른 글

언어별 딥러닝 라이브러리  (0) 2016.07.15
CodeOnWeb 소개  (0) 2016.07.14
2-norm과 스칼라곱을 통한 distance 계산  (0) 2016.04.29
빅데이터  (0) 2016.04.28
인공지능 관심 사이트  (0) 2016.03.22
반응형

머신러닝과 관련된 내용들을 찾아 보다 보면,

낮설어 보이는 수학 기호나 개념들이 많이 있다.

그래서 '이게 뭔가' 하면서 검색을 하다 보면,

예전에 배웠던 기억이 나기도 한다.

배우기는 했지만, 너무 오래 쓰지 않다 보니

까맣게 잊고 있었던 것들이다.


이렇게 필요할 때마다 하나씩 발견해 나가는 

예전 기억들 내지는 새로운 배움들에 대해 정리해 놓아야 할 것 같다.


그래서 오늘은, 다음 공식을 이해하기 위한 내용을 찾아보았다.

다음은, Neighborhood Method에서 유사도를 측정하는데 사용되는 distance function이다.


$$ d_{ij} = \frac{({r_i} * {r_j})}{(|r_i| * |r_j|)} $$


이 공식의 분모는 '2-norm'이라는 개념이고, 분자는 '스칼라곱'이라는 개념이다.

이 두 개념을 바탕으로 위 공식을 다시 보게 되면,

위 식의 결과는 cos θ가 된다.


즉, $r_{i}$와 $r_{j}$의 거리가 가까우면, θ값이 작아져서 1에 가까운 수가 되고,

거리가 멀어지면, θ값이 커져서 0에 가까운 수가 된다.

반응형

'머신러닝&인공지능' 카테고리의 다른 글

언어별 딥러닝 라이브러리  (0) 2016.07.15
CodeOnWeb 소개  (0) 2016.07.14
MNIST를 통한 Deeplearning 학습 링크  (0) 2016.07.13
빅데이터  (0) 2016.04.28
인공지능 관심 사이트  (0) 2016.03.22
반응형

한동안 여기저기서 '빅데이터, 빅데이터...' 하면서 

'빅데이터'가 주요 관심사가 되었던 적이 있다.

또한, 얼마전 알파고-이세돌과의 바둑 대결을 통해 

인공지능, 머신러닝 등이 이슈로 대두되면서,

머신러닝을 뒷받침하는 '빅데이터' 기술에 대해서도 

다시금 눈을 돌리게 되었다.


'빅데이터'...데이터가 많아지면 '빅데이터'가 되겠거니 생각했는데,

막상 다음 글을 읽어보니, 그렇게 가볍게 흘러넘길 수 없는 기술이라는 것을 알 수 있었다.

"빅데이터 이야기:데이터 수집에서 분석까지"

또한, 위 글이 데이터 분석에 대한 이야기였다면,

다음 글은 저장기술, 처리방식에 대해 좀더 소개하고 있다.

"빅데이터를 위한 플랫폼들"

내가 생각하는 빅데이터 처리의 특징은, 

  1. 데이터가 분산되어 저장된다는 것
  2. 디스크 IO를 줄이기 위해 메모리DB를 사용하기도 한다는 것
  3. 병렬처리를 한다는 것
등이다.

이런 글들을 읽어 보니, 

'빅데이터'라는 것이 내가 생각하던 것보다 훨신 영향력 있는 기술이라는 것과 함께,

'머신러닝'과도 밀접한 관련이 있음을 알 수 있었다.

반응형

+ Recent posts