생성형 ai 에 대해 알아보자

근래에 생성형 AI 가 대중의 관심을 독점하면서 AI 붐이 불고 있다. 마법처럼 보이는 이 기술이 어떤 원리로 돌아가는 것인지를 알아보는 것이 이 스터디 시리즈의 목적이다. 복잡한 수식이나 전문용어는 가급적 피하고, 예제나 비유, 그림을 최대한 많이 써서 설명하겠다.

이 시리즈는 David Foster 의 Generative Deep Learning 2nd. Edition 의 내용을 기본으로 작성했다. 원서를 읽을 자신이 있으면 책을 직접 보는 것을 강력히 권하고, 자신이 없는 사람에게는 이 스터디 시리즈가 호기심을 자극하는 역할이 되었으면 하는 바램이다.

최대한 쉽게 설명할 것이지만 그래도 어느정도 사전 지식이 필요하다. 일단 딥러닝이 뭔지는 알고오면 좋겠다. 스터디 란에 보면 하루만에 파이토치 마스터해주는 영상 링크 남겨놨으니까 참고할 것.




생성형 AI 의 기본 개념

이전의 ai 는 주로 판별용으로 개발되었다. 예를 들면

   - 그림은 무엇에 대한 그림이냐? (숫자 구분, 개와 고양이 구분, 사람 얼굴 인식, 등등)

   - 이 영상에 여자 나체가 등장하냐? 저작권 침해 요소가 들어있나? 

          (유투브 노딱 붙이기가 자동화되어 있지 않았다면 유투브가 전세계를 지배할 정도의 영향력을 갖춘 서비스로 발전하지도 못했을것이다)

   - 저 소리는 사람의 말소리냐? 누구의 말소리인가? (전화기, 인공지능 스피커등에 들어가는 음성인식)


그러다가 요즘에 기술이 발달하면서 이제 슬슬 창작용으로도 활용되기 시작했다. 사람의 경우에도 글을 쓰는 것이 글을 읽는 것보다 어렵고, 어느정도 글을 읽은 경험이 있어야 글을 쓸 수 있는 것처럼, 인공지능도 사람의 수준으로 판별과 인식한다... 라는 과제를 어느정도 달성한 이후에 생성형 ai 쪽으로 관심이 집중되기 시작했다. 


ai 가 창작을 하는 방법의 핵심은?

아주 대략적으로 비유하자면, AI생성 == '확률과 재조합 요소가 들어간 검색' 이라고 할 수 있다. 창작이란 것에 엄밀한 정의라는 것은 애초에 불가능하지만, 인간이 뭔가를 창작하는 프로세스를 보면 무에서 유를 창조하는 경우는 없다. 대부분의 경우 감각기관을 통해서 접한 자연의 모습, 다른 인간이 이미 창작한 모습을 모방하는 과정에서 변이가 발생하고, 그렇게 생겨난 변종들중 다른 사람들의 선택을 거쳐서 다시 재생산되는, 일종의 진화와 같은 프로세스를 거친다. 이 부분은 리처드 도킨스의 '이기적 유전자'라는 책에서 문화 유전자 (=meme) 이라는 형태로 소개된 바 있다. 생성AI에서 인간의 자연선택에 해당하는 부분은 인간개입에 의한 강화학습 (RLHF) 이라는 형태로 구현되어 큰 효과를 발휘하기도 한다.


단, 검색이라고 해서 원본이 그대로 저장되었다가 다시 찾아오는 식이라고 생각하면 안된다. 그럼 그냥 DB 겠지. 모델은 학습의 과정에서 데이타들의 패턴을 파악해서 다양한 특질들 (feature) 을 학습해서 그 결과를 벡터화해서 Latent 공간에 집어넣는다. 


  - 특질(feature) 들은 낮은 단계부터 높은 단계까지 다양하게 존재하는데, 이미지 모델의 경우 가장 낮은 단계는 기본적으로 이미지의 어느 부분이 어둡다, 밝다, 뾰족하다, 둥글다, 직선이다, 색이 급격히 변한다, 부드럽게 변한다 같은 쌩 픽셀 뭉치에서 추측할 수 있는 기본적인 성질부터 시작해서 레이어를 타고 더 높은 레벨로 올라가다보면, 사람의 눈동자의 일부 같다, 팔같다, 바퀴같다, 동물의 귀 같다 같은 식으로 좀 더 상위 차원의 의미를 담게 되고, 더 올라가서 최종 단계에 이르게 되면 사람의 얼굴 같다, 자동차 같다 등등의 형태에 도달하게 된다. 

  - 언어 모델의 경우에는 모델을 학습하다보면 특정 뉴런이 특정 특질을 전담하게 되는 현상을 발견하게 되는데, 예를 들면 문장이 진행 (다음 단어로 넘어감)하면서 감성이 긍정/부정 으로 오르락 내리락 기복이 있는 경우, 특정 뉴런이 그 기복과 거의 일치하는 변화의 패턴을 보이게 된다. 

  - 나중에는 이런 특질이 재조합되면서 창조적인 속성을 보여주게 된다.


