SW개발의수학적본성2023. 10. 14. 15:20

무한에 대해서 우선 이야기를 해보자.

 

 조지 가모프의 책 "1,2,3 그리고 무한"에 보면 칸토어의 무한을 설명하기 위해 3까지 밖에 세지 못하는 아프리카 호텐토트 부족의 이야기를 한다. 그러면 이 부족은 5와 10이 어떻게 다른지 세지 않고 알 수 있는가? 이는 "유한의 수를 세는 방법으로 무한을 다룰 수 없는데 어떻게 하지?" 라는 질문의 더 단순화된 버전이다.

 

 결론부터 이야기하면, 정답은 논리를 세워 비교하는 것이다. 기존의 숫자를 세어가는 형태의 단순 수학 기법에서, 그 숫자없이 두 그룹의 크기를 어떤 논리 체계로 세는 방법을 만들면 된다. 그리고 칸토어가 제시한 방법은 일대일 대응을 통해 이러한 체계를 만드는 것이다.

 

 그래서 자연수와 홀수와 짝수는 간단한 방법으로 빠짐없이 상호 대응시키는 방법을 찾아주면, 그 둘이 같다는 것을 증명할 수 있다. 무한이라는 셀 수 없는 수의 개념에 이렇게 세는 것과 유사한 효과가 나도록 논리적인 방법을 만든 것이다. 그래서 이것을 "논리로 센다"라고 표현할 수도 있다.

 

 마찬가지로 호텐토트 부족도 두 그룹의 원소를 하나하나 대응시켜 가면 남는 것이 있는 그룹이 더 많다는 것을 알 수 있다. 물론 정확히 수를 셀 수는 없었겠지만 최소한 많거나 적거나, 같다는 것을 알 수 있다. 그리고 칸토어의 논리에 따라, 앞서 이야기한 자연수나 홀수나 짝수는 사실 무한의 수 체계에서는 이름만 다른 같은 존재이다. 논리적으로는 다를 것이 없는 같은 무한 체계이다. 둘을 동일하게 서로 빈틈없이 짝지을 수 있기 때문이다.

 

          자연수) 1,2,3,4,5,6,7,...

          짝__수) 2,4,6,8,10,12,14...

          홀__수) 1,3,5,7,9,11,13... 

 

