제2장: 핵심 개념과 기술

弘益人間 · 널리 인간을 이롭게 하라

개요

AI 생성 예술의 이면에는 복잡하지만 놀라운 수학적 원리와 기술적 메커니즘이 있습니다. 신경망(Neural Networks)이 어떻게 무작위 노이즈에서 아름다운 예술 작품을 만들어낼 수 있을까요? 텍스트 프롬프트가 어떻게 시각적 표현으로 변환될까요? 이 장에서는 AI 예술 생성의 핵심 기술적 개념들을 심도 있게 탐구합니다.

단순히 도구를 사용하는 것을 넘어, 이러한 기술의 작동 원리를 이해하는 것은 더 효과적인 AI 예술 창작을 가능하게 합니다. 모델의 한계를 알고, 최적의 파라미터를 선택하며, 예상치 못한 결과를 해석하고, 창의적인 방법으로 기술을 활용할 수 있게 됩니다.

신경망의 기초

1. 인공 뉴런과 레이어

신경망은 인간 뇌의 뉴런 구조에서 영감을 받았습니다. 인공 뉴런(Artificial Neuron)은 여러 입력을 받아 가중치(Weights)를 곱하고, 편향(Bias)을 더한 후, 활성화 함수(Activation Function)를 통과시켜 출력을 생성합니다.

입력층(Input Layer) 은닉층(Hidden Layer) 출력층(Output Layer) [x1] ──┐ ├──→ [뉴런1] ──┐ [x2] ──┤ ├──→ [뉴런5] ──→ [출력] └──→ [뉴런2] ──┘ [x3] ──┐ ┌──→ [뉴런6] ──→ [출력] ├──→ [뉴런3] ──┤ [x4] ──┘ └──→ [뉴런7] ──→ [출력] 각 연결선은 가중치(weight)를 가짐 각 뉴런은 편향(bias)과 활성화 함수를 가짐

심층 신경망(Deep Neural Networks)은 입력층과 출력층 사이에 여러 은닉층(Hidden Layers)을 가진 구조입니다. "심층(Deep)"이라는 용어는 바로 이러한 다층 구조에서 유래했습니다. 현대 AI 이미지 생성 모델은 수십에서 수백 개의 레이어를 가지며, 수억에서 수십억 개의 파라미터로 구성됩니다.

2. 합성곱 신경망 (CNN, Convolutional Neural Networks)

이미지 처리에 특화된 신경망 구조가 합성곱 신경망입니다. CNN은 이미지의 공간적 특성을 효과적으로 학습하기 위해 다음 레이어들을 사용합니다:

레이어 유형 기능 예시
합성곱층 (Conv Layer) 필터를 사용하여 특징 추출 엣지, 텍스처, 패턴 감지
풀링층 (Pooling Layer) 공간 차원을 줄이고 중요한 특징 유지 Max Pooling, Average Pooling
정규화층 (Normalization) 학습 안정성 향상 Batch Normalization, Layer Normalization
활성화층 (Activation) 비선형성 추가 ReLU, LeakyReLU, GELU

3. 잔차 연결 (Residual Connections)

ResNet(Residual Network)에서 도입된 잔차 연결은 매우 깊은 신경망을 효과적으로 학습할 수 있게 만들었습니다. 잔차 연결은 레이어의 입력을 출력에 직접 더하여, 그레디언트가 역전파될 때 "고속도로"를 제공합니다.

// 잔차 블록의 개념적 구현 (TypeScript)
class ResidualBlock {
  conv1: ConvLayer;
  conv2: ConvLayer;

  forward(x: Tensor): Tensor {
    // 원본 입력 저장
    const identity = x;

    // 합성곱 연산
    let out = this.conv1.forward(x);
    out = relu(out);
    out = this.conv2.forward(out);

    // 잔차 연결: 입력을 출력에 더함
    out = out.add(identity);
    out = relu(out);

    return out;
  }
}

// 이러한 블록을 수십 개 쌓아 깊은 네트워크 구성
// Stable Diffusion의 UNet은 잔차 블록을 광범위하게 사용

어텐션 메커니즘과 트랜스포머

1. 셀프 어텐션 (Self-Attention)

어텐션 메커니즘은 2017년 "Attention is All You Need" 논문에서 소개된 후 AI 분야를 혁신했습니다. 어텐션은 입력의 각 부분이 다른 부분들과 얼마나 관련이 있는지를 계산하여, 중요한 정보에 집중할 수 있게 합니다.

