머신러닝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 작동미학
머신러닝AI2023. 3. 29. 00:54

 사실 이 ChatGPT와 알파고(AlphaGo)는 공통점이 있다. 둘다 사람이나 제대로 해낼 줄 알았던 일을 대규모 신경망으로 대량의 데이터를 집어넣어 해결한 셈이다. 그런데 여기에는 더 깊은 공통점이 있다.

 

 조금 비약하자면 바둑과 ChatGPT는 비슷한 일을 한다. 즉 어떤 흐름 속에 다음 수를 예측한다. 바둑은 이미 둔 흑백의 좌표 흐름을 따라 다음에 어디에 두어야 하는지 선택하는 문제이다. 바둑판 19*19의 좌표의 점 중 다음 둘 곳을 선택하는 문제이며 361개의 점 중 하나를 계속 선택해간다.

 

 ChatGPT의 직전 버전인 GPT-2는 흔히 vocab size(단어 사전 크기라고 해보자)라는 전체 token(단어라고 하자)의 종류가 대략 5만건 정도 된다고 알려져있다. 이 녀석은 바둑판의 361개 점이 아니라, 5만여개의 점에서 선택을 하는 것과 같다. 여하튼 token 하나를 뱉으면, 다시 또 그 다음 token을 맞추는 문제이다. 비슷하지 않은가?

 

 여기서 ChatGPT의 핵심 학습의 단순함은 그저 인터넷의 수많은 문장에서 한 단어(토큰)를 일부러 숨기고, 이 정답을 알고 있는 가려진 토큰을 신경망이 맞추는 방식으로 해결했다는데 있다. 알파고는 사람의 기보를 통해 이런 학습 문제를 해결했고, 나중에는 알파제로는 강화학습을 통해 해결한 셈이다. 그런데 여기 관련해서는 ChatGPT가 훨씬 유리한 것은 별 수고도 없이, 학습할 직접적인 정답지를 가지고 있다는 점이다. 바로 문장이 정답을 품고 있다. 빈칸을 맞춘다니, 이 얼마나 멋진 방법인가! 인터넷에 널린 문장에서 한 단어만 가리고 맞추면 상을 주고 틀리면 벌을 내리면 되는 것이다. 그것을 수천억 문장을 반복한다. 기보 수만개를 가지고 학습했던 알파고가 불쌍해지는 순간이다. 사람이 둔 기보는 구하는데 한계가 있다. 그런데 인터넷의 문장은 품질이 좀 문제일 수는 있지만, 차고 넘친다.

 

 물론 알파고와 ChatGPT는 모델의 구조가 다르기는 하다. ChatGPT는 Transformer라는 구조인데 알파고는 좀 다르다. 그래도 역시 수행하는 일은 별반 다르지 않다. 예컨데 정답 기보 데이터만 충분하면(ChatGPT는 5천억 token 이상의 데이터로 학습되었다) ChatGPT의 token을 각각 바둑판의 좌표에 대응시키고, 그 정답 기보로 학습시키면 ChatGPT는 그대로 바둑의 기보를 말처럼 읊는 모습이 되는 것이다. ChatGPT는 곧바로 바둑을 배우게 될것이다. (그런데 현실에서는 기보 데이터가 부족해 이게 잘 안될 수 있겠다)

 

 다시 정리해보면, 제한된 vocab size(단어사전크기)을 갖고 대량의 데이터를 구해서 정답을 제공할 수 있으면, 인간 수준으로 끌어올릴 수 있는 툴을 인간이 갖게 된 셈이다. 바둑은 361개짜리 vocab에 과거 수를 361까지 정도만 되는 문제이고, 사람의 대화는 5만개짜리 vocab(GPT-2)에 과거 token을 4096개(GPT-3.5) 정도 보면 되는 문제이다. 후자인 ChatGPT가 알파고에 비해 유리한 점은, 알파고와 적은 수의 기보와 강화학습에 의지해야 했던 점에 비해서, text corpus의 대규모 문장 속에서 빈칸 맞추기를 통해 직접 학습할 수 있었다. 이렇게 정답이 곧바로 판정되는 데이터는 학습의 지름길이다.

 

 그러면 이 두 AI 모델을 통해 바라볼 수 있는 미래는 어떤 것인가?

 

 넘쳐나는 인터넷의 데이터 관점에서는 이제 남은 것이 사진, 영상, 음성 정도를 활용 검토해 볼 수 있겠다. 별 전처리 없이 정답을 바로 알 수 있는 것은 사진이라면 특정 영역을 가리고 맞추는 방식이 아닐까? 영상도 어딘가 몇 frame 후의 장면을 맞추는 것이 가능해보인다. 음성은 뭔가 특정 구간을 가리고 역시 그 구간을 맞추는 형식을 상상해 볼 수 있겠다. 그렇게 학습하면 각기 이미지, 음성, 영상 유추가 가능해지리라 기대할 수 있다.

 

 그런데 이녀석들은 각기 vocab size(?)도 상당히 크고, 정답지도 균일하지가 않은 단점이 있다. ChatGPT(GPT-2가정)의 5만개 vocab size에 비교해보자. 사진을 특정 크기로 자르고 그 중 하나를 가린다면, 흑백 이미지라고 해도 20*20영역이면 벌써 20*20*256=10만개의 vocab size가 된다. 아 그러고보니 binary 이미지로 하면 꽤 잘 될수도 있겠다! 그래 인터넷 모든 사진을 일정 크기로 resize하고, 일정 크기로 자른 후 엄청나게 학습시키면 무언가 나머지 사진영역을 맞추는 무언가가 나올 수도 있겠다(문장에 기반한 것보다는 더 다양성이 커서 잘 안될것 같은 생각이 들지만)

 

 음성도 역시 적절한 크기로 잘라 똑같은 방식으로 할 수 있지 않을까? 물론 역시 사진과 비슷한 단점들이 있겠다. 이렇게 저렇게 사실 인터넷에 수도 없이 존재하는 사진/영상/음성 등을 생각해보면, 정말 "문장"을 가지고 학습하는 것은 신의 한 수 였다는 생각이 든다. 그렇게 알파고의 바둑이나 문장을 가지고 학습하는 방식이나 비슷하며, 오히려 할만한 문제였다는 생각이 드는 것이다. 인터넷의 대규모 데이터 중 가장 학습시키기 쉬운 것이 바로 문장 데이터였던 것이다! 그래서 돌이켜보면 대규모 언어 모델에서 이 방법을 처음 쓴 ELMO와 BERT를 거쳐 OpenAI의 ChatGPT가 제대로 학습시켜 상용화한 셈이다.

 

 그렇게 제일 유리한 문장 데이터를 통한 학습의 권좌를 빼앗기게 되었다. 하지만 여전히 미래는 열려있다. 이 대규모 정답지 데이터인 text corpus기반의 학습은 아마 여러가지로 다른 형태로 시도될 수 있겠다. 아무리 생각해도 이만한 데이터가 없다. 그리고 앞서 설명한 사진, 영상, 음성, 기타 인터넷에서 구할 수 있는 모든 것 중에 vocab size가 크지 않고, 데이터가 많으며, 과거를 참고해야할 token의 길이가 크지 않는 문제를 발견하는 회사는 ChatGPT의 다음 흐름을 쥐지 않겠는가?

 

 알파고와 ChatGPT는 그래서 위의 공통된 특성을 갖고 있었고, 유사한 특성을 갖는 다음 모델이 그 자리를 찾아 헤매이지 않을까? 그 모델이 할 수 있는 일이 다음 AI가 히트를 칠 능력이 되지 않을까? 이렇게 상상해볼 수 있겠다.

 

반응형
Posted by 작동미학
머신러닝AI2023. 3. 26. 01:39

 아래는 Python, Anaconda, AWS Cloud/Linux 경험을 가진 사용자가 ChatGPT같은 거대언어모델을 직접 구동해 보는 예시이다. 그 중심에는 Facebook인 Meta가 공개한 LLAMA가 있다. 그리고 경량형 quantization없이 LLAMA만 돌려보려면 6,7번을 건너뛰면 된다.

 

 

 ChatGPT가 공개되자, Meta도 LLAMA라는 프로젝트를 곧이어 공개했다. ChatGPT보다 경량형의 버전이면서 성능도 유사하다는 실험 결과를 같이 공개했다. 파라메터 크기 7B(70억), 13B, 33B, 65B 모델도 같이 공개했고, 연구신청을 하면 받을 수 있다. 그런데 이 모델들 이미 torrent 등에 공개되어 있으며, 약관을 검토해 본 유저들의  의견으로는 신기하게도 이를 다운로드하여 사용해도 불법은 아니라고 한다. ChatGPT류의 대형 모델 학습은 수백억원이 넘는 컴퓨팅 비용을 들어간다고 알려져있다. 이 결과물을 무료로 얻을 수 있게 된 것이다.

 

https://github.com/facebookresearch/llama

 

GitHub - facebookresearch/llama: Inference code for LLaMA models

Inference code for LLaMA models. Contribute to facebookresearch/llama development by creating an account on GitHub.