[자연수와 짝수, 홀수는 위와 같이 증가시켜 자연수에 1:1로 빈틈없이 대응시킬 수 있다]

 

 가만히 보면 이렇게 수학이란 기계화 할 수 있는, 즉 코딩화 할 수 있는 논리체계의 조합이다. 어떤 논리 체계를 세우고 그 논리를 조합해 가는 방식이다. 마치 컴퓨터 코딩이 어떤 절차를 지니고, 함수를 만들어서, 그 절차대로 진행시키는 것과 다르지 않다.

 

 이런 방식에서 수학적 증명의 일부는 이렇게 코딩으로 간접적으로 나타낼 수 있다. 이를테면 골드바흐의 추측을 예로 들어보자. 골드바흐의 추측을 검사하는 코드는 아래와 같다.

 

  for(int i=2;i<MAX;i=i+2) {

     if(checksumofprime(i)==false) {

          print("exception case\n");

  }

 

#checksumofprime은 i가 두 소수의 합인지 아닌지 검사

boolean checksumofprime(int n) {

     ....

}

 

 이 코드의 MAX가 무한대일때 위 코드가 exception이 출력이 되지 않는다면 골드바흐의 추측이 증명된다. 그리고 checksumofprime은 또 다른 코드의 조합으로 내려가서 만약에 특정 함수가 무한에 대해서 일관성을 지닌다면 그것은 증명이 끝난 것이고 나머지 함수들이 모두 증명이 되면 전체 증명이 끝나게 된다.

 

 만약에 제시한대로 상기 코드를 설계했을때 기계가 자동으로 어떤 형식체계로 그것이 무한일때 참인지 아닌지 판별할 수 있다면(모든 경우에 판별되지는 않겠지만) 상기 증명이 성립되게 된다.

 

 그런 면에서 수학은 여러 함수들을 가지고 순차적으로 실행해서 어떤 작동을 하는 프로그램을 닮았다. 그리고 그 특성도 비슷한데 이 논리들이 서로 다른 관점에서 "간결한 형태의 수정이 가능"하다면 무한대의 작동을 하지 않고도 옳바른지 알아낼 수 있다. 그런데 간결하게 또다른 논리체계로 바라보기 어렵다면 이제 증명이 쉽지 않게 된다. 이 경우는 다시 함수들을 더 분해하고, 증명된 함수들의 조합으로 설명해내야 하기 때문이다. (여기서 간결하게 수정이 가능하다는 것은 마치 '소수'라는 필터가 복잡한 절차를 거치지만, n번째 소수가 어떤 손쉬운 방법에 의해서 도출될 수 있는 것과 같은 변환 과정이다.)

 

 예를 들면 페르마의 정리를 보자. x^n + y^n = z^n을 만족하는 n이 2가 초과되는 x,y,z 정수 쌍이 없다는 증명이다.

역시 이 계산도 x,y,z,n을 각기 자연수 범위에서 모두 대입하여 조사하는 코드를 작성할 수 있다. 그러나 그 코드를 다른 논리체계로 변환하여 단순화하기가 매우 어렵다. 이 부분은 이제 인류의 노하우 영역으로 진입하게 된다. 칸토어가 무한의 체계를 1:1 대응 논리로 풀어냈듯이, 페르마의 정리를 위한 단순한 체계가 존재할까? 쉽게 찾을 수 없었기 때문에 이 체계에 대한 도출은 이제 길고 긴 시행착오가 된다. 수많은 함수들이 이 과정에서 사용될텐데, 전체를 관통하는 논리체계를 만들기 어려우니까 각 함수별로 분할하여 혹은 특정 함수는 더 세분화하여 각각을 증명해야 하기 때문이다. 일례로 n=2일때, n=3일때 식으로 차례대로 일부가 증명되어 나가는 과정도 유사하다.

 

 그러면에서 이런 식의 수학적 증명의 어떤 부분은 대형 SI 사업을 닮았다. 수많은 함수들과 세부 증명으로 분할하여 프로젝트를 다수의 인원이 오래 진행해야 하는 것이다. 그리고 그것이 최적화 되는 경우도 있지만 그렇지 않은 경우도 많다(결과적으로 복잡하고 긴 증명이 된다)

 

 나중이 되면 상기 코드의 점검을 다른 논리틀 하에서 컴퓨터가 자동 증명해주는 체계를 만들 수는 없을까? 특정 코드 유형에만 제약을 가해도 좋다. 아니면 몇가지 절차를 거쳐서 해도 좋다. 소수(prime number)에 대한 여러가지 규칙을 찾아내는 과정도 이러한 방향과 동일할 수 있다고 생각한다. 소수를 숫자의 원소라고 하지만, 코딩상에서는 1과 자기 자신외에는 나누어지지 않는 수라는 태깅 정도의 검사로 바라볼 수 있다. 이러한 명확한 정해진 검사절차를 어떻게 다른 시야에서 보고 그 코딩의 경계까지 모두 아우르는 다른 논리 해석을 자동으로 만들 수 있을까? 골드바흐의 추측이 4개의 소수의 합 정도라는 것 까지 증명된 것은 역시 이 골드바흐 추측 코드의 군데군데를 다시 세분화하고, 어느 정도의 것들은 기존의 증명된 논리(즉 함수)를 가지고 만들어 낸게 아닌가?

 

이미 형식체계의 불완전성이나 코드의 정상유무를 완전히 밝히는 것이 불가능하다는 것은 증명되었으나, 이러한 코드화 가능한 절차를 분할하고 개별로 증명하여 전체를 자동증명 어떤 시도가 있었던 것은 아니다. 혹은 기존의 증명을 통해 어떤 코드 들의 검사가 n이 무한일때 모두 완전하다고 하면 해당 코드의 조합으로 만드는 모든 것은 증명이 완료된 것이 아닌가? AI가 다양하게 사용되는 이때에 이런 종류의 수학과의 협업이 가능하지 않을까 상상해본다.

 

https://infomath.tistory.com/

반응형
Posted by 작동미학
머신러닝AI2023. 9. 8. 22:20

다양한 사람들의 노력으로 Apple Sillicon (M1/M2, gpu 사용) 에서도 아래와 같이 구동할 수 있다. 그리고 표기했듯이 apple sillicon의 GPU inference를 사용할 수 있기 때문에 속도도 나쁘지 않다. 다만 단지 구동만 가능한 것을 확인했고, 이를 통해 학습을 할 수 있는것 같지는 않다. 그래도 돌려볼 수 있다는 것이 어딘가!

 

https://gist.github.com/gengwg/26592c1979a0bca8b65e2f819e31ab5c

 

아래와 같이 우선 llama.cpp를 git clone하자.

 

$ git clone https://github.com/ggerganov/llama.cpp.git
$ cd llama.cpp

 

아래와 같은 옵션으로 gpu inference를 활성화하여 컴파일 할 수 있다.


$ make clean
$ LLAMA_METAL=1 make

 

이제 메모리가 크지 않은 맥북들을 위해 각 메모리 크기에 맞는 모델을 다운받아 구동해보자.

만약에 메모리 10gb이상 맥북이면, 13b모델을 최적화 축소한 아래 모델을 시도해보자. 물론 이 모델을 적재할 메모리가 충분하다면 아래 huggingface.co/TheBloke의 다른 더 큰 모델을 참조할 수 있다. 64gb모델 맥북이나 맥스튜디오 장비를 가지고 있다면 40gb짜리 quantized된 70b모델을 돌릴 수도 있다.

 

일단 13b모델은 아래와 걑이 한다.


$ export MODEL=llama-2-13b-chat.Q4_0.gguf 

#wget이 설치되어 있다면 아래와 같이, 혹은 아래 URL로 직접 링크를 다운로드

$ wget "https://huggingface.co/TheBloke/Llama-2-13B-chat-GGUF/resolve/main/llama-2-13b-chat.Q4_0.gguf 

 

메모리 8gb이하 맥북이라면 아래 모델을 받는다.

$ export MODEL=llama-2-7b-chat.Q4_0.gguf 

$ wget "https://huggingface.co/TheBloke/Llama-2-7B-chat-GGUF/resolve/main/llama-2-7b-chat.Q4_0.gguf 

 

그리고 나서 이제 아래와 같이 실행한다. 아래는 7b모델이다. 다운받은 모델에 따라 모델명을 바꿔주자.

 

$ ./main -m ./llama-2-7b-chat.Q4_0.gguf -t 8 -n 128 -ngl 1 --prompt "could you generate python code for generating prime numbers?"

 

.... 정말 코드를 생성해준다!

 

기타 아래를 통해 conda를 써서 llama.cpp의 python 필요시 따로 구동할 수 있다.

$ conda create --name=llama2 python=3.11

$ conda activate llama2

$ pip install -r requirements.txt

 

간단하게 맥북(m1/m2이지만 다른 macos환경에서도 가능하리라고 본다) 에서 llama.cpp를 이용해  llama를 구동해보았다.

반응형
Posted by 작동미학
머신러닝AI2023. 9. 2. 20:15

생성형 이미지의 대표주자인 Stable Diffusion을 설치해서 실행해보자. 많은 것들이 그간 발전했고 easy diffusion이라는 멋진 웹인터페이스까지 만들어진 오픈소스가 존재한다.

 

모든 기본 환경은 ubuntu nvidia 4080 + anaconda 를 기준으로 한다 (  https://infoengineer.tistory.com/96 )

아래 사이트를 참조하자.

 

https://easydiffusion.github.io/docs/installation/

 

$ wget https://github.com/cmdr2/stable-diffusion-ui/releases/latest/download/Easy-Diffusion-Linux.zip

$ unzip Easy-Diffusion-Linux.zip

$ cd easy-diffusion

$ ./start.sh

/work/anaconda3/bin/curl
/usr/bin/tar
/work/anaconda3/bin/bzip2
Downloading micromamba from https://micro.mamba.pm/api/micromamba/linux-64/latest to /work2/easy-diffusion/installer_files/mamba/micromamba
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
100  4569    0  4569    0     0   1176      0 --:--:--  0:00:03 --:--:-- 4461k
  0 5096k    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0bin/micromamba
100 5096k  100 5096k    0     0   811k      0  0:00:06  0:00:06 --:--:-- 3183k
Micromamba version:
1.5.0
Empty environment created at prefix: /work/easy-diffusion/installer_files/env
Packages to install: conda python=3.8.5
conda-forge/linux-64                                30.0MB @  41.3MB/s  0.7s
conda-forge/noarch                                  12.2MB @   3.5MB/s  3.5s

....

 

 

자동으로 서버가 뜬다. 내부 리눅스 브라우저를 이용해 아래를 실행한다.

 

http://localhost:9000/

 

적절한 영문 문구로 이미지 생성됨을 확인한다.

512*512 이미지가 수초만에 생성됨을 알 수 있었다. CPU/GPU 모드 등 변경하여 실험할 수 있다. 4080 GPU 카드로는 1280*768 정도 이미지를 만들 수 있는데, 1920*1280은 메모리 부족으로 오류가 난다.

 

 

이렇게 디폴트로 사용하는 방법도 있지만 custom model을 다운로드 받아 사용하는 방법도 있다. civit.ai 같은 사이트에서 model 파일을 다운로드 받아서 ./easy_diffusion/models/stable-diffusion/에 넣은 후 아래와 같이 특화된 이미지를 생성할 수도 있다.

 

stable diffusion model 다운로드 사이트(civit.ai), Models선택

 

Download를 선택하면 크기는 좀 크지만, 커스텀 모델 파일을 다운로드할 수 있다

 

왼쪽 메뉴의 Image Settings의 Model을 바꾸어서 생성해보면, 특화 모델 기반의 이미지 생성도 가능하다.

 

 

easy-diffusion외에 Stable Diffusion의 대명사인 AUTOMATIC1111이라는 웹인터페이스도 존재한다. 이 프로그램의 특징은 최신 기능의 빠른 적용이다. 이 툴을 설치하는 방법에 대해서도 잠깐 살펴보자.

 

$ conda create -n automatic python=3.10

$ conda activate automatic

$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

$ cd stable-diffusion-webui/

$ ./webui.sh

################################################################
Install script for stable-diffusion + Web UI
Tested on Debian 11 (Bullseye), Fedora 34+ and openSUSE Leap 15.4 or newer.
################################################################
....

#모델다운로드 등 거치게 된다

#

 

모두 실행된 후 http://127.0.0.1:7861/ 에 접속하면 아래와 같이 AUTOMATIC1111이 구동된다. 시중의 메뉴얼을 참조하여 활용해보자. img2img 같은 기능은 이미지를 넣어 다른 이미지를 변환하는 기능이다. 그외에 Extras같은 플러그인 등 다채로운 기능을 제공한다. 이를 테면 Extensions에 https://github.com/toriato/stable-diffusion-webui-wd14-tagger 를 설치하면, 사진에서 스크립트를 뽑아주는 반대의 기능 활용도 가능하다.

Automatic1111 화면

 

반응형
Posted by 작동미학
머신러닝AI2023. 8. 31. 23:59

GPU를 쓰는 이 녀석의 특성에 따라 이 글은 앞의 https://infoengineer.tistory.com/96 를 계승한다. GPU에 맞게 설정을 끝냈다고 가정한다.

 

meta에서 텍스트와 음성 모두를 읽어서 번역하고 텍스트화하는 성능 좋은 모델을 발표했다. meta의 sequence 처리 모델인 faitseq2를 먼저 설치한 후 SeamlessM4T를 통해 아래 5개의 기능을 우리가 아는 거의 모든 언어간이 가능하다. 한글도 포함되어 있다! 그리고 무려 speech to speech 번역도 가능하다. 여기서는 우선 가장 단순 T2TT(텍스트 번역)을 해보자.

 

  • Speech-to-speech translation (S2ST)
  • Speech-to-text translation (S2TT)
  • Text-to-speech translation (T2ST)
  • Text-to-text translation (T2TT)
  • Automatic speech recognition (ASR)

설치 실행은 매우 단순하다. Anaconda를 사용해 보자.

 

$ conda create -n fairseq2 python=3.10
$ conda activate fairseq2
$ pip install fairseq2
$ git clone https://github.com/facebookresearch/seamless_communication
$ cd seamless_communication/
$ pip install .
$ sudo apt install libsndfile1
$ conda install -y -c conda-forge libsndfile

 

$ m4t_predict "The wind blows always to the west, and the girl is waiting always on the beach" t2tt kor --src_lang eng

2023-08-31 23:49:20,161 INFO -- m4t_scripts.predict.predict: Running inference on the GPU in torch.float16.
Using the cached checkpoint of the model 'seamlessM4T_large'. Set `force=True` to download again.
Using the cached tokenizer of the model 'seamlessM4T_large'. Set `force=True` to download again.
Using the cached checkpoint of the model 'vocoder_36langs'. Set `force=True` to download again.
2023-08-31 23:49:26,134 INFO -- m4t_scripts.predict.predict: Translated text in kor: 바람은 항상 서쪽으로 불고, 소녀는 항상 해변에서 기다리고 있습니다

 

$ m4t_predict "We introduce SONAR, a new multilingual and multimodal fixed-size sentence embedding space, with a full suite of speech and text encoders and decoders. It substantially outperforms existing sentence embeddings such as LASER3 and LabSE on the xsim and xsim++ multilingual similarity search tasks." t2tt kor --src_lang eng

2023-09-01 00:02:20,217 INFO -- m4t_scripts.predict.predict: Running inference on the GPU in torch.float16.
Using the cached checkpoint of the model 'seamlessM4T_large'. Set `force=True` to download again.
Using the cached tokenizer of the model 'seamlessM4T_large'. Set `force=True` to download again.
Using the cached checkpoint of the model 'vocoder_36langs'. Set `force=True` to download again.
2023-09-01 00:02:26,722 INFO -- m4t_scripts.predict.predict: Translated text in kor: 우리는 SONAR를 소개합니다. 새로운 다국어 및 멀티모달 고정 크기의 문장  ⁇ 입 공간으로, 음성 및 텍스트 인코더 및 디코더의 전체 스위트를 갖추고 있습니다. 그것은 xsim 및 xsim++ 다국어 유사성 검색 작업에서 LASER3 및 LabSE와 같은 기존 문장  ⁇ 입을 크게 능가합니다.

 

속도가 NVidia 4080 GPU에서 약 7초가 소요되는데, 모델로딩 시간을 빼면 그럭저럭 괜찮은 시간에 나오는 것 같다.

모델은 2가지가 있는데 디폴트로 SeamlessM4T-Large가 선택된다.

SeamlessM4T-Large 2.3B 🤗 Model card - checkpoint metrics
SeamlessM4T-Medium 1.2B 🤗 Model card - checkpoint metrics

GPU를 사용하면 그리 느리지 않은 좋은 라이브러리를 확보한 셈이다. 라이센스는 무료로 자유롭게 쓰면 되는(하지만 재배포는 제약이 있다) Creative Commons Attribution-NonCommercial 4.0 International Public License 를 취한다.

 

 

 

반응형
Posted by 작동미학
순수수학2023. 8. 26. 12:10

 무한은 실제할까? 이 질문에 대해서 아직 답변이 모호하다. 그러면 무한의 실제라는 것은 무엇이 왜 모호할까?

 

 무한은 0이 탄생했을 때부터 같이 태어났다고 볼 수 있다. 0에다가 무엇인가를 곱해서 1을 만들 수 있는 방법이 무한 뿐이기 때문이다. 1을 0으로 나누면 무한이 된다. 여러가지 관점에서 대칭 체계의 수학을, 논리를 전개해가다보면 0은 반대편에는 무한이라는 녀석이 자리잡게 되고, 수학에서 무한은 실제한다. 예를 들면 자연수 집합의 크기도 무한이다. (다만, 수학사에서 실제로 무한은 그리스 고대 철학자들이 논쟁을 했을 정도로 먼저고, 0은 기원 후에 인도에서 정착되었을 정도로 나중이긴 하)

 

 그러면 자연은 수학과 일치하는가? 불행히도 이는 아직 합의가 이루어지지 않았다. 자연은 매우 상당한 정도로 수학적이라고 알려져있지만, 그 근원은 아직 알 수가 없다. 환원주의로 자연을 분석해 내려가고 있지만, 인간의 환원 능력은 여러가지 사정상 한계가 있고, 그 한계의 가장 밑바닥에 닿을 수 있는지는 모호하다. 따라서 무한을 직접 확인하기는 어렵다.

 

 다만 지금 당장 존재하는 것 같은 무한은, 바로 미래의 시간이다. 갑자기 이 시간의 흐름이 멈출리는 없다. 이 시간은 무한히 흘러가리라고 예상된다. 에너지가 보존되고 물리법칙이 이어지는 한 그렇게 되지 않다고 의심할 이유는 아직 없는 상황이다. 오히려 에너지가 사라지고 시간이 멈출 것이라는 예측이 이상하지 않겠는가. 그러면 무한의 시간 속에서 이 우주는 어떻게 흘러갈 것인가? 평균은 알려져있는데 무한의 시간속에 발생하는 우연들에 대해서는 아직 잘 알려져 있지 않고, 이 무한의 계산방법을 통해 무한의 우주를 예측할 수 있지 않을까?

 

 정리해보면, 수학에서의 무한은 실재하지만, 자연에 무한이 존재하는지 애매한 이유는, 자연과 수학이 동치인지 아직 확인되지 않았고 확인이 어렵기 때문이다. 그러나 동치라고 생각해보면 무한을 이용해 예측할 수 있는 우주의 미래가 존재한다. 이것들이 빅뱅과 연결되면 여러가지 재미있는 예측을 할 수 있지 않을까. 모든 광자들이 우연히 다시 하나의 플랑크 공간에 나타나 다시 빅뱅이 일어나고 수많은 빅뱅과 확대가 반복되는 무한의 우주 같은 것 말이다.

반응형
Posted by 작동미학
시뮬레이션가설2023. 7. 22. 11:09

 세상이 matrix인가에 대한 막연한 논의는 있지만, 그것을 심각하게 정립하기란 쉽지 않다. 왜냐하면 깨어날 수 있는 문제인지, 깨어나면 밖에 무엇이 있는지 알기 어렵기 때문이다. 게임상의 캐릭터는 깨어나서 밖으로 나갈 수도 없는게 오히려 더 일반적이기도 하다.

 

1) 지금까지 자연에 대한 관측으로 아래에 대한 내용이 확인되었다.

  a. 자연은 대칭과 보존의 법칙에 따라 과거와 현재 동일 법칙하에서 진행된다고 여겨진다.

  b. 그 정밀도와 일관성은 아직 인간의 관측 범위내에서 이상하다고 의심받지 않고 있다.

  c. 미시세계로 들어가면 이산성(discrete)이 확인되었다. 세상은 띄엄띄엄하며 bit로 처리된다.

 

2) 어떤 체계(우주)가 랜덤으로 창조된다면 어떤 모습이 일반적인가. 이를테면 우리가 만들어내는 게임들의 세상을 보면 대표적으로 이렇게 할 수 있다. 즉 1)의 세상에서 창조되는 새로운 시뮬레이션에 대한 이야기다

 

  a. 특별히 그렇게 의도하지 않으면 대칭/보존은 매우 낮은 확률로 나타나는 특성이 된다. 시간이 지나면서 랜덤으로 전개되는 것이 물리적인 제약이 없었을 때의 랜덤한 세상이다. 즉 지금 우리가 자연을 그대로 시뮬레이션하려면 할일이 너무나 많다. 엔트로피나 임의성을 들먹이지 않아도 수많은 만들어질 게임 중에 현실과 같은 것을 만든다는 것이 얼마나 도전적이라는 것을 알 수 있다.

  b. 그런데 이 과정에서 고려되어야 할 것이 이것을 고민하는 주체가 바로 현실에서의 인간이라는 점이다. 인간이 지능을 갖기 위해서는 그 기본 법칙이 갖춰져야 한다. 즉 시뮬레이션의 랜덤성을 평가함에 있어서, 그 안에 그것을 평가하는 주체가 성립하기 위해서는, 랜덤성의 범위가 자동으로 축소된다는 사실이다. 즉 사람이 생겨날 수 있을 정도의 시뮬레이션 체계가 존재해야만 그 안의 사람이 그 시뮬레이션의 특성에 대해 고민할 수 있다는 이야기다.

 c. 따라서 시뮬레이션의 임의성에 대한 고민은, 그것을 고민할 수 있는 존재가 나타날 수 있는 최소한의 시뮬레이션으로 좁혀진다. 이것은 중요한 고려사항이 된다. 만약에 우주 밖에서 시뮬레이션이 랜덤으로 선택되어 탄생되고 있다고 하더라도, 스스로가 시뮬레이션인지 고민하는 정보가 넘나드는 시뮬레이션은 상대적으로 아주 적은 수의 시뮬레이션에서만 발생하게 되기 때문이다.

 