그렇다면 저러한 '확률과 재조합 요소가 들어간 검색' 은 어떻게 구현할 수 있을까? 개략적으로 설명하자면 다음과 같다. 먼저 엠베딩이라는 개념에 대해 독자가 어느정도 이해하고 있다고 가정하겠다.


1) 먼저 수많은 데이타(데이타셋)들을 학습이라는 과정을 통해 각 데이타들을 엠베딩 공간 안에 몰아넣는다. 엠베딩 공간은 생성AI 에서는 Latent Space (잠재공간) 이라고 불리기도 한다. 의미를 응축시켜 개념을 구체화할 수 있는 요소가 잠재되어 있기 때문에 그렇게 불린다고 이해하자.


2) 엠베딩 공간(잠재 공간)안에 있는 각 존재들은 벡터 좌표를 가지고 있다

 학습이 제대로 이루어져 있다면, 우리가 입력한 데이타들은 훨씬 낮은 차원의 형태로 엠베딩 공간 안에 예쁜 모습으로 자리잡게 된다. (비슷한 놈들끼리는 공간 상 가까이에 있다) 이 데이타들은 전체 존재 가능한 공간의 부분공간으로, 잘 뭉쳐있게되는데, 그 부분공간은 서로 매끄럽게 연결되어 있고, 속이 꽉 차있게 된다. 요걸 매니폴드 가설이라고도 한다. 

매니폴드는 위상수학에서 등장하는 단어인데 서로 연결되어 뭉쳐있는 모양을 띈다.

  - 2차원 공간에서 가장 간단한 매니폴드는 삼각형 모양을 띄고 (숫자 2개로 정의 가능 - 밑변 좌표, 높이 좌표)

  - 3차원 공간에서 가장 간단한 매니폴드는 사면체 모양을 띄는데 (숫자 3개로 정의 가능)

  - 요런것들은 심플렉스(simplex) 라고 부른다. 심플렉스는 매니폴드중 가장 간단한 모양이다. 

        + 실제 데이타를 모아서 만들어진 공간은 심플렉스보다는 더 복잡한 형태를 갖고 있을거다.  뭉쳐져 있다고 해서 꼭 구체같은 모양은 아니고 위상적으로 다른 모습을 띌 수도 있다.

        + 1000 차원에서 뭔가 연결되어있는 덩어리 같은 것은 우리 인간의 능력으로는 상상하긴 어렵지만

        + 우리가 tsne 같은걸로 차원을 대폭 줄여서 시각화하면 대충의 느낌을 볼 수는 있다


위의 분포표는 Fashion-MNIST 라는 소규모 학습용 데이타셋 (28*28 픽셀짜리 이미지들의 모음. 주로 옷이나 신발 같은 데이타들이 들어있다) 을 학습시킨 후의 Latent공간을 2차원으로 펴서 시각화한 것이다

   매니폴드라는 공간이 갖고 있는 기본적인 성질들이 있는데, 2차원 공간 상에 비유하자면 폐곡선을 그리는 것과 그냥 아무렇게나 선과 점을 흩어놓는 것의 차이와도 같다. 폐곡선은 직관적으로 봐도 뭔가 닫혀있는 느낌, 모아져 있는 느낌에 더해서 여러가지 위상수학적인 성질들이 있는데 이걸 n 차원에 대해서 일반화시킨 것이 매니폴드이다. 


   공간을 충분히 빡빡하게 잘 몰았다는 가정하에 그 공간안에서 아무 점이나 찍으면? 뭔가 의미있는 새로운 정보가 나오겠지? 특히 기존에 학습한 가까운 포인트로 학습된 데이타와 비슷한 특성을 갖는 정보로 말이다. 이게 생성 AI 의 대략적인 원리이다. 내가 알기론 대부분의 생성AI 의 접근법은 매니폴드 가설을 따른다. 즉,


 - 학습을 통해서 Latent space 를 정의하는데 그 공간은 매니폴드를 형성한다. 

 - 그 공간 안에서 한 점을 샘플링해서 디코딩한 결과가 생성된 결과


