분류 전체보기

    프로그래머스: 숫자블록 (파이썬, 구현)

    프로그래머스에는 약수를 구하는 문제가 꽤 많은데 그 중 한 문제이다. 길의 길이는 10^9이고 블록의 길이는 최대 10^7이기에 완전탐색을 하면 틀리는 문제이다. 약수를 효율적으로 구하는 것이 문제의 핵심인데 약수는 일일이 나눠서 구해야하므로 완전탐색으로 구해야하고, 더 빠르게 구하려면 약수는 제곱근 전 후로 쌍을 이룬다는 성질을 응용하여 제곱근까지만 약수를 구하고 그 약수들로 수를 나누어 나머지 약수들을 찾아야 한다. 먼저 내가 푼 코드이다. from bisect import bisect_left def get_yaksu(num): # 1은 모든 수의 약수 yaksu = [1] # 제곱근까지 약수를 구함 으로써 탐색 범위를 줄임 for i in range(2, int(num**0.5)+1): if nu..

    LightGBM GPU 사용방법 (Linux, window)

    LightGBM GPU 사용방법 (Linux, window)

    서론 LightGBM 학습 시 GPU를 사용해 학습하는 방법에 대해 알아보고자 한다. LightGBM Parameter에 'device_type'으로 gpu 혹은 cuda를 명시하면 되지만 설정하지 않고 gpu나 cuda를 사용하려 하면 error가 나온다. 따라하기만 하면 되지만 자료가 많이 없고 오래된 자료가 많아 나의 경험이 다른 사람들에게 도움이 되었으면 해서 글을 짧게 남겨본다. Linux(Ubuntu)에서 GPU 사용 방법 !git clone --recursive https://github.com/Microsoft/LightGBM !cd LightGBM && mkdir build && cd build !cmake -DUSE_GPU=1 .. !make -j4 !pip uninstall light..

    Decision Tree부터 Random Forest, LightGBM까지(Ensemble Learning)

    Decision Tree부터 Random Forest, LightGBM까지(Ensemble Learning)

    1. Intro 딥러닝을 처음 접하는 사람들의 통념과는 다르게 전통적인 머신러닝 기법들이 더 높은 예측성을 보이는 경우들이 있다. 특히 Decision Tree는 노이즈가 많은 데이터, 정형데이터 등에서 강점을 보이는데 공모전에서 그러한 데이터들을 다루기 위해 LightGBM을 사용하였고 이를 사용하기 위해 공부한 내용들을 bottom-up방식으로 정리해보고자 한다. Decision Tree에 대해 간략하게 알아보고 이를 개선한 Bagging, Boosting에 대해 살펴보겠다. Bagging과 Boosting의 개선판인 Random Froest, Gradient Boosting에 대해 다룬 후 Gradient Boosting의 개선판들에 대해 정리해보겠다. 2. Decision Tree Decision..

    LightGBM: A Highly Efficient Gradient BoostingDecision Tree

    LightGBM: A Highly Efficient Gradient BoostingDecision Tree

    링크: https://proceedings.neurips.cc/paper/2017/file/6449f44a102fde848669bdd9eb6b76fa-Paper.pdf Introduction Gradient boosting decision tree (GBDT)는 분류, 회귀, 예측등에서 효과적인 머신러닝 기법이지만 데이터의 크기가 커짐에 따라 Split point들의 모든 경우의 수를 다 계산하느라 시간 소모가 너무 커지는 문제가 있었다. 논문에선 data instance와 feature들의 수를 줄이기 위해 두가지 새로운 기법을 소개한다. 하나는 Gradient-based One-Side Sampling (GOSS)이고 나머지 하나는 Exclusive Feature Bundling (EFB)이다. GO..

    모델 학습 시 데이터를 shuffle해야 하는 이유(배치 학습)

    모델 학습 시 데이터를 shuffle해야 하는 이유(배치 학습)

    개요 모델을 훈련할 때 흔히들 데이터셋을 shuffle하여 학습시키곤 한다. 데이터셋을 training data: test data로 나눌 때도 shuffle하고 매 에폭마다 training data를 shuffle한다. 이렇게 data를 shuffle하는 이유에 대해 막연하게 알고 있었는데 이번에 데이터를 shuffle해야 하는 이유에 대해 알아보고자 한다. 미니배치와 배치를 혼용하여 쓰는 경우도 있지만 이 글에선 편의를 위해 미니 배치 학습은 전체 data를 나눠서 학습하는 것, 배치학습은 전체를 한번에 학습하는 것을 의미하여 쓴다. data를 shuffle하는 경우는 두가지가 있다. 첫째는 데이터셋을 training data: test data로 나눌 때이고 둘째는 모델 학습시 매 에폭마다 shuf..

    캐글 타이타닉 생존자 예측 실습(Logistic Regression)

    캐글 타이타닉 생존자 예측 실습(Logistic Regression)

    여태 이론적으로 배운 내용들을 실제로 구현해보고, 머신러닝 라이브러리를 직접 사용해봄으로써 이론적으로 배운 내용을 복습할겸 캐글의 가장 간단한 Competition인 타이타닉 생존자 예측을 해보았다. 먼저 문제를 보았을 때 승객의 데이터를 이용하여 생존 유무를 예측하는 문제이므로 이진 분류문제라 생각하였다(죽음=0, 생존=1). 이진 분류를 위한 알고리즘에는 Logistic Regression, KNN, SVM, Ensemble(XGB, Bagging Decision Tree, Random Forest..), Decision Tree, LGBM등 다양한 기법들이 있지만 그 중 Logisitic Regression, XGB를 이용하여 문제를 풀어보기로 했다. 우선 SVM은 데이터의 차원이 11차원으로 크지..

    Attention Is All You Need 리뷰

    Attention Is All You Need 리뷰

    링크: https://arxiv.org/pdf/1706.03762.pdf Introduction 게이트를 가진 RNN(LSTM)은 sequence modeling과 language modeling , 기계 번역에서 뛰어난 성과를 보였다. 그러나 RNN은 은닉상태 ht가 이전의 은닉상태 ht-1과 시각 t에서의 input의 함수이기에 sequential하고, 따라서 학습시 병렬화가 배제되어 긴 시계열을 다룰 때 좋지 않다. attention은 input과 output간의 거리에 상관없이 dependencies modeling을 가능케 하여 다양한 분야에서 중요하게 사용되고 있다. 이 논문에선 recurrence를 없애고 encoder와 decoder 모두에 attention을 사용함으로써 input과 ou..

    Deep Learning without Poor Local Minima 리뷰

    링크: https://arxiv.org/pdf/1605.07110.pdf Introduction 딥러닝은 많은 분야에서 사용되지만 층이 깊은 모델은 비볼록 최적화 함수를 가지기에 최적화 하기 힘들어 보인다. 딥러닝이 현업에서 많이 사용되긴 하지만 최적화가 쉬워지는지는 이유를 이론적으로는 모른다. 이 논문에선 기존의 deep linear network에 관한 Corollary를 증명하고 deep nonlinear networks의 미해결문제를 해결한다. 그리고 기존의 Corollary와 미해결문제에 관한 더 일반적이고 더 강한 statements를 증명한다. Deep linear neural networks deep linear model의 최적화는 deep nonlinear model과 유사한 점들이 있..