220913

AIVILLAIN·2022년 9월 13일
0

오공완

목록 보기
6/25

LSTM으로 텍스트 생성하기

순환 신경망으로 시퀀스 데이터 생성
음성 합성, 챗봇 등에도 활용 가능

시퀀스 데이터를 생성하는 일반적인 방법은 이전 토큰을 입력으로 시퀀스으 다음 1개 혹은 몇 개의 토큰을 예측하는 것
이전 토큰들이 주어졌을 때 다음 토큰의 확률을 모델링 할 수 있는 네트워크를 언어 모델이라고 부름
언어 모델은 언어의 통계적 구조인 잠재 공간을 탐색

언어 모델을 훈련하고 나면 이 모델에서 샘플링 가능
초기 텍스트 문자열을 주입하고 새로운 글자나 단어를 생성, 생성된 출력은 다시 입력 데이터로 추가
해당 과정의 반복을 통해 모델이 훈련한 데이터 구조가 반영된 임의의 길이를 갖는 시퀀스 생성 가능
텍스트 말뭉치(corpus)에서 N개의 글자로 이루어진 문자열을 추출하여 주입, N+1번째 글자 예측하도록 훈련
모델의 출력은 출력 가능한 모든 글자에 해당하는 소프트맥스 값
(다음 글자의 확률 분포)
글자 수준의 신경망 언어 모델

샘플링 전략의 중요성

텍스트 생성 시 다음 글자를 선택하는 방법은 중요
단순한 방법은 항상 가장 높은 확률을 가진 글자를 선택하는 탐욕적 샘플링 (greedy sampling)
반복적이고 예상 가능한 문자열을 만들기 때문에 논리적인 언어처럼 보이지 않음

다음 글자의 확률 분포에서 샘플링하는 과정에 무작위성을 주입한 확률적 샘플링 방식
소프트맥스 출력은 확률적 샘플링에 사용하기 좋음
훈련 데이터에는 없지만 실제 같은 새로운 단어를 만듬
샘플링 과정에서 무작위성의 양을 조절할 방법이 없음

균등 확률 분포에서 다음 글자를 추출하는 완전 무작위 샘플링이 있다고 가정 (모든 글자의 확률이 같음)
이 구조는 무작위성이 최대 (이 확률 분포는 최대의 엔트로피를 가짐)

샘플링 과정에서 확률의 양을 조절하기 위해 소프트맥스 온도라는 파라미터 사용
샘플링에 사용되는 확률 분포의 엔트로피를 나타냄

글자 수준의 LSTM 텍스트 생성 모델 구현

니체의 글을 사용하여 모델 구현
학습할 언어 모델은 일반적인 영어 모델이 아닌 니체의 문체와 특정 주제를 따르는 모델이 될 것

훈련된 모델과 시드로 쓰일 간단한 텍스트가 주어지면

  1. 생성된 텍스트를 주입하여 모델에서 다음 글자에 대한 확률 분포를 뽑음
  2. 특정 온도로 이 확률 분포의 가중치 조정
  3. 가중치가 조정된 분포에서 무작위로 새로운 글자 샘플링
  4. 새로운 글자를 생성된 텍스트 끝에 추가

해당 과정 반복하여 새로운 텍스트 생성

낮은 소프트맥스 온도는 아주 반복적이고 예상되는 텍스트를 만듬
국부적인 구조는 실제와 매우 같음
특히 모든 단어가 실제 영어 단어
높은 온도에서 생성된 텍스트는 그럴싸해보이는 새로운 단어를 창조하나 국부적인 구조가 무너짐
대부분 단어가 어느 정도 무작위한 문자열로 보임
다양한 샘플링 전력으로 실험해 볼 필요가 있음
학습된 구조와 무작위성 사이 균형을 잘 맞추면 흥미로운 것을 만들 수 있음

글자를 연속해서 나열하기 위한 통계 모델에서 데이터를 샘플링한 것 뿐

변이형 오토인코더를 사용한 이미지 생성

이미지의 잠재 공간에서 샘플링하기

이미지 생성의 핵심 아이디어는 각 포인트가 실제와 같은 이미지로 매핑될 수 있는 저차원 잠재 공간의 표현을 만드는 것

잠재 공간의 한 포인트를 입력으로 받아 이미지를 출력하는 모듈을 GAN에서는 생성자(generator), VAE(변이형 오토인코더)에서는 디코더라고 부름
잠재 공간이 만들어지면 포인트 하나를 특정하거나 무작위로 샘플링 가능
이미지 공간으로 매핑하여 이전에 본 적 없는 이미지 생성

GAN과 VAE는 이미지 잠재 공간 표현을 학습하는 2개의 전략
각각 나름의 특징을 가짐
VAE는 구조적인 잠재 공간을 학습하는 데 뛰어남
GAN은 실제 같은 이미지를 만듬 (구조적이거나 연속성이 없을 수 있음)

