목록인공지능 (10)

수학과의 좌충우돌 프로그래밍

[인공지능] PCA (1) Principle Component Analysis 란?

실무에서 접하게 되는 데이터는 feature의 수가 대체로 큽니다. 이는 생각보다 더 큰 문제로 작용합니다. 당연히 데이터의 크기가 크다보니 학습 속도에도 영향을 미치고 다루기가 쉽지 않습니다. 따라서 차원의 수를 축소하는 방법이 여러가지가 있는데 그 중에서 대표적인 차원 축소 알고리즘, PCA 에 대해서 알아보도록 하겠습니다. PCA 의 원리 PCA 가 어떤 과정을 통해서 차원을 축소하는지 알아보도록 하겠습니다. 우선 다음과 같은 2차원 데이터가 있을 때, 현재 목표는 2차원 데이터를 1차원으로 축소하는 것입니다. PCA 는 데이터를 1차원으로 축소하는 방법으로 정사영을 사용합니다. 정사영을 하기 위해서는 축을 선택해야 하는데 축이 될 선택지는 다양합니다. 아래 그림과 같이 x1 축으로 축소를 할 수 ..

인공지능 2019. 8. 20. 02:39
[딥러닝]Neural Style Transfer

Intro 사진을 찍던 중 사진의 스타일을 바꿀 수 있는 걸 보고 새삼스럽게 든 생각. 이건 어떻게 구현하지? 그래서 이를 한 번 구현해보고자 하였습니다, 이에 대해서 찾아보니 이름은 뉴럴 스타일 트랜스퍼 로 2015년 리온 게티스에 의해 ‘A Neural Algorithm of Artistic Style ’ 논문으로 처음 세상에 알려졌습니다. 이 방식은 타겟 이미지의 콘텐츠는 보존하면서 참조 이미지의 스타일을 타깃 이미지에 적용하는 방식입니다. 아래 사진을 살펴보면, 첫 번째 사진은 독일의 튀빙겐이라는 곳에서 찍은 사진으로 타깃이미지가 되고, 두 번째 사진은 이를 빈센트 반 고흐의 '별이 빛나는 밤' 을 스타일 이미지로서 합친 사진입니다. 스타일이라고 함은 질감, 색깔, 이미지 등 다양한 크기의 시각 ..

[딥러닝]05.imdb 영화 리뷰 이진 분류

영화 리뷰 이진 분류 IMDB 데이터 셋 영화 리뷰에 대한 데이터 50000개로 이루어져 있습니다. 이 중 25,000개의 훈련데이터와 25,000개의 테스트데이터로 나눠지며 각각 50%씩 긍정 리뷰와 부정 리뷰가 있습니다. 이 데이터는 이미 전처리가 되어 있어서 각 리뷰가 숫자로 변환되어있습니다. 리뷰를 숫자로 바꾸는 원리는 사전에 있는 단어와 숫자를 매핑시켜서 단어대신 숫자로 표현한 것입니다. 그럼 데이터를 불러와보겠습니다. from keras.datasets import imdb (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000) num_words=10000 는 훈련데이터에서 가장 자주 사용하는 ..

[딥러닝]05. 신경망의 구조

신경망의 구조 1. 네트워크를 구성하는 층 층은 신경망의 가장 핵심적인 요소라고 할 수 있다. 하나 이상의 텐서를 입력으로 받아 마찬가지로 하나 이상의 텐서를 출력하는 데이터 처리 모듈이라고 볼 수 있다. 층에 따라서 상태를 가질수도 있고 아닐 수도 있는데 대부분의 경우 상태를 가지고 이 상태를 가중치 라고 한다. 입력되는 텐서에 따라서 다른 층을 선택하여야 한다. (samples, features) 크기의 2D 텐서로 저장된 간단한 벡터 데이터는 완전 연결층(fully connected layer) 이나 밀집 층(dense layer)라고 불리는 밀집 연결 층(densely connected layer)에 의해 처리된다. 케라스에서는 이를 Dense 클래스로 구현한다. (samples, timestep..

[딥러닝]04.그레디언트

텐서연산 그레디언트 기반 최적화 output = relu(dot(W,input)+b) W와 b는 각 층의 속성처럼 생각할 수 있다. W는 가중치, b는 편향이라고 부르며 초기에는 무작위 난수로 채워져 있다. 당연히 난수이기 때문에 위 식의 계산은 의미가 없다. 여기서 각 층의 속성들을 조정하게 되는데 그 과정은 다음과 같다. 훈련 샘플 x 와 이에 대응되는 타깃 y의 배치를 추출한다. x 에 대한 예측값 y_pred를 구한다. y_pred와 y의 차이를 이용해 손실을 계산한다. 배치에 대한 손실이 감소되는 방향으로 각 층의 속성들을 조정한다. 4번에서 각 층의 속성들을 어떠한 방법으로 조정할지가 중요한 포인트가 된다. 확률적 경사 하강법 앞에서 봤던 4번을 어떻게 구현할지에 대한 이야기이다...

[딥러닝]03.텐서연산

텐서연산 텐서 연산 브로드 캐스팅 놀랍게도 2D 텐서와 벡터를 더할 수 있다. 두 텐서는 크기가 다른데 어떻게 더해질 수 있을까?작은 텐서가 큰 텐서에게 맞춰져서 더해지게 되는데 이를 브로드 캐스팅 이라고 한다.브로드 캐스팅은 다음과 같은 단계로 실행된다. 큰 텐서의 ndim에 맞도록 작은 텐서에 축이 추가된다. 작은 텐서가 새 축을 따라서 큰 텐서의 크기에 맞도록 반복된다. 예를 통해 알아보자.x의 크기는 (32.10) 이고 y의 크기는 (10,) 일 때, 1번에 의해 y에 비어있는 축을 추가하여 크기를 (1,10) 으로 만든다. 그 후 y를 32번 반복하면 텐서 y의 크기는 (32,10)이 된다. 이를 코드로 구현해보자. def braodcast(x,y): assert len(x.shap..

[딥러닝]02.신경망을 위한 데이터 표현

신경망을 위한 데이터 표현 모든 머신러닝 시스템은 일반적으로 텐서를 기본 데이터 구조로 사용한다. 텐서는 데이터를 위한 컨테이너라고 생각할 수 있다. 그 데이터로는 임의의 차원 개수를 가지는 행렬이 들어간다. 각 차원에 따라 어떻게 데이터와 텐서가 변화하는지 알아보자. 스칼라(0D텐서) 하나의 숫자만 담고 있는 텐서를 스칼라라고 한다. 숫자는 float32 또는 float64 타입을 가진다. ndim 속성을 사용하면 넘파이 배열의 축 개수를 확인가능 텐서의 축 개수를 랭크(rank) 라고 부른다. import numpy as np x = np.array(7) >>> x array(12) >>> x.ndim 0 벡터(1D텐서) 숫자의 배열을 벡터 라고 한다. 아래 예시에서의 벡터는 5개의 원소를 가지고 있..