3) 시뮬레이션 체계가 다수 존재할 수 있는가에 대한 문제

 

 a. 서로 영향이 없다고 믿어지고, 존재여부도 모호한  다른 시뮬레이션을 논의하는 것은 의미가 없지만, 가장 큰 논리는 unique함에 대한 거부감이다. 그리고 대칭과 보존이 만족되는 범위가 아직까지 어딘지에 대한 모호함이다.

 b. 다만 시뮬레이션에 대해 고민하고 해석하는 주체가 한 개인이므로, 실제로는 어떤 단위로 시뮬레이션된다고 해도 말이 된다. 나 외에 다른 모든 존재는 서로 다른 독립성 속에서 움직이지 않아야 되는 이유가 없다. 따라서 아이러니하게도 이러한 특수함이 성립되지 않는다고 애초에 가정하는 것이 더 보편성을 띌 수 있게 되고, 시뮬레이션을 바로 평가할 수 있다.

 

따라서

 

1) 시뮬레이션은 아래와 같은 범주에서 진행될 가능성이 있다.

   a. 모든 정보가 하나의 법칙을 추종하는 단일 체계로 움직이는 형태

   b. a같은 시뮬레이션들이 1개 이상 존재하여 각기 독립적인 체계로 움직이는 형태

   c. b같은 형태이면서 a들끼리 어떠한 약하고 제한적인 의존관계를 지니는 형태

   d. a/b/c가 각각 그 안에서 새로운 시뮬레이션을 만들어내는 종속관계를 나타내는 형태

 

