[논문 핵심] Generative Adversarial Networks

Date:     Updated:

카테고리:

태그:

본 포스팅은 Ian Goodfellow의 Generative Adversarial Networks(2014)에 대해 Q&A 형식의 핵심 정리를 목적으로 한다. 코드 구현 및 논문 디테일은 아래 포스팅을 참고하자.0

Generative Adversarial Networks(적대적 생성 신경망, 이하 GAN)은 무엇인가?

GAN은 적대적 구조의 Minimax game 세팅으로 학습한 생성 모델을 의미힌다.

적대적 구조의 minimax game 세팅은 무엇인가?

image

Generator는 Fake 데이터를 만들고, Discriminator는 Real/Fake를 구분하는 태스크를 맡게 된다. 모델은 아래의 솔루션을 찾아간다.

\[\min_G \max_D V(G,D) = E_{x~P_x} \log D(x) + E_{z~P_z} (1-\log D(G(z))) \]

학습은 어떻게 수행하는가?

for number of training iterations do
    for k steps do
         \\(\vec{f_{ij,spring}}\\)

생성은 어떻게 하는가?

Generative Adversarial Networks 적대적 생성 신경망에 대해 알아보자.

minmax 게임 이론에 근거하여 적대적 프레임워크 구조를 만들었다. 위조지폐범이 실제 지폐와 동일하게 지폐를 만들고 판별자는 이게 위조지폐인지 실제지폐인지 판단을 한다.

판별자도 판별 능력을 키워가고 이에 따라 위조범도 판별자가 맞추지 못하는 방식으로 학습을 수행한다.

Simple is better. But Key concepts will be summaried.

GAN이 무엇이냐? 적대적 프레임워크를 기반으로 생성 모델을 만드는 방법

적대적 프레임워크는 무엇인가? 생성 네트워크 G에 의해 생성된 fake data와 real data를 구분하는 판별 네트워크 D가 있다. G는 D가 fake 데이터를 real과 구분하지 못하는 방향으로, D는 fake 데이터를 구분하는 방향으로 학습한다.

Minimax 게임을 수행한다. G는 최소화 최대 손실을

Frame Work

Networks

Objective Function

Training and Valdiation

Background & Contribution

DDL > CREATE TABLE

데이터 모델링과 정규화로 설계한 테이블을 데이터베이스에 생성한다. 테이블 생성 시에는 컬럼 정보(이름과 타입), 제약조건(PK/UK/FK 및 데이터 입력 조건)을 정의한다.

데이터 타입

테이블을 생성할 때 컬럼의 데이터 타입과 크기를 지정해야한다. 입력할 수 있는 데이터를 제한함으로써 데이터 무결성을 유지하며, 저장 공간 낭비를 막을 수 있다. 대표적인 4가지 데이터 타입이 있다.

타입 설명
CHARACTER(s) s 길이의 고정 길이 문자열로 오라클에서는 CHAR(s)로 작성
VARCHAR(s) 최대 s 길이의 가변 길이 문자열로 오라클에서는 VARCHAR2(s)로 작성
NUMERIC 숫자 타입으로 오라클에서는 NUMBER(정수자릿수, 소수자릿수)로 작성
DATETIME 날짜와 시각 타입으로 오라클에서는 DATE로 작성


테이블 생성 구문

CREATE TABLE 테이블이름 (컬럼명1 DATATYPE [DEFAULT 형식], 컬럼명2 DATATYPE [DEFAULT 형식], ..);

CREATE TABLE 구문으로 테이블을 생성한다. 테이블 생성 시에는 하기 규칙을 따르는 것을 권장한다.

  • 인스턴스를 표현하는 적절한 단수형의 테이블 명 설정
  • 컬럼명은 데이터베이스 내에서 일관성 있게 정의 (데이터 표준화 관점에서)


테이블 생성 실습

선수 정보를 저장하는 선수(PLAYER) 테이블은 다음과 같다.