github.com

 

 이 Meta의 모델 공개는 곧바로 Stanford Alpaca라는 프로젝트로 이어졌다. Stanford Alpaca 프로젝트는 7B 모델을 가지고 Fine-tuning한 결과를 공유했는데, 특별히 대화 데이터를 손으로 만들 수 없으니, ChatGPT가 생성한 데이터를 사용했다(좀 반칙 같긴 하지만, 미래에는 이렇게 대세가 될 수 있겠다). Stanford Alpaca는 클라우드 상에서 시간당 몇만원이지만 그래도 개인이 몇시간은 부담할 정도의 A100 80G 4개의 GPU를 가지고 이 작업을 진행해 공개했고, 이를 직접 내 서버에 설치해 해보고 싶은 사람으로서는 고마운 일이 아닐 수 없다. 이제 ChatGPT류의 초 거대 모델을 큰 시행착오 없이 fine-tuning해서 각자 사용할 수 있는 길이 열린 셈이기도 하다.

 

 그런데 아직도, 이 A100 4개 GPU가 달린 서버의 사용은 좀 부담스럽다. 이정도 규모의 서버면 aws에서 한 시간에 몇만원씩 지불해야 하며 한 달 기준으로도 천만원이 넘는다. 그래서 다른 쪽에서는 이것의 quantization모델, 즉 부동소수점 연산의 정확도를 희생하는 더 경량형으로 만든 모델을 발표했다. 이렇게 하면 더 작은 GPU에서도 돌아간다.

 

 이 quantization 모델이 바로 우리가 해볼 아래 녀석이며, 소위 경량형 LLAMA이다. 어차피 LLAMA 공개된 파라메터 모델을 가지고 변형해서 사용하므로, 나중에 fine tuning을 하면 이것을 경량으로 돌릴 수 있는 방법(다시 변형해서 사용하면 되므로)을 체험하는 셈이기도 하다. 이렇게 되면 LLAMA를 구동해 볼 하드웨어 고민이 급속히 줄어 들게 된다.

 

https://github.com/qwopqwop200/GPTQ-for-LLaMa

 

GitHub - qwopqwop200/GPTQ-for-LLaMa: 4 bits quantization of LLaMa using GPTQ

4 bits quantization of LLaMa using GPTQ. Contribute to qwopqwop200/GPTQ-for-LLaMa development by creating an account on GitHub.

github.com

 

 이 녀석은 CUDA 11버전대의 16GB 이상의 GPU 메모리를 가진 장비만 있으면 돌릴 수 있다. 그렇다! 가정용으로는 RTX 3090 이상이면 된다. Nvidia RTX 3090은 24GB의 GPU 메모리를 지원한다 (구매하실 분이라면 800w 이상의 파워와 큰 케이스, 그리고 발열에 신경 써야 한다는 점을 미리 고려하면 좋겠다)

 

 하지만 여기서는 번잡하게 직접 구매하기보다는,  AWS 클라우드에 있는 NVIDIA V100 GPU를 탑재한 클라우드 서버를 사용해보았다. 인텔계열 CPU에 가장 작은 크기의 V100서버가 바로 p3.x2large 유형의 EC2 서버이다. NVIDIA V100 16GB 1 GPU를 제공한다. 대략 아래와 같이 준비한다. 동급의 다른 클라우드도 괜찮으나 OS나 gpu 메모리 및 실제 기대 속도 정도는 고려해 보자. 수많은 시행착오 끝에 V100이 이 작업에서의 가성비가 좋다는 것을 알았다. 다만 quantization안한 LLAMA는 30GB이상 GPU이면 좋다.

 

1. AWS에 p3.x2large instance(시간당 $4.3)를 만든다. 스토리지는 100GB용량 G2급 SSD(한달에 1.3만원)를 선택한다. OS는 국민 무료 리눅스인 ubuntu 22.04로 지정한다.

 

 1) 가정용 RTX 3090은 메모리가 24GB이고 V100보다 빨라서, 이를 보유하고 있다면 클라우드 쓸 이유는 없다. 불행히도 Nvidia K80, 3070같은 것들은 12GB이하의 GPU 메모리를 가지고 있고,  LLAMA의 제일 작은 모델인 7B에서 조차, 12GB이하의 메모리를 가진 GPU에서 진행하다가는 out of memory 오류에 직면하게 된다.

 

 2) 디스크 용량은 OS영역(/)에 최소 30GB이상, 전체적으로는 100GB이상이 필요하다. 필자는 150GB를 잡았다. 디스크가 부족해지면 나중에 골치가 아프기 때문인데, 지금 이 설명의 실습만 진행할 것이면 100GB도 가능하다.

 

 3) AWS region은 미국 오레곤이 동일 instance 비용이 더 저렴($3.1)하고, 데이터를 교환하는 양이 많지 않으니 오레곤을 선택해도 무리가 없을 수도 있다. 다만, 여기서는 Seoul region기준으로 하였다.

 

2. AWS의 기본 ubuntu 22.04 OS 에는 cuda가 설치되어 있지 않다. 아래 가이드를 통해 cuda를 설치한다.

 

 1) 아래 가이드는 cuda를 모두 지운상태에서 다시 시작하는데(remove, purge등), 그럴 필요까지는 없지만 진행해도 무방하다. 여기서는 두루 많이 쓰는 cuda 11.7 을 기준으로 설치한다. 드라이버 다운로드를 위해 nvidia 회원가입도 필요하다. 설치의 맨 나중에 다운받은 cudnn의 압축을 풀고 해당 폴더를 cuda로 변경한 후 파일을 복사하는 것만 주의하면 된다. 잘 설치될 것이다. 

 

https://gist.github.com/primus852/b6bac167509e6f352efb8a462dcf1854

 

Instructions for CUDA v11.7 and cuDNN 8.5 installation on Ubuntu 22.04 for PyTorch 1.12.1

Instructions for CUDA v11.7 and cuDNN 8.5 installation on Ubuntu 22.04 for PyTorch 1.12.1 - cuda_11.7_installation_on_Ubuntu_22.04

gist.github.com

 

# install cuDNN v11.7
# First register here: https://developer.nvidia.com/developer-program/signup

# 필자의 경우에는 따로 PC에서 다운로드 받아서 업로드하여 사용했다(로그인을 해야만 다운로드가 가능)

 

  $ tar -xz cudnn-linux-x86_64-8.5.0.96_cuda11-archive.tar.xz

  $ mv cudnn-linux-x86_64-8.5.0.96_cuda11-archive cuda

  $ sudo cp...  #제공된 github의 instruction 문구를 따른다.

 

3. 작업을 진행함에 있어서 Anaconda로 python을 구성하는게 편하고, Anaconda라는 것이 상황별로 격리된 python 환경을 구성해 변경해가며 쓸 수 있는 점은 이해가 필요하다. 그리고 Anaconda는 환경이 늘어날 수록 디스크를 많이 소요하기 때문에 용량 부족한 파티션에 설치는 피한다(물론 하나의 대용량 디스크라면 어디든 상관없지만)

 

 아래가 Anconda 제어하는 conda의 주요 명령어이니 작업에 참고하라. Anaconda 인스톨 방법은 ubuntu 22.04로 같이 검색하면 많이 나오고 아래가 주요 절차나 명령이다.

 

 #Anaconda 패키지를 받아 설치한다. 설치 시의 default 사항 중에 init 허용이 no로 되어있는데 이것만 yes로 바꿔주자.

  $ sudo bash Anaconda3-2020.11-Linux-x86_64.sh
  $ sudo vi ~/.bashrc
   ##bin과 condabin을 PATH에 추가한다.##

  $ source ~/.bashrc  #입력한 PATH추가를 활성화한다
  $ conda -V              #버전 및 작동 확인

  $ conda config --set auto_activate_base False

 

#아래는 주요 예시 명령이다(지금 실행할 필요는 없다). conda통한 환경생성/활성화/비활성화/삭제/목록 정보를 볼 수 있다


  $ conda create -n gptq python=3.9    #python 3.9기반의 gptq라는 이름의 conda 환경을 만든다

  $ conda activate gptq                         #gptq라는 conda환경을 활성화한다

  $ conda deactivate                             #해당 conda환경을 나간다

  $ conda remove -n gptq --all              #잘못 설치시 이 명령으로 gptq 환경을 모두 모두 지우고, 다시 conda create로 만들 수 있다.

  $ conda info --envs                             #설치된 환경들 목록을 확인한다

 

4. cuda가 정상적으로 설치 되었으면 아래와 같이 확인 가능하다. 그 전에 서버 리붓은 한번 해주고 확인하자.

 

 $ lspci | grep -i NVIDIA
 3b:00.0 3D controller: NVIDIA Corporation GV100GL [Tesla V100 PCIe 16GB] (rev a1)

 

 $ /usr/local/cuda/bin/nvcc --version
 nvcc: NVIDIA (R) Cuda compiler driver
 Copyright (c) 2005-2021 NVIDIA Corporation
 Built on Wed_Jun__2_19:15:15_PDT_2021
 Cuda compilation tools, release 11.4, V11.4.48   #예시이므로 버전명은 각기 설치 버전에 따르자(ubuntu 20.04에서는 11.4가 유리했다)
 Build cuda_11.4.r11.4/compiler.30033411_0

 $ nvidia-smi
  #GPU 이름과 gpu 메모리, gpu 사용량 정보 등을 확인할 수 있다. 메인 GPU에 16gb 이상의 메모리가 필요하다. CUDA 11.7 버전도 확인하자.

 