2) 1)의 a)단위를 고려해볼때

  a. 해당 시뮬레이션이 지금처럼 대칭/보존/이산성 등에 작동할 경우가 매우 드물다고 판단할 수 있다. 해당 시뮬레이터의 생성이 의도적이거나(대표적으로는 자신의 원래 세상과 유사하게-그대로 혹은 가감하여- 창조되거나) 할 수 있겠지만 우선은 그렇다면 오히려 논의의 폭이 좁아지고, 그렇지 않다고 가정하고 여러가지를 판단하는 것이 중립적이어 보인다.

  b. 중요한 것은 그 안에 지적 존재가 나타나야만 이러한 시뮬레이션 가설을 검증할 수 있다는데 있다. 여러가지 임의성이나 확률에 대한 논의는 이렇게 시뮬레이션을 평가하는 존재가 선행해야 한다는 조건 때문에 보정이 필요하다.

 

 

가만히 고민해보면, 이러한 논의들의 현실적인 설명은, 우리가 만약에 지능이 나타날 수 있는 시뮬레이터를 만들어서 구동했을때의 상황이다. 인류가 만들 수많은 시뮬레이터 중에 지능이 나타날 수 있는 수준의 시뮬레이터가 언젠가는 탄생하게 될 것이고, 그 시뮬레이터 안에서 또 새로운 그 안에 지능이 있는 시뮬레이터가 탄생하는 과정이다. 영화 Inception같은 모습을 상상할 수 있겠다.

 

지속 이 관계들을 정립해나가보자