테이블 컬럼 설명
PLAYER PLAYER_ID 문자 고정 자릿수(7), PLAYER_NAME 문자 가변 자릿수(20), TEAM_ID 문자 고정 자릿수(3), E_PLAYER_NAME 문자 가변 자릿수(40), NICKNAME 문자 가변 자릿수(30), JOIN_YYYY 문자 고정 자릿수(4), POSITION 문자 가변 자릿수(10), BACK_NO 숫자 정수 자릿수(2), NATION 문자 가변 자릿수(20), BIRTH_DATE 날짜와 시각, SOLAR 문자 고정 자릿수(1), HEIGHT 숫자 정수 자릿수(3), WEIGHT 숫자 정수 자릿수(3)

CREATE TABLE 구문으로 위의 선수(PLAYER) 테이블 생성한다.

CREATE TABLE PLAYER
(
    PLAYER_ID CHAR(7),
    PLAYER_NAME VARCHAR2(20),
    TEAM_ID CHAR(3),
    E_PLAYER_NAME VARCHAR2(40),
    NICKNAME VARCHAR2(30),
    JOIN_YYYY CHAR(4),
    POSITION VARCHAR2(10),
    BACK_NO NUMBER(2),
    NATION VARCHAR2(20),
    BIRTH_DATE DATE,
    SOLAR CHAR(1),
    HEIGHT NUMBER(3),
    WEIGHT NUMBER(3)
);


생성된 테이블 구조 확인

생성된 테이블 구조를 확인하기 위해 DESCRIBE 테이블명 또는 DESC 테이블명을 사용한다.

DESCRIBE PLAYER;

image

⚠️ 단, DESCRIBE는 SQL PLUS 기반 명령어기 때문에 DBeaver에서는 작동하지 않는다. SELECT * FROM 테이블명에서 테이블명에 커서를 놓고 F4를 누르면 테이블 설명의 탭을 확인할 수 있다.


제약조건

제약조건은 데이터 무결성과 정합성을 유지하기 위해 데이터에 부여하는 제약이다. 대표적인 5가지 제약조건은 다음과 같다.

제약조건 설명
PRIMARY KEY 인스턴스를 고유하게 식별하는 기본키 설정
DBMS는 기본키 컬럼에 자동으로 UNIQUE 인덱스를 생성하며 NULL을 불허
UNIQUE KEY 인스턴스를 고유하게 식별하는 고유키 설정.
NULL 입력이 가능
FOREIGN KEY 테이블 간의 관계 정의를 위한 제약으로 다른 테이블의 기본키로 설정
외래키 지정 시 참조 무결성 제약 옵션의 선택이 가능
NOT NULL NULL 입력을 불허
CHECK의 일부분으로 볼 수 있음
CHECK 입력할 수 있는 데이터 범위를 제한
TRUE/FALSE로 평가할 수 있는 논리식 지정

제약 조건은 데이터 유형 뒤에 작성하는 컬럼 LEVEL 정의 방식, 테이블 생성 마지막에 기술하는 테이블 LEVEL 정의 방식이 있다. 테이블 LEVEL 정의는 CONSTRAINT 제약조건명 제약조건 구문을 사용한다. 두 정의 방식은 혼용 가능하다.


DEFAULT 부여

컬럼의 기본값을 설정할 수 있다. DEFAULT 설정된 컬럼에 대해서는 값을 명시하지 않는 경우 NULL 대신 DEFAULT 값이 입력된다.

컬럼 정의 시 컬럼명 DATATYPE DEFAULT 디폴트값으로 부여할 수 있다. 아래 코드는 선수 테이블(PLAYER)의 NATION 컬럼 디폴트 값을 “한국”으로 부여한다.

CREATE TABLE PLAYER 
(
    ...
    NATION VARCHAR2(20) DEFAULT "한국",
    ...
)


제약조건을 포함한 테이블 생성 실습

선수(PLAYER) 테이블과 팀(TEAM) 테이블은 다음과 같다.

