자연철학2023. 4. 15. 10:33

 사람은 늘 예측을 하면서 살아간다. 길을 걷거나 뛰어갈 때, 계단을 오르내릴 때, 인지 못하는 사이에 이런 일이 벌어진다. 예측하고 행동하는 일을 반복함으로써 넘어져서 다치는 일을 피할 수 있다. 먹을 것을 찾고, 위험을 회피하기 위해서, 경쟁하고 우위를 차지하기 위해 인간은 끊임없이 예측해야 했다. 그래서 진화에서 주변을 지각하여 대응하는 이 지능이라는 기능의 가장 큰 기여는이러한 예측이라고 생각한다.

 

 하지만 이러한 예측은 인간 생애에 한정되어 일어난다. 우리는 100년 남짓의 지구에서의 생활에 최적화되어 예측을 행한다. 그러나 근대를 지나서 집단 지성을 통해 드디어 인간은 이 시간과 공간의 제약 범위를 뛰어넘기 시작했고, 뉴튼은 이러한 기념비적인 정확한 예측 작업의 체계적인 첫 시작을 한 것으로 평가받게 되었다. 천체의 움직임을 중력이라는 원리로 인해 수학적으로 기술함으로써 이제 행성의 위치를 매우 정확하게 예측할 수 있게 된 것이다.

 

 수학은 이렇게 인간의 지각을 넘어서는 분야에서 예측의 중요한 도구가 되었고, 지금도 마찬가지다. 인간은 오감으로 느껴지는 일부분 외에는 소위 "직관적으로" 혹은 "본능적으로" 예측하기 어렵다. 너무 작은 세계이거나 너무 느리거나 빠른 세계의 현상들도 마찬가지다. 이런 분야에 대해서는 뇌가 곧바로 대응하지 못한다. 뇌에 축적된 경험이나 반응은 인간에게 익숙한 현상들에 집중되어 있다. 인간은 양자의 세계를 온전히 편안하게 이해할 수 없다. 보이지도 들리지도 않기 때문이다. 그래서 더 평범하게는, 보이지 않는다는 이유로 엄연히 잘 느끼는 온도를 제대로 이해하는데 그토록 오랜 시간이 걸렸고, 그 체계를 잘 몰랐던 일식이나 월식도 마찬가지였다. 전체적으로 어떤 모습의 인과속에서 작동하는지는 눈에 전체가 제대로 보이지 않으면 이해할 수 없었다.

 

 우주의 기원같은 문제도 마찬가지다. 지구의 역사도 그렇다. 애초에 그런 것들은 인간이 평소 보유한 경험이나 그 상상에도 대부분 어긋난다. 그런 것들이 교육을 통해 편안한 마음으로 머리 속에 자리잡도록 기대하는 것 자체가 이 문제의 난이도를 과소 평가하는 셈이다. 어떤 인간도 편안하게 이런 세계를 받아들이기 어렵다. 인류가 그것을 수학적으로 기술하는 데는 어느 정도 성공했지만, 아주 어렸을 적에 그것들을 배운다 하더라도 마음으로 이해하기는 어렵다. 우리의 뇌는 그런 것들을 받아들이도록 진화되거나 훈련되어 있지 못하다. 그저 수학이라는 도구 혹은 기계를 통해서 바라보고 예측해낼 수 있을 뿐이다. 

 

 이 문제에 있어서 오늘 다뤄보고 싶은 것은 우주의 역사에 대한 부분이다. 반복해보자면, 우주의 역사를 제대로 이해하는 것의 시작은, 우선 그것이 지구에 살아가는 동물로서의 일반적인 이해력으로 따라가기 어렵다는 것을 인지하는 것이라고 생각한다. 우주의 역사 같은 것은 우리가 살아오면서 축적한 경험과 지식과는 그 양상이 다르다. 대략은 어찌어찌 그렇게 받아들인다고 쳐도 그 현상을 자세히 예측할 수 있는 정도는 아니다. 그저 남이 예측한 것을 그때그때 외울 수 있을 뿐이다. 수학적인 접근이 없다면 그래서 각 상황별로 정확히 계산해서 예측하기도 어렵다. 공을 던지는 것을 몇번 바라보고 그 공을 잡을 수 있게 되는 것은, 중력을 온몸으로 이해하고 있는 이 지구라는 공간 정도 뿐이다. 양자의 세계에서나 우주의 시간에서 몇번 바라보고 공을 잡아내는 계산을 할 수 있는 논리회로가 뇌 속에는 존재하지 않는다. 따라서 먼저 이 사실을 마음깊이 이해해야만 우리는 우리가 보지 않았던 것들을 예측하는 첫 걸음을 내딛을 수 있다.

 

 그리하여 자연을 연구한 이들은 자신의 본성보다는 여러가지 상상력 속에서 수학에 더 깊이 몰입해 이 도구를 신봉하게 된다. 이 계산의 틀만이 대칭과 보존을 이루는 것으로 믿어지는 자연을, 놀라운 스케일과 다양한 조건 속에서 예측해낼 수 있다. 적절한 가정을 통해 계산하여 관측 결과와 들어맞으면 우리는 이 방정식을 통해, 우리가 직관적으로 받아들일 수 없는 자연을 구체화하고 드디어 예측할 수 있게 되는 것이다.

 

 이러한 무수한 노력에 따라 인간이 우주에 대해서 하고 있는 현재의 예측은 다음과 같다. 엄청난 시간 속에 우리의 미래는, 영원한 팽창과 멀어짐 속의 소멸로 간다. 그러나 이 사건을 운석 충돌로 인한 공룡의 멸망과 같이 놓고 볼 필요는 없다. 그것은 인간에게는 너무 느린 속도로 진행 되고 있기 때문에 티끌만큼도 걱정할 대상이 아니다. 인간의 본능적인 소멸에 대한 이해와 수학적으로 예측한 우주의 소멸에 대한 이해가 달라야 하는 이유 중 하나다. 인간이 경험한 어떠한 재앙스러운 소멸도 이 계산의 결과를 이해하는 일에 쓰이기에는 부적당하다. 그것은 전혀 다른 것이기 때문이다. 

 