예를 들어, "빨간 드레스를 입은 여성이 파란 하늘 아래 서 있다"라는 프롬프트에서, "빨간"이라는 단어는 "드레스"와 강한 연관성을 가지고, "파란"은 "하늘"과 연관됩니다. 어텐션 메커니즘은 이러한 관계를 자동으로 학습합니다.

어텐션의 작동 원리

어텐션은 Query(질의), Key(키), Value(값) 세 가지 벡터를 사용합니다:

  1. Query 생성: 현재 토큰에서 Query 벡터 생성
  2. Key 매칭: 모든 토큰의 Key 벡터와 Query를 내적하여 유사도 계산
  3. 소프트맥스 정규화: 유사도 점수를 확률 분포로 변환
  4. Value 가중합: 확률을 가중치로 사용하여 Value 벡터들의 가중 평균 계산
Attention(Q, K, V) = softmax(Q·K^T / √d_k) · V

여기서:
- Q: Query 행렬
- K: Key 행렬
- V: Value 행렬
- d_k: Key 벡터의 차원 (스케일링 팩터)

2. 교차 어텐션 (Cross-Attention)

텍스트-이미지 생성에서 핵심적인 역할을 하는 것이 교차 어텐션입니다. 교차 어텐션은 두 가지 다른 소스의 정보를 연결합니다. 예를 들어, 이미지 생성 과정에서 현재 이미지의 특징(Query)과 텍스트 프롬프트의 의미(Key, Value)를 연결합니다.

// 교차 어텐션의 개념적 구현
class CrossAttention {
  qProj: Linear;  // Query 투영
  kProj: Linear;  // Key 투영
  vProj: Linear;  // Value 투영

  forward(image_features: Tensor, text_embeddings: Tensor): Tensor {
    // 이미지 특징에서 Query 생성
    const Q = this.qProj.forward(image_features);

    // 텍스트 임베딩에서 Key와 Value 생성
    const K = this.kProj.forward(text_embeddings);
    const V = this.vProj.forward(text_embeddings);

    // 어텐션 점수 계산
    const scores = Q.matmul(K.transpose()) / Math.sqrt(K.size(-1));
    const attention_weights = softmax(scores);

    // 가중 평균 계산
    const output = attention_weights.matmul(V);

    return output;
  }
}

// Stable Diffusion의 UNet은 각 레이어에서
// 텍스트 조건을 이미지에 주입하기 위해 교차 어텐션 사용

3. CLIP: 텍스트와 이미지의 연결

CLIP(Contrastive Language-Image Pre-training)은 OpenAI가 개발한 모델로, 텍스트와 이미지를 공통의 임베딩 공간에 매핑합니다. CLIP은 4억 개의 이미지-텍스트 쌍으로 학습되었으며, 텍스트 설명과 그에 해당하는 이미지가 임베딩 공간에서 가까워지도록 훈련되었습니다.

구성 요소 역할 아키텍처
텍스트 인코더 텍스트를 벡터로 변환 Transformer (12레이어, 512차원)
이미지 인코더 이미지를 벡터로 변환 Vision Transformer 또는 ResNet
대조 학습 매칭되는 쌍 가깝게, 아닌 쌍 멀게 Contrastive Loss

확산 모델의 수학적 원리

1. 순방향 확산 과정 (Forward Process)

확산 모델의 순방향 과정은 마르코프 체인(Markov Chain)으로 모델링됩니다. 각 단계 t에서 이미지 x에 가우시안 노이즈를 추가합니다:

순방향 확산 수식

q(x_t | x_{t-1}) = N(x_t; √(1-β_t) · x_{t-1}, β_t · I)

여기서:
- x_t: 시간 t에서의 노이즈가 추가된 이미지
- x_{t-1}: 이전 단계의 이미지
- β_t: 시간 t에서의 노이즈 스케줄 (0 < β_t < 1)
- N: 가우시안 분포
- I: 단위 행렬

T 단계 후, x_T는 거의 순수한 가우시안 노이즈가 됨

중요한 특성은 재파라미터화 기법(Reparameterization Trick)을 사용하면 임의의 시간 t에서 직접 노이즈 이미지를 생성할 수 있다는 것입니다:

x_t = √(α̅_t) · x_0 + √(1 - α̅_t) · ε