테이블 컬럼 설명 제약조건
TEAM TEAM_ID 문자 고정 자릿수(3), REGION_NAME 문자 가변 자릿수(8), TEAM_NAME 문자 가변 자릿수(40), E_TEAM_NAME 문자 가변 자릿수(50), ORIG_YYYY 문자 고정 자릿수(4), STADIUM_ID 문자 고정 자릿수(3), ZIP_CODE1 숫자 정수 자릿수(3), ZIP_CODE2 숫자 정수 자릿수(3), ADDRESS 문자 가변 자릿수(80), DDD 문자 가변 자릿수(3), TEL 문자 가변 자릿수(10), FAX 문자 가변 자릿수(10), HOMEPAGE 문자 가변 자릿수(50), OWNER 문자 가변 자릿수(10) PK → TEAM_ID(제약조건명: TEAM_PK)
NOT NULL → REGION_NAME, TEAM_NAME, STADIUM_ID
PLAYER PLAYER_ID 문자 고정 자릿수(7), PLAYER_NAME 문자 가변 자릿수(20), TEAM_ID 문자 고정 자릿수(3), E_PLAYER_NAME 문자 가변 자릿수(40), NICKNAME 문자 가변 자릿수(30), JOIN_YYYY 문자 고정 자릿수(4), POSITION 문자 가변 자릿수(10), BACK_NO 숫자 정수 자릿수(2), NATION 문자 가변 자릿수(20), BIRTH_DATE 날짜와 시각, SOLAR 문자 고정 자릿수(1), HEIGHT 숫자 정수 자릿수(3), WEIGHT 숫자 정수 자릿수(3) PK → PLAYER_ID(제약조건명: PLAYER_PK)
FK → TEAM_ID(제약조건명: PLAYER_FK)
NOT NULL → PLAYER_NAME, TEAM_ID

컬럼 LEVEL, 테이블 LEVEL 정의 방식으로 제약조건을 포함하여 테이블을 생성한다.

CREATE TABLE TEAM
(
	TEAM_ID CHAR(3) NOT NULL,
	REGION_NAME VARCHAR2(8) NOT NULL,
	TEAM_NAME VARCHAR2(40) NOT NULL,
	E_TEAM_NAME VARCHAR2(50),
	ORIG_YYYY CHAR(4),
	STADIUM_ID CHAR(3) NOT NULL,
	ZIP_CODE1 NUMBER(3),
	ZIP_CODE2 NUMBER(3),
	ADDRESS VARCHAR2(80),
	DDD VARCHAR2(3),
	TEL VARCHAR2(10),
	FAX VARCHAR2(10),
	HOMEPAGE VARCHAR2(50),
	OWNER VARCHAR2(10),
	CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID)
);

CREATE TABLE PLAYER
(
    PLAYER_ID CHAR(7) NOT NULL,
    PLAYER_NAME VARCHAR2(20) NOT NULL,
    TEAM_ID CHAR(3) NOT NULL,
    E_PLAYER_NAME VARCHAR2(40),
    NICKNAME VARCHAR2(30),
    JOIN_YYYY CHAR(4),
    POSITION VARCHAR2(10),
    BACK_NO NUMBER(2),
    NATION VARCHAR2(20),
    BIRTH_DATE DATE,
    SOLAR CHAR(1),
    HEIGHT NUMBER(3),
    WEIGHT NUMBER(3),
    CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
    CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);


SELECT 문장을 통한 테이블 생성

SELECT(DML) 문장을 통해 테이블을 생성하는 방법도 있다. 이 방법을 CTAS(CREATE TABLE AS SELECT ~)라 한다.

CTAS로 테이블을 정의하는 경우, 데이터 타입을 정하지 않아도 되는 편리함이 있다. 단, 제약조건 중 NOT NULL만 복제되는 점을 주의하자.

CTAS로 TEAM 테이블과 동일한 TEAM_TEMP 테이블을 만들어보자.

CREATE TABLE TEAM_TEMP AS
SELECT * FROM TEAM;

image

TEAM_TEMP 테이블 확인 시, NOT NULL 제약조건만 존재한다.


맨 위로 이동하기

Generative Models 카테고리 내 다른 글 보러가기

첫 번째 글입니다 가장 최근 글입니다

댓글 남기기