Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가

5,421 views

Published on

2016년 4월 27일, NDC2016 발표자료입니다.

전통적인 콘텐츠 생산은 기획자, 개발자가 하나하나 컨트롤해야 하는 노동집약적 산업입니다. 저 또한 처음에 입사했을 때 출시를 위해 며칠 만에 이백여 개가 넘는 맵을 찍어야 했던 아픔이 있습니다. 그 뒤에도 플레이어들을 위한 콘텐츠 생산은 계속되었지만, 플레이어들의 콘텐츠 소비 속도는 생산 속도를 뛰어넘은 지 오래되었습니다. 대안은 로그라이크 같은 장르에서 널리 쓰이는 Procedural Contents Generation이라고 생각합니다. 외국 인디 씬에서는 이미 많이 사용되고 있는 이 방법에 최근 점점 더 많이 사용되고 있는 신경망을 활용해서 색다른 콘텐츠 생산 기법을 소개하려 합니다.

Published in: Engineering
  • Dating direct: ❶❶❶ http://bit.ly/39mQKz3 ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❤❤❤ http://bit.ly/39mQKz3 ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 보충자료 3 : 맵 생성 절차 http://greentec.egloos.com/4353457
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 보충자료 2 : 타일맵 구현 실제 http://greentec.egloos.com/4352138
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 보충자료 1 : 타일맵 구현 기본 http://greentec.egloos.com/4349558
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가

  1. 1. 신경망은 컨텐츠 자동생성의 꿈을 꾸는가 딥러닝을 이용한 SRPG 맵 평가 사례 연구 넥슨 신규개발본부 Blast팀 김환희
  2. 2. 발표자 소개 5년차 게임기획자 인공지능에 관심 많음 NDC2014 <기획자가 유니티를 만났을 때 : 자체 툴 제작을 해보자>
  3. 3. 안내 이 발표는 개인 연구 프로젝트입니다.
  4. 4. 목차 1. PCG 2. 신경망 3. 딥러닝 4. 연구 사례
  5. 5. 목차 1. PCG 2. 신경망 3. 딥러닝 4. 연구 사례 61% 14% 14% 11%
  6. 6. 1. PCG Procedural Content Generation 절차적 컨텐츠 생성
  7. 7. PCG • 절차(알고리즘)으로 컨텐츠를 만드는 방법 http://www.gamasutra.com/blogs/AAdonaac/20150903/252889/Procedural_Dungeon_Generation_Algorithm.php
  8. 8. PCG • 손으로 하나하나 튜닝하는 것에 대비됨 http://boingboing.net/2015/06/16/super-mario-maker-design.html http://www.howtogeek.com/94977/infinite-mario-is-an-endless-super-mario-3-game-in-your-browser/
  9. 9. http://www.gamasutra.com/blogs/TanyaShort/20140204/209176/Level_Design_in_Procedural_Generation.php 던전
  10. 10. http://florentdeville.com/student-projects/procedural-generation-of-cities/ 도시
  11. 11. http://abundant-music.com/ 음악
  12. 12. http://www.speedtree.com/tree-modeling.php 식물
  13. 13. https://ggtriple.wordpress.com/2014/10/05/top-5-best-orcs-in-middle-earth-shadow-of-mordor/ 몬스터
  14. 14. PCG • 많은 양의 컨텐츠를 빠르게 생산할 수 있어서 인디 개발자들이 선호 • 가장 큰 이슈 중 하나 : Quality • 오류 방지 • 평가
  15. 15. 컨텐츠의 의도치 않은 오류 http://pgr21.com/pb/pb.php?id=humor&no=126193 http://cdn.tutsplus.com/gamedev/uploads/2014/01/caveat-overlap.gif
  16. 16. 컨텐츠의 평가 https://www.reddit.com/r/proceduralgeneration/comments/2q3m5e/procedural_building_generator/ 평가 기준 필요, 자동화
  17. 17. 2. 신경망 Neural Network
  18. 18. 신경망 • 전통적인 문제 해결법으로 풀 수 없는 문제들을 풀거나, 성능을 개선하기 위해 사 용됨 • 최근 급격한 발전으로 다양한 분야에서 엄청난 성능을 보임 (ex. 알파고) http://www.33rdsquare.com/2013/06/stanford-researchers-and-google-create.html
  19. 19. https://www.dramafever.com/news/googles-alphago-to-challenge-korean-baduk-champion-lee-sedol-in-the-game-of-go/ AlphaGo
  20. 20. http://www.inferse.com/14173/facebook-reportedly-working-advance-face-recognition-system-deepface/ DeepFace
  21. 21. http://spectrum.ieee.org/computing/embedded-systems/bringing-big-neural-networks-to-selfdriving-cars-smartphones-and-drones 자동 주행 차량
  22. 22. https://i.kinja-img.com/gawker-media/image/upload/dcqehohll3cy5ytjkdvq.jpg http://www.extremetech.com/computing/174275-google-has-built-a-neural-network-to-identify-100-million-house-numbers-for-streetview 그 밖에도 수많은 실생활 예들
  23. 23. 신경망의 구조 • 뉴런 (Neuron) • 신경망의 기본 단위 • 생물체의 신경 세포인 뉴런을 모사 http://www.slideshare.net/jbhuang/lecture-29-convolutional-neural-networks-computer-vision-spring2015
  24. 24. 신경망의 구조 • 층 = 레이어 (Layer) • 뉴런을 여러 개 모아놓은 것 • 입력/출력 구조 • 입력층과 출력층에 뉴런을 배치 • 입력층에서 받아온 정보를 가공해서 출력층에 전달, 출력 • 원하는 값이 나오도록 신경망을 학습시킴
  25. 25. 신경망의 구조 • 초등학교 때 배우던 상자 문제와 비슷 40 45 □ + 5 입력층 출력층
  26. 26. 신경망의 구조 • 입력층과 출력층으로 구성한 AND 게이트 • A = 1, B = 1일 때만 1 x 0.5 + 1 x 0.5 = 1 > 0.5 로 1을 출력 A B x0.5 x0.5 > 0.5 ? 1 : 0
  27. 27. 신경망의 역사 • 1980~ : 다층 신경망으로 XOR 문제 해결, 더 복잡한 문제들에 도전 • 은닉층 : 입력층과 출력층 사이에 있는 층
  28. 28. 신경망의 역사 • 1980~ : 다층 신경망으로 XOR 문제 해결, 더 복잡한 문제들에 도전 • ~2006 : 은닉층의 개수를 계속 늘렸지만 학습이 잘 되지 않았음 40 8 □ + 5 입력층 출력층 은닉층□ / 3 □ - 7
  29. 29. http://blog.kodewerx.org/2015/09/its-lovely-day-for-postmortem.html
  30. 30. 3. 딥러닝 Deep Learning
  31. 31. https://no2147483647.wordpress.com/2015/12/21/deep-learning-for-hackers-with-mxnet-2/ Art Style
  32. 32. http://www.techrepublic.com/article/google-deepmind-ai-tries-it-hand-at-creating-hearthstone-magic-the-gathering-cards/ 하스스톤 카드 제작
  33. 33. 딥네트워크 • Deep = 은닉층을 2개 이상 이용 or 총 레이어 개수 5개 이상 • 많은 수의 Hidden Layer 학습 가능 • Feature Learning http://www.rsipvision.com/exploring-deep-learning/
  34. 34. https://dnnip.wordpress.com/2013/09/04/convolution-neural-network-for-speech-recognition/ ImageNet 분류를 위한 Deep Convolutional Neural Network 딥네트워크
  35. 35. Feature • 데이터(이미지)가 갖는 추상적인 특징 형태, 색상, 연결성 등등 • Feature로 이미지를 분류할 수 있음
  36. 36. Feature • 낮/밤 구별하기 https://www.hackerrank.com/challenges/digital-camera-day-or-night
  37. 37. Feature Extraction • 전통적 기법 • Corner, Blob, Edge, Line 등 미리 정의된 특징을 추출 http://kr.mathworks.com/products/computer-vision/features.html
  38. 38. http://www.slideshare.net/zukun/eccv2010-feature-learning-for-image-classification-part-0 Feature Extraction 전통적 알고리즘
  39. 39. Feature Extraction 전통적 알고리즘의 문제점 1. 전문적 지식 필요 2. 수행에 시간이 오래 걸림 3. 다른 도메인에 일반화하기 힘듦 http://www.slideshare.net/zukun/eccv2010-feature-learning-for-image-classification-part-0
  40. 40. Feature Extraction http://www.rsipvision.com/wp-content/uploads/2015/04/Slide6.png • Modern Approach (딥러닝) • 특징을 찾아낼 수 있도록 학습시킴
  41. 41. Feature Extraction http://www.rsipvision.com/wp-content/uploads/2015/04/Slide6.png 딥러닝 = 범용적인 문제 해결법 • 어떤 도메인이건 딥 네트워크에 Input을 넣으면 feature learning 후 유의미한 Output이 나옴 딥네트워크Input Output
  42. 42. Feature Extraction http://www.rsipvision.com/wp-content/uploads/2015/04/Slide6.png 딥러닝 = 범용적인 문제 해결법 • 어떤 도메인이건 딥 네트워크에 Input을 넣으면 feature learning 후 유의미한 Output이 나옴 딥네트워크Input Output 딥네트워크SRPG맵 승률
  43. 43. 4. 연구 사례 SRPG 맵 생성 / 평가
  44. 44. SRPG • 전략적인 면이 강조된 (턴제) RPG • 영걸전, 디스가이아, 창세기전 등 • 맵 형태가 전략성의 핵심 http://www.urbandictionary.com/define.php?term=SRPG
  45. 45. SRPG 맵 생성/평가 • SRPG 맵 생성 : PCG (Flash) • SRPG 맵 평가 : 딥러닝 (Python)
  46. 46. SRPG 맵 평가 - 전통적 알고리즘 • 움직일 수 있는 타일 판단 : DFS • 병목(choke point) 판단 • 막다른 길(dead end) 판단 • 저격 위치(sniper location) 판단
  47. 47. SRPG 맵 평가 • 전통적 알고리즘으로 하기 힘든 것 승률 예측, 유닛 퍼포먼스 – K/D 예측 등 • 보통 수백~수천 번의 시뮬레이션을 돌려서 평균값을 내서 계산 • 시뮬레이션 없이도 평가가 가능할까?
  48. 48. 문제 공간 • 20 x 20 타일 맵 (2D) • 지형은 Grass, Cliff, Water 의 3종 • 유닛은 타워, 보병, 궁병, 기병의 4종 • 1 : 1 PvP • 상대편 타워의 HP를 먼저 0으로 만들면 승리 • 반대의 경우 패배 • 승패 없이 30턴이 지나면 무승부
  49. 49. 지형 Grass (+Rock) Cliff Water 이동 가능 이동 불가 이동 불가 - 큰 덩어리 얇게 퍼질 수도 있음 Image Resource from : http://opengameart.org/content/2d-lost-garden-zelda-style-tiles-resized-to-32x32-with-additions http://opengameart.org/content/2d-lost-garden-tileset-transition-to-jetrels-wood-tileset
  50. 50. 유닛 제원 (Specifications) 보병 궁병 기병 타워 공격력 1 공격력 2 공격력 1 - 이동력 4 이동력 4 이동력 6 - HP 6 HP 3 HP 4 HP 10 Image Resource from : http://units.wesnoth.org/1.10/mainline/en_US/mainline.html http://forums.rpgmakerweb.com/index.php?/topic/49063-sythian-bards-world-map-tiles/
  51. 51. 유닛 제원 (Specifications) 보병 궁병 기병 타워 - - Icon Resource from : http://yanfly.moe/2015/10/23/freebies-mv-ready-ace-icons/
  52. 52. 유닛 제원 (Specifications) 보병 궁병 기병 타워 - - Icon Resource from : http://yanfly.moe/2015/10/23/freebies-mv-ready-ace-icons/
  53. 53. 유닛 공격 범위
  54. 54. 병종 구성 • Blue : 보병 2, 궁병 2, 기병 1 (화력) • Red : 보병 2, 궁병 1, 기병 2 (기동성) • Blue 에 유리한 지형 / Red 에 유리한 지형 찾기 위해 서로 다름
  55. 55. 경험적 유불리 • 공통 • 타워에 인접한 빈 공간이 적으면 유리 3방향 8방향
  56. 56. 경험적 유불리 • Blue 유리 • 경로 폭이 좁으면 유리 • 서로 대미지를 줄 확률이 높기 때문에 화력이 높으면 유리 • 경로가 짧으면 유리
  57. 57. 경험적 유불리 • Red 유리 • 경로 폭이 넓으면 유리 • 경로가 길면 유리 • 경로가 2개 이상이면 유리
  58. 58. 맵 생성 (PCG) 도구 • Actionscript 3.0 (FlashDevelop) 사용 • JSON 으로 데이터 저장
  59. 59. 맵 생성 절차 (Procedures) 1. Poisson Disc Sampling 으로 노드 추출 2. Minimal Spanning Tree 으로 노드 간 간선 추출 • 노드의 간선이 하나면 터미널 노드로 지정 3. 지형 배치 • 터미널 노드에 장애물(Cliff, Water) 생성 • 가까운 장애물은 Cellular Automata 로 서로 합침 4. 다시 Poisson Disc Sampling 으로 메인 경로 추출 5. 메인 노드 정하고 유닛 배치
  60. 60. http://devmag.org.za/2009/05/03/poisson-disk-sampling/ Poisson Disc Sampling
  61. 61. Poisson Disc Sampling node 생성
  62. 62. Poisson Disc Sampling edge 생성
  63. 63. Minimum Spanning Tree
  64. 64. Minimum Spanning Tree terminal node → Cliff, Water
  65. 65. 지형 배치
  66. 66. 지형 배치
  67. 67. 지형 배치
  68. 68. Poisson Disc Sampling 메인 경로 추출 메인 노드 결정
  69. 69. Poisson Disc Sampling 메인 경로 추출 메인 노드 결정
  70. 70. 유닛 배치 메인 노드에 타워, 주변에 유닛 배치
  71. 71. 데이터 양산 5,000 Maps / 1 Day
  72. 72. 시뮬레이션 85% 95.6% 71.3% 39.6% 78.6% 80.3% 10.6% 20% 300 Games / 1 Map 1,500,000 Games / 1 Day Blue 팀의 승률을 계산 (0~100%)
  73. 73. Regression(회귀) 문제 • X가 주어졌을 때 y를 예측하는 문제 • 여기서 X = 2D 타일 맵, y = 승률
  74. 74. Regression(회귀) 문제 • X가 주어졌을 때 y를 예측하는 문제 • 여기서 X = 2D 타일 맵, y = 승률 학습 예측 ??? % 71.3%
  75. 75. 신경망 구축 도구 • 언어 : Python 2.7 • 라이브러리 : nolearn ← lasagne ← theano • IDE : Anaconda2, jupyter Notebook Tutorial - http://nbviewer.jupyter.org/github/dnouri/nolearn/blob/master/docs/notebooks/CNN_tutorial.ipynb
  76. 76. 신경망 구성 • 5 x 20 x 20 Input Layer • 32 x 18 x 18 Convolutional 2D Layer 1 • 32 x 9 x 9 Max Pooling Layer 1 • 64 x 8 x 8 Convolutional 2D Layer 2 • 64 x 4 x 4 Max Pooling Layer 2 • 256 Dense Layer 1 • 256 Drop Out Layer 1 • 256 Dense Layer 2 • 256 Drop Out Layer 2 • 1 Output Layer Reference - http://danielnouri.org/notes/2014/12/17/using-convolutional-neural-nets-to-detect-facial-keypoints-tutorial/ http://blog.christianperone.com/2015/08/convolutional-neural-networks-and-feature-extraction-with-python/ Image Conv/Pool Conv/Pool Dense Drop out Dense Drop out Regression
  77. 77. 신경망 구성 • Learning parameters = 338,177 Input 5x20x20 Conv 32x18x18 Pool 32x9x9 Conv 64x8x8 Pool 64x4x4 Dense 256, 256 Drop out 256, 256 Output 1
  78. 78. Input Layer • 5 x 20 x 20 Input Layer • 데이터를 discrete 하게 단순화 20 pixels
  79. 79. 지형 보병 궁병 기병 타워 Input Layer 지형과 유닛을 각각의 채널로 분리 (5 channels) Reference - http://cs231n.stanford.edu/reports/ConvChess.pdf
  80. 80. Input Layer • 지형 Input Data (0~15번 Map) • Grass = 0.0 (Black) Cliff = 1.0 (White) Water = 0.8 • Cliff 와 Water 는 이동을 막는다는 유사성이 있어서 채널을 분리할 때보다 합칠 때 결과값이 좋았음
  81. 81. Input Layer • 궁병 Input Data (0~15번 Map) • Blue team = +1.0 (White) Red team = -1.0 (Black) Empty = 0.0
  82. 82. Convolutional 2D Layer • 32 x 18 x 18 Convolutional 2D Layer 1 • 64 x 8 x 8 Convolutional 2D Layer 2 • 포토샵 등에 있는 이미지 필터 • 경계선 검출 등에 쓰임 http://www.cas.miamioh.edu/~meicenrd/anatomy/ch14_independentinvestigation/imagej/ij- docs/ij-docs/docs/menus/process.html
  83. 83. Convolutional 2D Layer http://ufldl.stanford.edu/tutorial/supervised/FeatureExtractionUsingConvolution/ • Convolution 연산의 예 1 0 1 0 1 0 1 0 1 필터
  84. 84. Convolutional 2D Layer • Conv1 : 20 x 20 → 18 x 18 (with 3x3 window) • Conv2 : 9 x 9 → 8 x 8 (with 2x2 window) Input Conv1
  85. 85. Convolutional 2D Layer • Conv1 : 20 x 20 → 18 x 18 (with 3x3 window) • Conv2 : 9 x 9 → 8 x 8 (with 2x2 window) Input Conv1
  86. 86. Convolutional 2D Layer • Conv1 : 20 x 20 → 18 x 18 (with 3x3 window) • Conv2 : 9 x 9 → 8 x 8 (with 2x2 window) Input Conv1
  87. 87. Convolutional 2D Layer http://ufldl.stanford.edu/tutorial/supervised/FeatureExtractionUsingConvolution/ • 여기서는 랜덤하게 생성한 필터를 사용하고, 각 필터와 이미지가 얼마나 유사한지 확인하는 용도
  88. 88. Convolutional 2D Layer 첫번째 Layer의 필터 적용 결과
  89. 89. Max Pooling Layer • 32 x 18 x 18 Convolutional 2D Layer 1 • 32 x 9 x 9 Max Pooling Layer 1 • 64 x 8 x 8 Convolutional 2D Layer 2 • 64 x 4 x 4 Max Pooling Layer 2 • Subsampling 기법 • 인접한 셀은 비슷한 정보를 갖기 때문에 압축으로 효율을 높임 http://ufldl.stanford.edu/tutorial/supervised/Pooling/
  90. 90. Max Pooling Layer • Pool1 : 18 x 18 → 9 x 9 (with 2x2 window) • Pool2 : 8 x 8 → 4 x 4 (with 2x2 window) Conv1 Pool1
  91. 91. Max Pooling Layer • Pool1 : 18 x 18 → 9 x 9 (with 2x2 window) • Pool2 : 8 x 8 → 4 x 4 (with 2x2 window) Conv1 Pool1
  92. 92. Dense Layer • 256 Dense Layer 1 • 256 Dense Layer 2 • All-to-All Layer
  93. 93. Drop Out Layer • 256 Dense Layer 1 • 256 Drop Out Layer 1 • 256 Dense Layer 2 • 256 Drop Out Layer 2 • Overfitting 을 방지하는 역할 • 일정 확률로 학습을 건너뜀
  94. 94. Drop Out Layer • 256 Dense Layer 1 • 256 Drop Out Layer 1 • 256 Dense Layer 2 • 256 Drop Out Layer 2 • Overfitting 을 방지하는 역할 • 일정 확률로 학습을 건너뜀 https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf
  95. 95. Output Layer • 1 Output Layer • X (2D 타일 맵)에 대한 y (승률)을 0.0~1.0 범위로 출력 학습 예측 ??? % 71.3%
  96. 96. 결과 • N= 115,812; epoch = 200 80% train, 20% test error epoch
  97. 97. 결과 • N= 115,812; epoch = 200 • MSE 0.0191173 • R2 0.75934472914 • Explained variance score 0.761066198349 test predict
  98. 98. Future works • 현재 • 맵 → 승률 예측 딥네트워크 승률 예측
  99. 99. Future works • 목표 • 맵 → 다른 인자 예측 딥네트워크 대미지 예측 K/D 예측 퍼포먼스 예측
  100. 100. Future works • 목표 • 승률 + 다른 인자 → 맵 자동 생성 딥네트워크 대미지 K/D 퍼포먼스 승률
  101. 101. 감사합니다.

×