반응형
Posted by 작동미학
머신러닝AI2023. 7. 20. 00:53

이 글은 앞의 https://infoengineer.tistory.com/96 를 계승한다. 7월 19일 전격적으로 메타의 LLAMA v2가 공개되었고 azure, aws에도 같이 공개되었다. git 주소는 https://github.com/facebookresearch/llama 이다.

 

해당 git의 가이드를 따라가서 모델 신청을 하면( https://ai.meta.com/resources/models-and-libraries/llama-downloads/ ) 메일로 다운로드 링크가 몇시간 안에 날아온다. 해당 링크를 복사해두고 24시간 안에 다운받는다(5번 밖에 다운로드 안되니 주의를 하자)

 

그리고 주의할 것이, 해당 날아온 메일의 URL에 걸려있는 링크를 복사하면 안되고 반드시 순수 텍스트를 복사해두자. 붙여넣기 했을때 주소가 https://download... 로 시작해야 한다. 링크를 복사하면 https://l.facebook..이 복사되는데 이 주소로 처리를 했다가는 오류만 나고 다시 모델 다운로드 신청해서 작업해야 하니 주의한다.

 

여하튼 우리는 앞의 글에서 기초를 모두 닦아 두었으니(GPU/Anaconda 준비완료) 곧바로 다운로드 받아 시작하면 된다.

 

$ cd /work/llm  #아무 디렉토리나 llama 모델을 다운받을 수 있는 충분한 디스크가 있는 폴더로 간다

$ conda create -n llama2 python=3.9 -y

$ conda activate llama2

$ git clone https://github.com/facebookresearch/llama

$ cd llama

$ pip install -e .

Obtaining file:///work/llm/llama
  Preparing metadata (setup.py) ... done
Collecting torch (from llama==0.0.1)
  Using cached torch-2.0.1-cp39-cp39-manylinux1_x86_64.whl (619.9 MB)
Collecting fairscale (from llama==0.0.1)
  Using cached fairscale-0.4.13-py3-none-any.whl
Collecting fire (from llama==0.0.1)
  Using cached fire-0.5.0-py2.py3-none-any.whl
Collecting sentencepiece (from llama==0.0.1)
  Using cached sentencepiece-0.1.99-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)
Collecting numpy>=1.22.0 (from fairscale->llama==0.0.1)
  Downloading numpy-1.25.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.7/17.7 MB 50.0 MB/s eta 0:00:00
Collecting filelock (from torch->llama==0.0.1)
  Using cached filelock-3.12.2-py3-none-any.whl (10 kB)
Collecting typing-extensions (from torch->llama==0.0.1)
  Downloading typing_extensions-4.7.1-py3-none-any.whl (33 kB)
Collecting sympy (from torch->llama==0.0.1)
  Using cached sympy-1.12-py3-none-any.whl (5.7 MB)
Collecting networkx (from torch->llama==0.0.1)
  Using cached networkx-3.1-py3-none-any.whl (2.1 MB)
Collecting jinja2 (from torch->llama==0.0.1)
  Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)
Collecting nvidia-cuda-nvrtc-cu11==11.7.99 (from torch->llama==0.0.1)

...

 

$ chmod 755 download.sh

#아래 download에서는 70B-chat빼고는 다 받았는데, 70B는 다운로드 시간이 걸리므로 빼고 받아도 좋다.7B도 13Gbytes나 된다.

$ ./download.sh 

Enter the URL from email: https://download.llamameta.net/*?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc29... 

 

Enter the list of models to download without spaces (7B,13B,70B,7B-chat,13B-chat,70B-chat), or press Enter for all: 7B,13B,7B-chat,13B-chat
Downloading LICENSE and Acceptable Usage Policy
--2023-07-19 23:08:24--  https://download.llamameta.net/LICENSE?Policy=eyJTdGF0ZW1lbnQiOl...QRJLYKIFSLZ 
download.llamameta.net (download.llamameta.net) 해석 중... 18.67.51.119, 18.67.51.25, 18.67.51.64, ...
다음으로 연결 중: download.llamameta.net (download.llamameta.net)|18.67.51.119|:443... 연결했습니다.
HTTP 요청을 보냈습니다. 응답 기다리는 중... 200 OK
길이: 7020 (6.9K) [binary/octet-stream]
저장 위치: ‘./LICENSE’

./LICENSE                           100%[================================================================>]   6.86K  --.-KB/s    / 0s       

2023-07-19 23:08:24 (976 MB/s) - ‘./LICENSE’ 저장함 [7020/7020]

--2023-07-19 23:08:24--  https://download.ll...

 

#모델을 받고 나면 아래 소스의 빨간색 영역을 영어에서 한글로 고쳐보자.

$ vi example_text_completion.py 
# Copyright (c) Meta Platforms, Inc. and affiliates.
# This software may be used and distributed according to the terms of the Llama 2 Community License Agreement.

import fire

from llama import Llama


def main(
    ckpt_dir: str,
    tokenizer_path: str,
    temperature: float = 0.6,
    top_p: float = 0.9,
    max_seq_len: int = 128,
    max_gen_len: int = 128,
    max_batch_size: int = 4,
):
    generator = Llama.build(
        ckpt_dir=ckpt_dir,
        tokenizer_path=tokenizer_path,
        max_seq_len=max_seq_len,
        max_batch_size=max_batch_size,
    )

    prompts = [
        # For these prompts, the expected answer is the natural continuation of the prompt
        "직장에서 좋은 관계를 갖기 위해서는 ",
        "미야자키 하야오 감독의 대표작은 ",
        """신사업을 하는 팀의 첫 시작을 축하하는 메시지:

        안녕하세요 여러분,
        
        지금 시기는 변화를 """,
        # Few shot prompt (providing a few examples before asking model to complete more);
        """Translate English to Korean:
        
        peppermint => 페퍼민트
        cheese =>""",
    ]

 

 

 

#드디어 최초로 돌려보자. 아래는 16GB GPU에서 돌아간다(약 15GB의 GPU 메모리를 소모한다 RTX 4080 16GB에서 실험했다). 간단히 주어진 문장의 다음 문장을 생성하는 예시이다. 뒤에 생성하는 문장을 늘리기 위해 max_gen_len을 256으로 지정했다.

$ torchrun --nproc_per_node 1 example_text_completion.py --ckpt_dir llama-2-7b/ --tokenizer_path tokenizer.model --max_seq_len 256 --max_gen_len 256 --max_batch_size 4
> initializing model parallel with size 1
> initializing ddp with size 1
> initializing pipeline with size 1
Loaded in 6.99 seconds
직장에서 좋은 관계를 갖기 위해서는 
> 어떻게 접근해야 하는가?
목표를 달성하기 위해서는 어떻게 팀원들을 활용해야 하는가?
적응력을 높이기 위해서는 어떻게 팀원들을 설득해야 하는가?
감독의 역할은 어떻게 변화하는가?
목표를 달성하기 위해서는 어떻게 팀원들을 활용해야 하는가?
감독의 역할은 어떻

==================================

