[machine-learning] 시각적 입력을 사용하여 디아블로 2를 재생하도록 인공 신경망을 훈련시키는 방법은 무엇입니까?

현재 ANN에서 비디오 게임을하려고하는데 멋진 커뮤니티의 도움을 받기를 원했습니다.

나는 디아블로 2에 정착했다. 게임 플레이는 실시간으로 그리고 아이소 메트릭 관점에서 볼 때, 플레이어는 카메라가 중앙에있는 단일 아바타를 제어한다.

일을 구체적으로 만들기 위해, 임무는 몬스터를 죽이면 체력이 0으로 떨어지지 않고 캐릭터 x 경험치를 얻는 것입니다. 게임 플레이의 예는 다음과 같습니다.

여기

이제는 화면의 픽셀에서 얻은 정보를 기반으로 네트가 작동하기를 원하기 때문에 효율적으로 재생하려면 매우 풍부한 표현을 배워야합니다. 게임 세계를 사물로 나누고 상호 작용하는 방법.

그리고이 모든 정보는 어떻게 든 인터넷에 가르쳐야합니다. 나는 내 삶을 위해이 일을 훈련시키는 방법을 생각할 수 없습니다. 내 유일한 아이디어는 게임에서 시각적으로 좋은 / 나쁜 것을 시각적으로 추출하는 별도의 프로그램 (예 : 건강, 금, 경험)을 강화 학습 절차에서 사용하는 것입니다. 나는 그것이 답의 일부 가 될 것이라고 생각 하지만, 그것이 충분하다고는 생각하지 않습니다. 생생한 시각적 입력에서 목표 지향적 행동에 이르기까지 너무 많은 추상화 수준이 생겨서 제한된 피드백으로 내 인생에서 그물을 훈련시킵니다.

내 질문 :이 작업의 적어도 일부를 수행하기 위해 그물을 훈련시키는 다른 방법은 무엇입니까? 바람직하게는 수천 개의 표지 된 예를 만들지 않고

조금 더 지시하면 :이 설정에서 유용한 정보를 추출하기위한 다른 강화 학습 소스 및 / 또는 감독되지 않은 방법을 찾고 있습니다. 또는 레이블링 된 데이터를 수동으로 레이블링하지 않고 게임 세계에서 가져 오는 방법을 생각할 수있는 경우 감독 알고리즘.

업데이트 (04/27/12) :

이상하게도, 나는 여전히이 일을하고 있으며 진전을 보이고있는 것 같습니다. ANN 컨트롤러가 작동하게하는 가장 큰 비밀은 작업에 적합한 최첨단 ANN 아키텍처를 사용하는 것입니다. 따라서 나는 시간적 차이 역 전파 (즉, 표준을 통한 강화 학습 )로 미세 조정하기 전에 감독되지 않은 방식으로 훈련 한 팩터링 된 조건부 제한 Boltzmann 기계 로 구성된 깊은 신념 그물을 사용했습니다 (게임을하는 비디오에서) 피드 포워드 ANN).

그래도 더 실시간으로 액션 선택 문제와 ANN 처리를 위해 컬러 이미지를 인코딩하는 방법에 대한 귀중한 입력을 찾고 있습니다 🙂

업데이트 (10/21/15) :

방금 전이 질문을했던 것을 기억하고, 이것이 더 이상 미친 아이디어가 아니라는 것을 언급해야한다고 생각했습니다. 마지막 업데이트 이후 DeepMind는 신경 네트워크를 통해 시각적 입력에서 Atari 게임을하는 방법에 대한 자연 논문을 발표했습니다 . 실제로, Diablo 2의 제한된 하위 세트 인 아키텍처를 사용하여 플레이하지 못하게하는 유일한 것은 기본 게임 엔진에 대한 액세스가 부족하다는 것입니다. 화면으로 렌더링 한 다음 네트워크로 리디렉션하는 것은 너무 느리게 진행되어 합당한 시간 내에 훈련 할 수 없습니다. 따라서 우리는 아마도 이런 종류의 봇이 곧 Diablo 2를 재생하는 것을 볼 수는 없지만 오픈 소스 또는 렌더링 대상에 대한 API 액세스로 무언가를 재생하기 때문입니다. (아마도?)