https://www.youtube.com/watch?v=uD4izuDMUQA 

 

 이렇게 내가 경험하기 어려운 공간과 시간을 예측하기를 원하는 이는, 그것이 인간의 본성과는 괴리됨을 이해하고 그리고 그것이 수학이라는 도구에 의존한다는 사실을 먼저 인지하는 것이 좋다. 그래서 수학 체계에 대한 여러가지 이해의 시도가 그나마 인간을 이러한 경험하지 못한 세계로의 이해로 안내할 것이라고 말하고 싶다.

 

 여기서 가장 집중해야할, 그나마 인간이 인지하기 어려운 자연을 이해할 수학 체계의 본성에 대한 이해가 무엇을까? 바로 대칭과 보존, 무한과 임의성 같은 주제라고 나는 생각한다. 몇가지 과거의 경험과 상상이면 이러한 대칭이나 보존 같은 정도는 내 본능으로도 이해할 수 있다. 우리는 늘 시각에서 대칭을 잘 찾아내고 아름다워 하지 않는가? 그리고 이것들에 대한 기술은 이미 몇 편의 이 블로그 글에서 진행했는데, 과연 이것으로 어떻게 우주를 상상하고 예측해 볼 수 있다는 말일까?

(신비롭게도 아직 우주에는 대칭이나 보존이 깨졌다는 명백한 증거를 발견한 적이 없고 반대로 그것이 지켜진다는 증거는 도처에 존재한다.)

 

 첫번째는 우주에는 무한의 시간 속에 모든 일이 발생할 수 있다는 사실이다. 심지어 그 각각의 모든 일이 무한번 발생하게 된다. 우연히 물감을 엎질렀는데 모나리자가 그려질 확률은 0에 가깝지만, 무한의 세상에서는 무한번의 모나리자가 그려진다. 그리고 흥미롭게도 이러한 통찰은 생명의 탄생이나 여러가지를 설명해 줄 수 있다. 우리는 그 무한의 어딘가 한 순간을 살아가고 있다. 인류가 거의 무한번 나타난다고 해도 이상한 논리라고 생각하지 않는다. 확률이 희박한 것은 무한에서는 문제가 되지 않는다. 무한에서는 일어날 수 있는 것은 모두 무한번 일어난다. 이런 점에서 우주가 탄생하고 영원히 나이먹는 과정 정도만 밝혀진 상황에서도, 우주의 탄생이 단 한번의 유일한 것으로만 보기는 어렵다. 그것은 두번째 사실에 근거한다.

 

 두번째는 우리가 담고 있는 세계가 보여주는 대칭과 보존이다. 미시세계의 불확실성에도 불구하고 대칭과 보존은 깨어지지 않는다. 사람이 시각으로도 이해할 수 있는 이 대칭은 무언가 기억하지 않고 균형을 이룰 수 있는 유일한 방법이다. 단순한 수학적 전개가 이루는 기본 틀이다. 우주가 어떻게 태어나고 팽창하던 그것은 무한의 반복 속에서 대칭과 보존을 지켜야 하는 것으로 보인다. 그래서 이런 사실만으로도 다중 우주에 대한 주장이 곧바로 지지받게 된다. 만약에 우리가 사는 우주가 어떤 닫힌 무엇인가라면 합쳐서 0이 되는 반대의 무엇인가가 존재해야 한다. 그리고 그것이 한번 생긴 것이라면, 단독으로 생길리 만무하다. 그것은 보존 속에 무한번 다양하게 생겨야 한다. 대칭으로 태어나 무한번 반복되어야 한다.

 

 한가지 재미있는 것은 그런 면에서는 양자역학으로 증명된, 세계가 이산적(discrete)이라는 해석은 당혹스럽기는 하다. 왜 그런 끊김이 존재하는가. 그런 끊김이 대칭과 보존에 어떠한 영향을 미치는가. 그리고 왜 하필이면 그 scale에서(플랑크 상수) 끊기는가. 그것은 계속 상위와 하위에서 반복되는가?

 

 이런 기본적인 상상들이 이 분야에 대해, 그나마 인간의 이성으로 도전할 수 있는 부분이 아닐까? 계산하기 전에 수학이 가진 여러가지 틀 관점에서 바라보는 그런 방법이 아닐까?

 

 

 

 

 