이미지 변형을 위한 개념 벡터

잠재 공간이나 임베딩 공간이 주어지면 이 공간의 어떤 방향은 원본 데이터의 흥미로운 변화를 인코딩한 축일 수 있음
얼굴 이미지에 대한 잠재 공간에 웃음 벡터가 있을 수 있음
잠재 공간의 z 포인트가 어떤 얼굴의 임베딩된 표현이라면 잠재 공간의 z + s 포인트는 같은 얼굴이 웃고 있는 표현을 임베딩
이런 벡터를 찾아내면 이미지를 잠재 공간에 투영해서 의미 있는 방향으로 이 표현을 이동한 후 이미지 공간으로 디코딩하여 복원하면 변형된 이미지를 얻을 수 있음

변이형 오토 인코더

개념 벡터를 사용하여 이미지를 변형하는데 아주 적합
오토 인코더는 입력을 저차원 잠재 공간으로 인코딩 후 디코딩하여 복원하는 네트워크
변이형 오토인코더는 딥러닝과 베이즈 추론의 아이디어를 혼합한 오토인코더의 최신 버전

이미지를 입력받아 인코더 모듈을 사용하여 잠재 벡터 공간으로 매핑
디코더 모듈을 사용해서 원본 이미지와 동일한 차원으로 복원하여 출력
입력 이미지와 동일한 이미지를 타깃 데이터로 사용하여 훈련
(원본 입력을 재구성하는 방법을 학습
인코더에 출력에 여러 제약을 가하면 오토인코더가 더 흥미로운, 혹은 덜 흥미로운 잠재 공간의 표현을 학습
일반적으로 저차원이고 희소하도록 제약을 가함
이럴 경우 인코더는 입력 데이터의 정보를 적은 수의 비트에 압축하기 위해 노력

전통적인 오토인코더는 특별히 유용하거나 구조화가 잘된 잠재 공간을 만들지 못하고 압축도 뛰어나지 않음
VAE는 오토인코더에게 약간의 통계 기법을 추가하여 연속적이고 구조적인 잠재 공간을 학습하도록 만듬
이미지 생성을 위한 강력한 도구로 탈바꿈됨

입력 이미지의 잠재 공간의 고정된 코딩(인코더의 출력)으로 압축하는 대신 VAE는 이미지를 어떤 통계 분포의 파라미터로 변환
입력 이미지가 통계적 과정을 통해서 생성되었다고 가정하여 인코딩, 디코딩하는 동안 무작위성이 필요하다는 것을 의미
VAE는 평균과 분산 파라미터를 사용하여 이 분포에서 무작위로 하나의 샘플 추출
샘플을 디코딩하여 원본 입력으로 복원
무작위한 과정을 통해 안정성 향상, 잠재 공간 어디서든 의미 있는 표현을 인코딩하도록 만듬

  1. 인코더 모듈이 입력 샘플 input_img를 잠재 공간의 두 파라미터 z_mean과 z_log_var로 변환
  2. 입력 이미지가 생성되었다고 가정한 잠재 공간의 정규 분포에서 포인트 z를 무작의로 샘플링
  3. 디코더 모듈은 잠재 공간의 포인트를 원본 입력 이미지로 매핑하여 복원

VAE의 파라미터는 2개의 손실 함수로 훈련
디코딩된 샘플이 원본 입력과 동일하도록 만드는 재구성 손실, 잠재 공간을 잘 형성하고 훈련 데이터에 과대적합을 줄이는 규제 손실

케라스의 layers.Lambda 클래스는 임의의 함수 객체를 케라스의 층으로 만들어줌

적대적 생성 신경망

GAN은 생성된 이미지가 실제 이미지와 통계적으로 거의 구분이 되지 않도록 강제하여 아주 실제 같은 합성 이미지를 생성

  • 생성자 네트워크
    랜덤 벡터를 입력으로 받아 이를 합성된 이미지로 디코딩
  • 판별자 네트워크
    이미지를 입력으로 받아 훈련 세트에서 온 이미지인지, 생성자 네트워크가 만든 이미지인지 판별

생성자 네트워크는 판별자 네트워크를 속이도록 훈련

GAN은 최적화와 최솟값이 고정되지 않은 시스템
보통 경사 하강법은 고정된 손실 공간에서 언덕을 내려오는 방법
GAN에서는 언덕을 내려오는 매 단계가 조금씩 전체 공간을 바꿈
최적화 과정이 최솟값을 찾는 것이 아니라 두 힘 간 평형점을 찾는 다이나믹 시스템

profile
소신있는 오픈마인드

0개의 댓글