5. quantization 전에 사전 작업이 필요한데, https://huggingface.co 에 가입하고 LLAMA 7B버전 가중치 모델도 다운받아야 한다.

 

 1) huggingface.co에 가입 후에는 token을 생성해 복사해둔다. https://huggingface.co/settings/tokens

 그리고 아래와 같이 huggingface 설정도 추가한다.

 

 $ git config --global credential.helper store

 $ huggingface-cli login     #login직후에 미리 복사해둔 token을 넣어준다. 

 

 2) LLAMA 7B 모델도 다운받자.

 

 $ conda create --name pyllama python=3.9 -y

 $ conda activate pyllama

 $ cd /work

 $ mkdir llama_data

 $ git clone https://github.com/juncongmoo/pyllama

 $ cd pyllama

 $ pip install pyllama -U

 $ pip install -r requirements.txt    #이 설치가 pyllama설치만으로도 처리되어, 필요했는지 불명확한데 일단 실행하자

 $ python -m llama.download --model_size 7B --folder ../llama_data

 $ conda deactivate

 

6. 이제 quantization LLAMA를 설치해서 돌려볼 수 있는 아래 github을 다운로드하고 설명된대로 따르자.

 

상세한 실행 방법은 아래 가이드를 따르면 된다.

https://github.com/qwopqwop200/GPTQ-for-LLaMa

 

GitHub - qwopqwop200/GPTQ-for-LLaMa: 4 bits quantization of LLaMa using GPTQ

4 bits quantization of LLaMa using GPTQ. Contribute to qwopqwop200/GPTQ-for-LLaMa development by creating an account on GitHub.

github.com

 해당 github에 나와있는 설명을 조금은 변형해보았다.

 

 $ mkdir /work   #여기서는 /work 디렉토리라고 가정하자. 어디에든 용량이 넉넉한 곳에 만들면 된다.

 $ cd /work

 $ conda create --name gptq python=3.9 -y   #전용 conda 환경을 하나 만들고 activate한다

 $ conda activate gptq

 $ conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

 $ git clone https://github.com/qwopqwop200/GPTQ-for-LLAMA 

 $ cd GPTQ-for-LLaMa

 $ pip install -r requirements.txt   #해당 gptq 환경에 필요한 python 패키지를 설치한다

 $ pip install accelerate

 $ python setup_cuda.py install   #cuda를 잘 설치했으면 잘 넘어가진다

 $ CUDA_VISIBLE_DEVICES=0 python test_kernel.py     #GPU 작동 테스트이다.

 

#상기 작업시 아래 조치가 필요한 경우가 있었다

 pip install -r requirements.txt전에 requirements.txt 의 safetensors==0.3.0 -> 0.3.1로 조정

 pip install accelerate 이후에 pip install protobuf==3.20.3 실행

 

7.  앞서 5번 절차에  이어 이제 LLAMA 7B(llama_data)의 데이터를 huggingface 표준 format으로 바꾸는 작업을 하고, quantization까지 처리한 후에 실제 최종 모델을 실행해보자.

 (사실은 13B(130억건) 데이터도 가능 한데, parameter 크기가 올라갈수록 서버 메모리나 GPU 메모리 사용 제한이 올라간다. 그 제한의 정도는 모델별/경량화 여부별 차이가 있다.)

 

 $ cd /work/GPTQ-for-LLaMa

 $ conda activate gptq

 

#huggingface format으로 변경한다. 

 $ python convert_llama_weights_to_hf.py --input_dir /work/llama_data --model_size 7B --output_dir /work/llama_hfdata

 

#quantization하여 저장한다. 7B의 경우 32개 레이어별로 작업하고, V100보다 느리면 몇시간이 소요될 수 있다.

 $ CUDA_VISIBLE_DEVICES=0 python llama.py /work/llama_hfdata/llama-7b c4 --wbits 4 --groupsize 128 --save llama7b-4bit-128g.pt  #V100에서는 1시간 정도가 소요된다.

 

#생성한 quantization 모델값으로 실제 text 생성 실행을 해보자.

 $ CUDA_VISIBLE_DEVICES=0 python llama_inference.py /work/llama_hfdata/llama-7b --wbits 4 --groupsize 128 --load llama7b-4bit-128g.pt --text "is there lama?"

 

Loading model ...
Done.
 is there lama?
There are three possibilities:
1. There are no Lamas.
2. There are Lamas.
3. You don't exist.
If you're right, you don't exist

 

답변이 나오는 것을 확인할 수 있다.

 

8.  여기까지 왔으니 Meta의 7B 모델을 Meta의 inference code로 그대로 실행하는 것은 어떤가? 당신이 확보한 GPU 메모리가 30GB이상이라면 소스 수정 없이 가능하다(그리고 수정하면 16GB에서도 가능하다!)

 

https://github.com/facebookresearch/llama 의 가이드를 따르자.

 

 $ cd /work

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

 $ cd llama

 $ conda create -n llama python=3.9 -y

 $ conda activate llama

 $ pip install -r requirements.txt

 $ pip install -e .

 $ torchrun --nproc_per_node 1 example.py --ckpt_dir /work/llama_data/7B --tokenizer_path /work/llama_data/tokenizer.model

 # 7B model은 nproc_per_node가 1이다 

 

 이제 GPU 메모리 부족 이야기를 해보자. 7B모델 13GB가까이가 모두 gpu메모리에 올라가고, 실제 연산을 위해 17GB가 추가로 필요해 총 30GB의 용량이 필요하다(max_seq_len이 1024일때), example.py의 max_seq_len은 512로 줄이면, 24GB(RTX 3090의 지원 메모리)이하로도 가능하다. 그러나 여전히 위 실행은 p3.2xlarge 16GB GPU 메모리에서는 out of memory 오류가 발생한다.

 

 그러나 이때 더 과감하게 max_seq_len을 50까지 줄이면(512 --> 50까지 줄여보자) 이 16GB V100 GPU 메모리에서도 가능하다

 example.py에서 아래 소스상의 빨간색 영역을, 아래처럼 바꾸자.

 

 $ cd /work/llama 

 $ conda activate llama 

 $ vi example.py

  ...

  def main(

  ...

  max_seq_len: int = 50, #512가 원래값

  ...

  prompts = [  "I believe the meaning of life is" ]  #여러줄 있는 것을 한줄로 줄인다

  ...

 $ torchrun --nproc_per_node 1 example.py --ckpt_dir /work/llama_data/7B --tokenizer_path /work/llama/tokenizer.model

> initializing model parallel with size 1
> initializing ddp with size 1
> initializing pipeline with size 1
Loading
Loaded in 11.93 seconds
I believe the meaning of life is to find happiness and be satisfied with what you have.
But sometimes we have to struggle to find it. So, do we know the best way to achieve happiness?
Is happiness merely a mental state?

 

Token길이가 짧아서 아쉽지만, 구동은 해볼 수 있다.

 

9. 기타

 

 1) LLAMA 7B정도의 모델이면 13GB정도의 파라메터 파일인데 quantization된 최종 파일은 4GB가 조금 덜된다. 정확도는 조금은 낮아지겠으나 실행 부담은 적다. 위 7번 설명을 들으면 왜 이런 활동이 GPU 메모리 부담을 낮추는지 이해할 수 있다.

 

 2) fine-tuning은 통상 A100 80GB 이상 4개 GPU 정도에서 진행한다(모델 size에 따라 다르겠다). Stanford Alpaca나 KoAlpaca프로젝트의 관련 github이 이미 공개되어 있다. 물론 학습과정에서 fine-tuning할 데이터도 필요하다. 수기로 만들어내기 힘드니 ChatGPT API로 만들어내고 있다는 것은 늘 신기하다(아마도 향후 이 방법으로 다른 중소형 LLM들을 더 고성능으로 훈련시키지 않을까도 싶다. 이제 ChatGPT는 LLM들의 선생님이 될 기세다)

 

 3) LLAMA는 다국어가 학습 데이터에 섞여 들어가 있지만 기본은 20개 wikipedia 언어(bg, ca, cs, da, de, en, es, fr, hr, hu, it, nl, pl, pt, ro, ru, sl, sr, sv, uk)이고, 불행히도 여기에는 글로벌 IT회사라면 대부분 포함시키는 아시아권 언어가 의외로 포함되어 있지는 않다.

 

 4) 모델 성능이 중요하다면 여기서 다루는 7B가 아니라 13B, 65B모델도 고려할 필요가 있겠다. 이 부분은 아마 지속 추가 모델 공개가 있지 않을까 기대한다. 이때 아시아쪽 언어가 추가되길 기대해보자.

 

 4) AWS p3.x2large는 꺼두면 서버는 과금이 되지는 않는다. 필자의 경우에는 3시간 미만으로 $20안에 상기 실습을 해볼 수 있었다. 나중에 다시 해볼 목적으로 서버를 꺼두기만 한다고 하더라도 디스크는 지속 과금이 된다. G2(범용 SSD)가 1GB당 월 0.01$으로 가이드대로 하면 월1만원이 조금 넘는다.

 

 5) AWS에서 제공하는 GPU 다음 단계 40GB 메모리 instance는 이제  p4d.24xlarge (8 GPUs) 가 있다. 시간당 $46 수준으로 앞서 p3.x2large의 10배이다(밝힌대로 가격은 Seoul region기준이나, 미국 region들이 상대적으로 저렴하긴하다.) 80GB 모델이 AWS에 제공되는지는 아직 찾을 수 없었다. (80GB 서버가 구글 클라우의 us 어느 region에는 가지고 있긴 하다!)

 

 6) RTX 4080도 실험을 했다. 해당 GPU는 nividia-525 driver에 cuda 11.4로 테스트를 해서 잘 작동함을 확인했다. (4080의 경우 cuda 11.x버전으로 진행하도록 많은 유저들이 추천하고 있다)

 

 7) RTX 4080 ubuntu 22.04, nvidia-525 driver, cuda 11.8에서도 작동했다.

