PGR21.com
- 자유 주제로 사용할 수 있는 게시판입니다.
- 토론 게시판의 용도를 겸합니다.
Date 2016/03/12 21:36:44
Name 65C02
Subject [일반] 인공신경망과 알파고 - 인공신경망이란 무엇인가? (데이터 주의)

안녕하세요. 저는 15년 정도 전에 인공지능(인공신경망과 유전자 알고리즘)을 수박 겉핥기 하듯 배웠던 아재입니다. 지금은 전혀 다른 분야에 종사하고 있습니다.



이번에 알파고가 이세돌에게 3연승을 해서 충격을 받은 사람이기도 합니다. 컴퓨터가 10년 안에 바둑에서도 인간에게 이길 것이고, 20년 안에는 자동차 자동 운전이 보편화 될 것이라고 늘 생각해오던 저한테도 이번 사건은 ‘기술 개발 속도가 너무 빠른 것 아닌가?’ 하는 생각을 하게 하네요. (자동차 자동 운전이 바둑보다 어렵다고 생각해서는 아니고, 사람들의 거부감 및 안전문제 때문에 더 늦을 것으로 보고 있었습니다.)



 학교에서 공부할 때 인공신경망(artificial neural network)은 이미 한계를 많이 보인 분야라는 소릴 자주 들어서 이번 알파고의 승리(물론 아직 두 번 남았습니다만)가 더 충격이기도 합니다. 딥 러닝이 그렇게 대단하다는 얘기를 계속 들었는데도 말이죠.



그래서 저 자신도 인공신경망에 대해 복습도 할 겸 해서 이런 글을 쓰게 되었습니다. 이 게시판에 전공자분들도 분명 계실텐데 제가 좀 주제넘은 글을 쓰는 것 같기도 합니다만(사실 많이 떨리네요), 문과 공부를 하신 분들이나 중고교생 분들에게 얕은 지식이나마 공유한다는 생각으로 작성해 보겠습니다. 인공신경망에 대해서 오랜만에 생각하고 쓰는 글이라 잘못된 부분이 많이 있을 수 있으니 지적 부탁드립니다. 글의 순서는 다음과 같이 할 예정입니다.



1.     인공신경망이란 무엇인가?


2.     알파고는 어떻게 동작하는가?


3.     알파고는 사고하는가?



또한 이 글에서는 초등학교 산수 수준의 수식만 사용할 예정입니다만, 그래도 약간의 집중이 필요하긴 합니다. , 이 글에서 *는 곱하기를 의미합니다.



1.     인공신경망이란 무엇인가?


인공신경망의 역사나 관련된 인물 같은 것은 나중에 찾아보시고 단도직입적으로 그림 설명부터 들어가겠습니다. (PGR의 마술사얀님이 올려주신 글이 좋네요.)



이와 같은 모습이 가장 단순한 3-layer 신경망의 전형적인 예입니다. 입력값(숫자)이 두 개 들어가서 출력값(숫자)이 두 개 나오는 것을 볼 수 있습니다. 너무 간단해서 허탈하지 않습니까? 그래도 부연설명하자면 두 개의 입력값(I1, I2)이 계수(v11, v12, v21, v22)와 곱해지고 더해진 후 transfer function을 거쳐서 중간 노드값(A1, A2)을 형성하고, 중간 노드값이 또 계수(w11, w12, w21, w22)와 곱해지고 더해진 후 transfer function을 거쳐서 출력값(O1=B1, O2=B2)을 형성하는 것을 볼 수 있습니다. Transfer function 은 각각의 노드 출력값들이 일정 범위 안에 존재하도록 하는 함수로 보통 아래와 같은 sigmoid 함수를 많이 사용합니다.



제가 위의 신경망을 약간 변형해서 매우 간단한 인공지능을 만들어 보겠습니다. 두 사람이 만났을 때 썸이 생기는지의 여부를 판단하는 인공지능입니다. 입력값의 정의는 다음과 같습니다.



0 : 덕후


0.5: 일반인


1: 시노자키 아이



출력값의 정의는 다음과 같습니다.



0 : 아무일도 안일어남


1 :





제가 원하는 인공지능의 동작은 위의 표와 같습니다. 덕후끼리 만나거나 덕후와 일반인이 만나면 아무 일도 일어나지 않습니다(0). 일반인과 일반인이 만나거나 덕후와 시노자키 아이가 만나면 썸(1)이 발생합니다. 시노자키 아이와 시노자키 아이가 만나는 경우는 아무 일도 일어나지 않습니다(0). 이런 출력을 발생시키도록 신경망을 만들어 보았습니다.


 