라고 다시 정리할 수 있겠다. (혹시나 매니폴드 가설과 무관하게 동작하는 다른 생성AI 구조를 알고 있는 분이 있다면 댓글로 알려주기 바란다.)

  - 다시 강조하지만 저 이미지 정보가 잠재공간에 그대로 들어가는 것이 아니다. 각 특질의 형태가 수백 수천 차원의 벡터들로 산산조각나서 들어간다고 보아야 한다. 그렇기 때문에 생성AI 는 단순한 복제도구가 아니며, 학습에 투입된 데이타셋 대비 모델 크기의 엄청난 압축비를 보여주게 된다.

  - 자식에게 물고기를 주는게 아니라 물고기를 잡는 법을 가르친 것처럼, 모델은 구체적인 데이타를 그대로 받아들인 것이 아니라 많은 데이타셋의 분해된 특질의 공통점을 습득한 것이다




생성AI의 대표적인 특징

1) 확률 요소가 들어간다

스테이블 디퓨전으로 그림을 찍어보거나, 채팅AI 로 대화를 뽑아보면 알겠지만 뽑을 때마다 어느정도 범위 안에서 랜덤한 결과물이 나오는게 생성ai의 묘미이다. 생성을 할 때마다 똑같은 결과가 나온다면 그건 그냥 검색엔진의 다른 형태일 뿐이다.

  - 물론 그런 검색엔진도 충분히 용도가 있다. 학습되지 않은 질문에 대해서도 대답할 수 있는 검색엔진이나, 두가지 검색 결과를 혼합해서 대답할 수 있는 검색 엔진은 쓸모가 많다.

생성AI 는 확률을 전제조건으로 하지만, 그 전에 나왔던 판별과 인식을 목적으로 하는 ai 모델들은 확정적(deterministic) 인 결과를 뽑는 모델들이다. 똑같은 고양이 사진을 모델에 줬는데 모델이 기분 좋을때는 정답을 말하다가, 어떨때는 오답을 말하고 그러면 옳게된 모델이 아닐 것이다.

그래서 우리는 확률에 대한 기초공부 없이는 생성모델을 이해할 수 없다. 이 부분에 대해서는 스터디 중간중간에 확률에 대한 개념과 표기법등을 보충설명하겠다.


2) 공간을 찾아갈 방법이 있어야 한다

공간 안에 데이타를 꾸역꾸역 집어넣긴 했는데 그 공간안의 위치를 찾아갈 방법을 모른다면? 학습한게 아무 의미가 없을 것이다. 우리가 다루는 공간은 2차원 공간이 아니라 수백차원, 수백만차원의 공간임을 기억해야 한다. 학습을 한 매니폴드가 전체 공간 안에 예쁘게 분포되어 있지 않다면 (예를 들면 최대 최소값이 어느정도 정해져 있고, 원점을 포함하고, 정규분포와 비슷한 모양을 띄고 등등) 그 모델은 실패작이다.


3) 조건을 붙일 수 있어야 더 유용하다

이미지 생성ai 의 경우에는 프롬프트 (혹은 i2i 의 경우 다른 이미지, 컨트롤 넷의 경우에는 또 다른 이미지) 를 통해서 내가 창조하고자 하는 결과물과 내 의도를 맞추는 정렬(alignment) 이 얼마나 잘 되느냐가 유용성에 크게 영향을 줄 것이다.

텍스트 생성 ai 의 경우에도, 캐릭터의 설정값으로 준 키워드들을 얼마나 언어 모델이 찰떡같이 알아듣고 챈붕이들의 아기씨앗을 훔쳐갈 단어들을 고봉밥마냥 찍어내느냐가 중요하다!

그런 특성들을 갖고 생성ai공간의 엠베딩을 찾아가는 메커니즘 = 조건부 생성 (conditional generation)

그런 조건들이 서로 조합이 된다면? 예를 들어 이미지 모델을 통해 생성할때, 몸매는 라틴녀에 얼굴은 동아시아 아이돌에, 포즈는 spit-roast 에, 복장은 , ... 이런게 잘 되면 아주 바람직한 생성 모델이 아닐 수 없겠다.


그래서 생성 AI 에서 주로 연구하는 대상은


1) 얼마나 공간을 빡빡하게 잘 모아주느냐

2) 얼마나 다양성을 보존하느냐

3) 얼마나 정렬이 잘 되느냐 (프롬프트 튜닝, 파인튜닝 등등 -> 효과적으로 특질을 골라낼 수 있게) 

4) 그 외에 성능 (저사양에서도 추출이 잘 되는지, 시간이 얼마나 걸리는지)

등등이 있겠다


일단 개론은 여기까지 하고, 다음편에서는 모든 생성AI 의 기본 역할을 해주는 오토인코더에 대해 알아보도록 하자