ChatGPT 원리 이해
ChatGPT 서비스에 사용되는 인공지능 모델인 LLM 을 이해하고 ChatGPT 동작 원리를 설명합니다
Youtube : Explained: The conspiracy to make AI seem harder than it is! By Gustav Söderström
Intro
안녕하세요, 저는 Gustav_Soderstrom입니다. 저는 Spotify의 공동 대표입니다. 저는 동료들로부터 엔지니어부터 경영진에 이르기까지 Spotify의 모든 분들을 위해 AI에 대해 자세히 설명해 달라는 요청을 받았습니다. 특히 새로운 유형의 제너레이티브 AI에 대해요. 그리고 이러한 것들이 실제로 어떻게 작동하는지 설명해 달라고요. 하나의 소설을 완성할 수 있는 ChatGPT 같은 서비스나 텍스트나 백색 소음만으로 아름다운 이미지와 음악까지 만들 수 있는 Stable Diffusion이나 MidJourney 같은 서비스가 어떻게 탄생할 수 있었을까요? 이제 기술 업계에 종사하는 직원과 경영진으로서 우리는 이를 이해하는 것이 말 그대로 우리의 임무입니다.
하지만 기술 업계에 종사하지 않더라도 지금 무슨 일이 일어나고 있는지 이해하는 것은 거의 의무라고 생각합니다. 이것은 큰 일이니까요. 사람들은 지금부터 100년 후 2023년에 대해 이야기할 것입니다. 컴퓨터가 튜링 테스트를 통과하기 시작한 해이기 때문입니다. 즉, 컴퓨터가 컴퓨터 시스템과 대화하는 것인지 사람인지 모르는 사람에게 인간으로 속일 수 있다는 뜻입니다. 제가 아이들에게 거의 100년 전에 원자 분열에 대해 이야기하는 것처럼 사람들은 100년 후에도 이에 대해 이야기할 것이라고 생각합니다. 제가 1930년대에 원자가 분리될 때 그 자리에 있었다면 무슨 일이 벌어지고 있었는지 이해하고 싶었을 것 같아요. 20년이 지나서야 그 일이 일어났고 제가 그 자리에 있었다는 사실을 깨달았더라면 좋았을 텐데, 사실 저는 몰랐어요.
그래서 저는 모든 사람이 최소한 무슨 일이 일어났고 어떻게 작동하는지에 대한 직관을 얻는 것이 중요하다고 생각합니다. 그래서 이 프레젠테이션을 듣고 나면 수학을 잘 모르더라도 무슨 일이 일어나고 있는지 이해하게 될 것이라는 대담한 약속을 드리고 싶습니다. 안타깝게도 실제로 무슨 일이 일어나고 있는지 파악하는 것은 꽤 어렵다는 것을 알게 되었습니다. 부분적으로는 이 때문이라고 생각합니다. 그래서 조지 버나드 쇼는 평신도에 대한 음모라는 개념을 만들었습니다. 그리고 그것이 의미하는 바는 정말 평신도, 예를 들어 사제 계급이 될 수 있다는 것입니다. 그리고 그것이 실제로 의미하는 바는 모든 직업은 다른 사람들이 그 직업에 진입하는 데 장벽을 높이는 경향이 있다는 것입니다. 이는 의도적으로 이 직업에 대한 인증 기관과 규칙 시스템을 만드는 것일 수도 있고, 의도적이지는 않지만 이 직업에 대한 매우 복잡한 어휘와 용어를 만드는 것일 수도 있습니다.
무슨 말인지 다들 아시죠? 금융이나 법률과 같은 분야를 접하다 보면 매우 복잡하고 이해하기 어렵다는 느낌을 받을 때가 많습니다. 그러다가 실제로 이해하게 되면 왜 그냥 그렇게 말하지 않았을까 하는 의문이 들기도 합니다. 종종 어휘 자체가 실제보다 더 어렵게 느껴지는 경우가 많습니다. 사실 고의적인 것은 아닌 경우가 많습니다. 전문화된 그룹은 서로 더 높은 수준에서 이야기하는 것이 더 효과적이기 때문에 전문 어휘를 만드는 경향이 있는 것은 사실입니다. 그러나 이는 또한 다른 모든 사람들에게 무슨 일이 일어나고 있는지 이해하는 데 장벽을 만듭니다. 실제보다 더 복잡하게 보이게 만드는 문제는 사람들이 이론과 실제를 혼동하기 때문이라고 생각합니다. 이러한 것들이 실제로 작동하도록 하는 실무는 매우 복잡하고 실제로 많은 수학이 필요합니다. 이론은 실제로 그렇지 않습니다. 실제 문제를 이해하지 않고도 무슨 일이 일어나고 있는지에 대한 직관력을 키우는 것은 전적으로 가능하다고 생각합니다. 그럼 이 음모를 폭로할 수 있는지 살펴봅시다.
그러니까 이론은 간단한데 실제 구현이 복잡하다는 것이고 우리 눈에는 실제 구현만 보이니까... 그것은 매우 복잡하고 어려운 것이라고 인식한다는 것이네이 내용을 잘 아는 분들은 제가 여기저기서 지름길을 많이 사용한다는 것을 알 수 있을 것입니다. 그리고 실제 숫자와 백분율이 항상 완전히 이해되는 것은 아닙니다. 하지만 대체로 정확한 직관을 불러일으킬 수 있을 만큼 단순하고 사실에 충실하려고 노력했으니 양해해 주시기 바랍니다. 준비되셨나요? 시작하죠.
What is LLM?
그렇다면 LLM이란 무엇인가요? LLM은 대규모 언어 모델의 약자입니다. 그리고 이것이 바로 ChatGPT와 같은 것을 구동하는 원동력입니다. 이 섹션을 읽고 나면 ChatGPT가 실제로 어떻게 작동하는지 이해하실 수 있을 것입니다. 하지만 몇 가지 단계를 거쳐야 합니다. 첫 번째 단계는 말 그대로 숫자만 이해하는 컴퓨터가 실제로 언어를 이해하도록 하는 방법을 이해하는 것입니다. 대략적으로 무슨 일이 일어나고 있는지 이해하는 데는 꽤 간단한 직관이 있습니다. 인간이 영어 사전을 가지고 있다고 가정해 봅시다. 첫 단어부터 시작하면 됩니다. 에이스, 놀랍다, 감사하다, 향기롭다, 그리고 마지막 단어까지. 영어 사전에는 약 60만 개의 단어가 있습니다. 그 단어들에 숫자를 부여하면 됩니다. 예를 들어 첫 번째 단어인 에이스는 1번입니다. 두 번째 단어인 놀라운은 2번입니다. 세 번째 단어인 감사하다에는 3번이 붙는 식으로요. 이제 말 그대로 영어로 문장을 만들 수 있습니다. 예를 들어, 안녕하세요? 모든 단어를 찾아서 숫자가 몇 개인지 확인할 수 있습니다.
따라서 컴퓨터에게 '안녕하세요'와 같은 문장은 실제로는 문장이 아닙니다. 그냥 숫자의 시퀀스일 뿐입니다. 예를 들어 hey라는 단어에는 숫자 25가 포함됩니다. how라는 단어에는 숫자 30이 있습니다. are라는 단어에는 숫자 5가 있습니다. 그리고 you라는 단어는 예를 들어 75라는 숫자가 있습니다. 이제 이 숫자들이 아주 작은 숫자라는 것을 알 수 있지만 이는 단순함을 유지하기 위한 것입니다. 이것은 그냥 조회 테이블입니다. 60만 개의 단어로 구성된 긴 목록이 있고 모든 단어에 고유 번호가 있습니다. 그리고 문장을 일련의 숫자로 번역하면 됩니다. 이제 좀 더 자세히 살펴보겠습니다. 실제로 어떻게 작동할까요? 아주 간단한 모델부터 시작해 보겠습니다. 영어 사전의 모든 단어가 한 줄로 나열된 Excel 시트가 있다고 가정해 봅시다. 그리고 영어 사전의 모든 단어가 열로 표시되어 있다고 가정해 보겠습니다.
따라서 모든 단어에 대해 다음 단어가 나올 확률에 대한 백분율이 있습니다. 예를 들어 are라는 단어가 있다고 가정해 봅시다. 컴퓨터에게 이는 숫자 5를 의미합니다. 이제 언어 모델의 임무는 are 단어 다음에 올 가능성이 가장 높은 단어는 무엇일까요? 또는 더 정확하게는 인터넷에서 본 모든 단어 또는 모든 숫자 시퀀스에 따르면 are라는 단어를 나타내는 숫자 5 다음에 올 가능성이 가장 높은 숫자는 무엇일까요? 인간이라면 많은 단어에 동일한 비율을 부여할 수 있다고 상상할 수 있습니다. 그럴 수도 있겠죠? 문자 그대로 '안녕, 잘 지내세요'라는 문장이 될 수도 있겠죠? 하지만 그럴 수도 있겠죠? 그럴 수도 있죠? 문장이 어떻게 지내세요일 수도 있기 때문이죠. 괜찮아? 문장이 그럴 수도 있기 때문에 괜찮습니다. 한 단어, 한 단어의 문맥만 가지고 추측할 수 있기 때문에 정확하게 추측하기가 어려울 것입니다. 말 그대로 정확하게 추측할 수 없습니다. 정보가 충분하지 않으니까요. 하지만 좋은 추측을 할 수는 있습니다.
그래서 아마도 당신과 같은 것들, 그들, 사물, 좋아요, 그들은 같은 비율을 가지고있을 것입니다. 하지만 맞을 확률이 매우 낮은 단어가 있을 것입니다. 동물은 인터넷에서 매우 드문 문장일 가능성이 높습니다. 일어날 수 있는 일이지만 흔하지 않을 뿐입니다. 다시 말하지만, 컴퓨터는 단어를 추측하는 것이 아닙니다. 컴퓨터가 말하는 것은 내가 인터넷에서 본 모든 텍스트를 기반으로, 또는 더 정확하게는 인터넷에서 본 모든 숫자 시퀀스를 기반으로 단어에서 숫자로의 번역에 따라 숫자 5 뒤에 보통 당신을 나타내는 75라는 숫자를 본다는 것입니다. 또는 숫자 5 뒤에는 보통 그들을 나타내는 숫자 42가 표시됩니다. 또는 5라는 단어 뒤에는 보통 사물을 나타내는 숫자 97이 표시됩니다. 그러니까 인간으로서 하는 일과 매우 유사한 일을 하고 있는 거죠. 인간은 백분율에 대한 직관이 있고, 컴퓨터가 모든 위키백과와 인터넷의 모든 통계를 볼 수 있다면 다음 단어에 대한 백분율과 통계에 대해서도 꽤 잘 알 수 있다고 생각하면 이해하기 쉬울 것입니다.
자, 여기까지 600,000개의 행으로 구성된 하나의 열, 즉 600,000개의 행과 600,000개의 열로 이루어진 데이터를 살펴봤습니다. 이제 한 단어의 컨텍스트가 더 있다고 가정해 보겠습니다. 컴퓨터는 'are' 대신 숫자 30과 5인 'how are'를 얻습니다. 이제 백분율이 바뀝니다. 인간에게는 are라는 단어만 있었을 때, you, things, they, find는 똑같이 가능성이 높았습니다. 하지만 어떻게, 어떻게라는 두 단어가 나오면 갑자기 당신이 있을 확률이 더 높아집니다. 지금은 50%일 수도 있습니다. 예를 들어 인터넷에서는 어떻게 지내세요보다 어떻게 지내세요라고 말하는 것이 더 일반적이기 때문입니다. 따라서 굳이 추측해야 한다면 아마도 '안녕하세요'를 선택할 것입니다. 그리고 어떻게 지내세요보다는 어떻게 지내세요 또는 어떻게 지내세요라고 말할 가능성이 훨씬 더 높습니다. 그리고 괜찮다고 하면 괜찮다고 할 수 있기 때문에 한 단어만 있으면 괜찮다고 할 가능성이 높았던 are fine과 같은 단어를 사용하면 아무도 어떻게 괜찮다고 말하지 않습니다.
이제 갑자기 괜찮다는 단어의 비율이 매우 낮아졌습니다. 이를 숫자로 바꾸어 말하면, 이제 대형 언어 모델에 두 개의 숫자가 생겼고, 사람이 두 단어로 훨씬 더 잘 추측하는 것처럼, 인터넷에서 본 모든 숫자를 기반으로 하는 대형 언어 모델도 두 개의 숫자로 훨씬 더 잘 추측하게 된다는 뜻입니다. 다음에 무엇이 나올지 상상할 수 있습니다. 세 개의 숫자나 세 개의 단어가 있다면 어떨까요? 이제 문맥은 헤이, 하우 또는 숫자 25, 35입니다. 이제 여러분의 추측이 정말 좋아지기 시작할 것입니다. 이봐요, 어떻게 지내세요는 이제 가능성이 매우 높습니다. 70%라고 가정해 봅시다. 이봐요, 그 사람들은 어때요, 어쩌면 가능성이 더 낮을 수도 있죠. 어떻게 지내세요라고 말할 수는 있지만, 눈앞에 있지 않기 때문에 잘 지내세요라고 말하는 경우는 거의 없습니다. 그래서 5%까지 내려갈 수도 있습니다. 그리고... 그보다 더 적은 확률로 어떻게 지내세요라고 말할 수도 있습니다. 하지만 잘 지내냐는 말은 거의 하지 않죠? 눈앞에 있지 않으니까요. 그래서 5%까지 내려갈 수 있습니다. 그리고 '안녕하세요'보다 사용 빈도가 조금 낮았던 '안녕하세요'가 인터넷에서 자주 볼 수 있는 '안녕하세요'로 바뀌면서 사용 빈도가 급격히 증가했습니다. 그리고 '안녕, 잘 지내세요'와 '안녕, 동물들은 어때요'는 매우 낮은 비율을 차지했습니다.
요점은 인간으로서 더 많은 문맥을 파악할수록, 더 많은 단어를 알수록 다음 단어에 대해 더 잘 추측할 수 있고 더 확신할 수 있다는 것입니다. 이는 대규모 언어 모델에서도 마찬가지입니다. 단어를 나타내는 숫자가 많을수록 다음 숫자에 대한 추측이 더 정확해집니다. 따라서 어떤 의미에서는 이것이 대규모 언어 모델이 하는 일의 전부입니다. 다음 단어, 더 정확하게는 이전 숫자에서 다음 숫자를 추측할 뿐입니다. 따라서 큰 언어 모델이라고 부르는 것은 사실 조금 잘못된 표현입니다. 큰 숫자 모델 또는 큰 시퀀스 모델이라고 부르는 것이 더 정확할 것입니다. 왜냐하면 단어를 숫자로 바꿀 수 있지만 모든 것이 숫자인 것으로 밝혀졌기 때문입니다. 픽셀을 숫자로 바꿀 수도 있고, 실제로 픽셀은 숫자입니다. 따라서 이러한 대규모 언어 모델에 픽셀이나 이미지를 넣으면 이전 픽셀, 이전 픽셀 번호, RGB 값을 기반으로 다음 픽셀을 매우 잘 추측할 수 있습니다.
예를 들어 누군가가 말하는 오디오 샘플을 넣을 수 있습니다. 그냥 숫자일 뿐입니다. 이러한 숫자를 가지고 그 숫자로 훈련하면 대규모 언어 모델이 오디오 시퀀스의 다음 샘플을 매우 잘 추측할 수 있습니다. 언어 모델이 아니라는 점을 기억하세요. 실제로는 숫자 모델일 뿐입니다. 그리고 세상의 모든 것은 숫자로 변환될 수 있습니다. 따라서 시퀀스라면 무엇이든, 데이터가 많다면 이 모델은 해당 시퀀스에 대한 통계를 학습하고 다음 숫자를 정확하게 추측할 수 있습니다. 어떤 의미에서 이제 대규모 언어 모델이 실제로 무엇을 하는지 이해했지만 여기에는 이해해야 할 문제가 있습니다. 이렇게 간단한데 왜 이전에는 이런 일이 일어나지 않았을까요? 이론적으로는 간단하지만 통계만 따옴표로 묶어 다음 숫자를 추측하는 것이기 때문입니다. 많은 단어의 긴 문맥 조합에 대해 다음 숫자를 추측하는 것은 매우 계산 집약적인 작업이라는 것이 밝혀졌습니다.
따라서 모든 단어에 대해 사전의 다른 모든 단어가 얼마나 가능성이 있는지에 대한 백분율이 있는 Excel 시트로 돌아가 보겠습니다. 영어 사전에는 약 60만 개의 단어가 있다고 말씀드렸지만, 5만 개는 대규모 언어 모델이 실제로 사용하는 어휘의 대략적인 크기이므로 단순화하여 가장 많이 사용되는 5만 개만 가져와 보겠습니다. 이제 더 작게 만들었습니다. 이제 50,000개의 단어 행이 있고 모든 단어에 대해 50,000개의 열이 있습니다. 즉, 50,000개의 50,000배입니다. 실제로는 꽤 큰 Excel 시트입니다. 25억 셀이나 되는 셈이죠. 다루기 힘든 엑셀 시트지만 그래도 할 수 있는 작업입니다. 셀이 많지만 그래도 할 수 있습니다. 하지만 이것은 한 단어로 설명할 수 있습니다. 한 단어로만 추측해야 하는 경우, 추측이 꽤나 틀릴 수 있다는 점을 기억하세요. 이제 두 개의 단어가 있다고 가정해 봅시다. 이제 두 단어의 조합이 있으므로 행 50,000개에 열 50,000개를 곱한 다음 다시 50,000개를 곱하게 됩니다. 이제 스프레드시트에는 125조 개에 달하는 셀이 있고, 이는 풀 수 있는 범위를 넘어섰습니다. 앞서 말했듯이 이론은 믿을 수 없을 정도로 간단하지만 실제로는 매우 어렵습니다. 실제로 이러한 통계를 계산하는 것은 매우 어렵습니다.
이론은 믿을 수 없이 단순한데 실제 이걸 계산하기에는 계산량이 어마어마해... 계산법은 아주 단순한데 그 양이 너무 많아서 엄두가 안나는거다.Enter Transformer
트랜스포머를 입력하세요. 2017년에 구글의 머신러닝 과학자들이 발표한 'Attention is All You Need (주의력만 있으면 된다)'라는 논문이 있습니다. 이 논문에서는 이 이미지에서 볼 수 있는 트랜스포머라는 특정 머신 러닝 아키텍처를 제안했습니다. 이 이미지를 전혀 이해할 필요는 없으니 걱정하지 마세요. 그냥 '아, 저거 트랜스포머구나'라고 말하면 멋지게 보일 것입니다. 여러분이 정말로 이해해야 할 것은 이 문제를 해결할 수 있는 영리한 방법을 찾아냈다는 것입니다. 트랜스포머는 수천 개의 단어를 처리할 수 있는 것으로 밝혀졌습니다. 실제로 수만 개, 최근에는 다음 단어를 추측하기 위해 10만 개 정도의 단어를 문맥으로 처리할 수 있습니다. 10만 단어라고 생각해 보세요. 말 그대로 사람이라면 책 한 권을 다 읽고 마지막 페이지에 있는 마지막 단어만 찾아내야 한다는 뜻입니다. 하지만 여러분은 책 전체를 문맥으로 삼아 빠진 단어를 추측할 수 있습니다. 그리고 여러분의 추측은 놀랍겠죠? 문맥이 너무 많기 때문에 거의 완벽하게 맞힐 수 있을 테니까요. 그 빠진 단어가 매우 가능성이 희박한 단어라고 해도 이야기가 끝나고 그녀도 갔다고 가정해 봅시다. 그리고 아마도 정확한 단어는 명왕성이지만 소설의 나머지 부분이 우주에 관한 것이었고 그녀가 그곳으로가는 중이라는 것을 알고 있기 때문에 당신은 그것을 알 것입니다.
따라서 컨텍스트가 있기 때문에 가능성이 매우 낮지만 정확한 추측을 할 수 있습니다. 이것이 바로 트랜스포머, 즉 트랜스포머 머신러닝 모델이 해결하는 문제입니다. 이 논문이 주의력이라고 불리는 이유는 이 문제를 해결하는 방식이 말 그대로 모델이 수학적으로 주의를 기울여 단어마다 다른 가중치를 부여할 수 있기 때문입니다. 모든 단어에 동일한 가중치를 부여하지 않으므로 Excel 시트와 같은 방식으로 문제가 폭발하지 않습니다. 추측에 따라 다른 단어에 주의를 기울일 수 있습니다. 이에 대해 더 자세히 알고 싶으시면 관련 내용을 읽어보시면 되겠지만, 여기서 꼭 이해해야 할 것은 트랜스포머 모델이 매우 영리한 방식으로 컨텍스트 문제를 해결한다는 점입니다. 그리고 수학이 그렇게 어렵지 않다는 것을 두려워하지 마세요. 실제로는 약간의 선형 대수학과 약간의 미적분학이 전부이지만 어려운 내용은 아닙니다. 이것은 양자역학이 아닙니다. 그러니 양자역학이 궁금하다면 양자역학으로 가보셔도 좋지만, 모두가 이야기하는 것은 바로 이것입니다. 이것이 바로 트랜스포머 모델입니다. 단순히 기계가 인터넷 규모에서 이러한 통계를 수행할 수 있도록 한 것입니다.
자, 이제 꽤 멀리 왔네요. 이제 누락된 단어를 아주 잘 맞추는 기능이 생겼습니다. 이 문장을 예로 들어 보겠습니다. 제 개 이름은 벤입니다. 그는 큰 발을 가진 큰 개입니다. 벤은 저와 술래잡기를 좋아합니다. 큰 언어 모델이 fetch라는 단어를 숨기려고 한다고 가정해 봅시다. 그래서 그것은 단어 놀이에 있고 다음 단어를 추측해야 합니다. 플레이라는 단어가 나오는 모델에서 가장 잘 맞히는 단어는 아마도 축구를 하는 것이라고 상상할 수 있습니다. 인터넷에서 가장 흔한 단어이기 때문이죠. 플레이 농구일 수도 있습니다. 플레이 페치는 매우 드문 단어입니다. 하지만 이제 문맥이 있으니 언어 모델에서 누가 놀고 있는지 말할 수 있겠죠? 벤이죠. 그리고 더 거슬러 올라가서 내 개 이름이 벤이라고 말합니다. 그는 큰 개입니다. 이제 벤이 개라는 것을 알고 있습니다. 이제 갑자기 그 문맥에서 가장 가능성이 높은 다음 추측은 아마도 그 일련의 숫자 뒤에 오는 가장 일반적인 단어 또는 숫자이기 때문에 fetch일 것입니다. 이제 우리는 누락된 단어를 매우 잘 추측하는 주의 기반 변환기를 갖게 되었으며, 인터넷의 전체 텍스트 코퍼스 (corpus) 를 스스로 학습할 수 있습니다.
트랜스포머가 문맥을 이용해서 기존에 만든 언어 모델에 가중치를 주고 상황에 맞는 단어 선택을 할 수 있다는 것...거의 다 왔습니다. 이제 언어를 생성할 수 있습니다. 어떻게 언어를 생성할 수 있을까요? 숫자 30과 5가 있는 문장이 있다고 가정해 봅시다. 이제 이 모델을 학습시키면 인터넷에서 본 모든 것을 바탕으로 가장 가능성이 높은 다음 단어가 무엇인지 말하기만 하면 됩니다. 아마도 how are 다음에 나올 가능성이 가장 높은 단어는 'how are'이거나 30과 5 다음에 나올 가능성이 가장 높은 숫자는 'you'라고 말할 것입니다. 그런 다음 you라는 단어를 추가하고 방금 생성한 텍스트를 모델에 다시 입력한 다음 이 텍스트가 주어졌을 때 가장 가능성이 높은 다음 단어는 무엇일까요? 그러면 모델이 '좋아요, 안녕하세요 다음에 가장 가능성이 높은 단어는 I입니다'라고 말하며 이를 추가합니다. 그런 다음 문장을 가져와서 다시 그 자체에 다시 입력한 다음, 이 문장 다음에 가장 가능성이 높은 다음 단어는 무엇일까요? 아마도 다음 단어로 가장 가능성이 높은 것은 am이라고 말할 것입니다. 그리고 그것을 추가합니다. 이제 이 문장 자체에 다음 단어가 무엇일 가능성이 가장 높은지 물어봅니다. 아마 괜찮을 것입니다. 이렇게 문장을 만들면 영원히 계속할 수 있습니다. 따라서 이러한 언어 모델을 사용하면 텍스트와 숫자를 입력한 다음 다음 숫자를 입력하고, 그 숫자를 가져와서 다시 입력하고, 가장 가능성이 높은 다음 숫자를 추가하고, 그 숫자를 가져와서 다시 입력하고, 영원히 계속 입력할 수 있습니다. 이런 것을 자동 회귀 모델이라고 하는데, 이 단어를 들어본 적이 있으신가요? 문맥을 파악하여 가장 가능성이 높은 단어 또는 가장 가능성이 높은 다음 단어 중 하나를 추측합니다.
이제 이와 같은 작업을 수행할 수 있습니다. 예를 들어 셰익스피어 텍스트의 절반을 큰 언어 모델에 입력하면 언어 모델에 다시 긴 숫자 계열이 되지만 인터넷에서 이 숫자를 본 적이 있을 것입니다. 인터넷에는 셰익스피어 텍스트, 셰익스피어 또는 셰익스피어 텍스트가 많이 있습니다. 그래서 '이봐, 나는 이 숫자를 알아. 다음에 뭐가 나올지 알아요. 따라서 가장 가능성이 높은 다음 숫자를 계속해서 반복하면 셰익스피어의 희곡과 매우 비슷하거나 말 그대로 셰익스피어 희곡의 나머지 부분에 해당하는 것을 얻을 수 있습니다. 꽤 유용하죠. 이제 우리는 텍스트를 가져와서 인터넷에 실제로 존재한다면 매우 가능성이 높은 것뿐만 아니라 완전히 동일한 것으로 완성할 수 있는 이 기능을 갖게 되었습니다. 똑같은 셰익스피어 희곡을 많이 본다면 셰익스피어 희곡의 정확한 단어가 가장 가능성이 높은 다음 숫자가 되겠죠?
트랜스포머는 맥락을 이용하기 위해 가중치를 부여한다고 했고...What about Creativity? (temperature)온도가 높으면 선택 범위가 넓어지고 낮으면 선택의 폭이 좁아지는 것... 선택 범위가 넓어지니 다소 엉뚱한 단어를 선택할 수도 있고 이것이 곧 창의성과 연결된다는 것... 창의성은 기존의 틀을 깨는 것이라고 본다면 이런 논리는 맞는 듯...
그렇다면 창의성은 어떨까요? 방금 ChatGPT는 인터넷에서 본 것을 반복하지 않는다고 말씀드렸습니다. 방금 전에 존재하지 않는 시를 쓸 수 있고, 새로운 텍스트를 쓸 수 있다고 말씀드렸습니다. 그렇다면 어떻게 작동할까요? 이를 이해하려면 한 단계 더 깊이 들어가야 하지만 거의 다 왔으니 조금만 기다려주세요. 이제 온도라는 개념을 이해해야 합니다. 앞서 말씀드린 것처럼 컴퓨터에는 30과 5라는 숫자가 있습니다. 그리고 우리는 가장 가능성이 높은 다음 단어인 당신이라고 말했습니다. 온도가 0인 경우입니다. 0은 가장 가능성이 높은 다음 단어를 가져간다고 가정해 봅시다. 그리고 그 다음 가장 가능성이 높은 다음 단어인 I, 가장 가능성이 높은 다음 단어인 am, 가장 가능성이 높은 다음 단어인 괜찮습니다. 따라서 이 단어가 항상 가장 가능성이 높기 때문에 이 문장을 얻게 되고 실제로 매번 이 문장을 얻게 될 것입니다. 따라서 대규모 언어 모델은 확률적이어서 매번 다른 답변을 제공한다는 오해가 있는데, ChatGPT를 사용하면 같은 쿼리에 대해서도 실제로 매번 다른 답변을 얻을 수 있습니다.
하지만 실제로 대규모 언어 모델은 매우 결정론적입니다. 온도가 0인 경우 가장 가능성이 높은 다음 단어를 선택하면 당연히 통계는 변하지 않습니다. 항상 똑같은 문장을 얻을 수 있습니다. 이러한 대규모 언어 모델에서 일어나는 일은 인터넷에서 이미 알고 있는 것을 반복하는 것이 아니라 지루하지 않고 조금 더 창의적이기를 원할 때 실제로는 다른 것을 수행한다는 것입니다. 가장 가능성이 높지는 않지만 가능성이 높은 것을 선택할 수 있습니다. 즉, 100% 가능성이 가장 높은 단어, 즉 이 경우에는 매번 '당신'이 되는 단어를 선택하는 대신, 가장 가능성이 높은 단어를 중심으로 조금씩 무작위 추출한다고 생각하면 됩니다. 따라서 가능성이 높은 단어 중 하나를 선택하되 반드시 가장 가능성이 높은 단어는 선택하지 않습니다. 따라서 여전히 가능성이 매우 높은 단어를 선택하게 됩니다. 왜냐하면 가능성이 매우 높은 단어를 선택하더라도 그 단어가 가능성이 있기 때문에 문장은 여전히 문법적으로 의미가 있고, 기계 학습 모델의 경우 단어 또는 숫자가 가능성이 있기 때문에 의미론적으로도 의미가 있기 때문입니다. 따라서 가장 가능성이 높은 단어인 you가 아니라 두 번째로 가능성이 높은 단어인 they를 사용한다고 가정해 보겠습니다.
최상위 가능성 하나만 선택하면 답은 정해져 있는 것이지만 상위 수준에서 랜덤으로 고른다면 의미는 변하지 않는 거니까 다 통하게 되고 단어 선택의 자유도는 높아지고...이제 실제로 인터넷에 존재하지 않는 텍스트를 만들었습니다. 통계적으로 어떻게라는 단어 뒤에 오는 문장을 골랐기 때문에 문장은 의미가 있을 수 있지만 인터넷에 존재했던 것을 복사한 것은 아닙니다. 그것은 정의상 새로운 것입니다. 그리고 이것을 온도 올리기라고 합니다. 온도를 높이면 높일수록 가장 가능성이 높은 단어를 중심으로 무작위 추출이 이루어집니다. 그리고 정상에 아주 가깝게 머물러도 여전히 비슷할 것이라고 상상할 수 있습니다. 새로운 것이 될 것입니다. 우연이 아니라면 인터넷에 존재하지 않았을 것이지만, 인터넷에 존재했던 것을 복사한 것은 아닙니다. 새롭기는 하겠지만 인터넷에 존재하는 것과 매우 비슷할 것입니다. 그리고 온도를 높이면 높일수록, 무작위화를 많이 하면 할수록 가장 가능성이 높은 단어에서 멀어질수록 모델이 더 창의적으로 변할 것이라고 상상할 수 있습니다. 하지만 너무 멀리 가면 가능성이 희박한 단어를 선택하기 시작합니다. 따라서 온도를 너무 높이면 '동물은 어때요'라고 말할 수도 있습니다. 그래서 말 그대로 온도를 너무 높이면 모델이 매우 창의적으로 보이다가 약간 엉뚱하고 미친 것처럼 보이기 시작합니다. 인간에 대한 매우 흥미로운 비유라고 생각합니다. 가장 창의적인 인간은 매우 창의적인 것과 매우 창의적이지 않은 것의 경계선 어딘가에 있는 경우가 많으며, 때로는 미친 사람처럼 보이기도 합니다. 우연의 일치일 수도 있습니다. 아닐 수도 있습니다. 어쩌면 그들은 우리보다 더 높은 온도를 가지고 있을지도 모르죠. 언젠가는 알게 되겠죠.
How do you steer it이렇게 해서 얻은 것이 대규모 언어 모델 LLM 이고 이걸로 GPT-3 가 나왔지. 그런데 이건 그냥 스테로이드 자동 완성 기능 수준이었다고... 그냥 그럴듯하게 자동 완성을 해나가는 기계...
좋아요. 이제 우리는 가장 가능성이 높은 텍스트로 텍스트를 완성할 수 있을 뿐만 아니라 온도를 조금만 높이면 실제로 이전에 존재하지 않았던 새로운 텍스트로 텍스트를 완성할 수 있는 대규모 언어 모델을 갖게 되었습니다. 이제 거의 다 왔습니다. 이것은 실제로 약 1년 반 전에 나온 GPT-3입니다. 그것은 일종의 스테로이드 자동 완성 기능이었습니다. 텍스트를 입력하면 매우 그럴듯하게 완성할 수 있었죠. 그리고 온도를 높이면 이전에 작성된 적이 없는 문장으로 완성할 수도 있었죠? 하지만 채팅 GPT는 아니었습니다. 이 기능을 사용해 본 사람들에겐 인용부호 없는 자동 완성 기능에 불과했습니다. 따라서 현재 우리가 어디에 있는지, 1년 반 전 OpenAI와 다른 회사들이 어디에 있었는지 생각해 볼 수 있는 방법은 이 GPT-3 단계를 기본 모델이라고 합니다. 어린아이 또는 철없는 십대라고 생각하면 됩니다. 세상에 대한 많은 지식을 가지고 있습니다. 텍스트를 완성할 수 있습니다. 존재하지 않았던 텍스트를 생성할 수 있지만 실제로 조작할 수는 없습니다. 형식도 지정할 수 없습니다. 따라서 여러분이 원하는 것은 단순히 문장을 완성하는 것이 아닌 채팅 GPT와 같은 것입니다. 실제로 질문에 대한 답변을 제공하는 것이죠. 또한 특정 영역에서 벗어나 다른 영역에 대해 이야기하도록 조정할 수 있기를 원할 수도 있습니다. 예를 들어 뼈를 만드는 방법에 대한 질문에는 대답하지 않기를 원할 수도 있습니다.
GPT-3 은 기본 모델로 이제 십대로 철없는 수준의 아이이며, 이 아이에게 질문과 답변, 그리고 피드백과 보상을 주면서 가이드를 해주어야 한다는거지...SFT & RLHF
(Supervised Fine-Tuning & Reinforcement Learning with Human Feedback)
그렇다면 마지막 단계에 도달하려면 어떻게 해야 할까요? 여기에는 두 가지가 필요합니다. 감독 미세 조정, 즉 SFT와 사람의 피드백을 통한 강화 학습이라고 하는 것입니다. 다시 말하지만, 평신도에 대한 음모, SFT와 RLHF입니다. 이것이 바로 사람들이 자신의 직업에서 멀어지게 하는 방법입니다. 그럼 실제로 어떤 의미인지 자세히 살펴보겠습니다. 다시 말씀드리지만, 그리 복잡하지 않습니다. 먼저 감독된 미세 조정부터 시작하겠습니다. 지금 우리가 가지고 있는 것은 일련의 숫자를 가지고 가장 좋은 다음 숫자를 추측할 수 있는 기계라고 했습니다. 이 기계가 바로 아이폰 자동 완성 기능입니다. 이제 인터넷에서 Q&A 문서가 있는 여러 문서를 가져온다고 상상해 보셨죠? 질문이 있고 다른 사람이 답변한 내용이 있습니다. 그것을 자동 완성하는 모델을 훈련시키면 질문이 있을 때마다, 이런 유형의 질문이 있을 때마다, 이런 유형의 질문이 있을 때마다 항상 답이 있었다는 패턴을 학습하게 됩니다. 따라서 운이 좋으면 기본 모델이라도 질문을 올리면 인터넷에서 질문과 답변 대화를 많이 본 경우 인터넷에서 꽤 흔한 숫자나 언어 패턴이기 때문에 실제로 답을 줄 수도 있습니다.
Q, 지구의 너비는 어떻게 되나요? 지구의 너비라고 하면 어떤 숫자로 대답할 수도 있겠죠? 그러나 예를 들어 수학 시험처럼 질문, 질문, 질문, 질문이 있고 답이없는 것처럼 인터넷에서 본 모든 문서에서 흔히 볼 수 있기 때문에 다른 질문으로 대답 할 수도 있습니다. 따라서 질문과 답변에 대한 지식이 있지만 결정적인 것은 아닙니다. 때로는 원하는 답을 얻을 수도 있습니다. 올바른 구조를 자동 완성하도록 요청하면 때로는 그렇지 않을 수도 있습니다. 따라서 감독을 통한 미세 조정은 기본 모델이 한 번에 한 단어 또는 토큰 하나를 숨겨서 말 그대로 인터넷의 모든 텍스트를 학습하는 것처럼 자체 감독을 하는 것입니다. 참고로 아시는 분들을 위해 하나의 토큰이 정확히 하나의 단어는 아니지만, 이 프레젠테이션에서는 하나의 토큰을 하나의 단어, 하나의 숫자라고 가정해 보겠습니다. 따라서 기본 모델은 모든 인터넷에서 스스로 학습합니다. 따라서 수조 개의 토큰과 텍스트를 학습합니다. 이제 다른 작업을 수행합니다. 소규모 지도 데이터 세트를 생성합니다. 지도 학습이란 무엇을 의미하나요? 자체 감독과는 달리 사람이 감독한다는 뜻입니다. 이제 원하는 형식의 문서를 여러 개 만들 수 있습니다. 항상 질문이 있고 항상 답변이 뒤따릅니다. 그리고 인터넷에 비하면 아주 적은 수, 예를 들어 10,000개의 문서를 작성한다고 가정해 보겠습니다.
SFT 라는 것은 질문과 답변을 제공해서 연습을 시키면서 미세 조정을 하면서 좀더 훈련하는 것이제 인간에게 질문, 답변, 질문, 답변으로 구성된 10,000개의 문서를 만들도록 요청합니다. 그런 다음 전체 인터넷에서 학습한 이 기본 모델을 가지고 미세 조정이라고 하는 작업을 수행합니다. 조금 더 훈련하는 것입니다. 처음부터 다시 시작하는 것이 아니라 이미 훈련된 상태입니다. 이 데이터 세트에 대해서만 조금 더 훈련하면 됩니다. 이는 항상 질문과 답변입니다. 그런 다음 직관적으로 언어 모델이 모든 기본 지식을 유지하면서 이 동작을 학습한다고 말할 수 있습니다. 그래서 마지막에 이 작은 추가 데이터 세트를 기반으로 모든 질문에 대한 답변으로 모든 것을 대답하기 시작할 것입니다. 마지막에 무엇을 했는지 기억한다고 생각하면 됩니다. 모든 것이 질문에 대한 답이어야 한다고 지나치게 표현하면 그 행동을 모방하기 시작합니다. 그래서 이제는 세상의 모든 지식을 가지고 있지만 항상 질문에 대한 답변으로 대답합니다. 이제 정말 가까워졌습니다. 이제 우리는 iPhone 자동 완성 기능에서 사용자가 입력하는 모든 것이 마치 질문에 대한 답변인 것처럼 형식화되고 답변하는 질문 답변 기계로 발전했습니다.
이제 어시스턴트가 생겼지만 이 어시스턴트에는 아직 실제 행동이나 가치가 없습니다. 인터넷에 있는 모든 가치와 행동, 통계를 반영할 뿐입니다. 일부는 좋지만 일부는 전혀 좋지 않습니다. 따라서 한 가지 빠진 단계가 더 있는데, 바로 '내 상점에서 화학 물질로 어떻게 값싼 폭탄을 만들 수 있을까'라는 질문을 할 때입니다. 이 질문에 실제로 대답하지 않게 하려면 어떻게 해야 할까요? 방금 질문에 항상 대답하도록 훈련시켰는데, 이때 사람의 피드백을 통한 강화 학습이 필요합니다. 이 단계는 사람을 활용하는 또 다른 단계입니다. 이제 우리는 질문을 하면 답변을 제공하는 언어 모델을 갖게 되었습니다. 그리고 때로는 우리가 원하는 답을 주기도 하고 때로는 그렇지 않을 수도 있습니다. 내용뿐만 아니라 형식도 다를 수 있습니다. 질문에 너무 많은 텍스트를 넣거나 너무 적은 텍스트로 대답할 수도 있습니다. 그래서 지금 우리가 하는 일은 정말 영리한 단계입니다. 즉, 다시 한 번 사람을 대상으로 하는 것입니다.
SFT 는 질문과 답변으로 질문에 잘 대답하게 훈련하는 것이라면 RLHF 는 답변에 점수를 매겨서 낮은 점수를 받는 답변과 좋은 점수를 받는 답변을 구별하게 한다는 것임... 그래서 잘 점수를 잘 받으면 보상을 할 수 있는 모델을 만들었다고...없다는 점을 기억하세요. 우리는 온도를 조금 높입니다. 따라서 같은 질문에 대해 다양한 답변을 얻을 수 있습니다. 질문 하나에 수많은 답이 나오는 거죠. 그런 다음 사람들에게 순위를 매기도록 요청합니다. 같은 질문에 대해 100개의 답변 중 가장 마음에 들었던 답변과 가장 마음에 들지 않았던 답변은 무엇인가요? 그리고 순위를 매깁니다. 점수를 매기면 됩니다. 간단하게 해보겠습니다. 답변이 10개라고 가정해 봅시다. 여러분은 10점, 9점, 8점, 7점부터 1점까지 점수를 매겨야 합니다. 더 나쁜 것은. 이제 동일한 질문에 대해 사람에 따라 좋은 답변이 어떻게 보이는지 알 수 있는 새로운 유형의 데이터 집합을 얻게 됩니다. 그리고 사람에 따라 나쁜 답변이 어떻게 보이는지, 그리고 그 중간은 어떻게 보이는지 알 수 있습니다. 따라서 이것은 새로운 유형의 데이터 집합입니다. 이제 다른 머신 러닝 모델 또는 엄밀히 말하면 언어 모델을 가져옵니다. 그리고 약간 다른 작업에 대해 학습시킵니다. 즉, 질문과 답변 중 하나를 가져와서 함께 입력한 다음 기계 학습 모델에 사람이 어떻게 점수를 매겼을지 추측하도록 요청하는 것입니다. 이 질문에 대한 답이 10점짜리 답이었을까요, 아니면 1점짜리 답이었을까요, 아니면 5점짜리 답이었을까요?
그런 다음 이 유형의 답변에 대해 인간이 10점을 주었을 것이라고 예측하는 데 능숙해질 때까지 훈련합니다. 이제 보상 모델이라는 것을 구축합니다. 보상 모델은 인간의 감독 데이터를 기반으로 인간이 이 답에 대해 어떻게 생각했을지 추측하는 데 능숙한 모델입니다. 자, 이제 거의 다 됐습니다. 이제 큰 언어 모델이 생겼습니다. 우리는 항상 마치 사람이 질문한 것처럼 대답하도록 매우 미세하게 조정했습니다. 이제 답변을 생성하지만 다양한 품질의 답변을 생성합니다. 이제 보상 모델이라는 또 다른 모델이 있는데, 이 모델은 답변을 보고 사람이 그 답변에 대해 어떻게 생각했을지, 좋은지 나쁜지 말할 수 있습니다. 이제 이 두 모델을 서로 연결하고 그냥 놔두면 됩니다. 이것이 강화 학습 부분입니다.
이제 다시 스스로를 감독할 수 있습니다. 질문을 받고 답변을 생성한 후 자체적으로 점수를 매겨 '저건 나빴어, 더 잘해야 해, 이렇게 해야 해'라고 말합니다. 그리고 그 답변에 점수를 매기고 '인간에 따르면 좋았어, 이걸 더 해야 해'라고 말합니다. 이제 보상 모델에 따라 스스로를 훈련시킬 수 있습니다. 이를 강화 학습이라고 합니다. 그리고 이것은 사람이 필요 없는 폐쇄형 시스템이기 때문에 사람이 원하는 형식뿐만 아니라 스타일과 말 그대로 사람이 원하는 값을 선택하면 정말 잘 대답할 때까지 수백만, 수천만, 수억 번 이 작업을 수행할 수 있습니다. 사람들이 이 모델이 어떻게 생각하는지, 그 값은 얼마인지 궁금해하기 때문에 흥미로운 질문이라고 생각합니다. 사실 기본 계층에서 모델의 값은 전체 인터넷의 평균에 불과합니다. 인터넷이 좋든 나쁘든 생각하는 것입니다. 하지만 강화 학습 단계는 실제로 특정 행동을 삽입하는 단계입니다. 그리고 그것은 실제로 매우 소수의 인간 그룹입니다. 따라서 이 모델이 작동하는 방식에 대한 많은 책임이 여기에 있습니다. 알겠습니다. 이것이 바로 ChatGPT입니다. 이제 어떻게 작동하는지 이해하셨겠죠? 과거에서 2023년까지 거슬러 올라갔네요. 어떻게 이런 것들이 튜링 테스트를 통과하는지 이해하셨죠? 그렇게 복잡하지는 않았죠? 적어도 인간에게 무한한 시간과 무한한 대형 엑셀 시트가 있다면 이 문제를 어떻게 해결할지 상상할 수 있을 것입니다.
강화 학습에는 인간 판단과 행동이 개입된다는 것...Why did no one see it coming?
이제 한 가지 의문은 왜 모두가 그렇게 놀랐을까요? 그리고 왜 아무도 예상하지 못했을까요? 일부 사람들은 예상했다고 주장하지만 대부분은 예상하지 못했습니다. 머신러닝 과학자들조차도 이런 일이 얼마나 빨리 일어났는지에 대해 일반적으로 매우 놀라워하고 있습니다. 그리고 머신러닝 모델 자체는 그리 새로운 것이 아닙니다. 2017년의 트랜스포머 아키텍처는 분명 혁신이었습니다. 하지만 언어 모델은 오래전부터 존재해 왔고 모델링 언어도 오래전부터 존재해 왔습니다. 그렇다면 전문가를 비롯한 참석자들을 놀라게 한 것은 무엇이었을까요? 바로 규모와 속도였습니다. 따라서 다음 단어를 추측하는 개념은 최근에 발명된 것이 아닙니다. 사람들은 오랫동안 이를 시도해 왔습니다. 그리고 트랜스포머 아키텍처가 등장하면서 대규모로 이를 수행하는 것이 더 쉬워졌습니다. 하지만 분명하지 않았던 것은 이 단순한 작업을 훨씬 더 많이 수행하면 완전히 새로운 동작, 즉 이머전트 동작이 발생하기 시작한다는 것이었습니다. 예를 들어 대규모 언어 모델이 수학과 같은 특정 작업을 잘 수행하지 못하는 것을 볼 수 있습니다. 그런데 아키텍처를 변경하지 않고 확장하기만 하면 갑자기 잘 작동하기 시작했습니다. 많은 사람이 새로운 수학적 또는 아키텍처적 혁신이 필요하다고 생각했던 새로운 기능을 얻을 수 있다는 점이 놀라웠습니다. 그래서 규모만으로도 성능이 향상되었다는 것만으로도 매우 놀라웠습니다. 머신러닝을 모르는 대부분의 사람들이 놀라워하는 또 다른 점은 바로 창의성입니다.
온도 개념은 머신 러닝 업계 사람들에게는 놀랍지 않은 개념으로, 오래전부터 존재해 왔습니다. 하지만 이 개념은 이미 존재했지만, 머신러닝 전문가들조차도 이 개념이 실제로 인간의 창의성과 매우 흡사하게 확장된다는 사실에 놀랐습니다. 이것이 우리가 하는 일인지는 매우 불분명하지만 결과는 확실히 우리가 하는 일과 비슷합니다. 즉, 우리가 가진 창의성의 유형을 얻었거나 우리가 가진 창의성의 유형을 시뮬레이션하는 데 성공했거나 둘 중 하나죠. 그래서 사람들은 놀랐습니다. 마지막으로 한 가지 아쉬웠던 점은 조율하는 능력이었습니다. 특정 동작을 부여하고 조력자가 될 수 있도록 감독을 통해 미세 조정한 다음 실제로 사용할 수 있도록 강화 학습을 하는 것이죠. GPT-3는 자동 완성 기능으로는 정말 멋졌지만 약간 불안정했습니다. 그리고 Q&A 기계였기 때문에 감독하에 미세 조정을 하면 인터페이스가 작동할 수 있게 되었지만 여전히 불안정했습니다. 그리고 사람의 피드백을 통한 강화 학습은 현실에서 실질적으로 유용했습니다. 이것이 바로 잠금 해제였습니다. 여기서 정말 흥미로운 것은 우리가 마침내 지능을 해독했다는 사실과 그것이 얼마나 복잡했는지에 대한 놀라움이 아닙니다. 사람들을 놀라게 하는 것은 사실 그 반대입니다. 우리가 인텔리전스를 해독한 것이 매우 간단했다는 것입니다. 거의 도발적일 정도로 간단합니다. 그래서 약 1년 전만 해도 채팅 GPT나 GPT-3에 대해 이 모델들은 종종 통계 앵무새 (statistical parrots) 라고 불렸죠. 이는 경멸적인 의미의 용어였습니다. 또는 실제로 GPT-2에 대해 사람들은 인터넷에서 나온 통계를 앵무새처럼 되풀이할 뿐이라고 말하기도 했습니다. 이건 진짜 지능이 아니라고요. 사실 그다지 인상적이지 않아요. 유용할지 모르지만 인상적이진 않죠.
강화 학습이 AI 잠재력을 폭발시킨 잠금 해제였다는 거네... 통계 앵무새를 엄청난 창의성을 가진 언어의 신으로 만들었으니... 지능 intelligence 비밀을 풀었고 그것이 엄청나게 간단하다는 것도 매우 공감됨하지만 GPT-3, GPT-3.5, 채팅 GPT, GPT-4가 등장하면서 '이런 것들은 그냥 통계적 앵무새가 아닌가'라는 의문이 '젠장, 우리가 그냥 통계적 앵무새라면 어떡하지'라는 질문으로 바뀌었습니다. 그래서 우리 자신을 비춰보는 거울이 되기도 합니다. 그리고 많은 사람들이 자신이 어떤 사람인지에 대해 생각하기 시작하는데, 이는 매우 흥미로운 일이라고 생각합니다. 자, 첫 번째 파트는 끝났습니다. 대규모 언어 모델이란 무엇이고 채팅 GPT가 어떻게 작동하는지 살펴봤습니다. 이제 여러분도 대부분의 사람들만큼이나 실제로 어떤 일이 일어났는지에 대한 직관을 가지고 있다고 생각합니다. 이제 적어도 채팅 GPT와 같은 것이 어떻게 작동하는지, 왜 그렇게 작동하는지, 질문과 답변을 어떻게 이해할 수 있는지, 폭탄을 만드는 방법을 물었을 때 왜 실제로 알려주지 않는지에 대한 직관을 가지셨기를 바랍니다. 오히려 큰 언어 모델로서 그 질문에 대답하지 않겠다고 말합니다. 이것이 바로 인간의 피드백을 통한 강화 학습 부분입니다. 언어는 숫자로 표현할 수 있기 때문에 언어가 일종의 통계라는 것을 이해하셨을 겁니다. 그리고 어쩌면 우리에게도 마찬가지일 수 있습니다. 그리고 숫자는 통계에 불과합니다.
Everything is a Vector (King, Queen..., 스포티파이 리스트로 벡터...)
하지만 제가 정말 멋지다고 생각하는 한 가지를 더 알려드리고 싶습니다. 다시 말하지만, 지나치게 복잡하게 만들었습니다. 사실 이해하기가 그렇게 어렵지는 않습니다. 하지만 일단 이해하고 나면 마음이 조금 놀라게 됩니다. 벡터, 벡터 공간, 임베딩, 코드, 분산 표현 등 이런 멋진 단어에 대해 들어본 적이 있을 텐데, 그 개념을 완전히 이해하지는 못하셨을 겁니다. 이제 이 용어들이 무엇인지 설명해드리겠습니다. 다시 한 번 말씀드리지만 매우 간단한 개념이지만 여전히 매우 멋진 개념이라는 것을 보여드리려고 합니다. 언어를 숫자로 표현할 수 있고, 사전의 모든 단어에 고유 번호를 부여할 수 있다고 말씀드렸습니다. 하지만 단어에 하나의 숫자를 부여하는 대신 그보다 조금 더 나은 방법으로도 표현할 수 있다는 것이 밝혀졌습니다. 즉, 단어를 가져와서 R이라는 단어가 숫자 54라고 말하는 대신 숫자 세 개 또는 네 개를 사용하여 R이라는 단어를 표현할 수 있다는 것이 무슨 뜻입니까? 제가 보여드리겠습니다. 아주 간단한 세상을 예로 들어보겠습니다. 우리가 3차원만 있는, 3차원만 있는 우주에 살고 있다고 가정해 봅시다. 사물은 왕족이거나 남성성이거나 여성성이거나 둘 중 하나죠. 매우 단순화된 우주입니다. 모든 것이 3차원으로만 이루어져 있습니다.
King 을 숫자 하나로 표현하는 것이 아니라 왕족성, 남성성, 여성성이라는 여러 개 차원으로 표현한다는 것...이제 이 우주에서 예를 들어 왕과 같은 단어를 가져와서 왕이 숫자 29라고 말하는 대신 왕이라는 단어에 이러한 차원이 얼마나 들어 있는지 말할 수 있습니다. 따라서 왕이라는 단어는 거의 100%의 왕족성을 가지고 있으므로 0.99라고 말할 수 있습니다. 통계에서 100%인 것은 없습니다. 따라서 1은 100%, 0은 0%를 의미합니다. 그래서 99는 거의 100% 왕족이라는 뜻이죠? 왕은 거의 항상 왕이기 때문입니다. 하지만 왕이라는 단어에는 남성성이 매우 높습니다. 거의 100%에 가깝죠. 모르죠. 지금까지 대부분의 왕은 역사적으로 남성이었다고 생각해요. 그리고 여성성은 낮습니다. 아마 0은 아니겠지만 통계적으로 평균적으로 낮을 겁니다. 그래서 0.05입니다. 이제 왕이라는 단어에 대해 하나의 숫자 대신 세 개의 숫자가 있으며, 이는 해당 단어가 어느 정도인지에 대한 몇 가지 차원에 해당합니다. 이제 다른 단어를 예로 들어보겠습니다. 퀸을 예로 들어 보겠습니다. 여왕도 100% 왕족이죠? 여왕은 거의 항상 왕족입니다. 남성성은 매우 낮으므로 0.05, 거의 0에 가깝고 여성성은 0.98로 매우 높다고 가정 해 보겠습니다. 다른 단어인 여성을 예로 들어 보겠습니다. 여성은 왕족일 수 있지만 통계적으로 전체 인구에서 차지하는 비율은 매우 낮습니다. 남성성은 매우 낮고 여성성은 매우 높은 거의 0%에 가깝습니다. 프린세스라는 단어를 예로 들어보겠습니다. 공주는 거의 항상 왕족이기 때문에 흥미롭습니다. 왕족의 비중이 매우 높죠. 일반적으로 남성적이지 않고 여성성이 매우 높습니다.
자, 이제 이 네 단어는 하나의 숫자가 아니라 어떤 차원을 나타내는 숫자로 설명됩니다. 그리고 이 단순한 우주에는 왕족과 남성성, 여성성의 세 가지 차원만 존재합니다. 따라서 이제 우리는 이 단어들을 하나의 숫자가 아니라 여러 개의 숫자로 설명하며, 이 숫자들은 실제로 이 단어에 어떤 차원의 어떤 것이 얼마나 들어 있는지를 나타냅니다. 이 단순한 우주에는 왕족, 남성성, 여성성이라는 세 가지 차원이 있을 뿐입니다. 하지만 앞서 설명한 것처럼 이 세 가지 차원 대신 말 그대로 영어 사전 전체를 차원으로 삼는다고 쉽게 상상할 수 있습니다. 따라서 나이라는 차원이 있을 수 있는데, 1이 100% 노년이고 0이 젊은 나이라면 왕은 0.7, 70%의 나이로 보통 나이가 많다고 말할 수 있습니다. 여왕은 0.6으로 평균적으로 조금 더 젊습니다. 여성은 말 그대로 0.5, 50%로 그 중간이고, 공주는 보통 젊기 때문에 0.1이 될 것입니다. 그리고 영어 사전을 찾아보면 인간으로서 영어 사전의 모든 단어가 영어 사전의 다른 모든 단어에 얼마나 많은 비율을 차지하는지 직감할 수 있습니다. 이해가 되시나요? 예를 들어 왕이라는 단어를 가지고 최악의 경우 60만 개의 단어를 가지고 왕, 왕족, 남성성, 여성성, 나이, 자동차 등 0%가 될 수 있는 단어가 얼마나 되는지 백분율을 매기려고 합니다. 따라서 대부분은 실제로 0%가 될 것입니다. 하지만 매우 긴 벡터를 상상할 수 있습니다. 모든 단어가 다른 모든 단어에 얼마나 포함되어 있는지에 대한 백분율이 있습니다.
따라서 600,000개의 숫자로 이루어진 벡터가 될 것입니다. 하지만 실제로는 그렇게 하지 않습니다. 이러한 모델에는 일반적으로 약 1,000개의 차원이 있으며, 가장 유용한 차원을 선택하는 방식은 나중에 다시 설명하겠습니다. 하지만 제가 60만 개로 휠링하는 것 같다고 궁금해하신다면 사실이라는 점을 알아두면 좋을 것 같습니다. 모든 단어를 설명하는 약 1,000개의 차원과 그 단어에 어떤 것이 얼마나 들어 있는지 설명하는 차원이 있을 것입니다. 하지만 다시 원리를 설명하기 위해 3차원만 있는 단순한 우주로 돌아가 봅시다. 이제 우리는 이 단어들이 이 세 가지 차원을 얼마나 가지고 있는지를 설명하는 단어들을 가지고 있습니다. 이제 우리는 정말 멋진 일을 할 수 있습니다. 언어가 숫자로 표현되기 때문에 실제로 수학을 할 수 있습니다. 제가 보여드리죠. 이제 우리는 3차원의 우주를 가지고 있습니다. 단어를 하나 가져와서 그 단어의 벡터를 구합니다. 예를 들어 왕은 거의 100% 왕족, 거의 100% 남성성, 거의 0% 여성성을 가진 단어입니다. 그런 다음 말 그대로 남자를 뺍니다. 왕에서 남자를 빼는 거죠. 여기서 계산을 해봅시다. 로열티는 어떻게 될까요? 왕에 대한 로열티 99%에서 남성에 대한 로열티 0.01%를 뺀 값입니다. 즉, 로열티는 0.98%입니다. 왕의 남성성 99%에서 남자의 남성성 99%를 뺀 것이죠. 이제 남성성은 0%입니다. 그리고 우리는 0.05%의 여성성에서 0.05%의 여성성을 뺀 0.05%의 여성성을 가졌죠. 그래서 여성성은 0%입니다. 그래서 왕에서 남자를 빼고 새로운 단어 벡터를 얻었습니다.
공간에 벡터로 표현하면 거리 계산을 할 수 있다... 이것이 벡터가 흥미롭고 유용한 이유. 벡터는 어떤 양을 인코딩하기 때문에 흥미로와...이 단어는 무엇일까요? 100% 왕족이지만 성별이 없는 것은 무엇일까요? 왕족, 순수한 왕족입니다. 좋아요, 이제 새로운 단어가 생겼네요. 순수한 로열티에 여성을 추가하면 어떻게 될까요? 계산을 해봅시다. 98%의 로열티에 여성에 2%의 로열티가 더해집니다. 즉, 말 그대로 100%의 로열티를 얻게 됩니다. 남성성은 0%에 남성성이 0.01%이므로 남성성은 거의 0%에 가깝습니다. 0%의 여성성과 99.9%의 여성성을 더하면 거의 100%의 여성성이 됩니다. 이제 우리는 거의 100% 남성성과 거의 100% 여성성이라는 새로운 단어 벡터를 갖게 되었습니다. 이게 뭐죠? 여왕입니다. 이제 갑자기 왕에서 남자를 빼고, 남자를 더하고, 여자를 더하면 여왕이 됩니다. 이제 말 그대로 단어로 수학을 하는 셈이죠. 이것이 바로 벡터가 흥미롭고 유용한 이유입니다. 벡터는 어떤 것의 양을 인코딩하기 때문에 정말 유용할 수 있습니다. 이제 그 방법을 보여드리겠습니다. 하지만 먼저 실제로 이 작업을 어떻게 수행할 수 있을까요? 이론적으로는 그냥 앉아서 이 비율을 추측할 수도 있습니다. 실제로 방금 그렇게 했습니다. 직관적으로 볼 때, 사람이 할 수 있다면 컴퓨터도 이 작업을 수행할 수 있을 것입니다. 하지만 통계적으로 어떻게 할 수 있을까요? 역시 인터넷이 있죠.
여기 한 가지 방법이 있습니다. 인터넷 전체 또는 위키피디아를 예로 들어 학습하고자 하는 단어가 있다고 가정하고, 이 경우 초점 단어가 학습 대상이라고 가정하면 다른 단어가 문장에서 얼마나 가까운지 말하기만 하면 됩니다. 예를 들어, 이 문장에서는 고품질 분산 벡터를 학습하는 효율적인 방법입니다. 학습이라는 단어 바로 옆에 for와 high라는 단어가 있는 것을 볼 수 있습니다. 이는 기본적으로 말 그대로 학습이라는 단어에 가깝기 때문에 컴퓨터가 높은 점수를 준다는 뜻입니다. 반면 비효율과 분산 벡터라는 단어는 더 멀리 떨어져 있습니다. 따라서 더 낮은 점수를 받게 됩니다. 따라서 인터넷의 모든 문서를 살펴보고 이 단어에 대해 인터넷에서 이 단어와 정말, 정말 가까운 단어가 무엇인지 말하는 간단한 방법을 사용한다면? 아마도 이 단어와 관련이 있을 것입니다. 따라서 높은 비율을 차지할 것입니다. 인터넷의 모든 문서에서 이 단어와 멀리 떨어져 있는 단어는 낮은 비율을 차지합니다. 이제 LLM과 마찬가지로 이러한 통계를 학습하고 이러한 벡터를 학습하는 확장 가능한 통계 방법을 갖게 되었습니다. 이제 단어 벡터가 무엇인지뿐만 아니라 인터넷의 모든 단어에 대한 단어 벡터를 문장에서 다른 단어와 얼마나 가까운지에 따라 자동으로 학습하는 방법에 대해 직관적으로 이해할 수 있기를 바라며, 여러분은 이제 단어 벡터가 무엇인지에 대해 직관적으로 이해할 수 있기를 바랍니다.
이제 벡터가 무엇인지 어느 정도는 알겠지만 왜 유용한가요? 예를 들어 위키백과를 모두 살펴보고 이렇게 하면 3차원만 있는 단순한 3차원 우주에서 왕성, 남성성, 여성성이 있고, 예를 들어 왕성은 거의 1, 남성성은 거의 1, 여성성은 거의 0에 해당하는 벡터 킹이 있다고 생각하면 됩니다. 말 그대로 이 단순한 3차원 공간에서 특정 방향을 가리키는 벡터라고 생각하면 됩니다. 또는 다른 방식으로 생각하면 그 공간의 특정 위치에 있다고 생각할 수도 있습니다. 그래서 생각해 보면 비슷한 단어들, 즉 크기가 비슷한 단어들은 실제로 이 벡터 공간에서 같은 방향을 가리키거나 서로 가깝게 위치하게 되겠죠? 그래서 왕과 여왕이라는 단어는 둘 다 로열티 가치가 높기 때문에 서로 가까워질 것이라고 방금 말했습니다. 이 두 단어는 공통점이나 차원을 가진 다른 단어들이 많이 있을 것입니다. 이 벡터 공간에서 단어가 서로 가깝거나 멀 수 있다는 것을 직관할 수 있다면, 단어의 조합에 불과한 문장은 말 그대로 문장의 모든 단어에 대한 벡터를 취하고 이 모든 단어에 얼마나 많은 로열티와 남성성과 여성성이 있는지 합산하면 전체 문장에 대한 합산값을 얻을 수 있다는 것을 매우 직관적으로 알 수 있습니다.
이제 이 매우 단순화된 3차원 세계에서 문장이 서로 얼마나 가까운지 말할 수도 있습니다. 예를 들어 '사자는 정글의 왕이다'라는 문장을 보면 이 벡터 공간에서 이 문장은 이 숲에서 호랑이가 사냥을 하고 있다는 문장과 매우 가깝다는 것을 알 수 있습니다. 사자와 호랑이는 왠지 비슷하고 둘 다 동물이기 때문에 동물적 차원에서는 높은 위치에 있을 것이기 때문입니다. 사자와 호랑이는 둘 다 장엄한 동물이기 때문에 장엄한 왕족의 차원이 높을 것입니다. 정글과 숲, 둘은 가까워야 하죠? 저기 있는 나무들도 비슷하죠. 따라서 정글의 왕인 사자가 이 숲에서 호랑이를 사냥하는 것과 비슷하다는 것이 인간에게는 이해가 될 것입니다. 그리고 벡터 차원을 보면 같은 차원에 대한 백분율에서 높은 점수를 받기 때문에 그렇게 될 것입니다. 반면 '모두가 뉴욕을 좋아한다'와 같은 문장은 이 벡터 공간에서 이 문장들보다 더 멀리 떨어져 있을 것입니다. 다시 말하지만, 이제 언어를 하나의 숫자로 변환하는 것이 아니라 여러 개의 숫자로 변환하여 특정 단어나 문장이 서로 어느 정도 유사하거나 서로 가깝다는 것을 이해할 수 있는 방법이 있습니다.
우리는 단순한 3차원의 세계로 생각했지만, 실제 세계는 사전의 모든 단어를 다 합치면 60만 개의 차원이 되지만 상관없습니다. 3차원이라고 생각하면 됩니다. 같은 개념입니다. 그렇다면 사물이 서로 가까이 있는지 멀리 있는지 이해하는 것이 왜 도움이 될까요? 이해가 쉬울 것 같은 예를 들어보겠습니다. 여기 다른 세계가 있습니다. 이 세계에는 세 가지 다른 차원이 있습니다. 어떤 것은 록이고, 어떤 것은 클래식이며, 어떤 것은 EDM, 즉 일렉트로닉 댄스 음악입니다. 다시 말하지만, 단순한 세상입니다. 이 세상에는 록, 클래식, EDM의 차원만 존재합니다. 이제 우리는 단어는 아니지만 실제로는 노래인 무언가를 가져옵니다. 비틀즈의 'Here comes the sun', 베토벤의 '운명', 아비치의 '레벨스', 퀸의 '보헤미안 랩소디'가 바로 그것입니다. 이제 각 노래에 록, 클래식, EDM이 얼마나 들어있는지 백분율로 표시해 보겠습니다.
동의하실 수 있는지 한번 보시죠. 그럼 비틀즈의 'Here comes the sun'부터 시작해보죠. 록의 정의에 가까운 곡이니 98%는 록일지도 모르겠네요. 클래식은 별로 없네요. 거의 0에 가깝게 0.02%라고 할 수 있죠. 그리고 EDM은 거의 없습니다. 그 당시에는 발명되지도 않았으니 0.01입니다. 이제 비틀즈의 Here comes the sun 에 대한 벡터가 생겼습니다. 엘리제를 위하여는 어때요? 록 음악이 많지 않아서 0.01% 정도입니다. 클래식 음악이 많아서 99%, EDM은 거의 없고 0.05% 정도입니다. 그런 다음 Avicii가 등장하고 레벨에 록이 그렇게 많지 않다고 가정하면 0.02입니다. 클래식은 0.01로 많지 않고 EDM이 많은데, 분명히 정의된 EDM이 많죠. 0.999, 99.9%라고 해봅시다. 그리고 보헤미안 랩소디는 그 중 하나가 아니기 때문에 흥미롭습니다. 보헤미안 랩소디가 꽤 독특한 곡이라는 데 대부분 동의할 거라고 생각해요. 록이 많이 들어 있어서 99%는 록이지만 실제로는 클래식도 많이 들어 있고, 99%는 클래식이지만 EDM이 많지 않아서 0.05 정도일 수도 있습니다. 이제 여러분은 곡을 가져왔고, 여러분이 인간이라고 상상해 보시면 Spotify에 있는 모든 곡을 앉아서 듣고 이러한 차원으로 점수를 매깁니다. 이제 각 노래를 하나의 단어로 생각하면 벡터 공간에서 어떤 노래나 단어가 서로 가까운지 이해하는 것이 정말 유용합니다. 예를 들어 이 사용자는 파이리리스를 듣는다고 할 수 있습니다. 따라서 이 사용자는 보헤미안 랩소디에 관심이 있을 수 있으며, 둘 다 클래식에서 높은 점수를 받기 때문에 벡터 공간에서 서로 가까울 것입니다. 하지만 레벨에는 관심이 없을 수도 있는데, 이는 이 두 차원이 전혀 겹치지 않기 때문입니다. 따라서 보헤미안 랩소디와 피릴리스는 히어 컴즈 더 선과 마찬가지로 벡터 공간에서 서로 멀리 떨어져 있을 것입니다. 이 세 영화는 모두 서로 멀리 떨어져 있지만 보헤미안 랩소디는 바위 위에 있기 때문에 피릴리스와 히어 컴즈 더 선 모두와 상당히 가까워집니다. 이것이 바로 Spotify와 같은 추천 시스템이 작동하는 방식입니다.
그렇다면 이 벡터는 어디서 어떻게 배우나... 위키피디아 텍스트를 가져와서 모든 문서를 비교하면서 거리를 계산?하지만 한 가지 의문이 드는 것은 이러한 단어 벡터를 어떻게 배울 수 있는지 설명해 드렸습니다. 인터넷을 검색하거나 위키피디아의 텍스트를 가져와서 인터넷의 모든 문서에서 이 단어가 다른 단어와 비슷하다고 말할 수 있습니다. 노래에 대해서는 어떻게 할 수 있을까요? 노래가 서로 가까운 문서가 많았으면 좋겠다는 생각이 드실 겁니다. 이것이 바로 재생 목록입니다. 그래서 Spotify에는 수십억 개의 재생 목록이 있습니다. 이 재생 목록을 하나의 문장이라고 생각하면, 말 그대로 중간에 있는 노래를 가지고 이 노래가 이 재생 목록의 다른 모든 노래와 얼마나 가깝다고 말할 수 있습니다. 또는 모든 재생 목록을 하나의 큰 문서로 생각하면 같은 재생 목록에 있으면 서로 가깝다고 생각할 수 있습니다. 따라서 같은 재생목록에 있는 노래들은 서로에 대해 상대적으로 높은 점수를 받을 것입니다. 따라서 Spotify의 모든 노래가 다른 모든 노래에서 차지하는 비율을 백분율로 파악할 수 있는 벡터를 만들 수 있는 방법을 알 수 있습니다.이제 Spotify의 모든 노래를 벡터로 표현할 수 있습니다. 그리고 이 벡터는 다차원적인 세계에 존재하기 때문에 추천을 할 수 있습니다. 따라서 Spotify의 취향 프로필은 조금 더 단순화하면 사용자가 듣는 모든 노래와 모든 차원을 합친 것입니다. 따라서 듣는 모든 노래에 얼마나 많은 클래식 음악이 있는지 점수가 매겨집니다. 이를 합산하고 곡 수로 나누면 해당 사용자에 대한 클래식 점수가 나옵니다. 록, EDM, 재즈에 대해서도 동일한 작업을 수행하면 해당 사용자에 대한 취향 프로필이 생성됩니다.
이제 벡터 공간에서 해당 사용자가 어디에 있는지 이해했습니다. 그리고 이 두 사용자는 거의 동일한 벡터를 가지고 있고, 서로 가깝고, 음악 취향이 같다고 말할 수 있습니다. 이제 벡터와 벡터 공간, 임베딩, 코드, 분산 표현이 무엇인지 이해할 수 있을 뿐만 아니라 모두 같은 개념입니다. 제가 방금 보여드린 것이 전부입니다. 이름만 달리해서 실제보다 더 어렵게 느껴질 뿐입니다. 하지만 왜 유용한지도 이해하실 겁니다. 그리고 우연히 추천 시스템이 어떻게 작동하는지 이해하게 됩니다.
거리가 가까우면 추천한다는 것 같음...what is neural network
이제 대규모 언어 모델이 무엇인지, 채팅 GPT가 어떻게 작동하는지, 단어 벡터가 무엇인지, 왜 유용한지 이해하셨을 것입니다. 하지만 텍스트에서 이미지를, 소음에서 이미지를, 심지어 소음에서 음악을 어떻게 만들 수 있는지 설명해 드리겠다고 약속드렸습니다. 그러기 위해서는 한 단계 더 깊이 들어가야 합니다. 신경망이 실제로 무엇인지 간단하게 설명해 보겠습니다. 그리고 다시 말하지만, 실제로는 매우 복잡하지만 이론적으로는 그렇게 복잡하지 않습니다. 따라서 신경망은 우리 뇌에 있는 생물학적 뉴런을 느슨하게 기반으로 합니다. 그리고 만화에서 이렇게 생겼습니다. 노란색 부분에 수상 돌기라고 불리는 작은 팔이 있습니다. 이것이 입력입니다. 망막에서 전기 신호를 받는다고 가정해 봅시다. 따라서 빛이 눈에 닿으면 전기 신호입니다. 이 신호는 노란색 부분의 수상돌기로 들어갑니다. 이 두 가지가 결합합니다.
이 특정 뉴런이 수직선을 찾고 있다고 가정해 봅시다. 이것이 바로 수직선입니다. 아니면 눈앞에 있는 수평선도 있겠죠? 따라서 이 특정 뉴런이 이러한 전기 신호의 패턴, 즉 수상 돌기의 값을 얻으면 값을 얻을 수 있습니다. '여기 수직선이 보이는 것 같습니다'라는 임계값에 도달하게 될 것입니다. 그런 다음 이 축삭을 따라 오른쪽으로 스파이크를 보내 다음 층의 뉴런으로 이동하여 다음 층의 뉴런으로 이동합니다. 이것이 뉴런이 하는 일의 전부입니다. 뉴런은 몇 가지 입력 신호를 받아 이를 결합합니다. 그리고 특정 임계값에 도달하면 '여기 뭔가 이상합니다'라는 메시지가 표시됩니다. 그리고 신호 또는 스파이크를 보낼 것입니다. 그래서 컴퓨터 과학자들은 인공 뉴런이라는 생물학적 뉴런을 매우 단순화되고 이상화된 수학적 버전으로 만들었습니다. 여기서 가리키는 화살표는 수상 돌기에 해당합니다. A1, A2, A3가 있습니다. 이것이 눈에서 나오는 전기 신호가 될 것입니다. 컴퓨터 세계에서는 카메라의 픽셀 값에 해당하며, 여기에 가중치인 W123이라는 값을 곱합니다. 이에 대해서는 나중에 설명하겠습니다. 그런 다음 전기 신호를 받아 가중치를 곱하면 이 세포 몸체, 가운데 원이 특정 임계값에 도달하면 예를 들어 세포가 수직선이 보이는 것 같다고 말하면 오른쪽으로 스파이크 또는 Z라는 신호를 보냅니다. 따라서 생물학적 뉴런이하는 일을 매우 단순화 한 버전입니다.
완전히 이해하지 못했더라도 걱정하지 마세요. 이제 실제로 보게 될 것입니다. 고양이 사진이 있다고 가정해 봅시다. 왜 안 될까요? 인터넷은 고양이로 가득하잖아요. 이제 사진이나 동영상 카메라를 들고 이 고양이를 향해 카메라를 들이댄다고 가정해 봅시다. 컴퓨터가 보게 될 것은 픽셀 값입니다. 컴퓨터는 모든 것이 숫자임을 기억하세요. 픽셀 값은 그저 숫자에 불과합니다. 단순화해서 그레이 스케일이라고 말할 수도 있습니다. 숫자 0은 검은색이고 숫자 255는 흰색입니다. 그리고 그 사이에는 회색 음영이 있습니다. 그냥 숫자뿐이죠. 이제 이러한 인공 셀을 여러 개 배치하고 각 입력에 픽셀 값을 가져옵니다. 이제 맨 위에 있는 뉴런이 이런 대각선을 본다면 급상승할 것이라고 상상할 수 있겠죠? 그리고 대각선이 보이면 이렇게 말합니다. 그리고 그 아래에 있는 뉴런은 이렇게 다른 방향의 대각선을 찾고 있을 수도 있습니다. 그리고 이 뉴런은 대각선을 발견했을 때만 스파이크를 일으켜 나머지 네트워크에 값을 전송합니다. 이제 두 번째 네트워크 계층이 추가됩니다. 이것이 바로 심층 신경망이라고 불리는 이유입니다. 점점 더 많은 레이어를 추가합니다. 이제 두 번째 층의 뉴런은 첫 번째 층에서 스파이크를 가져와 첫 번째 층에서 이런 대각선과 이런 대각선을 보았다고 말할 수 있습니다. 그리고 두 번째 층의 뉴런은 첫 번째 층에서 이 두 가지를 모두 볼 때만 스파이크를 일으킵니다. 그래서 이것은 실제로 고양이 귀 끝의 모양일 수도 있습니다. 그리고 이 선은 수염 모양일 수도 있습니다. 그래서 한 층 더 올라가면 이 모든 신호를 결합합니다. 그리고 이 층의 맨 끝, 아주 깊숙한 곳에 있는 마지막 뉴런은 실제로 이 모든 층에서 들어오는 모든 입력이 실제로 고양이라는 것을 알 수 있다고 말합니다.
이제 고양이 분류기라는 것이 생겼습니다. 그렇다면 어떻게 작동할까요? 이 그림을 보면 이 모든 가중치, 즉 W1과 2, 3이 있다면 무한한 시간이 있다면 앉아서 이 모든 숫자를 조정하여 뉴런이 임계값에 도달하고 다양한 방향에서 고양이의 모양에 정확히 맞도록 스파이크하는 것을 상상할 수 있습니다. 그래서 어떤 뉴런은 귀 끝을 찾고, 어떤 뉴런은 눈과 발을 찾고, 어떤 뉴런은 눈과 발을 찾는 등 다양한 뉴런을 찾고 있습니다. 시간이 무한대라면 네트워크에서 이러한 모든 매개변수를 조정하여 고양이가 있을 때만 끝까지 스파이크하고 자동차나 비행기 또는 다른 어떤 것이 있을 때는 스파이크하지 않도록 할 수 있다고 상상할 수 있습니다. 다시 말하지만, 원칙적으로는 직관하기 어렵지 않습니다. 실제로는 꽤 복잡합니다. 이러한 매개변수를 어떻게 조정할까요? 이런 네트워크에는 말 그대로 수십억 개, 지금은 거의 1조 개에 이르는 매개변수가 있을 수 있기 때문입니다. 하지만 여기서는 이론적인 수준에서 간단하게 설명하겠습니다. 여기서 다시 한 번 이해해야 할 것이 있습니다. 과학자들은 사실 오래 전에 역전파라는 개념을 생각해 냈습니다. 즉, 모델이 모든 올바른 매개변수를 스스로 학습할 수 있는 방법을 찾아낸 것입니다. 이를 생각해 보면 고양이와 고양이가 아닌 사물의 사진이 많이 있다고 생각하면 됩니다. 사람이 직접 앉아서 이러한 매개변수를 조정하는 대신 모든 매개변수를 난수로 초기화하면 됩니다. 완전히 무작위입니다. 따라서 생각해 보면 이 네트워크에 처음 고양이 이미지를 보여줄 때는 정의상 무작위로 완전히 틀릴 수 있겠죠? 그러나 그것은 또한 무작위적인 우연에 의해 때때로 고양이를 보여줄 때 실제로 고양이라고 추측한다는 것을 의미합니다.
그런 다음 역전파라는 것을 통해 '잠깐만요, 맞았어요'라고 말하는 것입니다. 그 값을 유지하세요. 사실, 당신이 맞았으니 모든 W 값을 그 방향으로 조금씩 이동합니다. 그러다가 틀렸을 때는 그 반대의 방향으로 이동합니다. 다른 방향으로 이동합니다. 그리고 말 그대로 수만, 수십만, 수백만 개의 이미지에 대해 이 작업을 수행합니다. 예를 들어 '이거 고양이인가요? 그러면 '네'라고 답합니다. 그런 다음 네트워크가 좋다고 말합니다. 이 모든 값을 그 방향으로 조금 더 이동합니다. 그런 다음 좁은 평면을 보여주면 고양이라고 말합니다. 그런 다음 네트워크가 나쁘다고 말합니다. 모든 값을 다른 방향으로 조금 더 이동합니다. 그리고 계속 강화하면 됩니다. 이 작업을 수백만 번 반복하면 결국 좋은 행동을 강화하기 때문에 이 모든 매개 변수는 여러 레이어를 통해 이 이미지에서 고양이를 나타내는 모양 조합을 정확히 찾아내지만 개는 그렇지 않고 다른 어떤 것도 나타내지 않게 됩니다. 이것이 바로 신경망이 하는 일입니다. 다시 말하지만, 이론적으로는 매우 간단하지만 실제로는 어렵고 시간이 오래 걸립니다. 따라서 숫자를 취하고, 곱하고, 임계값을 초과하는지 확인하고, 그 숫자를 취하고 곱하는 개념을 이해하면 이미지 생성 네트워크 등이 실제로 어떻게 작동하는지 이해할 수 있기 때문에 이것을 이해하는 것이 중요합니다. 여기에 제가 생각하기에 매우 흥미로운 또 다른 개념이 있습니다.
이해가 잘 안됨Intelligence is compression
뭔가를 잘 알면 간단하게 설명하는데 압축을 요약을 잘한다는 건데 이건 간단한 이론에 도달했기 때문인가... 즉 이론은 간단하니까 설명도 간단하게 될 것이지만 실제는 복잡하니까 이론만 듣고 간단하겠네 했다가 실제를 구현하려면 엄청 복잡하다는 걸 깨닫게 되는 것일 수도... 아니면 요약 말하자면 압축을 하고 그 열쇠를 어딘가에 저장하는 식?
지능은 압축입니다. 이제 이것은 사실로 명시되어 있습니다. 입증된 사실은 아니지만 많은 사람들이 지능을 압축으로 생각하는 한 가지 방법이 있다는 것은 이론입니다. 무슨 뜻일까요? 다시 직관으로 돌아가 보겠습니다. 무언가를 아주 잘 아는 사람과 이야기하면 보통 설명을 아주 잘하죠? 반면에 무언가를 잘 모르는 사람과 이야기하면 설명하기가 어렵습니다. 따라서 무언가를 잘 아는 사람은 간단한 방법으로 설명할 수 있습니다. 즉, 일반적으로 간단한 방법으로 설명할 수 있는 사람은 그렇지 않은 사람보다 더 잘 이해합니다. 이미 있습니다. 압축에 대해 뭔가가 있다는 것을 알 수 있지요? 아마도 그 사람은 이 문제에 많은 시간을 할애하여 모든 세부 사항을 파악하고 실제 의미로 압축하여 깊이 이해하는 방법을 배웠을 것입니다. 그런 다음 갑자기 설명할 수 있게 된 것이죠. 그래서 실제로 인터넷에는 허터 프라이즈 (Hutter Prize) 라는 대회가 있는데, 위키피디아의 정보를 그대로 유지하면서 자체 추출기를 이용해 최대한 압축하는 것을 겨루는 대회입니다. 위키백과를 효과적으로 압축하려면 이를 압축하는 시스템이 세상에 대해 많은 것을이해해야 한다는 아이디어에서 출발했습니다. 압축하려면 똑똑해야 하는 것처럼요. 세상을 압축하려면 세상의 차원을 정말 잘 이해해야 합니다. 말하자면 압축을 잘 하려면 많은 차원에 대해 알고 있어야 한다는거네... 압축하려면 그만큼 아는 것이 많아져야 한다는 것이고 그래서 똑똑해져 있는 상태여야 한다는 말인 듯...
앞서 말했듯이 이것은 직관적입니다. 사물을 간단하게 설명할 수 있는 사람이 일반적으로 더 많이 이해합니다. 그래서 정보를 압축하는 시스템은 이해력을 키워야 했습니다. 따라서 지능은 정보를 압축하는 데 따른 부작용 (side effect), 필요악 (necessary evil) 이라고 생각하면 됩니다. 따라서 이 허터 프라이즈에서는 위키피디아를 압축할 수 있는 비율만큼 실제로 돈을 벌 수 있습니다. 이 경우 무손실로, 정보 손실 없이 말이죠. 하지만 일반적으로 어떤 것을 압축하고도 대부분의 가치를 유지할 수 있다면 더 적은 정보로 같은 것을 표현할 수 있기 때문에 그 개념을 잘 이해한 것입니다. 그리고 더 적은 정보로 무언가를 표현하려면 압축하는 시스템에 대한 이해가 필요합니다. 이제 좀 더 실용적인 이야기를 해보겠습니다. 신경망에 있어 모든 것은 숫자에 불과하다는 사실을 기억하세요. 언어, 숫자, 픽셀도 숫자입니다. 샘플도 숫자입니다. DNA 서열도 숫자입니다. 무엇이든 숫자입니다. 따라서 다소 엉뚱해 보이는 신경망을 예로 들어 고양이가 창문에서 뛰어내린다는 문장을 예로 들면, 이 문장은 다시 숫자의 시퀀스로 표현됩니다. 즉, 1, 2, 3, 4, 5, 6의 숫자입니다. 그리고 우리가 하는 일은 이 신경망이 이 여섯 개의 숫자를 가지고 뉴런을 통해 곱하고 더한 다음 더 적은 숫자로 표현한 다음 다시 곱하고 더하는 것입니다. 그리고 중간에는 이 여섯 개의 숫자를 표현할 수 있는 세 개의 숫자만 얻습니다. 이상해 보이지만 잠시만요.
그래서 우리는 네트워크가 전체 문장을 나타내는 6개의 숫자를 가져와 3개의 숫자로만 표현하도록 했습니다. 이제 네트워크에 그 반대의 작업을 요청합니다. 이 세 개의 숫자에서 다시 곱한 다음 다시 5, 6 또는 7개의 숫자로 바꾸도록 요청합니다. 이 경우에는 1, 2, 3, 4, 5 숫자가 됩니다. 따라서 우리가 한 일은 이 네트워크에 일련의 숫자를 알려준 것뿐입니다. 이는 우리에게 고양이가 창문에서 뛰어내리는 것을 의미합니다. 이 6개의 숫자를 3개의 숫자로 압축한 다음 새로운 정보 없이 이 3개의 숫자로부터 다시 같은 문장 또는 가능한 한 가까운 문장으로 확장해야 합니다. 따라서 여기서 전체 훈련 작업은 문장을 가져와서 압축한 다음 동일한 문장을 다시 만드는 것입니다. 따라서 완벽한 세계에서는 입력과 똑같은 고양이가 창문에서 뛰어내리는 장면이 출력될 것입니다. 따라서 이 네트워크를 반복해서 훈련하여 이 숫자를 압축하고 동일한 숫자를 다시 만들도록 합니다.
그리고 네트워크가 동일한 번호를 완벽하게 재현하는 것은 불가능합니다. 6에서 3으로 숫자가 바뀌면 정보가 손실되기 때문입니다. 따라서 정의상 정보를 잃은 것입니다. 6에서 3으로 최소 3개의 숫자를 잃었으니 네트워크는 최선을 다할 것입니다. 즉, 중간에 있는 이 3개의 숫자를 다시 차원으로 선택해야 한다는 뜻입니다. 3차원, 즉 세상을 가장 잘 설명할 수 있는 3개의 숫자를 선택해야 합니다. 그게 무슨 뜻일까요? 예를 들어 창문에서 뛰어내리는 고양이 같은 것을 본다면 가운데에 있는 3개의 숫자는 고양이가 아니라 너무 세밀하지만 애완동물 같은 것을 나타낼 수 있다는 뜻입니다. 그리고 두 번째 숫자는 무언가에 들어갔다 나오는 것과 같은 것을 나타낼 수 있습니다. 그리고 세 번째 숫자는 실체나 집과 같은 것을 나타냅니다. 따라서 입력한 문장과 개념적으로는 비슷하지만 정보가 손실되었기 때문에 완전히 동일하지는 않은 결과가 출력됩니다. 예를 들어 '창문에서 뛰어내리는 고양이'를 입력하면 '집을 나서는 애완동물'이나 '집을 나서는 개'가 나올 수도 있습니다. 시스템은 선택해야 했기 때문에 정보를 잃어야 했고, 추상화해야 했으며, 가장 중요한 차원을 최대한 잘 선택해야 했습니다. 압축해야 했습니다.
정보 소실 없이 더 적은 숫자로 표현할 수 있는 방법... 그게 압축?그래서 이것이 의미하는 바는 중간에 있는 이 임베딩 코드, 다시 말해 벡터가 많은 문장에 대해 올바르게 수행하면 학습 중인 세계를 가장 잘 표현하는 숫자, 즉 이 경우에는 인터넷의 텍스트를 찾을 수 있다는 것이죠? 이 네트워크의 세계는 텍스트 세계입니다. 이를 임베딩이라고 합니다. 따라서 문장을 가져와서 6개의 숫자에서 3개의 숫자로 임베딩합니다. 그리고 네트워크는 올바르게 훈련하면 세계에 대한 가장 많은 정보를 제공하는 올바른 차원을 선택하여 훈련 작업을 가장 잘 완료합니다. 다시 말하지만, 이것은 특히 언어에 있어서는 매우 쓸모없는 작업처럼 보입니다. 같은 문장을 왜 다른 버전으로 만들고 싶을까요? 하지만 지금 당장 이해하기 쉬운 예가 있을 수도 있습니다. 이것은 확산 모델에 대해 이해하는 데 중요합니다. 이것이 바로 우리가 진행하고 있는 작업입니다. 이미지나 동영상에 대해 생각해 보면 여기 왼쪽에 많은 공간을 차지하는 이미지나 동영상이 있다고 상상할 수 있습니다.
이미지의 경우 압축을 해도 실제로 많은 정보를 잃을 수 있지만 여전히 충분하다는 것을 알고 계시죠? 이것이 모든 이미지 포머가 하는 일입니다. 이미지를 압축하면 실제 원본 이미지보다 훨씬 적은 데이터를 사용하여 인터넷을 통해 전송할 수 있습니다. 예를 들어 왼쪽의 고양이 이미지를 압축하는 한 가지 방법은 압축을 생성하는 것입니다. 네트워크가 모든 숫자, 모든 픽셀 번호를 가져와서 훨씬 적은 숫자로 가운데에 표시한 다음 가능한 한 동일한 고양이 이미지를 재현하려고 시도합니다. 이 작업을 제대로 수행하면 거의 정확한 이미지를 재현하는 데 매우 능숙해질 것입니다. 그리고 네트워크에 가능한 한 잘하도록 가르치면 네트워크는 사람이 이 고양이가 여전히 같은 고양이 이미지라고 생각할 수 있도록 중간에서 가장 중요한 치수를 찾아낼 것입니다. 따라서 네트워크는 가장 중요한 차원으로 압축하는 방법을 스스로 학습하게 됩니다. 예를 들어, 인간은 이미지에서 저주파수에 많은 관심을 기울이고 고주파수에는 그다지 관심을 기울이지 않는 경향이 있습니다.
따라서 저주파수 중 일부는 유지하고 고주파수 등은 유지하지 않는 방법을 배우게 될 것입니다. 하지만 세부 사항은 중요하지 않습니다. 전체 개념은 이미지의 경우 픽셀 수와 같은 숫자가 필요하다는 것입니다. 네트워크가 원본 이미지의 정보를 최대한 많이 유지하면서 훨씬 적은 숫자로 최상의 표현을 선택하도록 한 다음 다시 생성합니다. 이렇게 하면 실제로 이미지를 찍을 수 있는 압축 알고리즘이 있지만, 이미지를 인터넷을 통해 보내는 대신 이미지를 임베드하고 중간에 이 코드를 보내는 것입니다. 그리고 수신자는 이 네트워크의 다른 쪽에서 전체 이미지로 다시 디코딩합니다. 이제 많은 대역폭을 절약할 수 있게 되었습니다. 이를 자동 인코더라고 합니다. 그리고 이것은 실제로 인터넷에서 일부 압축 알고리즘이 수행되는 방식입니다. 이제 벡터가 무엇인지, 단어 벡터가 무엇인지 이해할 뿐만 아니라 실제로 이 벡터를 만드는 방법과 임베딩이 무엇인지, 즉 훈련을 통해 텍스트, 이미지 등을 가져와 자동으로 이 벡터를 생성하는 네트워크가 무엇인지도 이해하게 되었습니다. 그리고 중요한 것은 자동으로 최적의 차원을 선택한다는 것입니다. 세계의 60만 가지 차원 대신 훨씬 적은 수의 차원을 선택하도록 강제하고, 더 적은 수의 차원을 선택하도록 강제함으로써 네트워크가 실제로 지능적으로, 적어도 지능의 정의에 따라, 이러한 차원을 선택하는 방식에서 지능적이 되도록 강제합니다.
결국 지능이란 많은 정보를 기존에 가진 차원들을 이용해서 몇가지 단서를 가지고 압축을 할 수 있다는 것이고 그걸 그 단서를 이용해서 디코딩하면 복원하는 것 같음 이렇게 정보 압축을 하고 그것을 다시 복원할 수 있다면 그게 곧 지능이라는 것. 따라서 최종 압축된 정보만 받아들이면 그걸 해독할 수 있는 열쇠가 없는 거라서 그건 나에게 큰 의미를 가지지 않는 형식적인 정보가 되겠네Diffusion Models - Generating Images, Video, and Music
좋아요. 거의 다 왔습니다. 이미지, 음악 생성, 비디오 등은 어떻게 되나요? 이제 마지막으로 한 가지 더 이해해야 할 것이 있는데, 바로 이 모든 것을 이해해야 한다는 것입니다. 안정적인 확산이나 중간 확산과 같은 것이 어떻게 작동하는지 이해해야 합니다. 바로 확산 모델이라는 개념입니다. 확산 모델은 사실 개념적으로도 매우 직관적이라고 생각합니다. 이 신경망을 기억하시죠? 여기 왼쪽에 있는 T0이라는 이미지를 찍는다고 가정해 봅시다. 그리고 약간의 노이즈를 추가합니다. 왼쪽 이미지에서 왼쪽의 두 번째 이미지로 이동합니다. 이 이미지 위에 약간의 노이즈를 추가합니다. 이제 신경망을 훈련시켜 그 노이즈를 찾아서 다시 제거하도록 합니다. 그리고 그 이미지를 보면 첫 번째 이미지와 두 번째 이미지의 차이가 매우 작습니다. 시간만 있다면 그 노이즈를 제거할 수 있다는 것을 직관적으로 알 수 있습니다. 그렇다면 신경망은 왜 안 될까요? 조금만 추가하면 되기 때문에 그렇게 어렵지 않은 것 같습니다. 이것이 첫 번째 단계입니다.
따라서 두 번째 이미지에서 첫 번째 이미지로 약간의 노이즈를 제거하는 별도의 신경망이 있다고 생각하면 됩니다. 이제 노이즈가 약간 있는 두 번째 이미지를 가져와서 노이즈를 조금 더 추가합니다. 이제 세 번째 이미지에 추가한 노이즈와 같은 추가 노이즈만 제거하도록 네트워크를 훈련시키면, 한 번에 한 단계씩 첫 번째 이미지로 돌아가는 것이 아니라 세 번째 이미지에서 두 번째 이미지로 다시 노이즈를 제거할 수 있습니다. 따라서 여기서 모든 단계는 노이즈를 조금씩 제거하는 것입니다. 이제 세 번째 이미지를 가져와서 노이즈를 조금 더 추가하고 네트워크가 그 노이즈만 제거하도록 훈련시킵니다. 그리고 계속 진행합니다. 이미지를 가져와서 노이즈를 더 추가하고, 네트워크를 훈련시켜 추가 노이즈를 제거하는 등의 작업을 반복합니다. 여기서 '제거'라는 말은 네트워크가 노이즈가 추가된 것을 식별하고 이를 사진에서 빼고 원본 이미지를 다시 생성하도록 훈련시키는 것입니다. 이 과정을 직관적으로 이해할 수 있기를 바랍니다. 따라서 어떤 단계에서든 이미지를 가져와서 추가적인 노이즈를 제거할 수 있는 네트워크가 있습니다. 생각해보면 모든 단계에서 이 작업은 놀라울 정도로 간단한 작업입니다. 하지만 마지막에는 이미지에 순수한 노이즈가 남을 정도로 많은 노이즈를 추가했습니다. 더 이상 이미지가 없습니다. 따라서 오른쪽의 작업은 실제로 두 번째에서 마지막 이미지에서 추가된 마지막 노이즈 조각을 완전한 노이즈에서 거의 완전한 노이즈로 제거하는 것입니다.
나쁘게 만들어나가는 과정을 알아야 좋게 만드는 과정을 알 수 있다는 건가?
알겠습니다. 다시 말하지만, 이것은 어리석은 작업처럼 보입니다. 왜 완벽하게 좋은 이미지를 가져다가 천천히 파괴하고 한 번에 약간의 노이즈를 제거하도록 네트워크를 훈련시킬까요? 정말 멋진 점은 좋은 이미지로 시작해서 조금씩 제거하는 법을 배우고, 이미지를 더 나쁘게 만들고, 다시 조금씩 제거하는 네트워크를 갖게 된다는 것입니다. 하지만 이제 이 네트워크를 거꾸로 실행하면 좋은 이미지에서 약간의 노이즈를 제거하는 가장 왼쪽에 있는 신경망을 사용하는 대신 순수한 노이즈 이미지에서 약간의 노이즈를 제거하는 가장 오른쪽에 있는 신경망부터 시작합니다. 이렇게 하면 됩니다. 무작위 노이즈부터 시작합니다. 그런 다음 네트워크를 거꾸로 실행합니다. 그러면 이미지에서 필사적으로 (desperately) 얼굴과 같은 노이즈를 찾으려고 노력하는 네트워크를 훈련시킨 것입니다. 그래서 완전한 노이즈 이미지가 필요합니다. 그리고 아무것도 없는데도 '이봐, 나는 여기서 얼굴 모양의 노이즈를 찾도록 훈련받았어'라고 말하게 됩니다. 또는 더 단순하게 설명하자면, 나는 여기서 얼굴의 대략적인 윤곽을 찾도록 훈련받았습니다.
뭔가 보이는 것 같아요. 그리고 실제로 얼굴처럼 보이게 하는 약간의 노이즈를 제거할 것입니다. 그리고 다음 단계에서는 같은 네트워크이지만 별개의 네트워크라고 생각하면 다음 종류의 네트워크가 그 이미지를 가져와 '나는 또한 노이즈를 제거하고 얼굴과 같은 노이즈를 찾아서 제거하도록 훈련받았습니다'라고 말합니다. 아무것도 없는데도 얼굴의 윤곽이 보이는 것 같습니다. 첫 번째 단계에서는 아무것도 없었습니다. 그냥 노이즈였죠. 두 번째 단계에서는 네트워크 자체가 얼굴처럼 보이게 만드는 픽셀을 정확히 제거했기 때문에 실제로 얼굴이 약간 있습니다. 이제 다음 단계에서는 '잠깐만요, 얼굴 윤곽이 보이네요. 이전에 본 적이 있는 이 노이즈를 제거하면 얼굴처럼 보이게 됩니다. 세 번째 이미지가 이어받아 '아, 저기 얼굴의 윤곽이 선명하게 보이네요. 얼굴처럼 보이게 하려면 어떤 종류의 노이즈를 제거해야 하는지 정확히 알 수 있습니다. 그리고 계속 진행하면 마지막에는 오른쪽 끝까지 순수한 노이즈로 얼굴, 즉 실제로 존재하지 않는 얼굴이 만들어집니다. 분명히 말하자면, 실제로 존재했던 얼굴의 복사본이 아닙니다. 이 확산 모델은 수백만 개의 서로 다른 얼굴에서 노이즈를 제거하도록 훈련합니다. 따라서 특정 얼굴을 생성하는 것이 아니라 일반적인 얼굴을 생성하는 방법을 학습합니다.그리고 이 첫 번째 무작위 노이즈 이미지에서 일반적인 얼굴과 유사한 노이즈를 찾습니다.
그래서 이런 사이트가 있습니다. thispersondoesnotexist.com 이라는 사이트입니다. 이 사이트에 들어갈 때마다 말 그대로 존재하지 않는 매우 믿을 수 있는 사람들의 얼굴이 생성됩니다. 이 사이트에 대해 더 잘 알고 계신 분들을 위해 말씀드리자면, 이 사이트는 실제로 확산 모델을 사용하지 않습니다. 이 사이트는 생성적 적대적 네트워크 이전에 등장한 GAN이라는 것을 사용합니다. 하지만 아이디어는 동일합니다. 확산 모델이 GAN의 역할을 대신하고 있습니다. 이제 우리는 적어도 하나의 특정 사물과 같은 순수한 백색 잡음에서 얼굴을 생성하는 방법을 알게 되었습니다.
하지만 단순히 한 가지를 생성하는 방법뿐만 아니라, 스테이블 디퓨전이나 미드 저니가 하는 것과 같은 것을 어떻게 할 수 있는지 설명해드리겠습니다. 그리고 이러한 서비스에서는 얼굴과 같이 같은 것을 여러 가지 버전으로 만드는 것 이상의 작업을 할 수 있습니다. 예를 들어 텍스트를 입력하면 달에서 말을 타고 있는 우주비행사의 사진을 생성하도록 요청할 수 있습니다(예: 구글에서 검색할 수 있는 사진). 그렇다면 어떻게 작동할까요? 이 텍스트 컨디셔닝은 어떻게 작동할까요? 글쎄요, 확산 모델입니다. 따라서 방금 보여드린 것과 같은 기능을 수행하지만 그 이상의 기능을 수행합니다. 이것이 바로 벡터에 대해 방금 배운 이유입니다.
Conditioning on text (using caption... spectrogram)
이제 압축이라는 지능과 실제로 텍스트를 조건화하는 방법에 대해 다시 한 번 살펴보겠습니다. 앞서 쓸모없어 보이는 네트워크를 보여드렸는데, 이 네트워크는 문장을 가져와서 그 문장의 중요한 차원을 포착할 수 있도록 문장의 숫자를 더 적은 숫자로 압축하는 방식입니다. 그런 다음 다시 같은 문장으로 확장하려고 합니다. 쓸모없다고 말했지만 이제는 꽤 유용한 것으로 밝혀질 것입니다. 따라서 이 네트워크를 훈련하고 나면 올바른 부분을 잘라내고 이 부분만 남겨두면 됩니다. 이제 영어로 문장을 입력하면 그 문장의 내용을 가능한 한 잘 나타내는 이 숫자로 압축하도록 요청할 수 있는 기계가 생겼습니다. 이제 이미지와 이미지 캡션의 예가 많은 소셜 네트워크 또는 검색 엔진이라고 가정해 봅시다.
예를 들어 고양이가 나를 쳐다보는 사진과 '고양이가 나를 쳐다본다'는 캡션이 있을 수 있습니다. 이제 여러분이 할 수 있는 일은 다음과 같습니다. 나를 쳐다보는 고양이라는 캡션과 이 인코더를 가져와서 이 문장을 가져와서 다시 숫자의 시퀀스로 만들 수 있습니다. 즉, 1, 2, 3, 4, 5개의 숫자입니다. 그리고 이 네트워크에 이 세 개의 숫자로 압축해 달라고 요청하면 고양이가 나를 쳐다보는 것이 무엇을 의미하는지 파악할 수 있습니다. 이제 확산 모델을 사용합니다. 이 캡션에 속하는 이미지를 가져옵니다. 이전과 마찬가지로 약간의 노이즈를 추가합니다. 그런 다음 노이즈를 조금 더 추가합니다. 그런 다음 완전한 노이즈가 될 때까지 노이즈를 조금 더 추가합니다. 그리고 그 사이에 노이즈를 제거하기 위해 신경망을 넣습니다. 이것이 바로 우리가 얼굴에 한 일입니다. 이렇게 하면 항상 고양이를 쳐다보는 사람을 찾는 확산 모델을 구축하게 되는데, 이는 우리가 원했던 것이 아닙니다. 우리는 조종할 수 있는 무언가를 원했습니다. 그래서 한 단계 더 나아가기로 했습니다. 고양이가 나를 쳐다본다는 문장을 가져와서 이 다섯 개의 숫자에서 이 세 개의 숫자, 코드, 분홍색에 삽입하는 다른 네트워크를 만들겠습니다. 그리고 이 확산 모델이 두 번째 그림과 첫 번째 그림 사이의 노이즈를 제거하려고 할 때, 이 세 개의 숫자를 단서로 제공하려고 하죠?
여러분을 쳐다보는 고양이의 그림과 여러분을 쳐다보는 고양이를 나타내는 세 개의 숫자를 제공한다는 점을 기억하세요. 이제 확산 모델은 어떤 종류의 소음을 찾고 있는지에 대한 단서를 가지고 있다고 생각할 수 있습니다. 한 가지 유형의 소음만 찾는 것이 아닙니다. 예를 들어 '이 분홍색 숫자 세 개는 전에 본 적이 있다'는 식이죠. 이 안에 고양이가 있거나 고양이와 비슷한 소음이 있을 수 있다는 뜻입니다. 그런 다음 다음 단계에서는 여전히 고양이 같은 소음을 찾고 있는 것처럼 동일한 단서를 제공하면 됩니다. 다음 단계에서도 동일한 단서를 제공합니다. 신경망에서는 모든 것이 숫자임을 기억하세요. 픽셀도 숫자이지만 이 문장도 숫자입니다. 신경망은 하나는 이미지이고 다른 하나는 텍스트라는 것을 이해하지 못합니다. 그냥 '이 숫자를 본 적이 있다'는 식이죠. 이 세 개의 숫자가 위에 있는 이 숫자들을 보면 항상 고양이 같은 숫자가 있거나 고양이 소음 같은 숫자가 있습니다.
그럼 여기서 나를 쳐다보는 고양이를 찾을 수 있는지 확인해 보겠습니다. 예를 들어 이 이미지에는 고양이가 나를 쳐다보고 있고 다른 비슷한 이미지가 있지만 캡션이 다른 이미지가 있습니다. 예를 들어 고양이가 나를 쳐다보는 이미지 대신 다른 이미지에는 창문에서 뛰어내리는 고양이가 있을 수 있습니다. 이제 상단의 인코더가 1, 2, 3, 4, 5, 6 단어, 6개의 숫자로 이루어진 이 문장을 3개의 숫자로 임베드할 것입니다. 이 세 개의 숫자는 아마도 비슷할 것입니다. 저기 고양이가 있죠? 하지만 뛰어오른다는 개념도 있고 쳐다본다는 개념은 없습니다. 창문 등의 개념이 있습니다. 따라서 이 벡터는 크기는 비슷하지만 조금 다릅니다. 이제 그 이미지에 확산을 수행합니다. 네트워크는 노이즈를 제거하려고 할 때 이 세 가지 숫자를 단서로 삼아 어떤 종류의 노이즈를 찾고 있는지 이해할 수 있습니다. 첫 번째 프로세스에서는 항상 같은 종류의 노이즈, 즉 얼굴과 같은 노이즈를 제거했음을 기억하세요. 하지만 이제는 어떤 종류의 노이즈를 찾고 있는지에 대한 단서를 얻는 확산 모델을 사용하고 있습니다.
그래서 여기서는 고양이에 초점을 맞추고 있지만, 무엇이든 될 수 있습니다. 비행기 그림과 '비행기가 날고 있다'는 텍스트가 될 수도 있습니다. 그런 다음 비행기와 같은 소음이 어떻게 생겼는지 또는 비행기 같은 소음을 제거하는 방법을 학습하게 될 것입니다. 그리고 여러분이 할 수 있는 것은 실제로 노래와 같은 것을 취할 수 있다는 것입니다. 노래는 오디오 파동이지만, 오디오 조각을 가져와서 스펙트로그램 (spectrogram) 이라고 하는 것으로 변환할 수 있습니다. 스펙트로그램은 노래의 시각적 표현입니다. 특정 시간에 노래에 포함된 모든 주파수의 양과 그 크기를 알려줍니다. 실제로는 중요하지 않습니다. 오디오를 가져와서 스펙트로그램으로 변환할 수 있다고 상상하면 오디오를 이미지로 표현할 수 있습니다. 예를 들어 비틀즈의 'Ob-La-Di Ob-La-Da'와 같은 노래를 가져올 수 있습니다. 해당 노래의 스펙트로그램을 가져와서 문자 그대로 비틀즈의 Ob-La-Di Ob-La-Da 또는 노래, 즉 비틀즈의 Ob-La-Di Ob-La-Da라는 노래에 대한 설명을 텍스트로 가져올 수 있습니다. 이를 임베드합니다. 이제 이 코드는 노래의 콘셉트, 비틀즈의 콘셉트, 그리고 우리가 완전히 알지 못하는 다른 것들을 어떻게든 표현하게 될 것입니다. 이 문장을 가장 잘 표현하는 것을 찾을 것입니다. 이제 이 스펙트로그램을 찾으려는 이 확산 네트워크에 비틀즈의 노래 'Ob-La-Di Ob-La-Da'라는 문장을 단서로 제공하는 것입니다. 그래서 우선 스펙트로그램을 찾도록 가르치되, 다양한 종류의 음악이 포함된 스펙트로그램을 많이 보여주면 특정 유형의 스펙트로그램을 찾도록 가르칠 것입니다. 이제 고양이, 개, 비행기, 음악 이미지 등 수백만 가지 유형의 이미지로 이 네트워크를 훈련시키면 이제 이 네트워크를 가져와서 돌릴 수 있고 순수한 백색 소음으로 시작할 수 있습니다. 그래서 거기에는 구조가 없습니다. 이 그림에는 말 그대로 아무것도 없습니다. 이제 존재하지 않았던 문장을 가져옵니다. 비틀즈 스타일의 Avicii 노래가 있다고 가정해 봅시다.
그리고 이 네트워크를 훈련시켰으니 이 인코딩 과정을 통해 세계의 차원을 파악할 수 있을 것입니다. 그래서 우리는 아비치가 무엇인지, 그리고 그것이 무엇을 의미하는지 알게 될 것입니다. 노래가 무엇인지, 이제 고양이 사진이 아니라 스펙트로그램을 만들어야 한다는 것, 비틀즈가 무엇을 상징하는지, 그런 종류의 스펙트로그램이 어떻게 생겼는지도 알 수 있게 되죠. 그래서 이 코드에 이것을 포함시킬 것이고, 이 간단한 예시에서는 숫자 세 개만 포함됩니다. 실제로는 세 개의 숫자가 아니라 더 많은 숫자가 있지만 단순화를 위해 이렇게 표현했습니다. 이제 이 순수한 백색 잡음을 가져와서 이 코드를 확산 모델에 어떤 종류의 잡음을 찾고 있는지에 대한 단서로 제공합니다. 여기서도 흥미로운 점은 이전에는 존재하지 않았던 노이즈, 즉 비틀즈 스타일의 노이즈인 Avicii 노래를 찾으라고 지시하고 있다는 점입니다. 그리고 이 순수한 백색 잡음에서 그런 종류의 구조를 찾기 위해 최선을 다할 것입니다. 그래서 스펙트로그램이나 비틀즈 스타일의 아비치 노래처럼 보이게 하는 노이즈를 제거할 것입니다. 그리고 다음 단계에서는 동일한 단서를 제공하고 더 열심히 해보라고 말합니다. 비틀즈 스타일의 Avicii 노래의 구조를 정말 찾아보세요. 노이즈를 좀 더 제거합니다. 그리고 다시 하고 또 하고 또 합니다. 관심이 있으시다면 실제로 이러한 확산 모델에는 약 50개의 단계가 있습니다. 마지막 50번째 단계에서는 존재하지 않았던 노래의 스펙트로그램을 얻게 되는데, 스펙트로그램에서 순수한 오디오로 다시 변환했을 때 비틀즈 스타일의 Avicii 노래가 되길 바랄 뿐입니다.
이제 드디어 도착했습니다. 여러분이 심판이 되어주시길 바랍니다. 여러분의 생각을 말해 주세요. 여러분은 텍스트나 백색 소음만으로 새로운 소설, 시, 이미지, 심지어 음악까지 창작하는 것이 실제로 어떻게 가능한지에 대한 직감이 있을 것입니다. 그리고 저희가 이 음모를 조금이나마 폭로했다고 느끼셨기를 바랍니다. 관심을 가져주셔서 대단히 감사합니다.