위의 신경망은 NeurophStudio 라는 프로그램으로 구현한 것입니다. 이 프로그램은 자바로 간단한 신경망을 구현하고 실험할 수 있게 되어 있으며, ">



윗 그림처럼 일반인(0.5)와 시노자키 아이(1)를 입력하면 0.125 0에 가까운 값이 출력되어서 인공지능이 이 둘 사이에는 아무일도 생기지 않는다고 판단했다고 볼 수 있습니다.





위의 표는 이 신경망을 이용하여 출력한 결과입니다. 약간의 오차는 있지만 원하던 출력값에 근사한 값이 나온 것을 볼 수 있습니다. 적절한 입력, 출력과 계수(v, w)를 주면 이렇게 원하는 동작을 하는 신경망을 만들 수 있습니다.



그런데 제가 어떻게 적절한 계수값들을 찾았는지가 궁금하지 않으십니까? 사실 처음에는 프로그래밍하기 귀찮아서 엑셀에서 임의의 계수값들을 계속 입력해가면서 저 표의 입출력을 맞춰 보려고 했습니다만 아무리 해도 안되어서 포기했습니다. 하나 맞추면 하나가 어그러지는 루빅스 큐브를 하는 느낌이었습니다. 결국 앞서 설명드린 NeurophStudio 프로그램을 설치하여 신경망을 구성한 후 training 데이터(첫번째 표)를 입력하여 41720번의 training을 하여 이러한 결과를 얻을 수 있었습니다. 실제 training 시간은 2분 정도 걸렸으며, 훈련을 반복할때마다 오차는 줄어들었으나 이 정도면 만족스럽다고 생각되어 중지하였습니다. 아래는 프로그램에서 입력한 training 데이터입니다.





 인공신경망의 훈련(training, learning)과정을 간략히 설명하면 다음과 같습니다.


 


1.     Training 입력값을 넣는다


2.     1에 대한 출력값과 원래 기대했던 출력값을 비교한다


3.     계수값이 증가했는데 2번의 차이가 줄어들면 계수값을 증가시키고, 차이가 커지면 계수값을 감소시킨다. 반대로 계수값이 감소했는데 2번의 차이가 줄어들면 계수값을 감소시키고, 차이가 커지면 증가시킨다.



문제해결에 적절한 신경망 구조와 입출력 데이터로 이러한 훈련을 반복하다 보면 계수값들은 각각의 입력에 대해서 원하는 출력이 가능해지도록 저절로 바뀌어 갑니다. 마치 반려견이 올바른 곳에 용변을 보면 칭찬해주고 잘못된 곳에 용변을 보면 꾸짖는 것을 반복하다 보면, 올바른 행동을 하게 되는 것처럼요.



 이러한 training 구조에 대한 수학적인 설명이 필요하시면 http://happycontrol.tistory.com/entry/%EC%97%AD%EC%A0%84%ED%8C%8C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98BackPropagation-%EC%88%98%EC%97%85%EB%B2%84%EC%A0%84 이곳을 참고하셔도 됩니다.



 그런데 고작 이런 것도 인공지능이냐고요? 간단한 문제를 너무 어렵게 풀고 있는 것이 아닌지 의심스러울 것입니다. 사실 문제라고 하기도 애매한 이 문제는 그냥 프로그래밍 하면 간단히 해결될 문제거든요.



 If (i1 == 0 && i2 == 1) // i1 0이고 i2 1이면


output = 1; // 출력은 1이다



이런 식으로 말이죠. 그러나 문제가 약간 달라지거나 복잡해질 때마다 이 프로그램은 수많은 수정을 해야 할 것입니다. 극단적으로 생각하면 바둑 인공지능도 위의 if 프로그래밍을 이용하여 구현하는 것을 상상해볼 수 있을 것입니다. 다만 if else 문이 거의 무한대로 많아져서 실제로는 구현 불가능하겠습니다만. 앞에서 보여드린 인공신경망은 복잡한 프로그래밍이 전혀 들어가지 않았으며(제가 한 일은 훈련 데이터를 입력한 것 뿐입니다), 계수값들은 훈련에 의해서 스스로 찾게 만들었습니다. 또한 이 신경망은 덕후’ 0, ‘일반인’ 0.5, ‘시노자키 아이’ 1 이라는 값들로만 훈련시켰음에도, ‘약간 일반인스러운 덕후’ 0.1 시노자키 아이 스타일의 일반인’ 0.9에 대해서도 0.845 라는 그럴싸한 출력값을 내줍니다.


 




