도합 20만번의 학습을 하여도 여전히 낮은 수준으로 시합을 하여서, training 방법에 사람이 직접 상대하여 그 결과를 학습하는 과정을 추가하였다.


직접 상대하면서 2연속으로 상대가 말을 두면 그 말을 막는 곳에 두지 않으면 패배 하는 상황을 집중 훈련 시켰다.

가령 아래와 같은 상황에서 X가 우상에 두지 않으면 패배 한다.

O

O

 

 

 

 

 

 

X

만약 우상 이외의 다른곳(좌하)에 두게 되면 아래와 같이 패배하게 되어서 좌하에 해당하는 action에 negative reward를 주는 것을 집중적으로 학습 하였다.


O

O

O

 

 

 

X

 

X


즉, 해당 state에서 actiond을 취하면 패배한다는 걸 Q value에 적용시켜주는 것이다. 이런 경우를 여러번 학습하게 되면 결국 좌상에 두는 action을 제외하고는 모두 negative value를 가지게 되므로, 결과적으로 좌상에 두도록 학습이 되게 된다.


사람: O  머신러닝: X (사람이 먼저 둠)

1수

O


 

 

 


 



2수

O


 

 

 


 

X


3수

O

O

 

 

 


 

X


4수

O

O

X

 

 

 


 

X


4수의 근거

지금까지의 학습으로 3수까지의 state에 대한 Qvalue값들은 아래와 같다.

 -10

 -10 

 0 

 -0.83333333

 -0.83333333

 -0.83333333

 -0.83333333

 -0.83333333

 -10

Q value를 보면 총 3가지 종류의 값이 있다.

이미 둔 칸은 -10이다.

해당 강화학습에서 다음 action에 대한 선택 로직에 게임의 규칙은 전혀 반영하지 않았다. 따라서 게임을 진행하려면, 스스로 규칙을 학습해야 하는데, 이미 둔곳은 둘수 없다는 기본적인 규칙들은 -10을 reward로 받도록 되어 있다.(두기 전과 후의 state에 변화가 없을때 reward는 -10)


두면 패배할수 있는 칸(이미 상대가 2칸을 선점했고 그 2칸을 방어할수 없는 칸)은 다음번 수의 패배에 대한 negative reward들로 -0.83333으로 채워져 있다. 즉, 좌상칸이 가장 높은 value를 가지고 있기 때문에 좌상칸을 선택했다.


마지막으로 0, 비록 reward를 얻을수 없지만, 현재 상황에서 가장 높은 reward를 가지고 있다. 따라서 좌상이 선택되어야 한다.


5수

O

O

X

 

 

O


 

X


6수

O

O

X

 

X

O


 

X


6수의 근거

5수까지의 state에 대한 Q value는 아래와 같다.

 0

 -8 

 -9.6 

 0

 0.8999977

 -8

 0

 0

 -9.92

이미 둔칸이지만 0인 곳은 학습이 되지 않는 곳이다. 가운데 칸의 경우 0.89점으로 가장 높은 reward를 가진다. 실제로 해당 칸을 두개 되면 X가 좌상에서 우하로 가는 대각선 공격을 할수 있는 기회가 주어지게 된다.


7수

O

O

X

 

X

O

O

 

X


8수

O

O

X

X

X

O

O

 

X


위의 4수 처럼 좌중칸이 가장 높은 Q value를 가지게 되어서 선택


9수

O

O

X

X

X

O

O

O

X


위의 경우처럼 이기진 못했지만 꽤 사람처럼 둔경우도 생겼다!!!


결과적으로 negative reward가 효과적으로 작용을 하게 되고 비록 강화학습이지만 사람과의 학습을 통해 실제 의미 있는 케이스에 대한 학습이 이루어지는 것이 더 빠른 학습이 될 수 있는 것으로 생각된다. (물론 실제 그런지는 사람과 시합하지 않은 경우와 대조를 해보고 해야 하지만 귀찮아서 생략..;;;....) 이래서 알파고도 굳이 사람의 기보를 학습했나????



'Development > MachineLearning' 카테고리의 다른 글

Tic Tac Toe 인공지능 구현 v01  (0) 2017.01.25
Tic Tac Toe 인공지능 구현 v00  (0) 2017.01.24

Proto Type(v01)

 

V00에서 negative reward 받을수 있도록 수정

내가 마지막 state action q_values 기억하고 있다가, 상대가 승리하게 되면 negative_reward 주도록 로직 추가

10000 training 결과 7171 건의 state 대한 training진행 (v00 유사)

 