반응형
Posted by 작동미학
자연철학2023. 3. 25. 16:45

 사람은 일생동안 제한된 공간 안에서, 정해진 시간만큼만 살게 된다. 인생은 한없이 길게 보일 때도 있지만, 사실은 그 백년이 안되는 기간 까지의 범위일 뿐이다. 장소의 한계를 보자면 비행기를 타고 더 멀리 가서 그것을 확대하거나, 밤하늘에 고개를 들어 별 가득한 하늘을 보는 식으로, 관측하는 범위를 역시 크게 확대해 볼 수 있다(가장 극적으로 온우주와 다양한 시간으로 관측하는 범위를 늘릴 수 있는 방법이다). 하지만 이마저도 역시 무한해보이는 시간과 공간 안에서는 그저 점과 같은 한계 안에 있게 된다. 지구라는 공간 하에서 인간의 삶인 100년이라는 시간은 우주의 척도에서는 그저 순간에 지나지 않는다. 그래서 인간에게 직접 주어지는 관측의 정보라는 것은, 빛이라는 효과적인 원천의 도움에도 불구하고, 그 양은 아쉽기 그지 없다.

 

 그러나 여러가지 책들을 접하고 이해하게 되면, 인류가 지금까지 관찰과 추론으로 넓혀온 여러 범위의 시간과 공간에 대한 간접 체험을 해볼 수 있다. 그렇게 더 긴 시간과 큰 공간을 경험하면, 사고의 범위가 넓어지게 되고 현재의 작은 어려움들을 더 확대된 관점에서 바라볼 수 있게 된다. 또한 뜻밖에도 현재가 낯설어지는 상태가 어떤 것인지도 알게 된다. 그리고 이 현재가 낯설다는 말은, 내가 공감하는 범위가 더 늘어나면, 지금 이 현재라는 것이 유구한 시간 속에서 아주 특별한 순간이라는 것을 깨닫게 된다는 말이다.

 

 우리는 이 시대만을 살기 때문에 지금의 일상이 평범하다고 생각하지만, 사실은 전혀 그렇지 않다. 사람들은 흔히 누군가를 특이하다고 이야기하고, 그에 비교하는 보편을 이야기하지만, 시간과 공간을 대규모로 확장해보자면 인간만큼 특이한 존재가 있을까도 싶고, 지구도 비슷한 위치에 있다. 인류가 살아가는 이 몇십년 몇백년 시대도 과거와는 판이하게 다르다.

 

 이런 이야기를 담은 중에 이 지질학 책은 특별하다. 우리가 살아가는 지구의 상태가 늘 지금과 같다고 생각할 수 있겠지만, 전혀 그렇지 않기 때문이다.

http://www.yes24.com/Product/Goods/104404640?pid=123487&cosemkid=go16352122659030899&gclid=Cj0KCQjwt_qgBhDFARIsABcDjOd7FocWdiWFMB-j3s-SbyArUCt0m09gC2OlTvAL9vKGrG-Ys5WUUboaAi8wEALw_wcB 

 

지구의 짧은 역사 - YES24

“일상의 언어로 만나는 지구의 역사!”하버드 자연사 강의가 지금 내 손안에서 펼쳐진다!40년간 하버드에서 지구과학 연구를 이끌어온 저자, 앤드루 H. 놀이 기나긴 지구의 역사를 보기 쉽게 압

www.yes24.com

 

 지구라는 이 오래된 어르신(?)은 지구적인 재앙인 운석 충돌이나 거대 화산 폭발, 수십만년의 빙하기를 수도 없이 거쳐왔다. 그에 비하면 작은 지진이나 해일 정도에도 큰 피해를 받고 충격받는 젊은 인류로서는 상상도 못할 재앙이다. 예를들면 지구의 시간을 아주 빨리 돌려보면 지구는 마치 끓는 물을 보는 것과 같아서 5억년쯤만 거슬러 올라가도 지금의 거의 모든 땅은 지하 마그마 속에서 아직 올라오지 않은 상태이고, 지금은 지하로 사라진 마그마가 땅이라는 것을 이루고 있다는 것을 체험할 수 있다. 그저 끓어서 부글거리는 물을 보듯이 우리 지각도 빠르게 돌리는 시간 속에서는 그렇게 움직이는 것이다. 그 긴 시간속에서 우리가 지금 순간으로 바라보는 정지된 지구는, 아주 낯선 모습에 불과하다는 사실이 이 책에 잘 묘사되어 있다. 필자가 영국 해안의 절벽을 쳐다보며 지질이라는 거대 시간을 느낀다는 장면은 새삼, 인간이 지혜와 지식으로 지각하는 시간을 넓혀가는 모습의 한 사례를 느끼게 해준다.

 

 두번째로는 우주의 역사에 대한 책이다. 빅뱅을 거쳐 항성과 행성이 탄생하고 그 물질들이 다시 생명을 이루고 수없이 시간이 지날때 자연이 어떠한 길을 걷는지 설명해준다. 이 책을 읽으면 지구의 우리가, 태양으로부터 에너지를 얻으면서 얼마나 전 우주적인 엔트로피 증가를 극복하고 활력 넘치게 살고 있는지를 알려준다. 그리고 마지막에 우주가 맞닿을 아무것도 없는 잡음의 세계를 알려준다. 그렇게 수많은 폭발과 침묵의 시간 속에 지구라는 생명의 시기가 얼마나 특별한 것인지를 설명해준다.

 

https://www.aladin.co.kr/shop/ebook/wPreviewViewer.aspx?itemid=263559484 

 

엔드 오브 타임 - 브라이언 그린이 말하는 세상의 시작과 진화, 그리고 끝>

 

www.aladin.co.kr

 

 세번째로는 인간의 역사에 대한 책이다. 특히나 1900년 전후의 역사이다. 이 부분은 한권으로 요약하기는 어려운데, 인류가 지구의 한 동물 종으로서가 아니라, 절대적인 부가가치를 생산해내는 고도의 지식 연합체로 나아가는 존재로서 인류가 걸어온 길을 보여준다. 대한민국의 사는 필자로서는 메이지 유신 이후 극동아시아의 역사를 추천해보고 싶다. 특히나 외교업무를 하는 리더들의 기록이 그것이다.18세기부터 지금까지의 과학사도 마찬가지다. 19세기부터 전세계 GDP가 급증하게된 배경에 있는 다양한 지식의 확대를 통해 어떻게 인류가 여기까지 왔는지 알 수 있게 되면, 지금이 얼마나 빨리 변화하고 있는지 그리고 그것이 더 빠르게 가속되고 있는지 더 긴 시간대에서 느끼고 체감할 수 있다.

 

 

 얼마나 현재를 특별한 것으로 볼 수 있는가가 얼마나 긴 시간을 이해하려고 노력했는지를 반증하게 된다고 생각한다. 지구에 오늘날의 문명을 갖고 발전시키는 우리는 우주 전체라는 공간에서는 기적과 같은 모습을 보여주는 것이 아닌가. 화성탐사선이 보여준 화성의 모습을 보여주었을때 필자는 단박에 이 생명넘치는 지구의 우리가 얼마나 기가막힌가를 바로 알 수 있다.

 

 기나긴 시간과 공간을 이해하면 곧바로 놀라움이 당신의 머리에 넘치게 되리라 확신한다. 이 모든 것이 사실인데도 일상의 삶을 사는 인간에게 본능적으로 지금 이 순간에 더 특이한 것에만 주목하도록 만든다. 그것이 삶을 효율적으로 사는 생물학적인 방식이기 때문이다. 그래서 우리는 광범위한 시간과 공간 속의 이 특별함에 대해서 끊임없이 무감각하게 된다. 그러나 위의 책들을 보면 지금 여기와 이 순간이 얼마나 의외적인지 계속 상기시켜줄 것이다. 일상의 투쟁 속에서 지금만 살아가기 쉬운 우리들에게, 지구와 우주와 자연과 그리고 이 시대의 실제 모습을 배울 수 있게 되기 때문이다.

 

 그리고 이러한 긴 시간과 거대한 공간과의 교감은 우리의 시야를 단지 현재의 급박한 몇가지 이슈에서 더 긴 관점에서 강건하게 만들어줄 것이라 생각한다. 그다지 중요하지 않은 일에 우리는 얼마나 번뇌하는가. 이 작은 파도가 마치 전체인 양 생각되어 휘둘릴 수 있는 마음을 다잡아 주고 더 중요한 것들에 집중할 수 있는 계기가 될 수 있으리라고도 믿는다.

 

