data science/Artificial Intelligence 12

Transformer (GPT) 가장 쉽게 이해하기 - Part 2

GPT2 - Small 모델의 예 (GPT2 - Small) Multi Block과 하나의 Block 내에서의 Multi-head Attention 아래는 내 나름대로 궁금했던 점들을 해소한 후에 간소하게 정리한 다이어그램이다. 실질적으로는 중간 중간에 세부 처리가 들어가는 경우가 있다. 입력으로 "I am a" 있을 경우 GPT는 다음에 올 가장 적절한 단어(토큰)을 제시해야 한다. ・입력은 토큰으로 분리되고 다시 Embedding으로 768 차원으로 변환된다. (그 후엔 Positioning Embedding은 생략됐다.)・그 후 12개의 Block(GPT2-Small model의 경우)에 전달된다.(Dropout과 Normalization은 생략됐다.)・각 12개의 Block은 학습(Train)에 ..

Transformer (GPT) 가장 쉽게 이해하기 - Part 1

기존 자연언어처리와 Transformer 의 차이“고양이가 쥐를 잡았다. 그것은 매우 빠르다.” RNN/LSTM: “그것은”이 뭔지를 이해하려면 “고양이”를 기억해야 함 하지만 이미 여러 단계를 지나 기억이 약해질 수 있음 → “쥐”로 착각할 수도 😅 Transformer: “그것은”이 “고양이”와 더 강하게 연결되어 있음을 Attention으로 바로 파악 그래서 “그것은 매우 빠르다” → “고양이가 매우 빠르다”라고 올바르게 이해“Self-Attention”이란?문장의 각 단어가 다른 모든 단어를 바라보며,“너랑 나는 얼마나 관련이 있지?”를 점수로 계산하는 방식. ☞ 문장 예시“고양이가 쥐를 쫓았다.” ☞ 단어별로 서로의 관계를 평가합니다.쳐다보는 단어 주로 주목하는..

SVM(Support Vector Machines) Classifier

별과 삼각형을 분류하기 위해서 가장 넓은 하늘색 공간(maximum marginal hyperplane(MMH))을 찾는 알고리즘이다. 이 공간을 계산하기 위해 인접한 Support Vectors 라 불리는 데이터 포인트를 이용하게 된다. from sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn import svmfrom sklearn.metrics import classification_report, confusion_matriximport pandas as pdimport seaborn as snsiris = sns.load_dataset('iris')X_i..

K-Neighbors Classifier

K-Neighbors Classifier란 분류하고자 하는 샘플(Pt)과 가장 가까운 K개의 이웃들 중 가장 많이 속해있는 클래스를 선택하는 분류기이다.만약 k=3으로 하면 별은 보라색원에 속하는 것이고(보라색원 2 > 노란색원 1)만약 k=6으로 하면 별은 노란색원에 속하게 된다   (보라색원 2   아래는 IRIS 데이터셋의 샘플from sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.metrics import classification_report, confusion_..

Naïve Bayes (나이브 배이스) Classifier - ROC curve

ROC ( Receiver Operating Characteristic) AUC( Area Under the Curve) score 는 binary classifiers의 퍼포먼스 측정에 유명한 메트릭스이다. 평가를 위해선 ROC curve의 밑쪽 면적을 측정하면 다양한 결정 쓰레시홀드에서의 classifier의 평가를 보여준다. ROC curve는 Y축엔 True Positive rate(TPR=Recall), X축엔 False Positive rate(FPR) 를 플롯- TPR : 스팸메일에 대해 스팸이라 판단하는 비율- FPR : 정상메일에 대해 스팸이라 판단하는 비율 binary classifier는 0.5 를 기준으로 판단을 한다. 만약 이 기준(결정 쓰레시홀드)을 임으로 0.1, 0.3, 0...

Naïve Bayes (나이브 배이스) Classifier - 실전 2

import numpy as npimport pandas as pddata_path = 'https://github.com/vandit15/Movielens-Data/blob/master/ml-1m/ratings.dat?raw=true'df = pd.read_csv(data_path, header=None, sep='::', engine='python')df.columns = ['user_id', 'movie_id', 'rating', 'timestamp'] n_users = df['user_id'].nunique()n_movies = df['movie_id'].nunique()def load_user_rating_data(df, n_users, n_movies):    data = np.zeros([n..

Naïve Bayes (나이브 배이스) Classifier - 실전 1

아래와 같이 X_train 과 Y_train 을 가지고 학습을 한 뒤 X_test 가 Y 일지 N 일지 분류하고자 하자.X_train = np.array([  [0, 1, 1],                                 [0, 0, 1],                                 [0, 0, 0],                                 [1, 1, 0]] )Y_train = ['Y', 'N', 'Y', 'Y']X_test = np.array([ [1, 1, 0] ]) Naïve Bayes (나이브 배이스) Classifier 에서 설명한 것 처럼 다시 구성을 하면 아래와 같다.'Y' 의 총수는 3개이고 'N' 의 총수는 1개이다. 전체는 4개의 데이터...

Naïve Bayes (나이브 배이스) Classifier

B가 true일때 A가 발생할 수 있는 확률은 A가 true일때 B가 발생할 수 있는 확율 곱하기 A의 확률을 B의 확률로 나눈것 (뭔말인지 모르겠다.)머신러닝에서 표현하면 아래와 같다.B =여러가지  Evidence(=특징) A = Outcome(=결과) P(A | B) = 여러가지 Evidence가 있을 때 Outcome이 나올수 있는 확률(=Likelihood) P(Multiple Evidence)는 모든 Outcome 확율 계산시 똑같이 사용하는 조건이므로 계산에서 제외해도 OK 설명 샘플) 과일(=Outcome)로써 Banana, Orange, Other Fruit 이 있고 특징(=Evidence)으로써 Long, Sweet, Yellow 가 있다고 하자.기본확률값 Evidence확률값 P(Ba..

바이너리 분류 모델에 있어서 평가 항목

Confusion Matrix 샘플 결과 TP 1 FN 29 FP 0 TN 970 Accuracy (정확도) 전체 결과에 대한 True 의 비율 Accuracy = (TP + TN) / (TP + FN + FP + TN) = 971 / 1000 = 0.971 Precision (정밀도) (모델의 관점) True(=1) 이라고 예측한 것 중에 실제 True의 비율 Precision = TP / (TP + FP) = 1.0 Recall (재현율) (True 입력 데이터의 관점) True 입력데이터중에 True라고 예측한 비율 Recall = TP / (TP + FN) = 1 / 30 = 0.033 F1 Score Precision과 Recall의 밸랜스도를 나타낸다. 어느 한쪽이 극단적으로 낮으면 F1 도 ..

일반 데이터 학습용/테스트용 분리

지난번에는 이미지 데이터가 대상인 Data Augmentation의 ImageDataGenerator 를 이용하여 학습데이터를 분리하였다. 이번에는 단순히 pandas 로 읽어들인 숫자 문자등의 데이터를 분리해 보겠다. 1. numpy 를 이용하는 방법 import numpy as np def shuffle_and_split_data(data, test_ratio): np.random.seed(42) # np.random.permutation(length) : 랜덤으로 일련번호의 순서를 바꿈 shuffled_indices = np.random.permutation(len(data)) # 테스트 사이즈를 계산 test_set_size = int(len(data) * test_ratio) # 초반 test_..