반응형
Posted by 작동미학
머신러닝AI2023. 4. 2. 19:08

많은 사람들이 ChatGPT 질의를 위해 OpenAI 사이트에 접속해서 사용한다. 해당 웹 화면에 그대로 접속해 활용하는 방법이다. 그런데 OpenAI는 이러한 직접적인 웹서비스 외에도, 별도로 개발해서 사용할 수 있는 API를 지원한다.

 

 게다가, 이 API 사용방법은 개발자에게는 매우 쉽고 몇가지 장점이 있는데, 유료 사용을 염두해두면 특히 더 그렇다. API 1회 사용에 $0.01이면 ChatGPT Plus라는 $20짜리 정액 요금제에 비해, 2천문장을 물어봐야 한달에 간신히 $20을 쓸 수 있는 종량제 형태의 사용이 가능하다. 그리고 이 API 사용시 처음 $18은 무료이기도 하다. 이 무료도 개인은 다 쓰기가 쉽지 않다.

 

 그러면 직접 한번 사용해보자. S/W 개발 경험이 있는 사람을 가정해보았다.

 

0) 우선 OpenAI의 API를 사용하기 위해서는 API key를 받아야 한다.

 

 API Key는 일종의 API사용 인증암호 같은 것이라고 생각하면 된다. OpenAI에 가입했다면 이미 준비가 거의 끝난 셈이고, API Key생성 버튼(Create new secret key 버튼)을 누르면 곧바로 알 수 있다. openai.com에 로그인이 되었다면 https://platform.openai.com 에 접속하여 아래 화면처럼 API 생성을 해보자.

 

 

Create new secret key를 누르면 secret key가 생성된다. 생성시 별도로 잘 기록해 숨겨둔다.

 