결과 아래와 같이 x 입장에서 o 좌상과 중앙을 상태에서 일부 칸의 경우 두면 안된다는게 학습이 ..

다만 학습이 충분치 않아서 해당 state일때 모든 경우의 수가 학습되지 않을 경우 아래예제 처럼 막아야 할곳을 막지 못하는 상황이 생김

(===> 학습이 충분히 되면 아래 상황에서는 우하를 제외하고는 모두 negative reward 받게 될것이므로 max 함수에 의해서 우하를 선택하게 으로 예상)

=============

= o = x =   =

=============

=   = o =   =

=============

=   =   =   =

=============

RUN >> player:2

RUN >> trained index: 1101 qv: [-9.984     -9.999872  -0.8333312 -0.8       -9.92       0.        -0.83328          -0.8333312  0.       ]

RUN >> action:5 qvalue: 0.0

RUN >> action:5 reward: 0

=============

= o = x =   =

=============

=   = o = x =

=============

=   =   =   =

=============

 

얼토 당토 않게 아래와 같은 상황도 발생

첫번째 상황에서 x 아래 중간칸에 두어서 o 3칸을 만드는걸 막아야 하지만…

Learning과정에서 해당 state일때 좌하를 두어서 이겼던 적이 있었는지 좌하 칸에 qvalue 0.06666667로 가장 높아 좌하칸에 두는 경우가 발생

역시 어설픈 learning 결과로 충분한 learning횟수가 중요하다고 생각됨

 

=============

= x = o =   =

=============

=   = o =   =

=============

=   =   =   =

=============

RUN >> player:2

RUN >> trained index: 5639 qv: [-9.6        -9.6         0.          0.          0.          0.          0.06666667  0.          0.        ]

RUN >> action:6 qvalue: 0.0666666666667

RUN >> action:6 reward: 0

=============

= x = o =   =

=============

=   = o =   =

=============

= x =   =   =

=============

 

 

 

마찬가지로 10000번으로는 택도 없음, 사람 근처에도 못감

우리 옆집에 중학생 꼬마가 잘둘 같다




의문점......

v00와 v01모두 learning의 횟수가 충분치 못하다고 생각이 드는데... 

둘다 충분히 learning을 한다면 negative reward가 있는 경우, 없는 경우 승부를 보게 하면 어떻게 될까??



2017년 1월 26일 추가

총 60000번의 학습...... 여전히 답답하다-_-

사람이 학습시키면 답답한 케이스에 대해서 집중적으로 학습시키면서 그렇게 하면 진다는걸 학습시킬텐데 인공지능 둘이 계속 붙이니

유치원생 둘이서 시합시켜두는 느낌?

'Development > MachineLearning' 카테고리의 다른 글

Tic Tac Toe 인공지능 구현  (0) 2017.02.01
Tic Tac Toe 인공지능 구현 v00  (0) 2017.01.24

개인 프로젝트로 Reinforcement 기반으로 Tic Tac Toe 인공지능 개발 중


Prototype으로 10000번 training 후 결과 총 7017 건의 state에 대한 training진행 됨


단순히 승리할 경우 reward 1을 가지고 규칙을 learning시키기 위해서 둘수 없는 곳에 둘려고 할 경우 negative reward -10을 주고 둘수 있는 곳 둘때까지 반복

 

특정 state에서 특정 action을 취하게 될 때의 reward에 대해서 Q값을 구하게 되는데, 두개의 object가 서로 시합을 할경우

이기는 쪽은 능동적으로 수를 두어서 이기게 되어서 정상적으로 reward를 받게 되지만, 지는 object는 수동적으로 상대방이 먼저 이겼기 때문에 지게 된다. 따라서 지는 순간에 action을 취한 것이 아니므로 패배에 대한 negative reward를 받을 수가 없음

===> 실제 play를 해보면 상대방이 2칸을 먼저 만든 상황에서 남은 한 칸을 막아서 패배를 막는 방향으로 paly하지 않음

 

물론 충분히 많은 training이 된다면 승리에 대한 reward가 많이 퍼져서 반대급부로 패배에 대한 상황에 대해서는 reward가 없으므로 상대적인 개념으로 negative reward를 받을 수 있으나, 좀더 확실한 negative reward가 필요할 것으로 보임

 

10000번으로는 택도 없음, 사람 근처에도 못감



'Development > MachineLearning' 카테고리의 다른 글

Tic Tac Toe 인공지능 구현  (0) 2017.02.01
Tic Tac Toe 인공지능 구현 v01  (0) 2017.01.25

+ Recent posts