답변

ANN 교육 방법에 대해 걱정하고 있음을 알 수 있지만 이 프로젝트 는 사용자가 알지 못하는 복잡성숨 깁니다 . 이미지 처리를 통한 컴퓨터 게임의 객체 / 캐릭터 인식 은 매우 까다로운 작업입니다 ( FPS 및 RPG 게임에는 열광 하지 않습니다 ). 나는 당신의 기술을 의심하지 않으며 그것을 할 수 없다고 말하지는 않지만 ANN 자체를 구현하는 것보다 물건을 인식하는 데 10 배 더 많은 시간을 할애 할 수 있습니다 (이미 디지털 이미지 처리 기술에 대한 경험이 있다고 가정합니다) ).

나는 당신의 생각이 매우 흥미롭고 또한 야심적 이라고 생각합니다 . 이 시점에서 다시 고려할 수 있습니다. 나는이 프로젝트가 당신이 대학을 위해 계획하고있는 것이라 생각합니다. 만약 작품의 초점이 실제로 ANN이라면 다른 게임을 선택해야 할 것입니다. 더 간단한 것입니다.

다른 사람이 얼마 전에는 다르지만 비슷한 프로젝트 에 대한 팁을 찾았다는 것을 기억합니다 . 확인해 볼 가치가 있습니다.

반면에, 제안을 받아들이는 경우 게임 내 오브젝트를 식별하기위한 더 좋고 쉬운 방법이있을 수 있습니다. 그러나 먼저이 프로젝트를 원하는대로 스마트 봇 이라고 부릅니다 .

봇을 구현하는 한 가지 방법 은 게임 클라이언트의 메모리에 액세스 하여 화면에서 캐릭터의 위치 및 건강과 같은 관련 정보를 찾습니다. 컴퓨터 메모리를 읽는 것은 쉽지 않지만, 메모리에서 찾을 위치를 정확히 파악하는 것은 쉽지 않습니다. Cheat Engine 과 같은 메모리 스캐너 가이 기능에 매우 유용 할 수 있습니다.

게임에서 작동하는 또 다른 방법 은 렌더링 정보 조작과 관련이 있습니다. 게임의 모든 오브젝트는 화면에 렌더링되어야합니다. 즉, 모든 3D 객체의 위치가 처리를 위해 비디오 카드로 전송됩니다. 심각한 디버깅을 준비하십시오.

이 답변에서는 이미지 처리를 통해 원하는 것을 달성하는 두 가지 방법을 간략하게 설명했습니다. 당신이 그들에 관심이 있다면 당신은 주제에 대한 훌륭한 책인 온라인 게임 이용 (제 6 장)에서 그들에 대해 더 많은 것을 찾을 수 있습니다 .


답변

업데이트 2018-07-26 : 끝났 습니다! 우리는 이제 이런 종류의 게임을 해결할 수있는 시점에 접근하고 있습니다! 팀은 OpenAI를 사용하고 게임 DotA 2를 기반으로 5v5 게임에서 반 전문 게이머를 이길 수있는 AI를 만들 수 있습니다 . DotA 2를 아는 경우이 게임이 역학 측면에서 디아블로와 유사한 게임과 유사하다는 것을 알고 있지만 팀 플레이 때문에 더 복잡하다고 주장 할 수 있습니다.

예상대로, 이것은 딥 러닝을 통한 강화 학습의 최신 발전과 OpenAI와 같은 공개 게임 프레임 워크를 사용하여 깔끔한 API를 얻었을 때 AI 개발이 쉬워지고 게임을 가속화 할 수 있기 때문에 달성되었습니다 (AI가 재생 됨) 180 년의 게임 플레이가 매일 그 자체와 대등합니다!).

2018 년 8 월 5 일 (10 일만에) ,이 AI를 최고의 DotA 2 게이머에게 맞설 계획입니다. 이것이 해결된다면, Go 게임의 해결만큼 중대 화되지는 않았지만 큰 혁명을 기대할 수 있지만, AI 게임에는 큰 이정표가 될 것입니다!

