본문 바로가기

DEVELOP_NOTE

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은 머신러닝에서 아래 과정에서.. 더보기
[Imbalance Data] 불균형데이터를 극복하고 모델을 학습하는 방법 real world의 데이터를 분석하고 모델링을 하다보면, 가장 흔하게 발생하는 문제중 하나가 바로 'Imbalance Dataset'이다. 머신러닝 모델이 적절하게 학습하기 위해서는, 학습데이터가 예측하고자 하는 목적과 카테고리에 부합한 데이터가 균형있게 분포해야하고, 또 학습하기에 충분한 양을 가져야한다. 하지만 real world데이터에서는 불균형한 데이터의 사례가 매우 많다. 대표적으로 '이상거래 탐지(Fraud Detection)'를 예로들 수 있다. 횡령이나, 보이스피싱으로 발생하는 이상거래는 전체 거래중 0.1%도 되지않아, 대표적인 데이터불균형 사례로 꼽힌다. 이런 과제의 경우, 모델을 개발하고 정확도를 높이기 이전에, 불균형 데이터를 어떻게 처리할 것인지가 관건이 된다. 오늘은 이러한 불.. 더보기
[행렬곱/행렬과 벡터의 곱]행렬곱이 딥러닝이랑 무슨 관계이길래? 딥러닝을 공부하다보면 모든 계산에 행렬곱 공식이 포함되어있는것을 볼 수 있다. 딥러닝의 neural network은 모두 행렬곱을 기반으로 계산 된다는데, 도대체 어떻게 계산되는건지, 한번 자세하게 알아보자. 먼저, 행렬곱을 알아보기전에 행렬곱이라는 개념이 포함된 '선형대수학'을 간단히 정리해보면 아래와 같다. 선형대수학(線型代數學, 영어: linear algebra)은 벡터 공간, 벡터, 선형 변환, 행렬, 연립 선형 방정식 등을 연구하는 대수학의 한 분야이다. 현대 선형대수학은 그중에서도 벡터 공간이 주 연구 대상이다. 즉, 행렬곱은 선형대수학의 주 연구대상인 벡터공간에서 '선형변환'(벡터공간의 모든 벡터를 다른벡터로 매핑함)을 표현하는 역할을 한다. 여기서, 행렬곱이 벡터공간에서 '선형변환'을 수행.. 더보기