부스트캠프/day 정리 11

[week 8] AI 서비스 개발 기초 정리

좋은 소프트웨어 설계를 위해 알아야 하는 개념 모듈성 모듈 : 고유한 목적, 기능을 가지는 단위 응집도 응집도 : 시스템의 모듈 구성 요소가 목적을 달성하기 위해 관련된 정도 결합도 모듈들의 상호 의존성 높은 응집도와 낮은 결합도 버저닝(Version) CalVer (Calendar Versioning)날짜 기반 시스템을 이용해 버전 번호 할당 (ex.Ubuntu 20.04 ) SemVer (Semantic Versioning)마침표로 주 번호, 부 번호, 패치 번호 구분 주 번호 : 이전 버전과 호환되지 않은 변경이 있으면 주 번호 증가 부 번호 : 이전 버전과는 호환되며 새로운 기능이 추가된다면 부 번호 증가 패치 번호 : 이전 버전의 버그 수정 HashVer (Hash Versioning) 모든 버..

[week 3 - day 5] AutoEncoder & VAE 이해하기

AutoEncoder 비지도 학습의 일종이다. data와 그에 해당하는 label이 주어지지 않고, data만으로 학습시키는 방법이다. 위 그림처럼 입력이 곧 출력이다. Encoder 부분에서 hidden layer 뉴선 수를 입력층보다 작게 하여 데이터를 압축(차원 축소)하거나, 노이즈를 추가해 원본 입력을 복원할 수 있도록 loss를 줄여나가다 보면, feature는 중요한 정보만 담게 된다. Variational AutoEncoder (VAE) AutoEncoder와 비슷해보이지만, 데이터의 확률 분포를 찾는다는 점에서 차이가 있다. +) AE는 앞단(encoder)을 학습하기 위해 뒷단을 붙인거고, VAE는 뒷단(decoder)을 생성하기 위해 앞단을 붙인 것 그렇기에 완벽하게 비슷한 데이터를 만..

[week 3 - day 3] Transformer 이해하기

Transformer는 자연어 처리 분야에서 매우 효과적으로 사용되는 딥러닝 모델 중 하나이다. RNN은 n개의 입력이 들어오면 n번을 재귀적으로 거치는데, Transfomer는 입력 시퀀스 전체를 한 번에 처리한다. 전체적인 흐름은 다음과 같다. 인코더의 입력은 input embedding에 위치 정보(positional encoding)을 더해서 만든다. step별로 Transfomer를 이해해보겠다. self-attention이란? 입력 시퀀스 내의 모든 위치에 대해 가중치(w)를 계산하고, 이를 사용해 모든 위치의 특성 벡터를 조합한다. => 이 과정을 통해 입력 시퀀스의 각 위치에서 다른 모든 위치에 대한 중요도를 계산할 수 있음 +) 질문 1. key와 value는 같은 의미 아닌가 ? key..

[week 3 - day 2] CNN / modern CNN

