머신러닝의 이해
머신러닝이 어려워하는 게 뭘까? 동영상 인식이다. 머신러닝이 제대로 상용화 되려면 정지이미지 인식만으론 부족하다. 그런데 동영상을 처리할 수 있다면 무엇을 대체할 수 있을까? 일단 구청의 CCTV를 대체한다. 길거리에 불법 주정차를 쳐다보고 있는 것은 인간 공익근무요원이다. 고급 주택 창문에는 ADT 캡스의 적외선 인식기가 달려있다. 속도위반 카메라는 속도를 인식하고자 아스팔트 자르고 땅 파서 센서를 매입하고 있다. 그런데 동영상을 인식할 수 있다면 이 모든 걸 카메라 하나로 퉁치게 된다.
현재 머신러닝 이미지가 상용적으로 쓰이는 것은 명함인식과 카드인식, 얼굴인식 정도다. 딱 여기까지. 그 이상은 연구과제일 뿐이다. 아마존의 무인 상점은 마케팅이니깐 속지말자. 동영상 인식이 되지 않는 이상 그거 잘 안 된다. 아마존고는 정지영상으로 꼼수를 부린 것이다. 꼼수는 당연히 한계가 있다. 한편 단순히 생각해도 정지영상 보다는 동영상이 정보가 많으므로 인식하기 어려울 것 같다. 근데 프레임으로 잘라서 인식하면 되잖아?
하지만 문제는 프레임을 얼마나 자를 지를 정할 수 없다는 것이다. 초당 한 컷이면 되겠어? 그렇다면 초당 주먹이 100번 나가는 전설의 복서는 인식 못하겠네? 과연 머신러닝은 사람이 걷는 것을 인식할 수 있을까? 머신러닝을 따지기 전에 인간은 어떻게 하는지 생각해보라. 우리는 무심결에 "걷는 인간"을 인지하지만, 실제로 그 과정을 말로 정의하라고 하면 쉽지 않다.
물론 우리는 멈춘 것과 움직이는 것을 분류하고, 움직이는 다양한 행동 중 걷는 것과 뛰는 것을 분류했을 것이다. 여기서 핵심 과제는 어느 크기로 잘라야 하나의 행위를 완성시킬 수 있는지 정의하기가 어렵다는 것이다. 반박은 있다. "사람 걷는 걸 보니깐, 대충 2초에 한번씩 자르면 걷는 행위를 캐치할 수 있을 것 같은데." 그럴듯하다. 근데 최홍만은 어쩌지? 얘는 보폭이 다르고 시간도 다르다. 백만 명이 있다면 백만 명의 시간은 모두 다르다. 골 때린다.
#
공자는 일이관지하여 지식을 압축저장한다고 했다. 그는 우리처럼 무식하게 일일히 모든 사례를 기억하지 않는다. 사실 인간의 두뇌는 유전적 구조론을 타고난다. 어떻게 아냐고? 우리는 컵에 든 물을 마실 수 있기 때문이다. 그게 구조론의 증거다. 문제는 인간의 기초적인 행위에 대해서만 구조론적 유전 알고리즘을 쓰고, 지식에는 그걸 안 쓴다는 것이다. 그래서 그냥 외운다.
공자가 일이관지 할 수 있는 이유는 그가 패턴을 읽기 때문이다. 패턴을 읽을 수 있는 이유는 인식의 한계를 정하고 내용을 보기 때문이다. 공자의 패턴과 계 읽기는 효율적이다. 그의 지식은 대개 말하는 순간에 조립되어 나온 것이다. 반대로 우리는 조립해둔 지식을 취하려 하므로 양이 늘어난다.
인공지능도 마찬가지이다. 인공지능의 제 아무리 많이 기억하고, 연산 속도가 빨라도 여전히 해결되지 않는 문제가 있다. 귀납하는 지식으로는 아무리 쌓아봤자 헛수고가 된다. 감당이 안 된다. 컵 하나를 인식하고 그것을 잡는 기계를 만들어보자. 기본적인 문제는 컵의 사이즈가 천차만별이라는 것이다.
당신은 컵의 본질을 알고 응용할 수 있으므로 100만 가지 컵을 다 외우지 않지만, 컴퓨터가 귀납을 쓴다면 그걸 다 외워야 한다. 게다가 검색까지 하려면 환장하는 것이다. 컵 종류가 많은 것만 문제가 아니다. 그 안에 들어있는 음료의 양도 문제다. 음료의 양과 색이 바뀌면 컵 종류가 지수적으로 늘어나는 것과 같다. 이쯤 되면 포기한다. 그런데 두뇌의 크기가 콩알만한 까마귀도 인간의 5~6세에 해당하는 지능을 갖는다. 사실 까마귀도 구조론을 사용한다.
#
현대의 인공지능이 진일보한 이유는 무엇일까? 머신러닝 혹은 딥러닝이라 불리던 기법이 만들어지기 이전에는 컵을 인식하고자 컵의 백만 가지 특징을 과학자가 모두 입력했어야 했다. 당신이 잘 알고있는 한글프로그램의 띄어쓰기 인식 알고리듬이다. 그거 노가다의 산물이다. 그러다가 “이름 붙이기”라는 놀라운 방법을 발견했다. 이른바 지도학습(supervised learning)이다. 비유를 들어보자.
인간의 지식이 자손대대로 전달되는 방식은 무엇일까? 그것은 이름이다. 인간은 사물에 이름을 붙여서 자손에게 지식을 전달한다. 우리는 아기일 때 이름과 사물을 동시에 익혔다. 그러면서 대상의 공통점과 차이점을 익혔다. 그런데 세상에 있는 모든 개는 다 다르게 생겼는데, 우리는 용하게도 개를 잘 인식한다. 물론 치와와와 시베리안 허스키 모두 개라는 걸 우리는 쉽게 납득하지 못했다.
이름의 본질은 무엇인가? 가령 우리가 실물 개를 보고 개라는 이름을 떠올렸다면 머리에서는 무슨 일이 일어날까? 우리는 개를 떠올린다고 생각했지만, 실제로 우리의 두뇌는 고양이가 아닌 개를 떠올린 것이다. 다시 말한다. 그냥 개를 떠올린 게 아니라, “고양이가 아닌 개”를 떠올린 것이다. 이게 무슨 말인지 잘 따져보자.
구조론에 의하면 어떤 것이 존재한다면 그것이 유도되는 과정이 있다고 했다. 그것은 바로 그것과 그것이 아닌 것부터 구별하는 것이다. 당신은 개를 인식하고자 고양이와 비교된 개를 인식한다. 당신은 순수하게 개를 인식할 수 없다. 그리고 "내가 보기에"라는 기준을 사용한다. 이는 사건과 사물의 차이다. 사건은 기본적으로 이진 트리 모양이다. 하지만 사물로 트리를 만들면 문어발 트리다. 자신의 존재와 계층의 구조 사이에 필연성이 없다. 저혼자 존재한다고 주장하기 때문이다.
우리가 자전거를 탈 줄 안다면, 당신은 반드시 넘어지는 방법을 아는 것이다. 실패가 없다면 성공도 없다. 물리적으로 불가능하다. 왜냐하면 타는 방법을 가리킬 수 없기 때문이다. 두뇌는 품성이라는 기준과 나쁜 놈이 있어야 착한 놈도 가리킬 수 있다. 당신 눈에 어떤 여자가 예뻐 보이는 이유는 못난이를 봤고 친구의 시선이라는 기준이 있기 때문이다. 당신은 무엇이 어떻다. 혹은 무엇이 무엇이다라고 말하고자 그것이 아닌 것, 혹은 비교된 것을 동시에 기억하고 떠올린다. 무인도에서 옥동자만 본 여자는 옥동자의 외모를 평할 수 없다.
인공지능도 마찬가지다. 인공지능을 학습시킬 땐, 이름의 종류를 사전에 규정하고 시작한다. 가령 CIFAR-10이라면 10개의 이미지를 분류하는 머신러닝 알고리즘을 말한다. https://www.cs.toronto.edu/~kriz/cifar.html 이는 이름의 종류와 한계를 미리 정하고, 이름에 해당하는 다수의 이미지를 때려넣고 10개의 이름을 구분할 수 있는 특징(이미지에서 추출하는)을 훈련시킨다.
그럼 10가지 외의 이미지는 구분할 수 있는가? 없다. 얘는 딱 10가지만 분류하도록 훈련된 알고리즘이다. 10가지 이미지에서 어느 하나를 가리켰다면 그것은 입력 이미지가 그것이라는 것이 아니라, 9개가 아닌 바로 그것임을 의미한다. 한편 같은 방법을 쓰고 양을 늘리려면 CIFAR-100이라는 것을 쓰면 된다. 얘도 딱 100가지만 구별한다. 더 많은 이미지를 분류하려면 용도에 맞게 새로 훈련해야 한다.
그런데 CIFAR-10에서 훈련된 특징을 CIFAR-100에도 재사용할 수 있을까? 없다. 수많은 바보들이 여기서 걸러진다. 왠지 재사용할 수 있을 것 같잖아. 그들은 이름을 사용한 훈련방법이 원자적인 특징을 사용하기 때문에 당연히 재사용할 수 있다고 착각한다. 근데 아니다. 머신러닝은 이름이 주어지면 딱 그 이름으로 분류할 수 있을 만큼의 특징만 이미지에서 검출한다. 이때 사용되는 개념이 공통점과 차이점 원리이다. 구조론에도 나오는 바로 그것. 특징은 이름에 의해 적절히 선택된다. 특징이 아니라 이름이 기준이며 단위다.
#
공통점은 이름이고, 차이점은 특징이다. 개와 고양이를 구분한다고 치자. 머신러닝은 자체의 알고리즘에 의해 적당히! 특징을 캐치하고(feature extraction) 이를 가치화 혹은 계량화 하여 이름과 연결한다.(classification) 이때 이름이 계량의 기준이 된다. 바로 “고양이가 아닌 개”라는 개념이다. 중간 과정은 특징을 추출하는 단계이고, 마지막에 output은 이름과 대조하여 해당 특징의 정도를 가치화한다.
이 정도면 놀라운 발전이다! 인간은 기존의 특징 찾기 노가다(feature engineering)에서 상당히 벗어났다. 하지만 여전히 문제는 남았다. 이게 정지이미지에서만 통한다는 것이다. 동영상에 대해서는 상당히 제한적이다. 가령 스타크래프트와 같은 2d 이미지 게임에서 겨우 된다. 그것도 상당 수준 과학자가 개입해서 겨우 가능한 것이다. 물론 바둑도 동영상이라고 할 수 있다.
하지만 바둑은 이미지 인식의 관점에서 보면 매우 쉬운 문제이다. 바둑이 어려운 것은 그 변화의 길이가 시간적으로 길기 때문이다. 바둑돌은 간단하지만 바둑알의 전개는 무진장 긴 것이다. 그런데 우리가 풀고자 하는 일상의 문제들은 길이기 긴 게 아니라 바둑알 하나가 매우 크고 복잡한 상황이다.이는 바둑을 풀었던 알파고로는 절대로 풀 수 없는 다른 차원의 문제다.
사람이 창문 근처에서 어슬렁거린다고 치자. 저 놈이 도둑놈인지 창문 청소를 하는 사람인지 혹은 줄리엣에게 편지를 전해주려는 로미오인지 당신은 구분해야 한다. 당신은 대상의 옷차림이나 시간, 날짜 등 여러 가지 맥락을 고려하고, 대상의 행동을 단순하게 패턴화하여 그를 분류한다. 근데 이게 머신러닝에게는 어려운 일이다.
인간이라면 변화하지 않는 것에 대하여 상대적으로 변화하는 것을 계층적, 계(boundary and system)적으로 인식하고, 특히 계와 맥락을 지정하고자 자신의 사회적 포지션을 그 기준으로 활용한다. 왜 돼지 눈에는 돼지만 보일까? 거꾸로 돼지가 아니면 돼지의 특정 행동이 아예 보이지 않는다. 우리는 눈에 보이면 보인다고 생각하지만, 내가 상정한 어떤 의미와 연결되지 않으면 그것은 있어도 있는 게 아니다.
그런데 머신러닝이 이름을 사용하여 비약적으로 발전했지만, 과학자들은 이름이 일종의 계라는 것을 잘 알지 못한다. 그러므로 이름을 체계적으로 관리할 생각을 하지 않는다. 무엇보다. “관점”을 제대로 정의하지 않기 때문에, 관측자에 따라서 대상이 달리 보일 수 있다는 것을 원천적으로 고려하지 않는다. 그러므로 그들은 누가 봐도 뻔한 것만 잘 구분하려 한다. 즉 관찰자가 누구이건 상관없이 납득할 수 있는 것만 인식의 대상으로 삼는다.
그런데 바둑이 이 문제에서 자유롭다. 왜? 바둑판의 크기가 딱 정해져있고 바둑돌은 절대 그 범위를 넘지 않기 때문이다. 바둑판에 앉은 사람은 모두 기사다. 물론 가끔 알까기 하는 사람도 있겠지만, 머신러닝은 바둑을 두는 사람으로 게임을 고정시킨다. 위의 사진을 보자. 인공지능의 딜레마가 여기에 있다. 이 사진을 보고 인공지능은 개라고 할까, 아니면 포도라고 할까? 물론 개라고 할 것이다. 왜냐하면 대개는 개를 위주로 훈련시키니깐. 다음 사진은 YOLO라는 알고리즘이 사물을 인식한 결과이다.
물론 이렇게 다수의 이미지 인식에 성공하기도 한다. 그런데 말이다. 이 방법이 과연 좋은 해결책일까? 뒤에 있는 건물이나 나무는 왜 인식을 하지 않는가? 도로는? 하늘은? 반대로 생각해보자. 과연 우리는 사진에 있는 대상을 모조리 인식할까? 사람은 운전할 때 사진 찍듯이 이미지를 모두 쳐다볼까?
절대로 아니다. 인간은 자신과 관련 있는 것만 선별적으로 본다. 그 외에는 무시한다. 중요한 것은 인간이 대상 중 무엇이 자신과 관련이 있는지를 결정할 수 있다는 것이다. 구조론에서 자주 언급되듯이 멍청한 인간은 중요한 것은 보지 못하고, 쓸데없는 것만 본다.
인공지능도 마찬가지이다. 저 알고리즘(YOLO)은 무엇이 중요하다는 개념이 아예 없다. 왜냐하면 “사건”의 개념이 없기 때문이다. 무엇이 중요하다고 말하려면 기준이 있어야 하며, 그 기준을 정하려면 "나"를 넣어야 한다. 근데 현재 머신러닝에서는 “나“가 없다.
그나마 이미지에 바운더리(사각형 박스)를 그릴 수 있는 것도 사람이 상당히 개입한 결과다. 그런데 저게 언제나 통하지 않는다는 게 문제이다. 도로의 상황은 다양하게 변하기 때문이다. 그 모든 변화에 과학자가 다 개입할 수는 없다. 경우의 수가 너무 많다. 사실 바운더리를 정하는 것도 사실 “나”가 들어가야 능동적으로 변화시킬 수 있지만, 해당 알고리즘은 무시한다.
다시 말하지만 전문가와 일반인은 관점(인식하려는 대상의 이름의 종류)이 다르므로 대상을 다르게 본다.
그럼 인공지능은 희망이 없나? 있다. 사실 현재의 인공지능에서 무심결에 규정한 뻔한 전제를 오히려 훈련의 대상으로 삼으면 된다. 최근에 인공지능과 관련한 이슈는 인종차별이다. 이미지나 텍스트의 인종차별이 나오는 이유는 머신러닝을 훈련하고자 이름을 붙인 인간이 인종차별자이기 때문이다. 즉 이름에는 관점이 반영된다. 그러므로 관점이 반영된다는 사실 자체를 변수로 두면 된다.
관점이라는 하나의 관문만 통과하면 그 이후부터는 일사천리다. 생각보다 빠르게 인공지능은 완성될 수 있다. "현재의 인공지능 알고리즘은 뭔가 근본적으로 잘못 되어 있다."라는 게 내 주장이다. 구글이 알파고로 인간을 따돌리며 주가를 올렸지만, 새로운 알고리즘이 나온다면 구글의 최신 기술도 단번에 쓰레기가 될 수 있다.
알파고는 바둑이라는 게임이 고정적이므로 현실세계처럼 게임 자체가 변화하는 경우엔 대처할 수가 없다. 룰에 의해 정의 되는 게임 자체를 학습 대상으로 삼아야 한다. 물론 쉽지 않다. 게임의 구성요소를 분명히 밝혀야 하기 때문이다. 하지만 그래야 인간의 지식이 인공지능으로 게임(이름)을 통해 복제될 수 있다.
![프로필 이미지](https://gujoron.com/xe/files/member_extra_info/profile_image/415/014/14415.jpg)
![포인트:17241point (83%), 레벨:13/30 [레벨:13]](https://gujoron.com/xe/modules/point/icons/default/13.gif)
![프로필 이미지](https://gujoron.com/xe/files/member_extra_info/profile_image/919/972/972919.jpg)
![포인트:42103point (62%), 레벨:21/30 [레벨:21]](https://gujoron.com/xe/modules/point/icons/default/21.gif)
이 세상에 여러가지 알고리즘은 없습니다.
우주의 알고리즘은 단 하나이며,
그것을 설명하는 것이 구조론입니다.
다만 그 하나의 원리가 다양하게 보일 수는 있습니다.
![프로필 이미지](https://gujoron.com/xe/files/member_extra_info/profile_image/415/014/14415.jpg)
![포인트:17241point (83%), 레벨:13/30 [레벨:13]](https://gujoron.com/xe/modules/point/icons/default/13.gif)
언급된 알고리즘은 원론적인 알고리즘을 의미하는 것이 아니고, 특정 시점에서 사용하(되)는 머신(의사결정 기계, 생물 포함)에서 돌아가는(이미 구현된) 구체적인 코드(기법)을 의미합니다...
![포인트:5534point (83%), 레벨:7/30 [레벨:7]](https://gujoron.com/xe/modules/point/icons/default/7.gif)
네이밍이 프로그래밍의 전부라고 말해도 과언이 아니며
네이밍이 결국 언어아니겠습니까?
즉, 언어가 다라고 볼 수 있다고 말할 수 있습니다.
네이밍은 구조적이어야 하는데
가령, 유전자가 같은 것은 동일한 구조로 네이밍해야 다음에 다시 볼 때 readible(직관적 이해)합니다.
![프로필 이미지](https://gujoron.com/xe/files/member_extra_info/profile_image/919/972/972919.jpg)
![포인트:42103point (62%), 레벨:21/30 [레벨:21]](https://gujoron.com/xe/modules/point/icons/default/21.gif)
프로그래밍에서의 네이밍 스페이스는 트리의 개념으로 만드는데,
복합 구조체에서 변수나 함수의 이름 충돌을 막고자 만든 것이죠.
이는 집합의 개념을 반영하는 구조라고 할 수 있습니다.
구조론에서의 사건 구조는 각각의 개체가 필연적인 관계를 가지는데,
그것은 마치 주어와 목적어가 전제라는 상위 계층에 대하여 ,
동사의 전후가 주어라는 상위 계층에 구조/논리적으로 밀접하게 관련되는 것과 같습니다.
일반적으로 통용되는 트리는 수학에서의 집합 구조를 트리화 한 것일 뿐이며
이는 집합내 원소를 모으는 근본 이유에 대해서 기술하지 않습니다.
네이밍 스페이스가 이런 식이죠. 집합구조입니다.
문제는 집합구조의 중심이 집합이 아니라 원소라는 겁니다.
근데 원소의 결합체인 집합이 원소보다 더 상위 계층이라는게 딜렘마입니다.
위 그림에서 '거래 1, 2'라는 집합이 '거래1'과 '거래2'의 상위 계층인데,
표현의 중심은 원소(거래1, 거래2)에 있다는 거죠.
이 때문에 영어에서 단수형, 복수형, 추상형을 엄격하게 구분합니다.
그게 계층(맥락)을 표현하기 때문입니다.
반면 구조론에서 말하는 트리는
원소를 상대적으로 관계를 절대적으로 규정합니다.
즉 관계(상위)가 규정되고 나면 원소(하위 종속)를 그 관계에 한정하여
상대적으로 규정하는 것입니다.
가령 국가를 집합론으로 설명하면
국가는 국민이 모여서 이뤄진다고 말하지만,
구조론으로 보면, 어떤 자원에 대해
경쟁관계를 가지는 외부 세력과 내부 세력의 대칭이 규정되면
이때 세력을 국가라고 이름을 붙이는 것이며,
그러므로 국가의 구성은 단 1명이 될 수도 있습니다.
(물론 UN이 인정해주지는 않죠. 말이 그렇다는 거.)
그리고 이는 굳이 말하자면 이진트리의 형식으로 표현됩니다.
대칭의 개념이 적용되기 때문입니다.
생물이 40억년 걸린 것을, 인공지능은 40년 정도 연구되어 왔으니... 저는 특별한 장벽은 없다고 생각합니다...그저 시간의 문제일 뿐...어떤 특이점을 통과하면 생물(인간)의 지능이 사용하는 알고리즘과 다른 차원의 알고리즘을 쓰는 (인공)지능이 나오는 것도 가능할지도...