위 화면의 SECRET KEY 에 "sk-...NCss"로 표기된 것에 실제로는 더 많은 알파벳(?)들이 숨겨져 있는 긴 문자열이다. 참고로 위 왼쪽 메뉴에서 'Usage'를 누르면 지금까지 API를 호출한 사용량을 알 수 있다. $18의 무료 사용이 끝나면 유료로 넘어가게 된다.

 

1) API를 python을 호출해서 사용해보자.

 

https://medium.com/nerd-for-tech/create-ai-application-in-minutes-with-openai-api-5e84bd3ec5d0 에 간단하게 잘 설명되어 있다. python을 쓸 수 있는 환경 하에서

 

$ pip install openai 해서 설치한 후

 

아래 python code를 실행한다. 세부 옵션들은 여기서는 설명을 생략한다.

 

import os
import openai
import config
openai.api_key = "위 얻어낸 SECRET KEY를 넣는다"
response = openai.Completion.create(
engine="davinci",
prompt="Blog topics dealing with daily life living on Mars\n\n1.",
temperature=0.3,
max_tokens=64,
top_p=1,
frequency_penalty=0.5,
presence_penalty=0)
print(response)

 

여기 나오는 설정 변수들을 간단히 설명해보면 아래와 같으니 참조하면 된다. 실제로는 각 값 간에 영향을 주는 부분이 있어서 시행착오 속에 값을 결정하게 된다고 한다.

 

ㅇmax_tokens

  최대 생성 토큰 길이로 GPT3의 경우 2048 까지 잡을 수 있다. 모델마다 최대 토큰 값은 차이가 있다.

 

ㅇtemperature

  문장의 임의성을 조절하는 변수로 0으로 갈수록 답변이 정형화되고 고정되며, 1로 갈수록 창의력이 높아지고 임의적이 된다.

 

ㅇtop_p

  해당 변수는 통상 확률값으로 커지면 커질수록 더 많은 후보 토큰 중에 랜덤하게 고르게 된다. 따라서 temperature와 유사하게 작동되는데, temperature를 지정하여 사용하는 경우 이 값은 1로 설정해서 사용하도록 추천하고 있다

(즉 temperature나 top_p중 하나만 1보다 작은 값을 설정하고, 나머지는 1로 설정하여 중립화시킨다)

 

ㅇfrequency_penalty

  이미 생성시에 사용한 단어들이 자주 출현함에 따른 신규 사용 확률을 조절한다. 높은 값일수록 사용확률을 낮춘다.

 

ㅇpresence_penalty

  생성시에 사용한 단어의 출현을 조절한다. frequency는 사용 빈도수에 의해 조절됨에 반해 presence는 기사용 여부에 의해 조절된다.

 

 

 

2) 아예 ChatGPT 챗봇 사이트를 만들어 보자.

 

서버 환경을 갖춘 개발자라면 아예 오픈소스를 통해 OpenAI와 동일한 웹사이트 환경을 자체 운영할 수 있다. 즉 위 API를 python으로 쉘에서 실행하는 것이 아니라, 나만의 사이트를 통해 위 가성비 좋은 API를 경유해서 ChatGPT를 사용하는 것이다. 물론 요즘에는 많은 회사들이 메신저나 앱에서 이러한 ChatGPT 연결 서비스를 제공하지만, 나만의 환경을 갖는 장점도 존재한다. 여러가지 실험이나 ChatGPT 상위 버전 사용 등 API를 직접 연결하면 다양한 것들을 경험할 수 있다.

 

Linux ubuntu 환경이라면 docker를 통해 아래 서비스가 가능하다.

https://github.com/mckaywrigley/chatbot-ui

 

