본문 바로가기

AI_basic35

[ML] SVM SVM (support vector machine) -> 매우 강력하고 선형이나 비선형 분류, 회귀, 이상치 탐색에도 사용할 수 있는 다목적 머신러닝 모델 -> 특히 복잡한 분류 문제에 잘 들어맞으며 작거나 중간 크기의 데이터셋에 적합함 1. 선형 SVM 분류 왼쪽 그래프의 실선같은 경우 학습 데이터에 대해 잘 분류하고 있으나, 경계가 너무 가까워 새로운 샘플에 대해 잘 작동하지 못할 수 있음 오른쪽 그래프의 실선은 제일 가까운 훈련샘플로부터 가장 멀리 떨어져 있음 -> large margin classification 도로 경계에 위치한 샘플(오른쪽 그래프의 동그라미로 표시된 샘플)에 의해 결정됨 -> 이러한 샘플을 support vector라고 부름 ** SVM은 특징(feature)들에 스케일에 민.. 2022. 8. 1.
규제가 있는 선형 모델 1. 릿지 회귀 -> 학습 알고리즘을 데이터에 맞추면서 모델의 가중치가 가능한 작게 유지하려고 함 -> 규제항은 훈련하는 동안에만 비용 함수에 추가되고, 모델의 성능은 규제가 없는 성능 지표로 평가함 -> a는 모델을 얼마나 많이 규제할지 조절하는데, 0이면 선형회귀와 같아짐 2. 라쏘 회귀 -> 덜 중요한 특성의 가중치를 제거하려고 하는 경향 (가중치를 0으로 만듬) -> 자동으로 특성을 선택하여 sparse model을 만듬 (0이 아닌 특성의 가중치가 적음) 3. 엘라스틱넷 (라쏘 + 릿지 = 쏘릿) -> r을 통해 라쏘와 릿지 회귀의 혼합 비율을 조절함 1) 일반적으로 규제가 약간있는 것이 대부분의 경우에 좋아 평범한 선형 회귀는 피하는 것이 좋음 2) 기본적으로? -> 릿지 3) 특성이 몇 개뿐.. 2022. 7. 28.
[Deeplearning] Several Topics GAN(Genrative Adversrial Networks) GAN은 데이터를 만들어내는 Generator와 만들어진 데이터를 평가하는 Discriminator가 서로 대립적으로 학습해가며 성능을 개선해나가는 모델입니다. Generator와 Discriminator는 각각 지폐 위조범과 경찰에 비유되어 설명할 수 있습니다. 지폐위조범과 경찰은 서로의 목적을 위해 능력이 발전하고 결과적으로 만들어진 지폐는 진짜와 구별할 수 없을 정도에 이른다는 것입니다. 1. Generator Generator(이하 G)의 목적은 데이터를 생성해내는 것입니다. G는 input Noise로 가짜 데이터를 만들고 이 데이터를 D의 input으로 넣습니다. 그리고 Back Propagation과정에서 D를 속이는 방향으로 G.. 2022. 2. 11.
[Pytorch] 작물 잎 분류 Pre-trained model(resnet50) 1. 데이터 전처리 폴더 구성은 이전 글의 base model과 같고, 이미 학습된 resnet 모델을 불러옵니다 import torch import torchvision.transforms as transforms from torchvision.datasets import ImageFolder import os use_cuda = torch.cuda.is_available() device = torch.device("cuda" if use_cuda else "cpu") batch_size = 256 epoch = 30 data_transforms = { "train" : transforms.Compose([ transforms.Resize([64, 64]), transforms.RandomHorizon.. 2022. 2. 7.
[Pytorch] 작물 잎 분류 non Pre_trained model 1. 파일 분할 각 클래스에 해당하는 이미지 파일들은 다음과 같이 dataset 폴더 내에 각각의 클래스 이름의 폴더 내에 저장되어있습니다. 따라서 각 클래스별로 비율을 같게 학습, 검증, 시험 데이터로 분할해줍니다. import os import shutil origin = "/content/drive/MyDrive/pytorch project/작물 잎 분류/dataset" base = "/content/drive/MyDrive/pytorch project/작물 잎 분류/splitted" clss_list = os.listdir(origin) os.mkdir(base) train_dir = os.path.join(base, "train") val_dir = os.path.. 2022. 2. 6.
[Deeplearning Part.8-5] 어텐션 seq2seq의 문제점 seq2seq의 Encoder의 출력을 Decoder로 보낼 때 이 출력은 "고정 길이의 벡터"였습니다. 이 고정 길이의 벡터에 문제가 있습니다. Encoder에 입력된 데이터의 길이에 상관없이 항상 같은 길이의 벡터로 변환하기 때문입니다. 이제 이 seq2seq의 문제점들을 하나씩 개선시키며 어텐션 구조를 완성시켜보겠습니다. Encoder 개선 앞에서 얘기했던 문제를 개선하기 위해 입력 데이터의 길이에 따라 Encoder의 출력의 길이를 바꿔줍니다. hs에는 입력 문장(데이터)의 길이 만큼의 벡터들이 담기게 되었습니다. hs의 각 행벡터에는 해당 층에 입력된 데이터의 정보가 담겨있다고 볼 수 있습니다. Decoder 개선 1. 맥락 벡터 Encoder의 출력이 더 이상 고정 길이.. 2022. 1. 27.
[Deeplearning Part.8-4] GRU GRU 이전 글에서 게이트가 추가된 RNN으로 LSTM에 대한 글을 썼었는데, GRU는 이 게이트를 쓴다는 개념은 유지하고, 매개변수를 줄여 계산 시간을 줄여줍니다. LSTM과 비교해보면, 기억 셀을 사용하지 않고 은닉 상태만을 사용합니다. 게이트를 추가하기 전까진, 기본적인 RNN과 같은 모습입니다. GRU에는 r과 z라는 두 개의 게이트를 사용하는데 r은 reset, z는 update게이트입니다. LSTM에 비해 게이트 수가 줄었고, 기억 셀을 사용하지 않는다는 점에서 파라미터 수와 연산량이 확실히 줄 것 같다는 생각입니다! 그리고 reset과 update라는 정말 필요한 게이트만을 설정해준 느낌입니다. 우선 reset게이트는 과거에서 흘러온 은닉 상태를 얼마나 무시할지 정합니다. 한편, update.. 2022. 1. 25.
[Deeplearning Part.8-3] seq2seq seq2seq seq2seq모델은 시계열 데이터를 다른 시계열 데이터로 변환하는 모델입니다. 시계열 데이터의 변환을 예를 들면 특정 언어의 문장을 다른 언어의 문장으로 번역하는 과정을 들 수 있습니다. 또한 seq2seq모델은 Encoder-Decoder 모델이라고도 하는데, 이름처럼 input을 인코딩하고, 인코딩된 데이터를 다시 디코딩하는 과정을 거칩니다. "나는 고양이로소이다"라는 한글 문장을 "I am a cat"으로 변환(번역)하는 경우로 예를 들어 보겠습니다. seq2seq의 Encoder LSTM모델에 한 문장을 넣는 경우를 생각해보겠습니다. 위 모델이 출력하는 h는 LSTM계층의 마지막 은닉 상태인데, 이 h에 입력된 문장을 번역하는데 필요한 정보가 인코딩됩니다. 겉으로 보면 "나는 고양이.. 2022. 1. 25.
[Deeplearning Part. 8-2] LSTM 기본 구조의 RNN의 문제점 1. 기울기 소실 기울기 소실의 원인은 tanh함수입니다. tanh는 ouput의 절대값이 1보다 작아 역전파 시 기울기가 소실될 수 있습니다. 이 문제 때문에 기본 DNN모델이나 CNN에서 활성화함수로 sigmoid를 ReLU로 대체하는 것을 알 수 있었습니다. 2. 기울기 폭발(소실 포함) 기울기 폭발의 원인은 가중치 행렬과의 행렬곱입니다. W라는 가중치는 모든 시점에서 공유되는데, 자세한 부분은 https://yjjo.tistory.com/15를 참고하면 좋을 것 같습니다. W라는 가중치가 모든 시점에서 공유되기 때문에, 역전파가 하류로 갈수록 W의 전치가 계속해서 곱해져갑니다. 이 때, 행렬의 특잇값이 1보다 크다면 제곱 할수록 계속해서 커져 기울기 폭발이 일어납니다... 2022. 1. 25.