여기서:
- x_0: 원본 이미지
- α̅_t = ∏(1 - β_i) for i=1 to t
- ε ~ N(0, I): 표준 가우시안 노이즈

이를 통해 학습 시 임의의 시간 단계를 샘플링하여 효율적으로 학습 가능

2. 역방향 확산 과정 (Reverse Process)

생성 과정은 역방향 확산으로, 노이즈에서 시작하여 점진적으로 이미지를 복원합니다. 신경망은 각 단계에서 추가된 노이즈를 예측하도록 학습됩니다:

// 역방향 확산의 단일 단계
function denoise_step(x_t: Tensor, t: number, text_embedding: Tensor): Tensor {
  // UNet으로 노이즈 예측
  const predicted_noise = unet(x_t, t, text_embedding);

  // 노이즈 제거하여 x_{t-1} 생성
  const alpha_t = alphas[t];
  const alpha_bar_t = alpha_bars[t];
  const beta_t = betas[t];

  // DDPM 샘플링 공식
  const x_t_minus_1 = (1 / Math.sqrt(alpha_t)) *
    (x_t - ((beta_t / Math.sqrt(1 - alpha_bar_t)) * predicted_noise));

  // 마지막 단계가 아니면 노이즈 추가 (확률적 샘플링)
  if (t > 1) {
    const noise = randn_like(x_t);
    x_t_minus_1 += Math.sqrt(beta_t) * noise;
  }

  return x_t_minus_1;
}

// 전체 생성 과정
function generate(text_prompt: string, num_steps: number = 50): Tensor {
  const text_embedding = encode_text(text_prompt);
  let x = randn([4, 64, 64]);  // 잠재 공간에서 시작

  for (let t = num_steps; t >= 1; t--) {
    x = denoise_step(x, t, text_embedding);
  }

  // VAE 디코더로 이미지 복원
  const image = vae_decoder(x);
  return image;
}

3. 분류자 없는 가이던스 (Classifier-Free Guidance)

분류자 없는 가이던스는 텍스트 프롬프트에 대한 충실도를 높이는 핵심 기술입니다. 조건부 생성과 무조건부 생성의 차이를 증폭시켜 프롬프트를 더 잘 따르는 이미지를 생성합니다:

// 분류자 없는 가이던스
ε̃ = ε_uncond + guidance_scale × (ε_cond - ε_uncond)

여기서:
- ε_cond: 텍스트 조건이 있을 때 예측된 노이즈
- ε_uncond: 텍스트 조건 없이 예측된 노이즈
- guidance_scale: 가이던스 강도 (보통 7-15)
- ε̃: 최종 노이즈 예측

guidance_scale이 클수록:
  - 프롬프트를 더 충실히 따름
  - 이미지가 더 선명하고 디테일함
  - 다양성이 감소할 수 있음

guidance_scale이 작을수록:
  - 더 다양한 결과
  - 프롬프트 충실도 감소
  - 때때로 더 자연스러운 결과

잠재 확산 모델 (Latent Diffusion Models)

1. VAE를 통한 차원 축소

Stable Diffusion의 핵심 혁신은 픽셀 공간이 아닌 잠재 공간(Latent Space)에서 확산을 수행한다는 것입니다. 이를 위해 변분 오토인코더(VAE, Variational Autoencoder)를 사용합니다:

원본 이미지 잠재 표현 복원된 이미지 512×512×3 → 인코더 → 64×64×4 → 디코더 → 512×512×3 (786,432차원) (16,384차원) (786,432차원) ↓ 확산 과정은 여기서 수행 (48배 적은 차원!)

이러한 접근의 장점은 다음과 같습니다:

2. UNet 아키텍처

확산 모델의 노이즈 예측 네트워크로 UNet이 사용됩니다. UNet은 원래 의료 이미지 분할을 위해 개발되었지만, 확산 모델에 완벽하게 적합한 구조입니다:

UNet 구성 요소 기능 특징
다운샘플링 경로 점진적으로 해상도 축소 ResNet 블록 + 다운샘플링
병목 지점 가장 압축된 표현 Self-Attention 레이어
업샘플링 경로 점진적으로 해상도 복원 ResNet 블록 + 업샘플링
스킵 연결 다운-업 경로 직접 연결 세부 정보 보존
시간 임베딩 현재 타임스텝 정보 주입 사인 위치 인코딩
교차 어텐션 텍스트 조건 통합 각 레이어에서 텍스트 참조