이것은 인공신경망이 추상화하는 능력이 있음을 말해줍니다. 예를 들어서 여러 장의 고양이 사진을 입력값으로 하여 계속 그것이 고양이 사진이라는 훈련을 시켰을 경우, 훈련에 사용하지 않았던 고양이 사진을 입력해도 그것이 고양이 같은데?” 라는 출력을 낼 수 있다는 것입니다.



인공 신경망의 입력값, 출력값은 무엇이 되어도 상관없습니다. 이미지 관련 인공 신경망에서는 입력값이 각각의 픽셀 RGB값이 될 수도 있고, 이미지 주파수 영역의 값들이 될 수도 있을 것입니다. 출력값은 그 이미지가 특정 인물을 포함하고 있는지 여부가 될 수도 있겠죠.



위의 그림은 바이너리 이미지의 알파벳을 인식하는 인공신경망으로 12*12(알파벳의 픽셀 개수)개의 입력을 가지는 것으로 보입니다. 이제 인공 신경망이 어떠한 것인지 대충 감이 오셨으리라 생각합니다. 다음 글에서는 알파고의 구조에 대해서 얘기해보겠습니다. 다음 글이 언제가 될지는 모르겠네요… 제가 알파고를 이해할수 없을것만 같아서...









 


통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
16/03/12 21:45
수정 아이콘
기초적인 이론을 일반인들이 알기쉽게 잘 설명해주셨네요. 흠흠
방민아
16/03/12 22:21
수정 아이콘
좋은 글 감사합니다!! 질문이 2가지가 있는데, 2번 레이어의 노드는 왜 8개이며, 노드와 레이어의 개수는 어떻게 정해지나요??
세종머앟괴꺼솟
16/03/13 00:54
수정 아이콘
보통은 노드와 레이어의 수 결정은 네트웍 짜는 사람의 직관 경험 실험결과 등에 따라 최적이라고 생각되는 수치를 임의로 찾아냅니다. 최고수준의 이미지 인식성능을 위해서는 20개가 넘는 레이어를 쓰기도 합니다.
16/03/13 01:10
수정 아이콘
위의 세종머앟괴꺼솟님 말씀대로 노드와 레이어 개수는 설계자의 경험에 많이 좌우됩니다. 많은 입력, 출력이 존재하고 그 패턴도 다양하다면 노드와 레이어 개수가 많이 필요할 것으로 생각됩니다. 대신 노드와 레이어 수가 늘어날수록 training에 소요되는 시간도 증가했던 것으로 기억합니다. 어느 글에서 통상적으로 노드 수는 입력노드 개수를 n이라 할 때 n, 2n, 2n+1 등으로 한다고 본 것 같네요.(즉 정답이 없음) 제가 이 예제에서 사용한 8이라는 노드 수는 계수들을 엑셀에서 수작업으로 바꾸어 가면서 연산해 볼 때 노드 수 4개로는 도저히 안되는 것 같아서 8로 세팅해서 진행한 것입니다. 아마 더 적은 노드수(6정도?) 로도 가능하지 않았을까 생각합니다.
포켓토이
16/03/13 02:19
수정 아이콘
노드수가 많아서 나쁠건 없습니다. 노드수가 늘어나더라도 경험상 결국 결과는 어느정도
임계점에 도달해서 비슷해집니다.
그럼 많으면 많을 수록 좋은거 아니냐 하실텐데.. 노드수가 많아지면 많을수록 거기에
비례해서 그야말로 팍팍 느려집니다. 이게 노드가 하나 늘어나면 상위 레이어의 노드
전부, 그리고 하위 레이어 전부와 연산해야 하기 때문에 그야말로 제곱으로 팍팍 느려집니다.
제이쓴
16/03/12 22:21
수정 아이콘
쉬운 설명 감사합니다. 비전공자 입장에서 충분히 좋은 설명이 되었습니다.
오바마
16/03/12 22:42
수정 아이콘
이상하다... 시노자키아이밖에 기억이 나지 않아...
지금뭐하고있니
16/03/12 22:51
수정 아이콘
조금 있다 읽을 거지만 미리 감사드립니다.
빈즈파덜
16/03/12 22:51
수정 아이콘
쉬운 설명 감사드립니다~ ^^
류지나
16/03/12 23:19
수정 아이콘
덕후 의문의 1승...
-안군-
16/03/13 00:20
수정 아이콘
정답은 [덕후]다!!

