목록AI (114)
기록하는삶

CNN(Convolutional Neural Network)을 이해하기 위한 기초 개념 및 용어들을 정리해본다. 1) Convolution 수학적 정의의 '합성곱'을 말한다. 합성곱 연산은 두 함수 f, g 가운데 하나의 함수를 반전(reverse), 전이(shift)시킨 다음, 다른 하나의 함수와 곱한 결과를 적분하는 것을 의미하는데, f, g가 연속이냐 이산이냐에 따라 아래 두 가지 표현이 가능하다. 기계학습에서 다루게 되는 CNN은 주로 이미지의 픽셀을 다루기 때문에 'Discrete convolution'이라 이해하면 되겠고, 사실 아주 정확히는 convolution이라기보다 cross-correlation 연산을 하는 것이라 표현해야 맞다고 한다. 그러나 f를 적당히 조작한 함수와 g의 cros..

Regularization은 기계학습에서 과적합을 방지하기 위한 여러 제한적 수단으로, 일종의 학습을 방해하는 행위다. 학습 자체를 방해하고자 하는게 아니라, train data에'만' 너무 잘 동작하는 모델이 되지 않도록 하는 방법들을 말한다. 1) Early Stopping test data외에 validation dataset을 구축하고, 해당 데이터셋에 대해 error가 더이상 줄어들지 않는 시점에 학습을 조기 종료하는 것을 말한다. n번의 epoch 학습 동안 모델 성능이 나아지지 않는다면 학습을 종료하는 방식으로 설정해줄 수 있다. 2) Parameter Norm Penalty(Weight Decay) 각 weight들이 너무 커지지 않게 제한을 두는 것을 말한다. 이는 함수에 smoothne..

1) batch_size 일반적으로 모델을 학습시킬 때 전체 데이터에 대해서 한 번에 학습을 진행하는 것이 아니라 n개의 조각으로 전체의 데이터를 분할 해 여러 번에 걸쳐 학습 및 backpropagation을 진행하게 되는데, 이때 각 n개의 조각이 갖는 데이터의 수가 batch_size이다. 주로 연산 효율을 위해 2의 거듭제곱 단위인 32, 64, 128등을 사용하며, 각 조각들을 mini batch라 칭한다. 이러한 mini batch들을 사용하는 이유로는 gpu 등의 device의 메모리 한계, 모델 성능의 degredation 방지 등이 있다. 실제로 너무 큰 사이즈의 batch를 사용하는 경우 물리적으로 out of memory 문제에 마주칠 가능성도 높지만, 더 작은 배치 사이즈를 사용했을..

1) Generalization(일반화, 일반화 성능) Train data에 대한 성능과 Test data(혹은 validation data)에 대한 성능의 차이를 말한다. 둘 간의 차이가 작을수록 학습 데이터 뿐만아니리 Test data에 대해서도 모델이 잘 작동하므로, 'Generalization이 잘 되었다'고 말한다. 다만 Generalization이 잘 되었다고 해서 꼭 좋은 성능을 보장하는 것은 아니다. 본래 모델의 성능이 나빠 Training error가 큰 상황이라면, Test error와의 차이가 작더라도 그 절대적인 수치는 클 수 있기 때문이다. 2) Underfitting & Overfitting 학습 데이터에 대해서는 성능이 나오지만, Test data에 대해서는 성능이 떨어질 때 ..
다익스트라, 플로이드-와샬과 함께 노드와 간선, 간선의 비용이 주어진 상황에서 최단 거리를 구할 수 있는 알고리즘 중 하나이다. 다익스트라와 작동 방법이 유사하지만, 존재하는 모든 간선에 대해 최단 거리를 업데이트하는 시행을 (노드의 개수 -1)만큼 진행하는 것이 그 특징이다. 또한 노드의 개수만큼 업데이트한다면 경로 내에 음수 간선의 순환이 있는지 여부도 파악할 수 있다. [동작 과정] ① 출발 노드 설정 및 최단 거리 테이블 초기화(충분히 큰 숫자로, 시작 노드는 0으로 초기화) ② 아래의 과정을 N-1번 반복 ②-1: 전체 간선 E개에 대하여 확인 ②-2: 해당 간선을 이용해 이동하는 것이 더 짧은 경로라면, 이를 이용해 최단 거리 테이블 갱신 ③ ②의 과정을 한 번 더 수행하여, 이때 최단거리 테..
최단 경로 알고리즘은 그래프 탐색 관련 문제로 그래프 상에서 특정 지점으로부터 다른 지점까지 가장 짧은 경로를 찾는 알고리즘이다. 대표적으로 다익스트라와 플로이드-와샬 알고리즘이 있다. 1) 다익스트라(dijkstra) 다익스트라가 제안한 몇 개의 알고리즘 중 가장 잘 알려진 것이 최단 경로 알고리즘이어서 그냥 다익스트라 알고리즘이라 부르기도 한단다. 특정한 노드에서 출발하여 다른 모든 노드로 가는 최단 경로를 계산하며, 음의 간선이 없어야만 정상적으로 동작할 수 있다. 기본적으로 매 상황 가장 비용이 적은 노드를 선택하는 과정을 반복하기 때문에, 일종의 그리디 알고리즘이며 계속해서 최단 거리 테이블을 갱신하기에 동적 프로그래밍의 아이디어를 사용하기도 한다. 추가적인 작업을 더해준다면, i에서 j로 이동..