2017-01 업데이트 : AlphaGo의 성공 이후이 분야는 매우 빠르게 발전하고 있으며 거의 ​​매월 게임에서 기계 학습 알고리즘을 쉽게 개발할 수있는 새로운 프레임 워크가 있습니다. 내가 찾은 최신 목록은 다음과 같습니다.

  • OpenAI ‘s Universe : 기계 학습을 사용하여 거의 모든 게임플레이 있는 플랫폼 . API는 Python으로되어 있으며 VNC 원격 데스크톱 환경에서 게임을 실행하므로 모든 게임의 이미지를 캡처 할 수 있습니다! 머신 러닝 알고리즘을 통해 Universe를 사용하여 Diablo II를 재생할 수 있습니다!
  • OpenAI ‘s Gym : Universe와 비슷하지만 강화 학습 알고리즘을 구체적으로 타겟팅합니다 (따라서 AlphaGo가 사용하는 프레임 워크의 일반화이지만 더 많은 게임에 적용됩니다). 이 Udemy의 과정 OpenAI 체육관을 사용하여 브레이크 아웃 또는 둠 같은 게임에 기계 학습의 응용 프로그램을 덮고.
  • TorchCraft : Torch (기계 학습 프레임 워크)와 StarCraft : Brood War 사이의 다리 .
  • pyGTA5 : 화면 캡처 만 사용하여 GTA5에서 자율 주행 자동차를 제작하는 프로젝트 ( 온라인 으로 많은 비디오 사용 ).

매우 흥미로운 시간!

중요 업데이트 (2016-06) : OP에서 지적한 바와 같이, 시각적 입력 만 사용하여 게임을하도록 인공 네트워크를 훈련시키는이 문제는 이제 몇몇 심각한 기관에서 해결되고 있으며 DeepMind Deep-Qlearning-Network (DQN) 와 같은 매우 유망한 결과가 있습니다. ) .

이제 다음 단계의 도전에 도전하고 싶다면 VizDoom 과 같은 다양한 AI 비전 게임 개발 플랫폼 중 하나를 사용하여 시각적 입력 만 사용하여 Doom을 재생하도록 네트워크를 훈련시키는 고도로 최적화 된 플랫폼 ( 7000fps )을 사용할 수 있습니다. :

ViZDoom을 사용하면 시각적 정보 (스크린 버퍼) 만 사용하여 Doom을 재생하는 AI 봇을 개발할 수 있습니다. 주로 머신 비주얼 학습 및 심층 강화 학습 연구를위한 것입니다. ViZDoom은 ZDoom을 기반으로 게임 역학을 제공합니다.

그리고 결과는 놀랍 습니다. 웹 페이지의 비디오멋진 자습서 (Python)를 여기에서보십시오!

Quagents 라는 Quake 3 Arena와 유사한 프로젝트도 있습니다.이 프로젝트는 기본 게임 데이터에 대한 쉬운 API 액세스를 제공하지만 스크린 샷과 API 만 사용하여 에이전트를 제어 할 수 있습니다.

스크린 샷 만 사용하는 경우 왜 그러한 플랫폼이 유용한가요? 기본 게임 데이터에 액세스하지 않아도 이러한 플랫폼은 다음을 제공합니다.

  • 고성능 게임 구현 (학습 알고리즘이 더 빨리 수렴 될 수 있도록 더 적은 시간으로 더 많은 데이터 / 재생 / 학습 생성을 생성 할 수 있습니다!)
  • 에이전트를 제어 하는 간단하고 반응이 좋은 API입니다 (예 : 사람의 입력을 사용하여 게임을 제어하려고하면 일부 명령이 손실 될 수 있으므로 출력의 신뢰성을 처리 할 수 ​​있습니다 …).
  • 커스텀 시나리오 의 쉬운 설정 .
  • 사용자 정의 가능한 렌더링 (쉽게 처리 할 수있는 이미지를 “단순화”하는 데 유용 할 수 있음)
  • 동기화 된 ( “turn-by-turn”) 재생 (처음에는 실시간으로 작동하기 위해 알고리즘이 필요하지 않으므로 복잡성이 크게 줄어 듭니다).
  • 크로스 플랫폼 호환성, 역 호환성 (새로운 게임 업데이트가있을 때 봇이 더 이상 게임에서 작동하지 않을 위험이 없음) 등과 같은 추가 편의 기능 등

