본문 바로가기

전체 글

이제 Tabular Data는 MLP 대신 FT-Transformer를 써야하는 이유! 최근 vision과 NLP등 ML Task에서는 거의 모든 task에서 Deep learning Architecture가 활용되며 다양한 아이디어의 모델들이 제안되고, 연일 해당 Task의 SOTA를 갱신하고 있다. DL architecture의 경우, loss를 통한 weight 와 bias의 미분 값을 계산하고 업데이트하는 방식을 자동으로 구현한, AutoGrad를 통해 End-to-End방식의 다양한 구조의 모델을 유연하게 결합하며 다양한 Task에서 좋은 성능을 내고있다. 하지만 Tabular Data를 다루는 분야에서는 여전히 딥러닝 보다는 GBDT계열의 모델들이 여전히 강세를 보이는데, 이따금 GBDT계열의 모델보다 좋은 성능을 보이는 딥러닝 모델이 있다 하더라도, 그 차이가 미미하거나, 다양.. 더보기
Garbage Collection(가비지 컬렉션, GC)은 어떻게 동작할까? 개발업무를 진행하다보면, 불필요한 작업 또는 데이터로 인해 메모리 리소스가 부족할때가 종종 있다. 이때문에 개발자는 항상 할당중인 메모리를 지속적으로 모니터링하고 관리해야 한다. 오늘 알아볼 Garbage Collection, 이하 GC라는 개념은 프로그래밍에서 자동으로 메모리 관리를 수행하는 프로세스를 의미한다. 프로그램이 실행되는 동안 동적으로 할당된 메모리(힙 메모리)영역에 객체들이 생성되는데, 이 중 *더 이상 필요하지않게 된 메모리(아래에서 구체적으로 설명하겠다)와 같은 garbage, 즉, 쓰레기가 된 메모리를 자동으로 식별하고 회수하는 역할을 한다. 1. 그런데, '어떤 객체'를 '어떤 근거'로 garbage로 판단하게 되는걸까? 먼저, GC의 기본 원리는 '도달 가능성(reachabilit.. 더보기
Weight initialization(He, Xavier, LeCun) 최근 딥러닝 개발을 진행할때 사용하는 현대의 딥러닝 라이브러리에서는 대부분 가중치 초기화 과정을 자동으로 제공하도록 라이브러리 자체에 기능을 내장하고 있다. 대표적으로 Pytorch에서 제공하는 linear layer(nn.Linear)는 내부에 가중치 초기화 기능을 내장하고 있다. (물론, torch.nn.init 모듈 내에서 default 가중치 초기화 방식을 변경할 수 있다) 그래서, 딥러닝 개발과정에서 가중치 초기화 과정에 대해 전혀 관여하지 않고 모델을 개발하는 경우가 많다. 다만, 그렇다고 가중치 초기화 작업이 중요하지 않다는 것은 아니다. 딥러닝 라이브러리의 버전이나 종류에 따라서 가중치 초기화는 각각 다른 방법을 채택하고 있을 수 있고, 데이터의 특성 또는 과제의 특성에 따라 이에 적합한 .. 더보기
Pytorch의 'AutoGrad' 과정을 하나하나 뜯어보자! 우리는 보통 딥러닝 모델을 학습할때, Pytorch, TensorFlow, Keras와 같은 딥러닝 라이브러리를 사용한다. 딥러닝 라이브러리들을 사용할때의 장점은 아래의 몇가지로 요약해볼 수 있다. 1) 복잡한 수학적 연산을 간편한 API 구조 뒤에 숨김으로써, 딥러닝 모델의 학습 및 개발 과정을 단순화 해준다. 2) 모델 파라미터를 업데이트하기 위한 미분과정에 대한 자동화 기능을 제공한다. 3) GPU를 사용한 데이터의 batch 처리, 멀티스레딩, 데이터 로딩등의 기능을 지원한다. 그 중에서도 딥러닝 라이브러리를 사용하는 가장 주된 이유는 2번에 해당하는 'AutoGrad' 기능일 것이다. 먼저, 딥러닝 모델이 데이터를 통해 학습을 진행하는 과정을 간단하게 요약하면, 1) 먼저 예측값을 도출하고, 예.. 더보기
Python Decorator @ 사용방법 완벽 이해하기! 오늘은 Python의 데코레이터를 사용하는 방법에 대해 정리해보자. @decorator_ # 더보기
Python Generator (a.k.a. 'yield') 오늘은 파이썬의 generator 개념을 한번 정리해보도록 하겠다. Python Generator란? 먼저 파이썬에서 generator란, 반복자(iterator)와 유사한 개념으로, 한번에 ‘하나’의 항목을 생성하는 객체를 의미한다. 일반함수와는 다르게, ‘yield’문을 사용해서 값을 반환하는데, 하나의 값을 반환 후 함수의 실행상태를 유지하며, 필요할때마다 값을 생성할 수 있는데, 이전에 생성한 다음부터 이어서 생성하는 특징이 있다. 먼저, yield문을 활용한 간단한 파이썬 제너레이터 예시를 살펴 보자. def simple_generator(): yield 1 yield 2 yield 3 # 제너레이터 생성 gen = simple_generator() # 제너레이터에서 값을 하나씩 가져오기 pri.. 더보기
[REFACTORING] dictionary에 'key' 존재 유무에 따른 데이터 채우기 As-Is : 데이터프레임에서 특정 컬럼들의 값을 for문을 통해 불러와, 특정 key(patient_code, seq_no)의 유무를 체크해 dictionary내의 값을 채움 # 조회용 Dict 생성 search_col = ['patient_code', 'seq_no', 'disease_code', 'atc_set', 'prescription_date', 'diagnosis_date', 'sex', 'age', 'weight', 'bmi', 'a1c', 'scr', 'egfr'] transform_dict = {} for patient_code, seq_no, disease_code, atc_set, prescription_date, diagnosis_date, sex, age, weight, bmi,.. 더보기
[Norm] L2 Norm? L1 Norm? 이제 제대로 알고 사용하자! 오늘은 L1 Norm과 L2 Norm에 대해서 구체적으로 분석해보려한다. Norm?먼저 Norm(놈, 노름)은 뭘까?선형대수학에서 Norm은 벡터의 크기(magnitude) 또는 길이(length)를 측정하는 방법을 의미하다.여기서 길이(length)는 차원(dimension)과는 다른 의미라는 것을 알자. 예를들어 다음과 같은 열벡터가 있다고 가정해보자.이 벡터의 차원은 3이고, 길이가 3인것이 아니다.그리고, 차원이 3이라는것은 3차원공간에 아래와 같이 벡터를 그릴 수 있다는 의미이다.이때, 빨간선에 해당하는 벡터의 길이를 구하는것이 바로 오늘 다룰 Norm으로 수행할 수 있는것이다.그런데, 왜 벡터의 길이를 구해야하는것이고, 또 왜 Norm을 활용해야하는 걸까? Norm은 머신러닝에서 아래 과정에서.. 더보기