프롬프트 엔지니어링 기법

1. 효과적인 프롬프트 구조

프롬프트 엔지니어링은 AI 예술 생성에서 가장 중요한 실용적 기술입니다. 효과적인 프롬프트는 명확한 구조를 따릅니다:

// 프롬프트 템플릿
[주제] + [설명] + [스타일] + [구도] + [조명] + [품질 키워드]

예시 1: 사실적 초상화
"A young woman with flowing red hair, green eyes,
gentle smile, wearing elegant Victorian dress,
photorealistic portrait, studio lighting, soft focus background,
highly detailed, 8k, professional photography"

예시 2: 판타지 풍경
"Ancient elven city built into giant trees,
waterfalls flowing between branches, bioluminescent plants,
magical atmosphere, fantasy art style by Alan Lee,
golden hour lighting, cinematic composition,
epic scale, masterpiece, trending on artstation"

예시 3: 추상 예술
"Abstract representation of quantum entanglement,
flowing energy particles, interconnected nodes,
vibrant colors of blue and purple gradients,
digital art, symmetrical composition,
high contrast, 4k resolution"

2. 가중치와 강조

많은 AI 이미지 생성 도구는 프롬프트의 특정 부분에 가중치를 부여하는 문법을 지원합니다:

// Stable Diffusion 가중치 문법
(keyword)      - 1.1배 강조
((keyword))    - 1.21배 강조 (1.1^2)
[keyword]      - 0.9배 약화
(keyword:1.5)  - 1.5배 정확한 가중치

예시:
"(masterpiece:1.4), (best quality:1.3), beautiful landscape,
[low quality], [blurry]"

// 여러 개념 혼합
"[cyberpunk:fantasy:0.7]"
→ 처음 70%는 cyberpunk, 나머지 30%는 fantasy로 전환

3. 부정 프롬프트 (Negative Prompts)

부정 프롬프트는 원하지 않는 요소를 명시적으로 제외합니다. 이미지 품질을 크게 향상시킬 수 있습니다:

// 일반적인 부정 프롬프트 템플릿
품질 관련:
"low quality, blurry, pixelated, jpeg artifacts,
low resolution, compressed, distorted"

해부학적 문제:
"bad anatomy, deformed, mutated, extra limbs,
missing fingers, poorly drawn hands, poorly drawn face"

아티팩트:
"watermark, signature, username, text,
cropped, out of frame, duplicate"

스타일 제외:
"cartoon, anime, 3d render" (사실적 이미지 생성 시)

핵심 요점

복습 질문

  1. 인공 뉴런의 기본 작동 원리를 설명하고, 가중치(weights), 편향(bias), 활성화 함수(activation function)의 역할을 각각 기술하십시오. 왜 활성화 함수가 비선형이어야 합니까?
  2. 합성곱 신경망(CNN)이 일반 신경망에 비해 이미지 처리에 더 효과적인 이유를 설명하십시오. 합성곱층, 풀링층, 정규화층의 각 역할을 논의하십시오.
  3. 잔차 연결(Residual Connections)이 깊은 신경망 학습에 어떻게 도움이 되는지 설명하고, 그레디언트 소실 문제(Vanishing Gradient Problem)와의 관계를 논의하십시오.
  4. 어텐션 메커니즘에서 Query, Key, Value의 개념을 설명하고, 셀프 어텐션과 교차 어텐션의 차이점을 실제 응용 예시와 함께 기술하십시오.
  5. CLIP 모델의 대조 학습(Contrastive Learning) 방법을 설명하고, 이것이 텍스트-이미지 생성 모델에서 어떻게 활용되는지 논의하십시오.
  6. 확산 모델의 순방향 과정과 역방향 과정을 수학적으로 설명하십시오. 재파라미터화 기법이 학습 효율성을 어떻게 향상시킵니까?
  7. 분류자 없는 가이던스(Classifier-Free Guidance)의 작동 원리와 guidance_scale 파라미터가 생성 결과에 미치는 영향을 설명하십시오. 최적의 값을 선택하는 방법은 무엇입니까?
  8. 잠재 확산 모델(Latent Diffusion Models)이 픽셀 공간 확산에 비해 가지는 장점을 계산 효율성, 학습 안정성, 생성 품질 측면에서 논의하십시오. VAE의 역할은 무엇입니까?