요약하면,이 플랫폼의 가장 큰 장점은 학습 알고리즘을 다루기 위해 처리해야하는 이전의 기술적 문제 (게임 입력 조작 방법, 시나리오 설정 방법 등)를 많이 완화 한다는 것입니다 . 그 자체.

이제 일하고 최고의 AI 비주얼 봇을 만드십시오.)


시각적 인 입력에만 의존하는 AI 개발의 기술적 문제를 설명하는 이전 게시물 :

위의 일부 동료와 달리이 문제를 다루기 어렵다고 생각하지 않습니다. 그러나 그것은 확실히 어려운 일입니다!

위에서 지적한 첫 번째 문제 는 게임 상태를 표현하는 것입니다. 단일 이미지로 전체 상태를 표현할 수 없으며 어떤 종류의 암기 를 유지해야합니다.(건강뿐만 아니라 장비 및 사용 가능한 아이템, 퀘스트 및 목표 등). 이러한 정보를 가져 오려면 두 가지 방법이 있습니다. 가장 신뢰할 수 있고 쉬운 게임 데이터에 직접 액세스하는 것; 또는 몇 가지 간단한 절차 (인벤토리 열기, 스크린 샷 찍기, 데이터 추출)를 구현하여 이러한 정보를 추상적으로 표현할 수 있습니다. 물론 스크린 샷에서 데이터를 추출하면 감독 절차 (완전히 정의) 또는 기계 학습 알고리즘을 통해 감독되지 않은 절차를 거치게되지만 복잡성이 크게 증가합니다 … 비지도 머신 러닝의 경우 구조 학습 알고리즘 (데이터 분류 및 값을 예측하는 방법이 아니라 데이터의 구조를 학습)이라는 최신 알고리즘을 사용해야합니다.http://techtalks.tv/talks/54422/

그런 다음 또 다른 문제는 필요한 모든 데이터를 가져 왔더라도 게임을 부분적으로관찰 할 수 있다는 것 입니다. 따라서 세계의 추상 모델을 주입하고 게임에서 처리 된 정보 (예 : 아바타 위치, 화면 외부의 퀘스트 항목, 목표 및 적의 위치)를 공급해야합니다. Vermaak 2003의 Mixture Particle Filters를 살펴볼 수도 있습니다.

또한, 당신은 가질 필요가 자율적 인 에이전트 로, 목표를 동적으로 생성. 시도 할 수있는 잘 알려진 아키텍처는 BDI 에이전트이지만 실제 아키텍처에서이 아키텍처가 작동하려면 아키텍처를 조정해야합니다. 대안으로, 재귀 페트리 네트도 있습니다.이 페트리 네트는 모든 종류의 페트리 네트와 결합하여 훌륭한 공식화 및 증명 절차와 함께 잘 연구되고 유연한 프레임 워크이기 때문에 원하는 것을 얻을 수 있습니다.

그리고 마지막으로 위의 모든 작업을 수행하더라도 게임을 가속 속도 로 에뮬레이트하는 방법을 찾아야합니다 (비디오를 사용하는 것이 좋을 수도 있지만 문제는 알고리즘이 제어없이 만 관전 할 수 있다는 것입니다. 스스로 시험해 보는 것이 학습에 매우 중요합니다). 실제로, 현재의 최첨단 알고리즘은 인간이 배울 수있는 것과 같은 것을 배우는 데 더 많은 시간이 걸린다는 것이 잘 알려져 있습니다. 즉, 게임 시간을 단축 할 수없는 경우) 알고리즘은 단일 수명으로 수렴하지 않습니다 …

결론적으로, 여기서 달성하려는 것은 현재의 최신 알고리즘의 한계 (그리고 아마도 그 이상)입니다 . 나는 그것이 가능 할지도 모른다고 생각하지만, 비록 당신이 헬라에 많은 시간을 할애 할 것입니다. 이것은 이론적 인 문제가 아니라 여기에 접근 하고있는 실제적인 문제 이기 때문에 많은 것을 구현하고 결합 해야합니다. AI 를 해결하기 위해