mckaywrigley의 chatbot 오픈소스 (node.js/docker 기반)

  A. 여기서는 linux ubuntu 20.04 에서 docker를 설치해서 테스트 해보았다. port 3000번을 docker의 내부 3000번 포트로 연결하기 때문에, 외부에 3000번을 열어줄 필요가 있다.

 

  - docker, node.js, npm을 설치한다.

  - 아래 git을 clone하여 docker image를 build하고 실행한다

  

   $ cd /work/

   $ git clone https://github.com/mckaywrigley/chatbot-ui

   $ cd chatbot-ui

   $ docker build -t chatgpt-ui .                  #도커 이미지를 만든다
   $ docker run -e OPENAI_API_KEY=xxxxxxxx -p 3000:3000 chatgpt-ui

 

  B. http://대상서버IP:3000/ 으로 접속한다

 

생각보다 손쉽게 OpenAI의 API를 활용할 수 있다. 시간이 지날수록 이 OpenAI의 API KEY를 통해 다양하게 연결할 수 있는 더 많은 오픈소스와 플러그인이 나올것이라 예상된다. 오늘은 일단 여기까지 한번 확인해 보았다.

 

반응형
Posted by 작동미학
순수수학2023. 4. 2. 18:33

 책 "허수(Imagaing numbers)"를 쓴 배리 마주르(Barry Mazur)가 지적했듯이, 음수와 음수를 곱하면 양수가 나오는 것은 의외로 어린 학생들에게 설명하기가 어렵다. 그것은 6개가 든 사과 봉지가 2개가 있을때 전체가 12개가 된다는 6*2=12가 굉장히 자명한 것과는 차이를 보인다. -6을 두번 곱하면 -12가 되는 것도 그렇다 치자. 그런데 왜 -1과 -1을 곱하면 1이 되는가?

 

 정답은 수학 연산체계가 즉 교환법칙이나 결합법칙 등 여러가지 면에서 모순적이지 않기 위해서는 그것이 양수가 되어야 한다는 점이다. 

 

 (-1) * 0 = 0

 (-1) * (-1 + 1) = 0

 (-1)*(-1) + (-1 * 1 ) = 0

 (-1)*(-1) + (-1) = 0

