1. 지도 학습(Supervised Learning)과 비지도 학습(Unsupervised Learning)
지도 학습(Supervised Learning)
: 데이터 x와 라벨 y가 한 쌍으로 주어지며, 모델이 x를 입력 받아 y로 매핑하는 함수(F(x) ➡️ y)를 학습한다.
분류(Classification)
: 이미지를 입력으로 받으면 그 이미지가 어떤 카테고리에 속하는지 예측
회귀(Regression)
: 입력값에 따른 연속적인 출력을 예측하는 문제. 예를 들어 주식 가격 예측
객체 탐지(Object Detection)
: 이미지 내의 여러 객체를 찾아내고, 각 객체의 종류와 위치를 예측하는 작업
이미지 캡셔닝(Image Captioning)
: 이미지 속 상황을 설명하는 문장을 생성하는 작업
비지도 학습(Unsupervised Learning)
: 라벨이 없는 데이터 x만 주어지며, 데이터의 숨겨진 구조를 학습하는 것을 목표로 한다.
군집화(Clustering)
: 데이터가 서로 비슷한 특성을 가진 것끼리 그룹으로 묶는 작업이다.
예를 들어, 사람의 소비 패턴을 분석해 비슷한 성향을 가진 사람끼리 묶어내는 것이다. 이를 통해 기업을 소비자 그룹별 맞춤형 마케팅을 할 수 있다. 이때, 데이터를 얼마나 비슷하게 묶어내는지가 중요하다.
군집화 알고리즘으로는 대표적으로 K-평균 군집화가 있다. 이 알고리즘은 데이터를 K개 그룹으로 나누고, 각 그룹의 중심을 찾고 업데이트하는 과정을 반복하며 비슷한 데이터를 한 그룹으로 묶는다.
차원 축소(Dimensionality Reduction)
: 고차원의 데이터를 저차원으로 줄여 더 쉽게 분석할 수 있도록 하는 기법이다. 데이터를 쉽게 이해하고 시각화하거나 연산 속도를 빠르게 하는 데에 도움이 된다.
예를 들어, 얼굴 인식 시스템에서 사람의 얼굴을 구성하는 수 많은 픽셀을 단순하게 "눈, 코, 입의 위치" 라는 몇 개의 주요 정보로 요약하는 것이다. 대표적인 예시로 PCA가 있는데, 이는 데이터의 주요한 특성만 남겨 불필요한 정보를 줄인다.
특성 학습(Feature Learning)
: 데이터에서 유용한 Feature를 자동으로 학습해내는 방법이다.
예를 들어, 이미지 인식 시스템이 학습을 통해 "고양이는 귀가뾰족하고 강아지는 귀가 둥글거려!" 라는 특징을 스스로 찾는 것이다.
이미지에서 선명한 선이나 색상 패턴 등이 특성이 될 수 있다. 이를 통해 중요한 정보를 데이터에서 스스로 추출할 수 있어, 데이터 분석이나 머신 러닝에 매우 유용하다. 특성 학습을 위한 방법으로는 Neural Networks를 사용한 방법이 널리 쓰인다.
밀도 추정(Density Estimation)
: 데이터의 분포를 파악하고 새 데이터가 어디에 속할지 예측하는 방법이다.
예를 들어 온라인 쇼핑몰에 특정 시간대에 얼마나 많은 사람이 몰리는지를 예측하는 것이다.
밀도 추청은 데이터의 분포를 파악해 향후 예측에 유용하게 쓰일 수 있으며, 특히 이상치(일반적인 데이터와는 다르게 튀는 데이터)를 발견하는 데에도 활용된다. 밀도 추청 방법으로는 히스토그램이나 커널 밀도 추청 같은 기법이 있다.
2. 생성 모델(Generative Models)
목적: 주어진 데이터와 비슷한 새로운 데이터를 생성하는 모델로, 비지도 학습의 Density estimation(밀도 추정) 문제를 해결한다.
❓ 여기서 Density estimation(밀도 추정) 문제란?
: 기법에 대한 문제가 아니라, 데이터가 어떻게 분포하는지 알아내는 문제 자체를 의미한다. 즉, 데이터가 어떤 분포를 따르는지 예측하는 것이 밀도 추정 문제의 핵심이다.
Density estimation(밀도 추정)을 하는 방법에는 2가지가 있다.
1. Explicit Density Estimation (명시적) - 규칙O
: 우리가 만들고 싶은 데이터의 확률 분포를 명확하게 정의하고 그에 따라 데이터를 생성하는 방식이다. 쉽게 말해서, 어떤 규칙을 먼저 정하고 그 규칙을 따라서 데이터를 만드는 것이다.
예를 들면 우리가 무작위 점수를 생성하는 프로그램을 만든다고 하면, "이 점수들의 평균은 75이고, 범위는 60점 이상이고 90점 이하로 만들어야해!" 라고 규칙을 정하면 이 규칙을 확률 분포라고 볼 수 있고, 이 확률 분포(규칙)을 기반으로 데이터(점수)를 만들어 내는 것이 Explicit Density Estimation이다.
[주요 예시]
정규분포: 평균과 표준 편차를 정해 놓고 데이터를 생성하는 방식
VAE: 데이터를 만들기 전에 어떤 확률 분포를 따르도록 하고 그 분포에 맞춰서 데이터를 만들어내는 방식
해당 방식은 만든 데이터가 실제로 이 규칙을 잘 따르는지 평가할 수 있다는 장점이 있지만, 복잡한 규칙을 설정하려면 복잡할 수 있다는 단점이 있다.
2. Implicit Density Estimation (암시적) - 규칙X
: 우리가 데이터의 "확률 분포"를 따로 정하지 않고, 단순히 데이터를 만들어 내는 방법을 학습하는 방식이다. 즉, 규칙을 명확히 정하지 않고도 원래 데이터처럼 보이는 새로운 데이터를 생성할 수 있다.
예를 들면 우리가 무작위 점수를 생성하는 프로그램을 만든다고 하면, 따로 규칙을 정하지 않고 그냥 기존의 학생들이 받았던 점수들을 바탕으로 비슷한 점수를 만들어 내는 방법을 배우는 것이다. 이렇게 하면 명확한 규칙을 따르지 않지만, 기존 데이터처럼 보이는 결과를 만들 수 있다.
[주요 예시]
GAN: 기존 데이터를 흉내 내면서 비슷한 데이터를 만들어 내는 방식
해당 방식은 복잡한 규칙을 몰라도 실제 데이터와 비슷하게 보이는 결과를 만들 수 있다는 장점이 있지만, 만든 데이터가 특정 규칙을 얼마나 잘 따르는지 평가하기가 어렵다는 단점이 있다.
Generative Models을 이용하여 얻을 수 있는 것은 무엇인가?
1. 현실적인 샘플 생성
: Generative Model을 사용하면 예술 작품, 고해상도 이미지 생성, 채색 등과 같이 실제와 유사한 샘플을 만들어 낼 수 있다.
2. 시계열 데이터의 생성 모델(시간에 따라 변하는 데이터 생성)
: Generative Model은 시계열 데이터(예를 들면, 주식 가격이나 날씨 변화)를 생성하는 데도 유용하다. 예를 들어 강화 학습(스스로 학습하는 인공지능)을 사용할 때, 현신에서 바로 데이터를 얻기 어려운 경우에 컴퓨터가 가상의 데이터를 만들어 학습을 할 수 있게 도와준다.
3. 잠재 표현 학습(숨겨진 특징 찾기)
: Generative Model은 데이터 속에 숨어 있는 특징이나 패턴을 알아내는 데도 좋다. 예를 들어, 인물의 얼굴 사진을 보고 눈, 코 입의 위치와 같은 중요한 정보를 파악해서 나중에 다른 얼굴을 만들 때 활용할 수 있다.
3. PixelRNN/CNN
Fully Visible Belief Network
: Implicit Density Estimation의 일종으로, 이미지를 pixel 하나하나의 단위로 나눠서 분석하는 방법이다.
동작하는 방식
- 이미지를 그릴 때 좌측 상단부터 한 pixel씩 채워나간다.
- 각 pixel은 그 전에 그린 pixel들을 보고 "내가 어떤 색을 가져야 자연스러운 이미지가 될까?"를 결정한다.
- 예를 들어, 나무 사진을 그린다고 할 때, 왼쪽 위에 있는 픽셀들이 나무의 갈색 줄기를 나타낸다며느 그 아래쪽 픽셀들은 갈색을 이어가거나 나뭇잎의 초록색으로 변하는 식으로 pixel이 채워진다.
수식으로 본다면 이미지 전체 확률 p(x)를 계산할 때, 이미지를 구성하는 각 픽셀들이 이전에 생성된 pixel에 의존해서 순서대로 값을 갖게 된다.
PixelRNN
: 이미지를 하나의 네트워크로 순차적으로 생성하는 모델이다.
쉽게 말해서, Fully Visible Belief Network와 비슷하게 이미지를 한 pixel씩 채워 나가는 방법이지만, RNN을 이용해서 이전에 채운 픽셀을 참고해서 그린다. RNN은 이전에 한 작업을 기억하고 다음 작업에 반영하는 방식(LSTM)이라, 이 기능을 이용해 이미지를 더욱 자연스럽게 만든다.
동작하는 방식
- 처음에는 맨 왼쪽 위 픽셀에서 시작해서 다음 줄로 넘어가기 전까지 한줄을 생성한다.
- 그 다음 아래 줄도 같은 방식으로 생성하고, 이런 식으로 이미지 전체를 완성한다.
- 가장 오른쪽 사진에서 초록색으로 표시된 픽셀들이 이미 생성된 픽셀들이고, 회색 픽셀들은 아직 생성되지 않은 부분이다. 이전 픽섹들의 정보에 의존해 새로운 픽셀을 생성하기 때문에 자연스러운 연결이 가능하다.
- 쉬운 예시로 하늘 사진을 그릴 떄, 맨 위 줄에 있는 픽셀은 하늘색을 가지게 되고, 다음 줄로 내려가면서 점점 구름 색인 흰색을 가지게 되는 픽셀들을 추가하는 식으로 자연스럽게 이어지는 이미지를 만든다.
RNN을 이용하면 순차적으로 픽셀을 생성하기 때문에 굉장히 속도가 느리다는 단점이 있다. 이러한 단점을 보안하기 위한 방법이 CNN이다.
PixelCNN
RNN은 이전 픽셀을 하나씩 차례로 기억하고 계산하는 방식이라면 CNN은 한눈에 특정 범위(context region)를 한번에 보고 가장 적합한 픽셀을 계산하는 방식이라 속도가 더 빠르다.
동작하는 방식
- 각 픽셀을 생성할 때, 바로 앞 픽셀들의 정보만을 참고하도록 필터를 사용하여 context region을 설정한다. (왼쪽과 위쪽의 픽셀만 고려해 현재 픽셀을 결정하도록 한다.)
- 각 픽셀에 대해서 Softmax 손실을 적용해 가장 적합한 픽셀 값을 결정한다.
PixelRNN과 PixelCNN의 비교
PixelRNN
- 확률 분포를 명확하게 계산할 수 있다. 즉, 각 픽셀이 특정 확률 분포를 따르는 지 명시적으로 알 수 있다.
- 각 픽셀이 이전 픽셀들에 의존해서 생성되기 때문에 이미지의 자연스러움이 보장된다.
PixelCNN
- 속도가 빠르다. CNN을 사용하기 때문에 context region을 한번에(병렬로)처리할 수 있어 PixelRNN보다 효율적이다.
- 학습 및 생성 소곧가 빠르기 떄문에 큰 데이터 셋에서도 사용하기 적합하다.
VAE(Variational Autoencoders)
: 이미지를 압축하여 중요한 특징을 담은 벡터(latent space)로 만들고, 이 벡터를 사용해 이미지를 다시 생성할 때, 무작위성을 부여해서 원래의 이미지만 복원하는게 아니라 원래 이미지와 비슷하지만 조금씩 다른 버전도 만드는 것이다.
Autoencoder란 무엇인가?
: 입력 데이터를 압축하고 다시 원래 형태로 복원하는 과정에서 중요한 특징을 학습하는 신경망이다.
Encoder
: 입력 데이터를 특징 벡터 z로 압축한다.
Decoder
: 이 압축된 특징 벡터를 다시 원래 데이터로 복원한다.
즉, AutoEncoder는 입력을 요약해서 노이즈를 제거한 중요한 데이터를 남기고, 이를 사용해 원래 데이터와 유사하게 복원하는 모델이다. 변형 없이 원래의 데이터와 유사하게 복원만 한다.
VAE(Variational Autoencoders)이란 무엇인가?
: AutoEncoder의 확장 버전으로, 데이터를 압축할 때 무작위성을 추가해 기존 데이터와 함께 기존 데이터를 기반으로하는 다양한 새로운 데이터를 생성하는 것이다.
VAE의 작동 방식
Encoder
: 원래 데이터를 입력 받아 특징 벡터 z를 만든다. 이때 VAE는 무작위성을 더해 여러 다양한 z 값을 생성할 수 있도록 한다. 같은 데이터라 해도 조금씩 다른 z가 나오도록 하여, 비슷하지만 다양한 특징을 가진 데이터를 만들어낸다.
Sampling
: 인코더에서 나온 평균(특징 벡터 z가 대략적으로 어디에 위치해야하는지)과 분산(특징 벡터 z가 평균 주변에서 어느 정도로 퍼질 수 있는지)을 사용해 잠재 변수 z를 샘플링한다. 이렇게 하면 다양한 데이터를 샘플링할 수 있기 때문에 원래 데이터와 비슷하면서도 다른 변형된 데이터를 생성할 수 있다.
Decoder
: 이 샘플링한 z 값을 사용해 원래 데이터a와 비슷한 이미지를 복원한다. 디코더는 AutoEncoder와 비슷하게 동작하지만 다양한 z값이 있기 때문에 다양하고 새로운 데이터를 생성할 수 있다.
VAE(Variational Autoencoders)의 핵심 아이디어
1. 잠재 공간(Latent Space)
: 데이터를 저차원 공간으로 압축하여 중요한 특징만을 담는다.
2. 특징 조절 가능
: 이 잠재 공간에서 특정 변수를 조절하면 데이터의 특정 특징(웃음의 정도, 머리 각도)을 바꿀 수 있다.
3. 새로운 데이터 생성
: 학습된 분포에서 무작위로 샘플링하여 원래와 비슷하지만 새로운 데이터를 만들 수 있다.
VAE(Variational Autoencoders)의 단점
1. 근사 분포 사용
: VAE는 계산이 어려운 분포를 대신할 수 있는 근사 분포를 사용한다. 이 근사 과정에서 정보 손실이 발생할 수 있으며, 이미지가 흐릿하게 나오는 원인이 될 수 있다.
2. 무작위성의 도입
: VAE는 무작위성 과정을 통해 데이터를 생성하기 때문에, 원래 데이터와 완전 똑같이 복원하기 보다는 비슷하지만 부드러운 느낌의 이미지를 생성하게 된다.
VAE(Variational Autoencoders)와 PixelRNN/CNN의 비교
PixcelRNN/CNN은 각 픽셀을 순서대로 예측하고 생성하는 방식을 사용한다. 이 방식은 VAE처럼 잠재 공간을 사용하지 않고 이미지를 하나하나 최적화하면서 생성하기 때문에 퀄리티가 좋은 이미지를 만들 수 있다. 반면에 VAE는 전체 이미지를 잠재 변수를 통해 한번에 생성하는 방식이기 때문에 개별 픽셀을 세밀하게 조정하지 못해 상대적으로 이미지가 흐릿할 수 있다.
GAN(Generative Adversarial Networks)
: Generator(fake 데이터 생성자)와 Discriminator(fake 데이터 감별사)가 서로 경쟁하면서 Generator(fake 데이터 생성자)는 좀 더 진짜와 같은 데이터를 생성하도록 발전하고, Discriminator(fake 데이터 감별사)는 fake 데이터를 더 예민하게 판별하도록 성장하는 것이 GAN의 개념이다.
Generator
1차원 벡터 데이터를 이용해서 Fake Data를 만들어낸다. 처음에는 티가 나는 Fake Data이라고 할지라고 점점 가면서 Discriminator를 속이기 위해 진짜와 같은 데이터를 만들어내려고 성장한다.
Discriminator
실제 존재하는 이미지 인지, Generator가 생성한 Fake Data인지는 모르는 상태에서 들어온 입력이 실제 이미지라면 1에 가까운 수치를 출력, Fake Data라고 판단하면 0에 가까운 수치를 출력하도록 성장한다.
Forward Propagation과 Back Propagation
위와 같은 싱글 Layer 신경망을 가지는 Genrator와 Discriminator를 가지는 GAN이 있을 때 순전파와 역전파를 통해서 서로 어떻게 가중치를 업데이트하면서 성장하는지 알아보자.
Discriminator의 backpropagation(gradient 구하기)
Generator의 backpropagation(gradient 구하기)
Generator에서는 Discriminator의 출력이 1이 되도록 학습하는 것이 목표이다. 따라서 위 D(G(z))를 최대화 하는 것이 목표이다. 즉, 로그의 값이 커질 수록 Loss의 값이 줄어들기 때문에 로그의 값을 최대화 하는 것이 목표이다.
이렇게 Generator와 Discriminator는 서로를 속이기위해서 가중치를 최적화시키는 과정을 반복한다.
DCGAN
GAN을 이용한 연구중 CNN을 결합하는 방식이 있는데 이게 바로 DCGAN이다.
이 방식을 이용하면 기존의 GAN만을 이용한 것보다 훨씬 더 진짜같은 이미지를 많이 만들어낼 수 있다.
Interpretable Vector Math: 벡터 연산을 이용한 새로운 이미지 생성하기
'안경 쓴 남자' 이미지에서 '안경을 쓰지 않은 남자' 이미지를 빼면, 이 연산을 통해 '안경을 쓴다는 특성' 자체가 벡터 형태로 추출된다. 이는 '안경'이라는 특정 속성을 잠재 공간에서 벡터로 표현한 것이다.
이후, '안경을 쓰지 않은 여성' 이미지에 이 '안경 특성 벡터'를 더하면, 그 여성 이미지에도 안경이 추가된 것처럼 변형된다. 결과적으로 GAN은 잠재 공간(중요한 특성을 압축하여 표현하는 공간)에서 '안경'이라는 속성을 다른 이미지에 전이하여 적용할 수 있게 된다.
즉, GAN이 학습한 잠재 공간에서 특정 속성을 벡터 형태로 추출하고, 이를 다른 이미지에 더하는 방식으로 이미지 속성을 조작할 수 있게 되는 것이다.
'CVLab > cs231n (2017)' 카테고리의 다른 글
Lecture 16: Adversarial Examples and Adversarial Training (1) | 2024.11.01 |
---|---|
Lecture 15: Efficient Methods and Hardware for Deep Learning (1) | 2024.11.01 |
Lecture 14: Deep Reinforcement Learning (1) | 2024.11.01 |