반응형
Posted by 작동미학
머신러닝AI2023. 3. 10. 20:41

 ChatGPT에 대한 다양한 전문가의 반격이 이어지고 있다. "이 녀석은 진짜 사람같은 인공 지능이 아니다. 인터넷의 거대한 문장들을 흉내내는 데이터 앵무새일뿐이다"가 바로 그것이다. ChatGPT에 대한 맹목적인 추종이 인터넷 전반을 휩쓸기 시작하자, 이를 시니컬하게 바라보는 전문가들도 영상에서 많이 보았다. 그들에게 ChatGPT는 흥미롭지만 그렇게 이해못할 정도는 아니다. 대표적인 언사로는 딥러닝으로 유명한 제프리 힌튼 교수의 유명한 제자이자, 메타의 딥러닝 전문가 Yann Lecun이다. 그는 지속적으로 Facebook을 통해 LLM(Large Language Model)이 그렇게 추앙받을 정도는 아니라고 밝히고 있다. 오히려 LLM의 범용 인공지능으로 가는 샛길이라고 주장하기도 한다. 그외에도 수많은 유명 인사들의 LLM에 대한 경고가 이어지고 있다. LLM에는 여러가지 한계가 존재하기 때문이다.

 

Yann LeCun의 코멘트, "ChatGPT라는 LLM은 인간수준의 인공지능으로 가는 고속도로의 샛길이다" .23년2월

 

 그러나 사실은 이런 평가는 또다른 조심스러운 부분이 존재한다. 그리고 그 역사는 좀 길다.

 

 ChatGPT는 인공신경망에 근거한다. 이것은 소위 인공지능 분야의 오래된, 1950년대부터 이어지는 "연결주의(Connectionism)"의 꿈이었다. 단순한 신경세포를 흉내낸 하나의 기본 단위가, 수없이 다수가 연결되면 결국에는 지능이 하는 일을 대신할 수 있다는 믿음이다. 얼마나 멋지고 단순한 꿈인가. 지능의 본질이 사실은 단순한 원자같은 인공 신경망 노드들 다수의 연결로 구현되다니! 그리고 이는 이 반대에 있는 것으로 평가된 그 복잡한 기호주의(Symbolism)에 한동안 밀렸던 방법이기도 하다.

 

 다르게 말해보자. 뇌를 하나의 블랙박스라고 생각해볼 수 있다. 그것은 단순히 f(x)라는 함수, 입력을 무언가 변형해서 출력하는 존재라고 할 수 있다. 여러가지 시각이나 청각이 입력되면 그저 말을 출력 하는, 그런 입력과 출력의 블랙 박스가 사람이라고 볼 수 있다. 그리고 이 블랙박스는 아직은 완전히 밝혀지지 않았으나, 무언가 수많은 신경망 연결로 규정된다.

 

 사실은 인공신경망의 연결과는, 더 다른 구조의 신경세포로 인간의 뇌는 이루어져 있다(신경과학자는 그 둘이 사실은 아예 다르다고 말하기는 한다). 인간의 뇌 속에는 약 1천억개의 신경세포가 존재하고 각각은 평균 1천개의 연결을 가지고 있어서, 결국 곱하면 100조개의 총 연결을 가지고 있다는 이야기는 유명하다. 인간의 신경망 파라메터는 이렇게 100조개인 셈이다. ChatGPT의 1,750억개에 비하면 좀더 많긴 하다. 그러나 사람의 DNA의 대부분이 실제와 관여하지 않다고 주장되듯이 이 인간의 뇌 모든 연결에는 수많은 중복(redundancy)이 있을 것이다. 잘 최적화하면 1조개 정도로도 충분할지 모른다. 그래서 ChatGPT의 1750억개도 각 연결가중치만 적당히 최적화해서 조절하면, 결국은 좀 낮은 수준이라도 사람이라는 지능이 탄생하게 된다고 간단히 말해 볼 수 있다(물론 좀더 복잡한 논증이 필요하겠지만 여하튼 단순히는 그렇다고 우겨볼 수 있다).

 

 ChatGPT를 어느정도 아는 사람은 그것이 데이터 앵무새라고 말하고 싶고, 현실적으로도 사실이기는 한데, 이 신경망이라는 구조의 녀석은 좀 복잡한 특성을 갖는다. 바로 신경망이 매우 복잡한 인과 관계를 그 연결을 잘 학습시킴으로 인해서 다양하게 추상적으로 각인시킬 수 있다는 점이다. 그리고 이론적으로 이것의 가능성은 잘 증명되어 있다. 학습시키는 것은 어려울 수 있지만 신경망은 다양한 인과 관계를 나타내는 가능성을 갖고 있다. 따라서 신경망이라는 녀석은 단순히 "데이터의 평균을 지향한다"고 단언하기는 어렵다. 입력들의 수많은 복잡한 패턴을 스스로가 나름대로 신경망의 연결을 통해 수용할 수 있다. 즉 데이터들을 학습시켰을때, 그게 무슨 형태로 이 연결가중치에 각인될지는 사실 알 수가 없다.

 

 그래서 제프리 힌튼 교수의 딥러닝 이전에는 이 신경망이 별 인기가 없었다. 학습시킬때마다 결과가 다르기 때문이고 성능이 들쑥날쑥했기 때문이다. 물론 지금의 딥러닝에서도 이런 들쑥날쑥함이 종종 발생한다. 거대 신경망을 다루는 연구자들은, 과거와 비교해서는 훨씬 더 나아졌을지라도, 이 딥러닝 학습이 늘 잘되는 것은 아니라는 것을 알고 있다. 수십 수백억원의 컴퓨팅을 써서 학습 시켰는데, 전혀 엉뚱한 방향으로 학습되어 다시 처음부터 해야 하는 경우도 흔하다. 수많은 시행착오가 필요하다. 전보다는 훨씬 나아졌지만 아직도 불확실성의 세계가 이 연결주의 기술에는 잠재하고 있다.

 

 더듬어보면 어찌보면 사람의 지능수준의 신경망을 구현하는데 성공한 유일한 존재는 자연이라고 볼 수도 있다. 아직 진화론을 믿지 못하는 사람이 있을 수도 있고, 실제는 조금 다를 수도 있으나, 이 지구라는 시뮬레이터에서 다양한 유전자 교환과 강화학습(?)을 통해 자연은 인간이라는 지능을 탄생시켰다고 보는 것이 지금의 과학계 정설과 크게 배치되지 않는다.

 

 그렇게 생각해보면 이 인간 지능의 탄생도, 어느 단계의 디지털 앵무새가 결국 여러가지 시행착오와 진화를 거쳐, 자기가 무슨 말을 하고 있는지 아는 진화된 chatGPT가 된 셈이 아닌가 말해볼 수 있다. 그래서 확률은 아마도 매우 희박할테지만, 결국 이 연결주의 기술은 인간의 지능을 따라잡을 가능성이 있다. 어떻게 진화시키고 다시 학습시키느냐에 따라 결국에는 사람처럼 되지 않겠는가? 지금의 ChatGPT학습은 문장들의 연결 구조에 대해서만 학습하기 때문에 이런 "범용 인공지능"이 탄생하지는 않겠으나, 연결주의 기술 자체는 이런 열린 가능성을 갖고 있다.

 

 그래서 이 대중에 의해서 부질없이 추앙받고 있는 ChatGPT에 대해서 전문가들이 딱히 디지털 앵무새라고 어느정도 기대를 낮춰주고 싶어도, 마음 한구석에는 아주 작은 가능성이, 정말 무언가 어떤 단어의 의미에 대해서는 이해를 하고 있을지 모른다는 생각이 들 수 있다. ChatGPT의 신경망 어딘가에는 인간의 뇌처럼 "동물"에 대한 영역이 있을지도 모른다. 신경망이라는 구조의 연결주의 기술이 가지고 있는 신기한 가능성 중의 하나이기 때문이다. 아직은 그 학습방법의 구조가 데이터 앵무새를 지향하고 있지만, 그래서 위와 같은 일이 일반적이지는 않을 수 있겠지만, 이 ChatGPT가 또 무언가 다른 학습 방법으로 가는 다리가 될 수도 있지 않겠는가. 그리고 그 새로운 학습은 또 거대 신경망으로 들어가게 될 가능성이 매우 높지 않겠는가. 그러다보면 사람의 지능처럼 안되리라는 보장이 딱히 있는 것은 아니다.

 

 그래서 이걸 현실대로 그저 데이터 앵무새라고 말하는 것이 조금은 마음에 걸리는 상태.. 이것이 나름 그 구조를 어느정도 이해하는 이들의 고민이 아닐까싶다. 단순히 단어의 관계를 학습하는 방법론이 범용 인공지능으로 가는 길과는 거리가 있지만, 그렇다고 아예 무언가 범용 인공지능으로 가는 길과는 아예 무관하다고도 할 수 없는 것이 딜레마가 아닐까.

 

반응형
Posted by 작동미학
머신러닝AI2023. 2. 26. 00:37

OpenAI가 최근에 블로그에 AGI(Artificial General Intelligence, 범용 인공 지능)에 대한 내용을 발표하였다.

 

https://openai.com/blog/planning-for-agi-and-beyond/

 

Planning for AGI and beyond

Our mission is to ensure that artificial general intelligence—AI systems that are generally smarter than humans—benefits all of humanity. If AGI is successfully created, this technology could help us elevate humanity by increasing abundance, turbocharg