전체 팀을 대상으로 수십 년 동안 연구 한 결과 충분하지 않을 수 있으므로 혼자서 시간 제로 일하고 있다면 (아마도 생계를 위해 일할 수 있기 때문에) 근처에 도달하지 않고 평생을 보낼 수 있습니다. 작동하는 솔루션.

여기서 가장 중요한 조언은 기대치를 낮추고 복잡성을 줄이려는 것입니다.가능한 모든 정보를 사용하여 문제를 해결하고 가능한 한 스크린 샷에 의존하지 말고 (즉, 게임에 직접 연결하고 DLL 삽입을 찾으십시오) 감독 된 절차를 구현하여 일부 문제를 단순화하십시오. 알고리즘은 모든 것을 배웁니다 (즉, 가능한 한 많이 이미지 처리를 드롭하고 내부 게임 정보에 의존합니다. 나중에 알고리즘이 제대로 작동하는 경우 AI 프로그램의 일부를 이미지 처리로 대체하여 전체 목표를 점차 달성 할 수 있습니다. 예를 들어 무언가 잘 작동 할 수 있다면 문제를 복잡하게하고 감독 된 절차와 메모리 게임 데이터를 스크린 샷의 감독되지 않은 기계 학습 알고리즘으로 대체 할 수 있습니다.

행운을 빕니다. 그리고 그것이 작동한다면, 기사를 출판하십시오, 당신은 확실히 어려운 실제적인 문제를 해결하는 것으로 유명해질 수 있습니다!


답변

당신이 추구하는 문제는 당신이 그것을 정의한 방식으로 다루기 어렵습니다. 신경망이 문제의 풍부한 표현을 “마 법적으로”배울 것이라고 생각하는 것은 일반적으로 실수입니다. ANN이 작업에 적합한 도구인지 여부를 결정할 때 명심해야 할 좋은 점은 보간 방법이라는 것입니다. 함수의 근사값을 찾는 것으로 문제의 틀을 잡을 수 있는지 생각해보십시오.이 함수의 많은 점과 네트워크를 설계하고 훈련시키는 데 많은 시간이 있습니다.

제안한 문제는이 테스트를 통과하지 못합니다. 게임 컨트롤은 화면의 이미지 기능이 아닙니다. 플레이어가 메모리에 보관해야하는 많은 정보가 있습니다. 간단한 예를 들어, 게임에서 상점에 입장 할 때마다 화면이 동일하게 보이는 경우가 종종 있습니다. 그러나 구입하는 것은 상황에 따라 다릅니다. 네트워크가 아무리 복잡하더라도 화면 픽셀이 입력되면 상점에 들어갈 때 항상 동일한 동작을 수행합니다.

게다가, 규모의 문제가 있습니다. 당신이 제안하는 과제는 합리적인 시간 내에 배우기에는 너무 복잡합니다. 게임 AI의 작동 방식에 대해서는 aigamedev.com 을 참조하십시오 . 인공 신경 네트워크는 일부 게임에서 성공적으로 사용되었지만 매우 제한적인 방식으로 사용되었습니다. 게임 AI는 개발하기가 어렵고 종종 비쌉니다. 기능적 신경망을 구축하는 일반적인 접근법이 있었다면, 업계는 아마도 그것을 포착했을 것입니다. 틱택 토와 같이 훨씬 더 간단한 예제로 시작하는 것이 좋습니다.


답변

이 프로젝트의 핵심은 ANN으로 가능한 것을 탐구하는 것처럼 보입니다. 따라서 이미지 처리를 처리 할 필요가없는 게임을 선택하는 것이 좋습니다 (다른 사람들의 대답은 여기에서 실제로 어려운 작업 처럼 보입니다) 실시간 게임). 스타 크래프트 API를 사용하여 봇을 만들 수 있으며 모든 관련 게임 상태에 액세스 할 수 있습니다.

http://code.google.com/p/bwapi/


답변

첫 번째 단계로 연속 프레임의 차이점을 살펴볼 수 있습니다. 배경과 실제 몬스터 스프라이트를 구별해야합니다. 세계에는 애니메이션도 포함될 수 있습니다. 그것들을 찾기 위해 캐릭터가 움직여서 세상과 함께 움직이는 모든 것을 큰 배경 이미지 / 애니메이션으로 수집하게합니다.