미야자키 하야오 감독의 대표작은 
> 《슈퍼 마리오 브라더스 3》(1988년)로 알려져 있다. 특히 미야자키 하야오는 이 게임을 통해 아케이드 게임 디자이너로서 더 많은 인지도를 얻었다. 애니메이션 영화 《피노키오》(2017년)의 감독이자 프로듀서이기도 하다.

## 작품 목록

### 감독

==================================

신사업을 하는 팀의 첫 시작을 축하하는 메시지:

        안녕하세요 여러분,
        
        지금 시기는 변화를 
> 엿보는 시기이며 분명 혁신을 위한 새로운 시대가 열릴 것이다.
        
        이러한 분위기에서 새로운 시작을 하는 첫 번째 팀을 환영하고 있습니다.
        
        새로운 시작을 하는 분들에게 있어서 열심히 하면 되겠습니

==================================

Translate English to Korean:
        
        peppermint => 페퍼민트
        cheese =>
> 치즈
        banana => 바나나
        orange => 오렌지
        apple => 사과
        pear => 배
        onion => 매운 맛
        garlic => 고추
        carrot => 카루로
        potato => 튀김밥
        tomato => 토마토
        cucumber => 달걀
        pepper => 카프릴
        chili => 고추
        egg => 알
        lettuce => 양파
        spinach => 실밥
        broccoli => 브로콜리
        cabbage => 당근
        cauliflower => 칼리플로어
        mushroom

==================================

 

 

 

#chat 관련되어도 아래와 같이 실험이 가능하다

$ vi example_chat_completion.py

 

# Copyright (c) Meta Platforms, Inc. and affiliates.
# This software may be used and distributed according to the terms of the Llama 2 Community License Agreement.

from typing import Optional

import fire

from llama import Llama