(-1)*(-1) = 1

 

 그런데, 이 설명은 좀 납득하기 어려운 점이 있다. 앞서 6개가 든 사과 봉지가 2개가 있으면 12개가 되듯이, 눈으로 보이는 직관적인 설명을 하기가 어렵기 때문이다.

 

 이런 문제는 수학에서 드물지 않다. 논리적으로는 그러하다는 것을 따라가보면 맞는데, 직관적으로 마음에 와닿지 않는다. 그래서 이 음수에 대한 질문이 가치있는 이유는 이러한 아주 단순해보이며 수학적으로 자명한 진실이 왜 설명하기 어려운지를 우리가 생각해보아야 한다는 점이다. 예를 들면 허수라는 것은 존재하지도 않는데 대체 무엇이고 sqrt(2)="루트2"는 왜 피타고라스 학파가 존재하지 않는 수라며 비밀로 했을까?

 

 이 "설명 난해함"에는 중요한 함의가 숨어있는데, 바로 수학적 체계와 인간 인지의 차이에 대한 내용이다. 그 간격을 이해하면 이 난해함이 자명해지는 것을 알 수 있다.

 

 인간의 인지는 기본적으로 태양계의 지구라는 곳에서 생존하기 위해 진화한 지능에 근거한다. 자연계의 생존 경쟁을 위해서 머리를 써서 예측해야했고, 가끔은 중력의 포물선이 머리속에 들어있는 것이 아닌가 할 정도로 우아하게 멀리서 날아오는 공을 잡아낸다.

 

 반면에 수학은 대칭과 보존, 변화 등이 얽혀 있는 논리 체계이다. 그것은 일반화, 무모순 여러가지 것들을 필요로 하며 -1 과 -1 이 곱하면 당연히 1이 되는 체계이다.

 

 그래서 인간의 인지 체계와 수학의 대칭체계는 일부 부조화한다. 이를테면 양수 곱은 이해할 수 있지만 음수 곱은 어렵다. 만약에 인간이 수학의 논리체계가 모두 극명히 드러나는 환경에서 진화했다면 수학 전체가 이렇게 어렵지 않을 것이다. 그것은 마치 인간이 미시세계에서 살아왔더라면, 그 알 수 없는 양자역학을 던지는 공의 움직임을 쉽게 이해할 수 있는 것처럼 깨달을 수 있을 것이라는 기대와 비슷하다. 그러나 인간은 거시세계의 동물이며 거기서 진화한 생명체이다. 이 세상이 수학적이라고 필자는 믿지만, 인간이 처한 환경은 그러한 수학의 일부분만을 경험할 뿐이다. 그것은 전체 수학의 모습과는 괴리가 있다. 그리고 이러한 괴리는 서로가 자명한 상황에서도 "설명 난해함"을 만들어 낸다.

 

 오히려 이런 관점에서는 인간이 수학을 만들어 내고, 완성해온 과정이 놀랍다. 인간이 가진 인지와 수학 체계의 어긋남을 이겨내기 위해, 여러가지를 상상하고 논리적으로 다시 시도해봄으로써 인간은 한단계 한단계 이 거대한 수학체계를 발전시켰다. 자신이 이해할 수 없는 것도 가정하며 앞뒤의 퍼즐을 맞추자, 듣도 보도 못한 '허수'가 탄생했으며, 그것이 원래 이 수학 체계안에 존재하는 것이라는 것을 깨닫는 것도 그러한 역사의 일환이다. 그렇게 자신의 인지 경험과 어울리지 않는 이 수학의 논리 체계를 어렵게 어렵게 확장해 받아들이고 있다고 볼 수 있다.

 

 여기서 재미있게도, 수학자라는 직업을 가진 이는 일반인 대비 수학 체계에 대해서 더 잘 이해하고 받아들인다. 방정식을 보면 마치 눈에 빤히 보이는 물고기의 움직임처럼, 일반인이 전혀 알아내지 못하는 것을 바로 집어낸다. 그래서 이 아름다운 대칭 체계를 머리 속에 일반 사람보다 더 잘 그리면서 이해하고 그것을 직업으로 선택한 사람들을 우리는 수학자라고 부른다. 그러나 그럼에도 불구하고 인간이 가진 깊은 인지 체계와 논리 체계의 수학 사이에는 어쩔 수 없는 괴리가 존재한다. 그것이 더 빠르게 이 분야가 발전되지 못한 이유이며, 상상 외에는 탈출구가 없었던 이유다.

 

 이런 관점에서 수학의 궁극적으로 완성된 체계는 무엇일까? 만약에 우리가 수학에 완전히 익숙해진 지능을 갖고 태어났다면, 음수와 음수를 곱하면 양수가 된다는 사실이 마치 숨을 쉬는 것처럼 자연스럽게 느껴지는 지능을 부여받았다면 우리는 어디까지 완성해낼 수 있을까? 그 지향점은 어떻게 될까? 지금까지 다양한 상상으로 한걸음 한걸음 진화시켜왔고, 완전히 새로운 수학 분야를 열어가며 앞으로 나간 천재들이 그리는 방향은 무엇일까?

 

 정답을 알아서 질문하는 것은 아니다. 여기에 대답하기 위해서는 수학의 모든 일반적인 것들이 숨쉬는 것처럼 자연스러운 지능을 만나야 할텐데, 계속 우리는 훈련에 의해서 그러한 이들을 만나게 되고 있는 것인지 모르겠다. 대칭과 보존의 체계 속에서 그것들을 일반화하고 더 쉽게 개념화하는, 더 많은 것을 더 단순하게 설명하는 이들이 그들이며 그 방향이다. 인간의 인지 체계를 조금더 수학적인 것에 적응하려고 노력하고, 지속적으로 위 방향을 추구하는 이들이 더 큰 답을 찾아나가지 않을까? 인간의 인지와 수학 체계의 괴리가 무엇인지 더 잘 이해하고, 수학 체계가 지는 방향에 맞추어 더 끊임없이 일반화해나가는 노력만이 이 분야를 확장할 수 있지 않을까. 어찌보면 당연한 이야기지만 한번쯤은 곱씹어볼 일이다.

 

 

 

 

반응형
Posted by 작동미학