FFT를 사용하여 상관 관계가있는 적을 감지하고 식별 할 수 있습니다. 그러나 애니메이션이 정확하게 픽셀을 반복하면 몇 픽셀 값만 보는 것이 더 빠릅니다. 주요 작업은 화면에 새 객체가 나타날 때를 식별하고 스프라이트 프레임의 모든 프레임을 점차 데이터베이스에 저장하는 강력한 시스템을 작성하는 것입니다. 아마도 무기 효과를위한 모델도 만들어야합니다. 상대 데이터베이스를 어지럽히 지 않도록 빼야합니다.


답변

또한 언제든지 가능한 모든 ‘움직임’에서 일련의 ‘결과'(확률과 관련 될 수 있음)를 생성 할 수 있고 게임에 일관성에 대한 개념이 있다고 가정합니다 (예 : 레벨 X를 계속해서 반복 할 수 있음) 다시) 무작위 가중치로 N 개의 신경망으로 시작하여 각각 다음과 같은 방식으로 게임을 할 수 있습니다.

1) 가능한 모든 ‘이동’에 대해 가능한 ‘결과’목록을 생성하십시오 (관련된 확률로) 2) 각 결과에 대해 신경망을 사용하여 ‘결과’의 관련 ‘가치'(점수)를 결정하십시오 (예 : -1과 1 사이의 숫자, 1이 가장 좋은 결과, -1이 가장 나쁜 결과) 3) 가장 높은 확률로 이어지는 ‘이동’선택 * 점수 4) 이동이 ‘승리’또는 ‘손실’로 이어진 경우, 그렇지 않으면 1 단계로 돌아가십시오.

일정 시간 (또는 ‘win’/ ‘lose’) 후에 신경망이 ‘목표’에 얼마나 가까운 지 평가하십시오 (여기에는 도메인 지식이 필요할 것입니다). 그런 다음 목표에서 가장 멀리 떨어진 NN의 50 % (또는 일부 다른 백분율)를 버리고 상위 50 %의 교차 / 돌연변이를 수행하고 새로운 NN 세트를 다시 실행하십시오. 만족스러운 NN이 나올 때까지 계속 실행하십시오.


답변

나는 당신의 최선의 방법은 몇 가지 / 네트워크가 관련된 복잡한 아키텍처 일 것이라고 생각합니다. .

그런 다음 가장 간단한 디아블로 II 게임 플레이, 아마도 바바리안을 생각해보십시오. 그런 다음 Act I처럼 처음에는 단순하게 유지하십시오.

그런 다음 귀중한 ‘목표’는 적의 개체가 사라지고 건강 막대가 감소하는 것입니다 (반대 점수).

이러한 별도의 ‘간단한’작업을 처리 한 후에는 ‘마스터’ANN을 사용하여 활성화 할 하위 ANN을 결정할 수 있습니다.

훈련에 관해서는 세 가지 옵션 만 볼 수 있습니다. 위에서 설명한 진화 방법을 사용할 수는 있지만 별도의 전체 프로그램을 코딩하지 않는 한 수동으로 ‘우승자’를 선택해야합니다. 네트워크가 누군가의 게임을 ‘감시’하도록 할 수 있습니다. 여기에서는 플레이어 또는 플레이어 스타일 그룹을 모방하는 방법을 배웁니다. 네트워크는 플레이어의 다음 행동을 예측하려고 시도하고, 정확한 추측 등을 위해 강화됩니다. 실제로 ANN을 얻는다면 비디오 게임 플레이를 통해 원하는 실제 라이브 게임 플레이가 필요하지 않습니다. 마지막으로 네트워크를 게임으로하여 적의 죽음, 레벨 업, 체력 회복 등을 긍정적 강화로, 플레이어의 죽음, 건강 상실 등을 부정적인 강화로 만들 수 있습니다. 그러나 간단한 네트워크조차도 간단한 작업을 배우기 위해 수천 개의 구체적인 교육 단계가 필요한지 확인하면

모든 프로젝트에서 매우 야심 찬 일입니다. 그러나 충분한 시간이 주어지면 ‘이론적으로’이루어질 수 있다고 생각합니다.

도움이 되길 바랍니다.