CNN(Convolutional Neural Network)이란 ? 이미지와 같은 2D 데이터를 처리하기 위한 딥러닝 모델이고, CNN은 Convolutional Layer, Pooling Layer, Fully Connected Layer 등으로 구성되어 있다. Convolutional Layer에서는 이미지같은 입력 데이터를 필터(kernel)와 합성곱 연산을 통해 다양한 feature를 추출하는 것이다. 합성곱 연산은 입력 데이터와 필터를 일정 간격으로 겹쳐가며 곱하고 더하는 연산이다. 이러한 연산을 통해 출력 데이터 크기를 계산할 수 있다. 공식은 위와 같다. 주의할 점은 입력 데이터의 채널 수와 kernel의 채널 수가 같아야 하는 것 ! parameter 개수 공식 : (kernel 가로*세로..

[week 1 - day 5] cnn, rnn

시퀀스 데이터 시퀀스 데이터는 순차적으로 발생한 데이터를 뜻한다. 시퀀스 데이터는 iid를 위반할 수 있다. iid(Independent Identically Distributed) 란, 각각의 샘플이 서로 독립적이고 같은 분포에서 동일하게 생성된 데이터이다. 시퀀스 데이터는 이전 샘플과 현재 샘플 사이에 상관관계가 있을 수 있어 독립적이라고 볼 수 없다. 그렇기에 위반하는 것 같다 !

[week 1 - day 4] 딥러닝 ~ 베이즈 통계학

신경망 신경망은 입력값과 출력값을 연결하는 여러 개의 뉴던(node)로 이루어져 있다. 신경망은 입력층, 은닉층, 출력층으로 계층적 구조로 구성되어 있다. 입력층은 입력 데이터를 받는 부분이고, 출력층은 최종 결과를 내보내는 부분, 은닉층은 보통 여러 층으로 구성되어 있는데, 또한 각 층은 여러 개의 뉴런으로 구성되어 있다. 은닉층에서 활성화 함수를 통해 출력 신호를 계산한다. (활성화 함수 : softmax, 시그모이드, ReLU, tanh 등등등) 결론 : 위와 같이 활성화 함수를 통해 출력된 값이 신경망이 예측한 결과이고, 실제 값과의 차이가 손실 함수(loss function)이다. loss를 최소화하기 위해 가중치(weight)를 조절하는 것이 신경망 학습 과정이다. softmax softmax..

[week 1 - day 3] 경사하강법

경사하강법 미분은 변수의 움직임에 따른 함수값의 변화를 측정하는 것으로 최적화에서 많이 쓰이는 기법 최적화에 어떻게 쓰이는가? 미분은 접선의 기울기를 구할 수 있는데, 이 접선의 기울기를 통해 어떤 방향으로 움직어야 함수 값이 증가하는지 감소하는지를 판단할 수 있다. 미분값을 더하면 함수 값이 증가하는 것, 미분값을 빼면 함수 값이 감소하는 것 ! 이게 바로 경사상승법, 경사하강법이다 그러니깐 경사하강법은 어느 지점에서 상관없이 미분값을 빼가면서 극값을 찾는 과정이라고 할 수 있음 Weight = Weight - lr * 기울기 위 공식처럼 lr(학습률)을 곱해주는데, 학습률이 너무 작으면 수렴하는데(=극값을 찾는데) 너무 오래 걸리고, 크면 발산 가능성이 있다. 변수가 벡터라면 ? 변수가 벡터라면, 손..

[week1 - day 3] 벡터 & 행렬

벡터란 ? 벡터는 공간에서 한 점을 나타낸다. 1차원 공간에서 (x), 2차원 공간에서 (x,y), 3차원 공간에서 (x,y,z)와 같이 한 점을 지칭한다. 위에서 언급한 (x), (x,y), (x,y,z)는 모두 원점으로부터 떨어진 거리이다. 즉, 벡터는 원점으로부터 상대적 위치를 표현한다. 애초에 x도 0+x이므로, 두 백터의 덧셈은 다른 벡터로부터의 상대적으로 이동한다고 볼 수 있다. 벡터의 노름(norm) ||x|| : 벡터의 크기(=원점으로부터의 거리)를 의미한다. 노름의 정류에 따라 기하학적 성질이 달라진다. L1-노름 : 각 성분 변화량의 절대값의 합. L2-노름 : 피타고라스의 정리를 이용한 유클리드 거리 ex) v = [1, -2, 3] L1-노름의 거리 : 1 + 2+ 3 = 6 L2-..

[week 1 - day 2] Pandas

Pandas란 ? 구조화된 데이터의 처리를 지원하는 라이브러리 import pandas as pd data_url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data' df_data = pd.read_csv(data_url, sep="\s+", header=None) #정규식을 통해 여러 띄어쓰기로 구분 series column vector를 표현한 object이다. 1차원 배열같은 자료구조인데, 인덱스가 같이 출력된다는 점과 그 인덱스를 지칭할 수 있다는 점에서 새롭다. obj = Series([1,2,3,4], index = ['a', 'b', 'c', 'd']) dataframe series들을 하나로 모..

[week 1 - day 2] Python data handling/ Numpy

CSV CSV는 Comma Separate Value의 약자로, 필드를 쉼표(,)로 구분한 텍스트 파일이다 wget -Uri https://bit.ly/3psoUZb -OutFile .\ai_math\lec3\customer.csv wget을 통해 파일을 다운받아준다. 나는 윈도우를 쓰고 있기 때문에 다음과 같이 작성해주었다. """ code """ cust_lst = [] data_header = [] line_counter = 0 f = open("./data/customer.csv", "r") while 1: data = f.readline().rstrip() #끝 공백 제거하고 한 줄씩 읽어오기 if not data: break #데이터가 없다면, 즉, 끝나면 종료 if line_counter =..