저도 프로그래머지만 이보다 쉽게 설명할 자신이 없습니다.
감사합니다
세종머앟괴꺼솟
16/03/13 00:48
수정 아이콘
아주 좋은 글이네요. 뉴럴넷 첫 입문글로 매우 좋습니다. 알파고까지 가기에 거리가 좀 많이 멀긴 하지만.. 시작이 반이니까요

마지막 예에서 초록색 출력 부분이 A~Z까지의 개수만큼인것도 써주시면 이해에 더 도움이 될 것 같네요
PotentialVortex
16/03/13 01:53
수정 아이콘
Surrogate model 과 차이점이 무엇인지요?
16/03/16 09:35
수정 아이콘
Surrogate model이 무엇인지 제가 잘 몰라서 다른 분이 답변해주시면 감사하겠습니다.
16/03/13 18:41
수정 아이콘
knn때문에 머리 썩이던 사람으로써 너무 반갑네요. 초심자용으로 이보다 더 좋은 글은 힘들지 않나 싶네요.
한 때 grey model을 해야 하나 black box model을 해야하나 고민하며 드립다 팠던 적이 있었는데, 결국 dynamic programming을 써서 엄청 무겁게 풀었던 기억이 있습니다.
당시에는 black box인 knn은 아직은 한계가 있고 정확도와 강건성에 문제가 있어 포기했는데 알파고를 보니 감개 무량하네요.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
64056 [일반] 힐러리 클린턴의 토론 스타일 [27] 삭제됨8432 16/03/13 8432 0
64055 [일반] [SF 단편] 궁극의 질문 [42] 마스터충달6228 16/03/13 6228 10
64054 [일반] [혐?] 태어나서 가장 더럽다는 생각이 드는 뉴스를 보았습니다 [45] 삭제됨12282 16/03/13 12282 1
64053 [일반] 지금 막 시그널이 끝났습니다.(스포주의) [114] 페이커센빠이12144 16/03/12 12144 8
64052 [일반] 독일언론에서 긁어오기 - 알파고(3) [13] 표절작곡가11005 16/03/12 11005 8
64050 [일반] 인공신경망과 알파고 - 인공신경망이란 무엇인가? (데이터 주의) [15] 65C0211242 16/03/12 11242 22
64049 [일반] 남녀 성비 불균형은 사회적 재앙을 초래할까? [51] santacroce14090 16/03/12 14090 39
64048 [일반] 서울시, 도철 성남여주선 운영 불허에 개통 연기 불똥 [16] 군디츠마라7045 16/03/12 7045 4
64047 [일반] [단편소설] 바둑의 미래 [29] 토니토니쵸파6777 16/03/12 6777 16
64046 [일반] 알파고 문제 - 꿈보다 해몽이라는 것 [23] 푸구루죽죽7322 16/03/12 7322 3
64045 [일반] [바둑] 인공지능의 도전 제3국 - 알파고 불계승 [114] 낭천15959 16/03/12 15959 0
64043 [일반] 워킹!! 감상문 [19] 좋아요3994 16/03/12 3994 2
64042 [일반] [3.12] 김치찌개의 오늘의 메이저리그(박병호 스프링캠프 3호 솔로 홈런) [12] 김치찌개6350 16/03/12 6350 0
64041 [일반] 브라질의 어두운 과거 이야기 [12] santacroce6319 16/03/12 6319 10
64040 [일반] [프로듀스101] 4차 평가 팀 구성 소개 (2차 투표 결과 전, 후) [17] The Last of Us7594 16/03/12 7594 2
64039 [일반] 캐낼수록 드러나는 잔혹한 진실.. [59] 로즈마리14399 16/03/12 14399 1
64038 [일반] [음악] 귀를 의심한다. Life & Time [5] SwordMan.KT_T4223 16/03/12 4223 2
64037 [일반] [프로듀스101] 2차 투표 최종 결과 [74] Leeka8715 16/03/12 8715 0
64036 [일반] 출사 : 삼국지 촉서 제갈량전 18 (4. 쫓는 자와 쫓기는 자) [34] 글곰4947 16/03/12 4947 65
64035 [일반] 룰라런...빈곤퇴치와 로또 [7] santacroce6119 16/03/12 6119 16
64034 [일반] [3.11] 김치찌개의 오늘의 메이저리그(김현수 1타점 적시타) 김치찌개3609 16/03/12 3609 1
64032 [일반] 애절한 랩발라드 좋아하시나요?? [6] JN사랑해5264 16/03/11 5264 0
64031 [일반] 룰라 전 브라질 대통령 이야기: 차베스와 다른 길 [25] santacroce7376 16/03/11 7376 16
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로