머신러닝, 딥러닝 ML, DL 20

[Keras] "categorical_crossentropy", "sparse_categorical_crossentropy" 차이

Keras에서 사용 가능한 loss function 중 "categorical_crossentropy"와 "sparse_categorical_crossentropy" 의 차이가 궁금해서 찾아봤다. (처음에는 후자의 경우, function 자체가 sparse한 데이터에 초점이 맞춰져 있나 궁금했다...) 찾아보니, 차이는 다음과 같다. (성능에는 영향을 끼치지 않는다고 한다.) "categorical_crossentropy"는 데이터의 라벨이 원-핫 인코딩 된 형태의 경우 사용, "sparse_categorical_crossentropy"는 데이터의 라벨이 Int형 일 때 사용한다. 예로 클래스가 5개인 데이터가 있다고 하자, 라벨의 형태가 [[0, 0, 1, 0, 0], [0, 0, 0, 0, 1], [..

[Pytorch] Autograd, 자동 미분 ( requires_grad, backward(), 예시 )

저번 포스팅에선 선형 회귀를 간단히 구현했습니다. 이미 우리는 선형 회귀를 구현할 때 파이토치에서 제공하는 자동 미분(Autograd) 기능을 수행했습니다. ( requiers_grad = True, backward() ) 자동 미분(Autograd) 사용은 해봤지만 이번 포스팅에서는 자동 미분에 대해 좀 더 알아보겠습니다. 신경망을 학습할 때 가장 자주 사용되는 알고리즘은 역전파입니다. 역전파시 매개변수(모델의 가중치, 편향)는 해당 매개변수에 대한 손실 함수의 변화도(gradient)에 따라 조정됐습니다. 변화도를 계산하기 위해 파이토치에는 torch.autograd라고 불리는 자동 미분(Autograd) 엔진이 내장돼 있습니다. 예시 1 import torch 가장 먼저, $w^3 + 10$ 라는 ..

[Pytorch] 파이토치, 선형 회귀(Linear Regression) 간단히 구현해보기

이번에는 파이토치로 선형 회귀를 해보겠습니다. 선형 회귀는 주어진 데이터 집합에 대해, 종속 변수와 독립 변수들 사이의 선형 관계를 모델링합니다. 문제 아래 표와 같이 어떤 차량이 이동하는데 1시간 후 70km, 2시간 후 140km, 3시간 후 210km를 이동했다면, 4시간 후에는 몇 km를 이동할지에 대해 예측해봅시다. 이동 시간 (H) 이동 거리 (Km) 1 70 2 140 3 210 4 ? 선형 회귀 위의 식은 독립 변수가 하나 이므로 선형 회귀 모델은 $y = wx + b$ 형태를 갖습니다. ( w는 가중치 b는 편향입니다. ) 본격적으로 위의 문제를 파이토치 코드로 나타내 간단한 선형회귀를 해보겠습니다. 먼저, 필요한 라이브러리를 불러오겠습니다. import torch import torch..

[Pytorch] 파이토치, 텐서(Tensor)란 (텐서 속성, 텐서 초기화)

파이토치에서 텐서(tensor)는 배열, 행렬과 매우 유사한 특수한 자료구조입니다. ( 1차원으로 구성된 값을 벡터, 2차원으로 이루어진 값을 행렬, 그리고 3차원 이상을 텐서로 나눠 부르기도 합니다. 하지만 파이토치에서 type은 모두 torch.Tensor 입니다.) 텐서는 Numpy의 ndarray와 매우 유사하며, GPU나 다른 연산 가속을 위한 하드웨어에서 실행할 수 있다는 장점이 있습니다. 파이토치에서 텐서를 사용해보면서 알아보겠습니다. 이번 포스팅에서는 torch와 numpy를 사용하겠습니다. import torch import numpy as np 텐서 속성 (Attribute) 텐서의 속성은 텐서의 모양(shape), 자료형(datatype) 그리고 어느 장치(device)에 저장되는지 ..

Outlier Detection, Novelty Detection의 차이

정상적인 샘플과 비정상적인 샘플을 나누는 비슷한 작업이지만 굳이 나누자면, 조금은 다르다. (참고자료의 사이킷런 공식 문서를 확인하면 다양한 예시 확인 가능) Novelty Detection 훈련 데이터셋에 있는 모든 샘플과 달라 보이는 새로운 샘플을 탐지하는 것이 목적이다. (훈련 데이터에 포함된 샘플은 특이치로 생각하지 않는다.) 즉, Training data가 특이치 데이터를 포함되지 않은 채 학습하고 (사이킷런의 문서에서는 오염되지 않았다고 표현), 예측시 새로운 관측치인지 확인한다. 따라서 알고리즘으로 감지하고 싶은 샘플들을 제거한 훈련 데이터셋이 필요하다. Outlier Detection 훈련 데이터셋에 정상 샘플과 이상치 샘플을 모두 포함하고 있다. ( 대부분 정상 샘플 ) 즉, Traini..

[Deep Learning] 어텐션 메커니즘 (Attention Mechanism) 아이디어 이해하기

전 포스팅에서 seq2seq에 대해 정리했습니다. (https://kingnamji.tistory.com/28) seq2seq의 인코더가 context vector를 만들 때 정보의 소실이 일어나는 점을 확인했습니다. 이번 포스팅에서는 깊은 내용보다는 아이디어에 주목해 최대한 이해에 집중하겠습니다. 아이디어 어텐션(Attention)은 말 그대로 필요한 정보에 주목해 그 정보로부터 sequence 변환을 수행하는 구조입니다. 어텐션 매커니즘은 기계번역을 위한 seq2seq모델에 처음 도입됐습니다. 예시 필요한 정보에만 주목한다는 점을 seq2seq모델을 만들 때 사용한다고 하고 예시를 들어 봅시다. 한국어 "나는 고양이를 좋아한다."를 영어 "I like cats"로 번역한다면, 'cats'를 예측할 때..

[Deep Learning] seq2seq (Encoder - Decoder)

RNN을 응용한 seq2seq에 대해 정리하겠습니다. seq2seq seq2seq(sequence to sequence)는 이름 그대로, 어떤 Sequence(시계열 데이터)를 입력 받아 다른 Sequence(시계열 데이터)로 mapping(변환)하는 방법입니다. 일반적인 RNN에서는 입력과 출력 sequence의 크기가 고정됐었지만, (입력 sequence의 크기는 패딩을 통해 동일한 크기로 만들어 주는 처리를 했었습니다.) 기계 번역이나 음성 인식과 같은 분야에서는 각 sequence에 대한 길이를 미리 알 수 없고, 가변적인 출력 sequence에 대한 처리가 필요합니다. 이런 문제의 해결을 위해 seq2seq을 사용합니다. 구조 seq2seq의 구조 예시입니다. 입력 'ABC'를 받아 'WXYZ'..

[Deep Learning] LSTM 개념 정리

전 포스팅에서 RNN에 관한 기본적인 내용을 정리하고, 마지막에는 문제점까지 알아봤습니다. https://kingnamji.tistory.com/26 [Deep Learning] RNN 개념 정리 순환 신경망이라고 부르는 RNN에 대한 내용을 정리해보겠습니다. RNN RNN은 Recurrent Neural Network의 줄임말로, 순환하는 신경망이라고 직역할 수 있습니다. (Recursive Neural Network, 재귀 신경망과는 다른. kingnamji.tistory.com 이번에는 LSTM(long short-term memory)에 대해 정리해보겠습니다. LSTM의 구조 아래의 그림은 RNN과 LSTM의 구조를 나타냅니다. RNN은 하나의 hidden state만을 갖고있습니다. LSTM은 ..

[Deep Learning] RNN 개념 정리

순환 신경망이라고 부르는 RNN에 대한 내용을 정리해보겠습니다. RNN RNN은 Recurrent Neural Network의 줄임말로, 순환하는 신경망이라고 직역할 수 있습니다. (Recursive Neural Network, 재귀 신경망과는 다른 신경망입니다.) RNN은 음성이나 문자처럼 순차적으로 나타나는 Sequence data(시계열 데이터)에 적합한 모델로 알려져있습니다. 구조를 보면서 왜 그런지 생각해봅시다. RNN의 기본 구조 RNN의 기본 구조입니다. 시계열 데이터 $(x_0, x_1, \dots, x_t, \dots)$ 가 RNN 계층에 입력되고, $(h_0, h_1, \dots, h_t, \dots)$ 가 출력되는 것을 표현하고 있습니다. 그림을 보면 출력이 두개로 분기 돼 하나는 그..

[Deep Learning] 10. CNN, 풀링 계층 (Pooling Layer)

이 전에 합성곱 계층(Convolution Layer)에 대해 알아봤습니다. https://kingnamji.tistory.com/24 [Deep Learning] 9. CNN, 합성곱 계층, 패딩, 스트라이드 앞 포스팅에서 CNN에 합성곱 계층(Convolution Layer)과 풀링 계층(Pooling Layer)이 사용되는 것을 확인했습니다. 이번에는 합성곱 계층의 연산과 패딩(Padding), 스트라이드(Stride)에 대해 알아보겠습니다. kingnamji.tistory.com 풀링 풀링 계층(Pooling Layer)에서는 풀링 연산이 이뤄집니다. 합성곱 계층의 출력 데이터를 입력으로 받아서 출력 데이터의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용됩니다. 풀링 연산은 쉽게, 가로, 세..