torchvision에서 제공하는 데이터셋 중 하나인 Fashion-Mnist Dataset으로 transfer-learning을 연습해본다. pre-trained 모델로는 imagenet_resnet18을 활용한다. $ pip uninstall -y -q pyarrow $ pip install -q -U ray[tune] $ pip install -q ray[debug] ray 활용을 위한 설치가 필요하다. debug 모드는 따로 없는 것 같다. import torchvision import torch import numpy as np import matplotlib.pyplot as plt %matplotlib inline from tqdm.notebook import tqdm # 데이터 로드 # r..
1) torch.save() 학습시킨 모델을 저장하고 불러오는 것은 빈번하게 사용하는 기능이다. 아래의 두 방법이 있다. ① torch.save(model.state_dict(), 경로) # 모델의 파라미터만을 저장 torch.save(model.state_dict(), os.path.join(MODEL_PATH, "model.pt")) # 같은 구조의 모델에 저장했던 파라미터 load new_model = TheModelClass() new_model.load_state_dict(torch.load(os.path.join(MODEL_PATH, "model.pt"))) 모델의 구조가 모듈 형태로 이미 존재하거나 별도로 저장해놓는 경우가 많기 때문에 보통 위 방법을 사용하게 된다. ② torch.save(..

Weights & Biases는 머신러닝 실험을 지원하기 위한 상용 도구로, 기본적인 기능들만 무료라고 한다. 기계학습의 모니터링 도구라는 점에서 Tensorboard와 유사하지만, 프로젝트 단위로 저장 및 공유가 가능하다는 점에 강점이 있다. https://wandb.ai/site?gclid=CjwKCAiA3L6PBhBvEiwAINlJ9AEiDrFK8EHyWC5XxBs3zFPg5mXS3roYual_uZpxFnBxF_6dyBHgJBoC5z0QAvD_BwE Weights & Biases – Developer tools for ML WandB is a central dashboard to keep track of your hyperparameters, system metrics, and predictions..

처음부터 만든 것이 아니라 상속 받아왔거나, import 해와서 Class를 생성하는 코드에 접근은 어렵지만 부분적으로 특정 method를 추가하고 싶은 경우 활용할 수 있는 방법이다. functools.partial() 함수를 사용하면 되는데, 파이썬 공식 문서에는 다음과 같은 설명이 있다. 추가적으로 args와 kargs를 던지면 해당 인자들을 추가한 새로운 함수를 반환해준다. 이를 이용해 아래처럼 이미 존재하는 Class에 method를 추가해볼 수 있다. from functools import partial class Dog(): def __init__(self, name): self.name = name d = Dog('Fido') e = Dog('Buddy') def bark(self): # ..