def main(
    ckpt_dir: str,
    tokenizer_path: str,
    temperature: float = 0.6,
    top_p: float = 0.9,
    max_seq_len: int = 512,
    max_batch_size: int = 4,
    max_gen_len: Optional[int] = None,
):
    generator = Llama.build(
        ckpt_dir=ckpt_dir,
        tokenizer_path=tokenizer_path,
        max_seq_len=max_seq_len,
        max_batch_size=max_batch_size,
    )

    dialogs = [
        [{"role": "user", "content": "라면을 맛있게 끓이는 방법은?"}],
        [...

 

 

 

$ torchrun --nproc_per_node 1 example_chat_completion.py --ckpt_dir llama-2-7b-chat/ --tokenizer_path tokenizer.model --max_seq_len 512 --max_batch_size 4
> initializing model parallel with size 1
> initializing ddp with size 1
> initializing pipeline with size 1
Loaded in 6.78 seconds
User: 라면을 맛있게 끓이는 방법은?

> Assistant:  I'm just an AI, I don't have personal opinions or beliefs, but I can provide you with some general information on how to make a delicious and healthy ramyeon.
Ramyeon is a popular Korean instant noodle dish that can be made in a variety of ways depending on personal preferences. Here are some tips to make a delicious and healthy ramyeon:
1. Choose a good quality ramyeon: Look for a ramyeon that is made with whole wheat or brown rice noodles, and contains vegetables and lean protein sources.
2. Add vegetables: Ramyeon can be a great way to get in some extra vegetables. Try adding sliced carrots, diced bell peppers, and chopped green onions to your noodles.
3. Use lean protein: Choose a lean protein source such as chicken, beef, or tofu to add to your ramyeon. This will not only make it more nutritious but also more filling.
4. Add some spice: Ramyeon can be quite bland, so try adding some spice to it. You can add chili flakes, soy sauce, or gochujang (Korean chili paste) to give it a kick.
5. Experiment with different seasonings: Ramyeon can be seasoned with a variety of ingredients such as sesame oil, garlic, and ginger to give it a unique flavor.
6. Use a flavorful broth: The broth of ramyeon can make or

==================================

User: I am going to Paris, what should I see?..

 

 

흥미롭게도 영어로 답변을 하면 꽤 잘한다. 강제로 한글로 이야기하게도 할 수 있는데 아쉽게도 아래와 같다. 아마도 ChatGPT처럼 한글의 token단위도 너무 작은 상태가 아닐까 싶다(답변이 통상 짧다). 한글 부분은 fine tuning등 버전이 나오리라 기대해본다. 곧 llama.cpp가 풀리면 상위 모델도 CPU/Ram에서 구동하게 될 수 있겠다.

 

$ vi example_chat_completion.py

...

    dialogs = [
        [{"role":"system","content":"always answer in Korean"},
         {"role": "user", "content": "라면을 맛있게 끓이는 방법은?"}],
        [

...

$ torchrun --nproc_per_node 1 example_chat_completion.py --ckpt_dir llama-2-7b-chat/ --tokenizer_path tokenizer.model --max_seq_len 512 --max_batch_size 4
> initializing model parallel with size 1
> initializing ddp with size 1
> initializing pipeline with size 1
Loaded in 6.69 seconds
System: always answer in Korean

User: 라면을 맛있게 끓이는 방법은?

> Assistant:  "라면을 맛있게 끓이는 방법은 저렴한 물과 저렴한 간장을 사용하는 것입니다."

==================================

하나 더 실험해보자.

 

$ vi example_chat_completion.py

...

    dialogs = [
        [{"role":"system","content":"always answer in Korean"},
         {"role": "user", "content": "물리학 법칙이 모두 대칭인 이유는?"}],
        [
            {"role": "user", "content": "40대 보수적인 남성인 저는 어떤 금융상품을 관심있게 봐야할까요?"},
            {
                "role": "assistant",
                "content": """\
1. 안정적인 예적금: 원금 손실이 없으나 수익률이 다소 낮은 단점이 있습니다.
2. 공격적인 주식: 원금 손실의 가능성이 있으나, 적절한 투자를 행하여 이익실현을 하는 경우 수익률이 매우 높습니다.
""",
            },
            {"role": "user", "content": "1번 상품의 특성을 좀더 자세히 이야기해줄 수 있을까?"},
        ],
        [

..

$ torchrun --nproc_per_node 1 example_chat_completion.py --ckpt_dir llama-2-7b-chat/ --tokenizer_path tokenizer.model --max_seq_len 512 --max_batch_size 4

> initializing model parallel with size 1
> initializing ddp with size 1
> initializing pipeline with size 1
Loaded in 6.67 seconds
System: always answer in Korean

User: 물리학 법칙이 모두 대칭인 이유는?

> Assistant:  "물리학 법칙이 모두 대칭인 이유는?"

* 물리학 법칙이 모두 대칭인 이유는 입력에 따라 출력이 얼마 되는 것입니다.
(Translation: "The reason why physical laws are all symmetrical is because they are based on the input and output of the system.")

==================================

User: 40대 보수적인 남성인 저는 어떤 금융상품을 관심있게 봐야할까요?

Assistant: 1. 안정적인 예적금: 원금 손실이 없으나 수익률이 다소 낮은 단점이 있습니다.
2. 공격적인 주식: 원금 손실의 가능성이 있으나, 적절한 투자를 행하여 이익실현을 하는 경우 수익률이 매우 높습니다.


User: 1번 상품의 특성을 좀더 자세히 이야기해줄 수 있을까?

> Assistant:  Of course! The first financial product I mentioned, "安定的な預期 returns (Stable Returns)", has several key characteristics that make it an attractive option for investors. Here are some additional details:
1. Low Risk: As the name suggests, "安定的な預期 returns"

신기하게도, 일본어가 섞여 나온다는 것을 알 수 있다. 전체적으로 일본어가 섞여서 70b 모델에도 자주 등장한다고 알려져있다.

-------------------------------------------------------------------------------------------------------------

추가로 Apple Sillicon (M1/M2, gpu 사용) 에서도 아래와 같이 구동할 수 있다.

https://gist.github.com/gengwg/26592c1979a0bca8b65e2f819e31ab5c

 

$ git clone https://github.com/ggerganov/llama.cpp.git
$ cd llama.cpp

$ make clean
$ LLAMA_METAL=1 make

 

#만약에 메모리 10gb이상 맥북이면
$ export MODEL=llama-2-13b-chat.Q4_0.gguf 

#아래 혹은 직접 링크를 다운로드

$ wget "https://huggingface.co/TheBloke/Llama-2-13B-chat-GGUF/resolve/main/llama-2-13b-chat.Q4_0.gguf 

 

#만약에 메모리  8gb이하 맥북이면

$ export MODEL=llama-2-7b-chat.Q4_0.gguf 

#아래 혹은 직접 링크를 다운로드

$ wget "https://huggingface.co/TheBloke/Llama-2-7B-chat-GGUF/resolve/main/llama-2-7b-chat.Q4_0.gguf 

 

$ ./main -m ./llama-2-7b-chat.Q4_0.gguf -t 8 -n 128 -ngl 1 --prompt "could you generate python code for generating prime numbers?"

 

#기타 아래를 통해 conda를 써서 python 필요시 따로 구동할 수 있다.

$ conda create --name=llama2 python=3.11

$ conda activate llama2

$ pip install -r requirements.txt

 

반응형
Posted by 작동미학
순수수학2023. 7. 16. 17:38

 골드바흐의 추측은 "2보다 큰 모든 짝수는 2개의 소수(동일 소수 포함)의 합으로 나타낼 수 있다" 라고 간단히 기술된다. 그리고 이는 아직 증명되지 못했다.

 

 이 문제를 파내려가다보면 결국 소수의 규칙성을 필요로 하게 되기 때문에, 아직 그 규칙성이 모호한 소수를 가지고 증명을 하기가 매우 어려운 경우들을 만나게 되겠다.

 

 이 문제를 여러가지 변형해보는 것도 가능한데, 모든 2개 소수의 합의 조합이 틈이 없이 모든 짝수를 생성해내면 된다.

 

"a,b를 각기 임의의 소수(prime number)라고 할때, a+b의 모든 조합을 갖는 집합이, n은 1이상의 자연수일때 2n의 집합을 포함한다"

 

라고 할 수도 있다.

 

이 문제에 대해서 여러가지가 선행 증명되었는데, 우선 상기 골드바흐의 추측보다 더 약한 골드바흐의 약한 추측이

 

"5보다 큰 모든 홀수는 세 소수의 합으로 나타낼 수 있다" 이고, 이는 골드바흐의 추측이 참이면 참이되는 명제다.

 

이 약한 추측에 대해, 2012년 테렌스 타오가 모든 홀수가 5개 이하의 소수의 합으로 나타낼 수 있다는 점을 증명했으며, 2013년 엘프고트가 10의 30제곱 이상에서는 성립되고, 10의 30제곱 이하에서는 컴퓨터로 모두 확인되면서 골드바흐의 약한 추측은 참임이 증명되었다.

 

결국은 아직 골드바흐의 추측을 증명하지는 못했지만 그 근처까지는 가있는 모양새이다. 그런데 여기서 흥미로운 것은 주로 소수(prime number)는 곱을 통해 숫자를 분해하는데 그 덧셈이 커버하는 영역을 다루는 것이 이 골드바흐의 추측이라는 점이다. 이런 점에서 더 다루기 까다로울 수 있겠다. 간단히 골드바흐의 추측을 살펴보았다.

 

자료상으로는 쌍동이 소수 추측(두 소수의 차이가 2인 소수가 무한히 존재한다)과도 관련이 있다고 한다.

https://namu.wiki/w/%EA%B3%A8%EB%93%9C%EB%B0%94%ED%9D%90%20%EC%B6%94%EC%B8%A1

 

반응형
Posted by 작동미학
시뮬레이션가설2023. 7. 16. 14:43

 스스로를, 요즘 유행하는 3차원 롤플레잉 온라인 게임 세계안의 캐릭터라고 생각해보자. 물론 아직 그렇게 지능있는 존재가 스스로를 인지할 정도로 진보한 게임은 없겠으나, 여하튼 상상으로 상정해볼 수 있다.

 

 그러면 그 게임 안에는 아마도 마법이 있고, 여러가지 그 게임만의 특이 요소가 있을 것이다. 게임 안의 물리 법칙은 우리네 현실을 모사했기 때문에 그 둘간에는 어느정도 유사하겠지만, 엄밀한 의미에서 같지는 않을 것이다. 아마도 게임 안의 세계가 훨씬 더 일관성이 낮을 것이라고 본다. 게임 세계의 물리 법칙의 목표는 현실과의 유사성만 유지하면 되기 때문이다. 그 일치 정확도를 소수점 아래 수십자리까지 일치 시킬 필요는 없다. 여하튼 이런 저런 재미요소로 다양한 이유로 게임안의 세계는 특정 틀의 법칙을 지니고 움직이게 된다.

 

 여하튼 그렇다가 그 게임 안의 캐릭터로서는 언젠가 이런 의문이 들었다고 하자.

"왜 하필이면 이 세계는 이런 법칙으로 작동하는가?"

 앞서 밝혔듯이 게임 안에서는 게임 밖의 사정을 전혀 모르기 때문에 왜 세계가 그런 법칙을 갖게 되었는지 설계자의 생각을 스스로 알기가 어렵다. 따라서 이 부분은 순전히 상상의 영역에서 검토하게 된다. 그런데 가만히 세상에 존재할 수 있는 많은 법칙의 조합들을 생각해보면 다음과 같이 조금더 분할해서 질문해 볼 수 있다. 이제 다시 우리가 처한 우주에 대해 생각해보자.

 

 왜 우주는 대칭과 보존이 그렇게 엄밀하게 성립하고 있는 것일까. 적당히 근사해서 맞거나 일정 수준 랜덤으로 해도 될것 같은데, 자연은 그렇게 호락호락 하지 않다. 그런데 어떤 관점에서는 이산적인 구조를 가지고 있다. 왜 원자의 개념을 도입하고 있는가? 무한이나 무한소를 도입해 인간이 인지하지 못하는 범위까지 정밀도를 낮춰 나갈 수도 있을텐데, 그렇지 않다. 이미 플랑크 상수를 통해 자연이 띄엄띄엄하다는 사실이 밝혀져있다.

 

 또한 잘 알려져있듯이 자연상수 몇개만 바뀌었어도 우리 우주의 양상이 달라졌을 것이다. 그런데 왜 하필이면 지금 이 상태인가?

 

 유명한 오캄의 면도날(Ockham's razor)은 어떤 현상을 설명할때, 더 간단한 모델을 채택하라고 이야기한다. 그런데 신기한 것이 이것은 수학적으로도 근거가 있다. 예를 들면 복잡도가 낮은 모델 A와 복잡도가 높은 모델 B를 탐색해서 찾아냈는데, 특별히 복잡한 모델 B가 A보다 더 큰 정확도로 예측하지 못한다고 가정해보자. 그러면 이 상황에서는 단순한 모델 A를 채택하는 것이 더 좋은 전략이다. 왜냐하면 어떤 문제와의 설명 일치 여부를 탐색해 찾아낸 몇가지의 후보 모델이 있을때, 특정 문제를 더 단순한 모델이 푸는 경우가 확률적으로 더 낮기 때문이다. 바꿔 말하면 단순한 모델은 동일한 역할을 하는 다른 복잡한 모델보다 더 어렵게 찾아지는 bias가 덜 될 수 있는 모델이라고 이야기해볼 수 있다. 이렇게 더 단순한 모델은 복잡한 모델에 비해서 찾기 어려운, 더 큰 장점을 갖는 모델이 된다.

 

 지금 우주의 법칙들이 만약에 여러가지 랜덤한 체계 속에서 하나 선택된 것이라면 어떨까? 이미 다수의 반복에서 얻은 어떤 특수한 사례 중 하나라고 보면 또다른 분석 방법이 될 수 있다. 물론 우리의 현재 상황이 이런 랜덤으로 선택된 경우에서의 매우 특수한 하나 일 수는 있다. 무한의 우주의 시간대 속에서 엔트로피가 어느정도 충분한 상태의 우주라서 지능이 나타나는 하필 그 시기같은 상황 말이다.

 

 그럼에도 불구하고 이러한 여러가지 의문 틀은 이 시뮬레이션 이론의 여러가지 면을 상상하는 데는 도움을 주지 않을까 싶다. 간단하게 남겨놓아 본다. 최소한 법칙이 존재한다는 점이나, 그 법칙에서 벗어나는 점이 발견되지 않는다는 점 등이 일상적인 랜덤적인 요소와는 매우 거리가 있다는 점 등이 도대체 흔하지 않은 상황임은 참고 되어야 하겠다.

반응형
Posted by 작동미학
시뮬레이션가설2023. 7. 8. 10:39

 우리가 사는 세상을 시뮬레이터로 생각해보면. 사실은 시뮬레이터 밖의 사정에 대해서 알 수가 없겠다. 게임의 세계 안에서 게임 밖의 세계를 알 수가 없다. 물론 어떤 인터페이스가 있을 수 있다. 설계에 반영하면 그만이기는 하다. 그러나 아직 그 대칭과 보존이 철저히 지켜지는 우리가 살고 있는 세상에서 생각해보면(아직은 어떠한 예외도 검증되어 관측되지 않은 상태에서) 무언가 밖을 볼 수는 없는 상황인 것이 인지 상정이다.

 

 따라서 이 시뮬레이션 이론이라는 알 수 없는 이론을 탐구하기 위해서는 우리 안에서 그것을 파악해나갈 수 밖에 없는 안타까움을 지니고 있다. 게임 안에서 게임 밖을 상상해야 하는데 이것은 거의 랜덤과 가까운 관계를 유추해나갸아하는 상황이다. 애초에 불가능할 수도 있겠다. 따라서 그저 그 시뮬레이터 안을 들여다보는 것 밖에 할 수가 없고, 그것이 수학자와 물리학자의 합심에 의해 진행되고 있는 것이 현 상황이다.

 

 그러나 그러함에도 불구하고 이 거대한 계산 체계의 장에서 숨기기 힘든 골치아픈 것들이 있다. 바로 비연속과 무한이다. 소프트웨어 개발에 있어서 이미 무한의 문제는 골치아픈 일임이 잘 알려져있다. 즉, 0으로 나누면 어떻게 표기해야 할지 난감하며 무한은 그것의 무한의 정확도를 보증하기 위해서는 무한의 저장공간이 필요하다. 이 문제 속에서 대칭과 보존을 정확히 처리하는 문제는 시뮬레이터를 디자인함에 있어서 가장 난감한 부분 중의 하나가 되는 것이다.

 

 하나의 해결 방법은 모든 것을 아주 작은 단위의 깨지지 않는 무엇인가로 상정하는 방법이다. 바로 원자이다. 그렇게 되면 무한의 저장공간이 필요하지 않고 유한의 공간만으로 가능하다. 배열을 만들고 그 배열에 원자들을 배치하면 그만이다. 0과 1로만 그 모든 것을 처리할 수 있다. 원자라는 말로 현대의 표준모형과 헷갈리게 할 필요도 없다. 무언가 가장 작은 단위를 상정하고 그것을 기준으로 처리하면 된다.

 따라서 이산적으로 다루는 것은 이 시뮬레이터의 계산을 혼란스럽게 하지 않기 위한 가장 쉬운 접근방법이다. 계산은 원자단위 까지만 하고 나머지는 "근사"하면 그만이다. 그러나 이 근사는 각 원자스러운 것들 사이의 관계가 완벽해야 한다. 이를 테면 자연에는 시간이나 에너지나 질량이나 공간처럼 서로 다른 "량"들이 존재하는데 이것들이 같은 표준으로 이루어져야만 이 하나의 "원자"라는 개념으로 각기 변환이 가능하다. 그리고 이것은 현대 표준모형에서는 플랑크 상수라는 것으로 정의되고 있다.

 

 만약에 이 "원자"라는 개념이 각 물리량마다 다른 체계가 있으면 문제가 있는 것이 근사를 통해 사라지거나 더해지게 된다. 즉 반올림과 반내림이 필요한데, 이전에 설명한대로 특정 변환이 무한이 반복되면 지속적으로 반올림이 생기거나 반내림이 한쪽으로 치우쳐 발생하면서 결국에는 무언가가 사라질 수도 있게 된다. 이렇게 되면 기나긴 계산의 반복하에서 위의 대칭과 보존이 무너지게 된다.

 

 만약에 우리가 존재하는 이 자연(시뮬레이터)이 물리학자들의 주장처럼 전체 시간을 모두 함께 넣고 계산하고 있다면 재미있게도 무한에 대한 고려가 필요하다. 그리고 그것을 완벽하게 대칭시키려면 상기 여러가지 고민이 필요하다.

 

 그러면 우리가 살아가는 이 자연(시뮬레이터)은 이것들을 어떻게 처리하고 있을 것인가?

 

 어찌보면 이 질문에 양자역학은 대답을 하고 있는것 같다. 1900년 이후에 그래서 플랑크와 보어는 이 이산적인 것들에 대해서 정리를 해나가기 시작한 것처럼 생각해볼 수 있다. 우주는 과연 이 무한이라는 연속과 이를 둘러싼 비연속을 어떻게 처리하고 있을까? 시뮬레이터의 특성에 대해 특이하게 고민할 수 있는 중요한 주제가 되겠다.

 

반응형
Posted by 작동미학