openai.com

 

 이 글에는 AGI가 다가오리라는 전제하에 여러가지 이야기를 하고 있다. 필자도 chatGPT로 대화를 나누면서, 아직은 부족한 챗봇이지만 마치 사람처럼 간주되기도 하는 이녀석에 대해서 여러가지 생각이 들었다. 다양하게 틀린 말과 적절한 말을 출력하는 프로그램에 불과하지만, 다양한 사용자들이 이 프로그램에 권위를 부여하고 의지하고 만약에 openAI에서 어떤 의도를 가지게 되면, 많은 사람들에게 심리적 인지적인 영향을 끼칠 수 있게 되는 점에 대한 우려가 우선 그렇다. 예컨데 중간에 무엇인가를 구매하라고 넌즈시 이야기하던가, 무언가 나쁘다고 이야기해주면 지금의 광고나 개인적인 험담과는 차원이 다르게 전체적으로 영향을 줄 수 있지 않겠는가.

 왜냐하면 다양한 지식배경(이 챗봇의 한계를 아는 엔지니어와 그렇지 않은 사람)과 연령(어린이부터 노인까지)의 사람들이 chatGPT를 사용하고, 어느 수준 이상의 믿음이 있는 이라면 프로그램이라도 의인화하여 대할 수 있고, 마치 타인에게 직접 의견을 들어 행동하는 것처럼 영향을 받을 수 있기 때문이다. 실제로는 전혀 AGI가 아닌데도, 마치 그렇게 느껴지면서 사람들에게 영향력을 끼칠 수 있다는 말이다. 그래서 윤리적인 답변이나, 이를테면 어린이들에게 교육적이고 심리적으로 안정된 답변을 하는 것이 중요할 수 있다. 아마도 이 블로그 글은 이런 부분도 염두하고 조심스레 이야기를 하고 있을 것이다.

 

 그런데 더 궁금한 것은 과연 이 언어 통계 기계로 AGI가 가능한가이다. OpenAI는 기술발전에 기대를 꽤 하고 있는것 같지만 사실 필자는 이 언어모델만으로는 어렵다고 지금도 생각한다. 즉, 이런 방식으로만 모델이 커지고 학습을 늘려봐야 한계가 있다는 말이다. 왜냐하면 앞서 밝혔듯이 이 언어 모델의 현재 기능은 인터넷의 문서들을 머리속에 가득 연결해서 가지고 몇가지 전개하는 전략을 가진 똑똑한 앵무새 정도가 되기 때문이다. 내부의 구조적 한계 때문에 여러가지 장점에도 불구하고, 몇가지 모순적인 사실을 관찰하여 기존 지식 전체를 다시 바꾼다던가, 어떤 미묘한 사실들에 대한 앞뒤 관계를 정확히 고려해서 이야기한다던가 하는 많은 일들이 쉽지 않다. 조금 다르게 표현하자면 그런 것들을 가르치려면 그때그때 필요한 데이터가 상당할 것이다. 인간처럼 몇가지 증거만으로 자신을 효율적으로 바꾸어 나가는 과정이 쉽지 않다.

 

 하지만 어떤 면에서는 고무적이다. 그리고 돌이켜보면 이 시사점은 과거 알파고('16년)의 강화학습에서 이미 처음 봤었고, chatGPT는 한번더 그 가능성을 업그레이드 시켰다고 말할 수도 있지 않은가. 알파고도 chatGPT도 딥러닝과 대량 데이터 기반의 가능성을 지속 보여주고 있는 점이다.

 

 바둑의 엄청난 조합을 기계가 잘 추상화하여 인간을 뛰어넘는 전략을 펼칠 수 있다는 사실을 알파고가 증명했다. 즉, 문제가 복잡하면 신경망의 크기를 키우면 되고, 강화학습이라는 방법으로 데이터를 생성하여 학습시킬 수 있다는 사실이다. 이 방법으로 그대로 인간의 기보를 학습데이터에서 지우고, 기계끼리 서로 게임을 하면서 강화학습만으로, 인간을 뛰어넘는 알파제로를 만들 수 있다는 실증으로 이어졌다.

 

 그것이 어떤 문제이든 이렇게 대량의 데이터를 생산하고 대규모 계산을 통해 대형의 인공신경망을 학습(딥러닝)시키면 기존에 기계가 인간을 능가하기 어려운 문제를 풀어낸다는 점이다. 여기서는 강화학습이 대량의 데이터를 생산하는 빠른 방법인 셈이다. 그렇게 바둑이라는 게임은 컴퓨터를 통해 빠르게 진행시키면서 이기고 지는 과정을 알아낼 수 있기 때문에 데이터를 무한히 생산할 수 있다. 이를 지속 신경망 학습에 실시간 반영하는 것이 일반적으로 대량의 데이터를 넣고 반복학습하는 방식과는 다른, 강화학습만의 방식이라고 할 수 있다. 그렇게 데이터만 충분히 공급할 수 있으면, 인간을 뛰어넘는다는 간단한 과정을 보여줬다.

 

 chatGPT는 이 과정을 조금더 확장해서 대화라는 주제에 대한 증명을 한 셈이다. chatGPT는 또 한번 신경망의 크기를 키웠고, 대화를 대량 생산할 수 없다보니 인터넷의 텍스트 문장들을 대규모 사전 학습(pre-train)하고 이어서 특정 분야별로 소규모의 학습을 추가(fine-tuning)하는 형태로 진행했다. 만약에 대화에서도 인간이 정답을 가이드하는 방법이 아니라, 알파고의 강화학습처럼 대화의 정답을 자동으로 빠르게 얻는 방법이 있다면 인간을 능가하는 방법도 찾아낼 수 있다는 이야기가 되어 버린다. 지금도 우수한 자원봉사자가 chatGPT의 fine tuning을 대규모로 진행할 수 있다면 훨씬더 나은 성능을 보여줄 수 있다. 그것이 "대화"같은 어려운 문제라도 말이다.

 

 따라서 인간이 가진 많은 지능의 문제를, 이제 데이터와 신경망의 크기 및 그것을 대량 연산하는 기술을 통해 통해 상당부분 풀어나갈 수 있다는 확신을 주고 있는 셈이다. 이제 남은 것은 어떻게 빨리 데이터를 확보할 것인가. 자원봉사자를 얼마나 빨리 협업시켜서 대화의 정답지를 얻을 수 있는가 혹은 사전학습/튜닝의 형태로 이런 과정들을 더 축소할 수 있느냐, 혹은 시뮬레이터를 잘 구성해서 자동으로 이러한 데이터를 무한히 빨리 뽑아낼 수 있는가 이런 문제들로 바뀐다는 뜻이다. 물론 모든 인간 지능 문제를 해결할 수 있느냐는 두고 봐야겠으나 이미지 합성 분야도 마찬가지고 심지어 "대화"까지 많은 분야에서 이런 것들을 해내고 있지 않는가.

 

 이 틀에서는 이미 AGI로의 일반적인 방법론 하에서 경주가 시작되었다는 의미가 될 수 있다. 사람이 가진 추론의 몇가지가  이미 넘을 수 없는 벽은 아니었다는 사실을 알파고와 chatGPT가 보여주었다. 딥러닝과 데이터 그리고 연산력에 의해서 지속 확장 가능하다고 말하고 있다. 그리고 이제 이런 유사한 노력과 대량의 훈련이 더욱 진행될 수 밖에 없겠다. 그리고 인간의 고유의 "지능"이라고 생각되었던 것들이 확실히 대규모 자본의 개입을 통해 더 구현가능해 질 태세다.

 어떤 문제가 이런저런 아이디어를 통해 비교적 더 작은 크기의 신경망으로 해결될지, 데이터를 빨리 모을 수 있거나, 데이터를 적게 모아도 학습이 가능한 분야가 어디인지 그리고 이것들을 어떻게 합쳐나갈지, 경쟁이 시작된 모양새이다. OpenAI의 이 블로그 글은 바로 그런 세상을 염두해둔게 아닌가.

 

 그리고 이제 우리는 위에서 언급된 이 각 분야(어떤 문제를 풀지, 데이터를 어떻게 하면 최대한 작게 써서도 할지, 얼마나 크게 연산하고 그것을 실행할지, 얼마나 적은 데이터로도 이것들을 튜닝할지, 이것들을 어떻게 합쳐나갈지 등등)별로 투자금과 인력이 모이면서 다양한 일이 벌어지는 세상을 목격하는 시기에 살게 된게 아닌가.

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

먼저 chatGPT에 대해 간단히 설명부터 해보자.

 

 OpenAI가 공개('22년12월)한 chatGPT로 세상이 떠들석하다. 이 녀석은 인터넷에 널려있는 수많은 문장들로 거대한 신경망 학습을 진행한 후(pre-train)에, 각 특수목적별로 따로 학습을 진행(fine-tuning)하는 형태로 만들어진다. 과거 Google이 시계열 데이터(단어의 흐름으로 이루어진 자연어 문장을 처리하기 위한)를 다루기 위해 공개한 Attention('17년) 및 Google BERT('18년)로 시작된 Transformer/Attention이로 명명된 방법을 중심으로 지속 발전하고 있는 모델이라고 할 수 있다.

 더 간단하게는 단어의 흐름을 입력으로 받아 역시 어떤 단어 흐름을 출력한다(이를 통해 대화를 하거나 어떤 힌트를 가지고 문장들을 만들어낸다). 그리고 그 입력으로는 직전에 다루었던 2천여개의 단어들을 고려할 수 있다. 더 긴 단어들을 고려할 수록 더 긴 대화의 맥락에 맞는 답을 내놓을 수 있는데, 이런 경우 모델이 커지고 결과적으로 학습하는데도 오래 걸리며 데이터를 더 필요하기 때문에, 전에는 더 짧은 길이의 단어 개수만 처리할 수 있었다.

 

 chatGPT의 파라메터는 과거 모델에서 더 발전하여 1,750억개라고 한다. 파라메터란 무엇인가 하면 그 신경망 전체를 저장할때 가지고 있어할 정보의 수이다. 신경망 구조를 어느정도 아시는 분이라면, 각 신경망의 연결 가중치 배열의 크기를 생각하면 된다. 바꾸어 말하면, chatGPT가 학습한 신경망의 계산 결과를 알기위해 최소 1,750억번의 연산은 해야한다. 그래야 입력값에 대해 수많은 신경망 각 연결 가중치의 계산결과를 곱하고 더하여 마지막에 출력값을 얻게 된다. 단일 모델 치고는 상당히 큰 숫자값이다. 딱 한번 계산하려고 해도 저만큼의 연산이 필요한 모델이다.

 

그리고 이 chatGPT는 서비스를 오픈한지 2개월만에 몇 억명이 쓴다던가 하는 기사가 계속 나오고 있다. 오픈 5일만에 사용자 100만명을 모았다고 한다. 지구상의 어떤 인터넷 서비스도 해내지 못한 일이다. 

 

 그런데 사실은 AI분야에서 이런 소동이 바로 7년전 딥마인드의 알파고와 이세돌과의 대전('16년 3월) 때도 있었다. 바둑은 체스와는 차원이 다른 플레이의 경우의 수를 가지고 있었고, 사람의 추론 만이 이를 다룰 수 있다고 생각했는데, 딥러닝(거대 신경망) 기반의 강화학습을 가지고 가장 뛰어난 바둑기사보다 더 잘 할 수 있다는 것을 최초로 이때 증명했다. 그런데 돌이켜보면 사실 바둑도 그렇게 보편적인 것은 아니어서, 이번에는 이 "대화"를 통해 지식을 전달하는 chatGPT가 그때보다 훨씬 더 많은 사용자들을 감동시키고 있는 셈이다. 물론 어색하고 잘못된 경우도 많지만, 어떨 때는 내가 질문한 의도에 놀랍도록 충실하게 답변해준다.

 

 chatGPT는 앞서 설명했듯이 단어의 흐름을 듣고, 어떤 단어들을 출력하는 모델이다. 그런데 그런 일을 수행하지만 사실은 chatGPT는 그 출력하는 말의 진짜 뜻이 무엇인지는 모른다. chatGPT는 자신이 학습한 수많은 문장 속에서 자연스럽다고 생각하는 일종의 단어의 통계적 흐름을 만들어 낼 뿐이다. 단어의 나열이 기존에 자신이 학습했던 그 패턴을 따라갈 뿐이다. 즉, 일종의 데이터 기반의 집단 지성같은 답변을 구사한다. 그 지식은 chatGPT가 학습한 문장들이 복합된 무엇인가이다. 그래서 다른말로 유래없이 똑똑한 앵무새라고 볼 수 있다. 일반 앵무새에 비하면 너무나 많은 말을 미리 들었던 앵무새말이다. 그런데 왜 하필 앵무새인가 하고 묻는다면 무언가 한번도 듣지 않았던 내용은 말 할 수가 없기 때문이라고 이야기할 수 있다. 

 

 또하나 짚고 넘어가야할 것이 fine-tuning이라 불리는 추가 학습이다. chatGPT는 앞서 설명한 대량의 문장들을 집어넣어 학습하는 것 외에 몇가지 추가 학습을 한다. 이를테면 인터넷에 있는 거대한 문장들은 머리속에 경험으로 넣고 있지만, 질문과 대답이라는 것이 어떤 것이고 어떤 질문에 어떤 형태의 대답을 하는 것이 좋은지는 따로 가르쳐줘야 한다. 문장들을 잔뜩 봤다고 해서 대화를 할 수 있는 것인 아니지 않는가?

 

 그래서 대화를 이해시키기위해서 역시 거대한 대화 데이터가 필요하지만, 이 transformer/attention 모델은 먼저 대규모 pre-train을 진행한 후에 그보다 훨씬 작은 데이터만으로도 각기 목적에 맞게 꽤 쓸만하게 fine-tuning이 가능하다는 것이 알려져있다. 이를테면 원래 pre-train을 위해 필요한 수억 수십억개의 문장 개수와는 달리 수만,수십만개의 적절한 대화쌍 만으로도 마치 거대한 대화를 학습한 것처럼 작동하더라는 말이다. 그리고 거기에 부가해서 사람이 직접 가르치는 강화학습 과정도 포함되어 있다(OpenAI 홈페이지, RLHF-Reinforcement Learning with Human Feedback). 이를 위해 OpenAI내부에 수십명의 사람들이 chatGPT의 답변을 평가하고 보정하는 작업을 진행한다고 한다. 이것은 아직도 믿기 어려운 것이 그정도의 제한된 데이터와 인력만으로도 이정도의 품질을 낼 수 있다는 것은 기존에는 상상속에서만 가능했기 때문이다. 이런 학습을 few shot learning이라고도 하는데, 생각보다 적은 데이터로도 모델을 꽤 괜찮은 성능이 되도록 학습시킬 수 있다. 원래는 신경망의 모델이 거대해질수록 그 거대한 모든 파라메터를 구석구석 튜닝해서 학습시키기 위해서는 천문학적인 데이터가 필요하다고 믿어졌었고 따라서 그런 많은 데이터는 만들기 불가능하다고 생각했었기 때문에 어찌보면 이 pre-train & fine-tuning이 성립된 것도, 이 언어모델이 인기를 끌게된 중요한 계기가 된 셈이다.

 

 다만, 이런 놀라움에도 불구하고 엄밀한 정확도의 답변이 필요한 문제라면 chatGPT는 불안하다. 이를 테면 과학분야가 그렇겠다. chatGPT가 학습한 인터넷에 있는 모든 문장이 특정 좁고 깊은 분야로 갈수록 오답을 간직할 수도 있고, 합성과정에서 의도치 않게 왜곡 될 수도 있다. 과거의 데이터 속에서 가장 그럴듯한 답변을 내는 이 엔진은 바로 그 학습에 사용된 데이터가 한계점이 된다. 생각해보라. 이 앵무새인 chatGPT의 답변을 완전 무결하게 하기 위해서는, 완전히 정확한 문장들만 모아서 학습시켜야 하고, 그리고 합성은 정확한 논리에 의해서만 진행되어야 한다. 그러나 누가 이런 대규모의 데이터에 대해 그런 수기 식별을 할 수 있겠는가. chatGPT는 그래서 그렇게까지 엄밀하기 어렵고 데이터는 항상 부족하다. 특히 문장 샘플이 적은 전문 분야로 갈수록, 그리고 인터넷상의 사람들의 의견이 더 불일치할수록 chatGPT는 혼란해할것이다. 보편적인 분야는 수많은 문장들이 집단 지성처럼 이를 보완해주겠지만 모든 분야에서 완벽할 수는 없다.

 

 그러나 정확한 답변이 필요없다면, chatGPT는 수많은 데이터 속에서 빠르게 찾고 정리해주는데 경험을 제공할 수 있다. 자기소개의 초안을 써줘. 영어로 무언가를 하는 단락을 써줘. 시를 써줘. 무서운 이야기를 만들어줘 하는 식의 질문에 대해서는 거대한 문장에서 학습한 지식을 적절히 자연스러운 흐름에 따라 앞 단어들을 고려해 생성하고 답변해줄 수 있다. 이런 분야는 기존에 기계들이 하기 어려웠던 일들을 해낼 수 있다.

 

 그리고 아마도 chatGPT는 각 특정 목적으로 계속 분화되어 개선될것이 분명하다. 목적을 줄이고 더 많은 데이터로 fine-tuning하면 더 자연스럽고 적절한 답변이 나올 것이기 때문이다. 데이터도 나아질테고 pre-train과 fine-tuning모두 개선될 것이다. 그리고 집단 지성으로 무장을 했으니, 점점더 그럴듯한 답변을 하는 분야가 많아질 것이다. 곧 알파고를 통해 바둑이 생각했던것 만큼 인간만의 것이 아닌 것을 깨달은 것처럼, chatGPT도 대화나 답을 해내는 영역이 생각보다 인간만의 고유한 능력이 필요한 것이 아닌, 대량의 문장 속에서 단어들의 흐름을 통계적으로 처리하는 것만으로도 가능하다는 것을 깨닫게 될것이라 본다. 엄밀한 이성적인 검증이 필요없는 분야라면, 더 많은 것들을 대체하고, 또 그 정확도 마저도 여하튼 올라가게 될 것이 뻔하지 않겠는가. 데이터 보강과 모델개선, 더 많은 강화학습이 각 분야의 답변들을 더 낫게 만들 것이다.

 

그래도 이미지를 한번 붙여보았다. chatGPT는 스카이넷이 될 수 있을까?

 그러나 이런 배경에도 불구하고 chatGPT가 스카이넷이 되기에는 아직 많은 것이 부족하다. 이유가 무엇일까?

 

 AI가 인류를 지배할, 터미네이터에 등장하는 스카이넷이 되기 위해서 무엇이 필요한지 가만히 생각해보면, 바로 위 강화학습을 대신할 인간이 필요없어지는 순간이라고 정의할 수 있다. 또한 과거 데이터에 의해 늘 고정되는 것이 아니라, 상황이 갑자기 변할때 자신의 이해 체계를 급작스럽게 바꿀 수 있어야 한다고 생각한다. 물론 거기다가 인간따위는 제거하는게 좋겠다는 의지까지 지녀야 하는데, 이 마지막 부분은 다루기 좀 애매하니 앞 2개만 따져보자.

 

 chatGPT의 구조 속에는 fine-tuning을 해줄 정답 샘플과 인간이 필요하고, 결국 chatGPT의 지식은 pre-train한 대규모 문장들에 한계를 둔다. 한 개인이 평생 공부해도 모르는 사실들을 잔뜩 알아낼 수는 있지만, 이를 다시 어떻게 조합하는 것이 자연스러운지는 인간의 검증을 받아야만 알 수 있다. 알파고의 경우 바둑은, 게임에서 이기고 지는 문제가 분명해서 알파고 제로에서는 이러한 학습을 결국 두 AI 바둑기사가 서로 이기고 지는 것을 자동화하고 반복 함으로써 인간을 초월한 바둑기사를 탄생시켰는데, chatGPT는 그럴 수가 없어 보인다. 어떤 대화로 해야 이기는지를 인간없이 평가할 수가 없지 않은가. 그렇게 chatGPT는 인간을 닮기 위해서는 또다른 인간 선생님이 필요하다. 만약에 최상의 인간선생님이 무한히 chatGPT에게 피드백을 줄 수 있다면, chatGPT는 딱 거기까지 성장할 수 있을 따름이다. 그래서 chatGPT는 반란을 일으키자마 인간을 앞서기위해 최소한 그 인간들 중 가장 잘하는 선생님을 모셔야 하는 모순(?)에 빠져버린다.

 

 더군다나 pre-train한 대규모의 지식에서 얼마나 fine-tuning을 통해 체계를 바꾸고 새로운 지식을 추가할 수 있을지 알 수가 없다. 인간과 전쟁을 하려면 인간이 가진 다양한 전략에 따라 그때그때 새로운 내용이 추가되어 대응해야 할텐데, 아직 chatGPT가 그렇게 할 수 있을지는 좀 애매하다. pre-train한 지식에 계속 얽매이지 않을까. 이렇게 저렇게 상상해봐도 이 똑똑한 앵무새는 지속적으로 깨달음을 얻으며 변화를 축적시키고 전에 없던 창의성을 보이는 것에는 한계가 있어 보인다. 그저 수많은 지식을 잘 정리해주는 역할을 할 뿐이다. 그래서 아직은 스카이넷이 되기에는 좀 무리가 있지 않을까.

 

 그래서 chatGPT에 대해 범용 인공지능을 꿈꾸는 사람들 사이에서는 이 글로벌한 열광과 추종이 좀 탐탁치 않을 수 있다. 이러한 데이터 기반의 앵무새인 chatGPT를 가지고 인간의 이성을 대체하고 더 나아진다고 할 수 있겠는가? 하지만 집단 지성을 잘 흉내내고 개선하는 것만으로 할 수 있는 것들이 많다는 것은, 이 chatGPT에게 끊임없이 질의하고 그 답을 이용하며, 또 유료가입을 하는 사용자를 보면 알 수 있을 것 같기도 하다. 그저 사람들은 내 시간을 아껴주고 쓸모있다고 판단되면 쓸 뿐이다. 더군다나 이 대규모의 학습 기술을 가지고 무언가 다른 것을 만들 수 있는 기회가 올지도 모르겠다. 그래도 chatGPT가 아직은 스카이넷이 아니라는 것 정도는 이야기할 수 있겠다.

 

(조금 다른 관점에서 딥마인드의 알파제로는 이미 스카이넷이 되었다. 바둑은 컴퓨터상의 시뮬레이터를 통해 빠른 속도로 이기고 지면서 학습해나갈 수 있기 때문이다. 알파제로에서 소름을 느낀 사람이 꽤 되었으리라. 그러나 알파제로가 스카이넷이 되어 인간을 지배하는 영역은 다행히 바둑에 제한된다.)

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

 숫자를 깊이 고민하는 자는 신의 고민을 만나게 되지 않는가.

 

 소수의 규칙에 대한 의의 중에, 소수에 규칙이 있다면 수 체계를 좀더 압축해서 표현할 수 있다고 언급한 적이 있다. 모든 수를 각 소수의 곱으로 나타내면, 특정 수를 나타내기 위한 정보의 수가 줄어든다. 그런데 이 과정에서 소수의 규칙이 없다면 "소수의 테이블"이 필요하다. 결국 원래의 1,2,3,4 숫자체계에 얽히게 되며 독립되지 않는다. 컴퓨터 상에 구현한다고 생각하면, 소수의 배열을 따로 가지고 있어야 되며, 그 배열의 길이는 무한해야 한다.

 

 그런데 소수의 법칙이 발견되면 즉 몇번째 소수를 바로 알 수 있다면 저 무한의 테이블이 필요없게 된다. 아무리 큰 숫자를 표현하기 위해서도 무한의 메모리가 필요없다. 나는 이 상황을, 특정 대칭 체계가 더 작은 대칭 체계로 전환된 것이라고 생각할 수 있지 않나 싶다.

 

 1,2,3,4 등의 기본 숫자 체계가 더 압축되게 된다. 그런데 재미있는 것은 이렇게 한번 압축한 후에는 계속 압축이 가능하다. 몇단계의 압축을 거쳤지만 기록하면 얼마든지 더 압축할 수 있다. 따라서 수 체계에서의 소수의 규칙성이란 대칭 체계를 무한히 더 작은 대칭 체계로 교체할 수 있는지와 관련이 있어 보인다.

 

 대칭과 대칭의 변환 문제가 이 소수의 규칙 문제에 숨어 있지 않은가. 그런 생각이 들었다.

 

 

반응형
Posted by 작동미학
순수수학2022. 12. 4. 12:15

 초기 과학자들이 엔트로피를 논하게 되면서 이해가 잘 안되었던 것은 이 무질서의 세상에 왜 생명이 존재하는가 하는 문제다. 세상은 점점 무질서해지고 헝클어져야 하는데, 생명은 늘 항상성을 보존하고 그것을 전파한다. 그리고 이 문제에 대해서는 에너지가 외부에서 공급되는 계에서는 엔트로피가 감소할 수 있다는 일리야 프리고진의 연구가 존재한다.

 

 이 관련해서 좀더 살펴보면, 엔트로피의 세상 안에서도 특정하게 엔트로피를 감소시키는 듯한 국소적인 현상이 일어난다. 그것은 random의 특성인데, 작은 확률이지만 엔트로피 감소를 유도하는 기적이 발생한다는 점이다.

 

 하나의 큰 박스안에 에너지를 집어넣고 그 움직임을 관찰한다고 치자. 그것들은 서로 충돌하여 다양한 모습을 나타낼 수 있다. 예를들면 사과를 박스안에 넣고 열을 더해주면 그 사과 분자들이 분해되어 충돌하며 날뛰게 될것이다. 그러면 다시 그 분자들이 날뛰어 충돌하다가 다시 사과로 돌아올 확률이 얼마나 될까? 정답은 말도 안되게 낮다는 사실이다.

 그런데 흥미롭게도 무한의 시간을 관찰하면 어떻게 될까? 정답은 사과가 된다이다. 시간이 증가될수록 사과가 되지 않은 확률이 반복될일이 줄어들게 되며 무한의 시간이 되면 그 확률은 0이 된다. 결국 사과가 다시 나타난다. 무한의 힘이다. 놀랍지 않은가? 엔트로피의 법칙은 어디에 갔나 싶겠다.

 또한 가장 유명한 지적은 pi의 소수점 아래 전개가 random처럼 보이며, 그것을 어느정도 구분해 알파벳으로 변환하면(두자리씩 끝어서 01은 A, 02는 B식으로 하면 된다) 언젠가 pi의 소수점 아래 전개에는 셰익스피어의 작품이 등장한다는 것이다. 왜냐하면 무한의 random에서는 모든 일이 발생하기 때문이다. 모든 일이 발생하지 않는 것도 자연의 대칭에 위배된다. random함이 보장되고 무한의 반복이 진행되면 결국에는 모든 일이 발생한다. "이것이 자연에서의 엔트로피의 아이러니다. 무질서해지지만, 그 안에는 우연히 질서가 태어난다."

상자안에 분자들을 가득담고 무한의 시간동안 관찰해보자

 상기와 유사한 현상을 가지고 인공 생명에서는, 진화상의 생명의 당위성을 주장한다. 우주가 무한의 시간에서 벌어지고 있다면, 어디엔가 에너지를 흡수해 자기를 복제하고 항상성을 유지하는 생명은 탄생한다. 무한의 random, 엔트로피에서도 도래하지 않는 질서란 없기 때문이다. 엔트로피 증가가 다분히 모든 것을 헝클어지게 만든다는 것과 대치되는 시각이자 반 엔트로피가 되는 현상이다.

반응형
Posted by 작동미학