-
추천시스템 + 강화 학습
많은 혹은 대부분의 ML 서비스들은 지도학습을 통해 모델을 학습하고 업데이트 한다. 다른 분야보다도 추천 시스템은 이런 배치 단위의 학습을 통한 모델 업데이트에는 여러 한계가 존재한다. 종속성 문제 : 사용자의 선호도는 상호작용을 통해 변화한다. 따라서, 추천 시스템은 이러한 변화를 반영하지 못해 정확도가 떨어진다. 장기적인 보상 결여 : 장기적인 관점의 추천보다 당장 다음 interaction에 대한 결과만을 추구하게 된다. 개인화 추천 : 사용자의 과거 데이터로만 학습한 모델은 개인화 추천에 있어 한계가 있다. 강화 학습은 이러한 추천 시스템의 한계를 극복하기 위한 방법이다. 강화 학습은 ... Read More
-
ReadtheDocs에 마크다운 업로드하기
ReadtheDocs에 문서를 업로드하려면 .rst파일 형식으로 변환해서 업로드해 줘야 한다. .rst 파일대신 .md파일을 통해 문서를 업로드하는 방법에 대해 이야기해 보려 한다(이 글에서는 shpinx autodocs에 대한 이야기는 하지 않는다). 소스 코드는 이곳에서 볼 수 있다. 순서 이 글에서는 설치부터 시작해서 마크다운 문서 업로드 하는 것으로 마무리 하려한다. 이 글의 순서는 아래와 같다. Shpinx 설치 Shpinx 세팅&빌드 마크다운 extension 추가 파일 등록 ReadtheDocs에 import 1. Shpinx 설치 설치는 pip를 통해 간단하게 ... Read More
-
Flame - HasGameRef
HasGameRef는 Flame 게임 엔진에서 사용되는 mixin(믹스인)이다. mixin이란, 클래스가 다른 클래스로부터 기능을 가져와서 확장할 수 있게 하는 Dart 언어의 특성 중 하나이다. HasGameRef mixin은 Component 클래스에서 사용할 수 있으며, GameRef 객체를 소유하는 컴포넌트 클래스에 이 mixin을 추가하여, GameRef를 쉽게 참조할 수 있도록 도와준다. GameRef GameRef는 Flame에서 사용되는 HasGameRef mixin을 통해 추가되는 속성으로, 해당 컴포넌트가 현재 게임 인스턴스에 속해있는지를 나타내는 게임 레퍼런스이다. 즉, GameRef를 통... Read More
-
Flame - Sprite
Flutter에서 Sprite는 2D 게임에서 사용되는 이미지 요소이다. Sprite는 게임에서 플레이어, 적, 아이템 등과 같은 게임 오브젝트를 나타내는 데 사용된다. Flutter에서 Sprite를 사용하려면, Sprite 클래스를 사용하여 이미지를 로드하고 SpriteComponent를 상속받아 게임 오브젝트를 만들어야 한다. SpriteComponent는 PositionComponent를 상속받으며, PositionComponent는 Component를 상속받는다. Sprite를 로드하기 위해서는 먼저 이미지 파일을 로드해야 한다. 이를 위해 loadSprite 함수를 사용할 수 있으며, 이 함수는 이미... Read More
-
Flutter 알아둬야할 문법
Flutter는 Dart라는 언어를 사용한다. 개발 언어가 다들 비슷하지만 Dart만의 문법은 뭐가 있는지 알아보는 시간을 가져보자. enum enum은 몇 가지 값을 가지는 고유한 데이터 유형을 나타내는 데 사용된다. enum은 일반적으로 열거형 또는 열거형 상수라고도한다. 예를 들어, 간단한 색상 enum을 정의해 보자. enum Color { red, green, blue, } 이제 우리는 Color enum을 사용하여 다른 코드 부분에서 이러한 값 중 하나를 참조할 수 있다. void main() { Color color = Color.red; if (color == Color... Read More
-
Flax lenen module 살펴보기
ValueError: parent must be None, Module or Scope ValueError: parent must be None, Module or Scope 모델 구현 부분에서 다음과 같은 Error를 마주하는 경우가 종종 있다. 이 이슈의 경우 아래와 같이 모델의 입력이 아닌 입력을 넣어줬을 때 발생한다. class Bar(nn.Module): @nn.compact def __call__(self, x): pass >>> Bar('test') ... ValueError: parent must be None, Module or Scope 해결 방법 _... Read More
-
Flax 사용법 요약
설치 !pip install flax !pip install --upgrade pip jax jaxlib !pip install --upgrade git+https://github.com/google/flax.git JAX와 Flax 버전을 맞춰줘야하는데 이게 까다롭기 때문에 colab에서 돌린다면 위 코드를 통해 모든 버전을 최신으로 올려주면 된다(23년 1월을 기준으로 아직 colab에 Flax가 기본으로 설치되어 있지 않음). use with 사람마다 다르겠지만 나는 Flax가 Keras와 Pytorch 그 중간 어딘가라고 느껴진다(모델 구현하는 구조는 Pytorch에 좀 더 가까운 것 같다). Fla... Read More
-
왜 전통 머신 러닝보다 딥러닝이 좋을까?
보통 AI라고 칭하는 머신러닝 모델들은 대부분 딥러닝 모델이다. 그렇다면 딥러닝이 이전의 전통적인 머신러닝 모델들보다 뛰어난 결과를 보여주는 이유는 무엇일까? 여러가지 이유가 있겠지만 그 중 대표적인 이유 2가지에 대해 알아보자. Nonlinear Transformation Feature Representation Nonlinear Transformation: 표현력 딥러닝의 기초 개념에서 많이 거론되는 것 중 하나가 XOR 문제이다. 위 그림과 같이 OR와 AND는 하나의 선으로 분류가 가능하지만 XOR은 하나의 선(Single Layer Perceptron)으로 해결할 수 없는 문제이다. Log... Read More
-
인기도 기반 추천 알고리즘(Hacker News Formula, Reddit Formula)
뉴스나 피드에 게시글 정렬 방법 중 **추천순** 혹은 **인기순**이라는 정렬 기준을 본적이 있을 것이다. 인기도를 기반으로 추천하는 고전적인 방법으로 비개인화 추천이지만 간단히 사용할 수 있기에 소개해보려 한다. 이번 글에서는 이 중 대표적인 Hacker News Formula와 Reddit Formula에 대해 알아보고자 한다. Hacker News Formula 출처: https://sungkee-book.tistory.com/10 분자의 pageviews는 조회수를 의미하며 작성자의 조회수를 제거하기 위해 1을 빼준다. 분모의 age는 뉴스 업로드 날짜로부터 현재까... Read More
-
ssh WARNING REMOTE HOST IDENTIFICATION HAS CHANGED! 오류
ssh를 이용하여 서버에 접속하려는데, 다음과 같은 오류가 발생하였다. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack... Read More
-
ssh WARNING UNPROTECTED PRIVATE KEY FILE! 오류
pem파일을 통해 ssh로 접속하는 중에 아래와 같은 오류가 발생했다. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for 'asdf.pem' are too open. It is required that your private key files are NOT accessible by others. This pr... Read More
-
Git Blog code style 변경, highlight.js
Git Blog를 만들때 다른 사람이 만든 theme을 이용하는 경우가 많다. 이런 경우 code block의 스타일이 마음에 들지 않을 수 있는데, 이럴 때 code block의 style을 변경하는 방법에대해 말해보려 한다. 우선 자신의 code block이 어떤 방식을 통해 보여지고 있는지 알아야한다. 이 글의 경우, highlight.js를 사용하는 사람들을 위한 글이다. 자신이 hightlight.js를 사용하고있는지 알고싶다면 아래 경로의 파일을 확인해보면 된다.(파일 이름이나 경로는 약간 다를 수 있으니 아래 경로가 없다면 code가 들어간 파일을 찾아보자) _includes > exten... Read More
-
Python 데코레이터
파이썬을 사용하다보면 함수 또는 클래스 위에 @로 시작하는 녀석들을 볼 수 있다. 이러한 데코레이터를 사용하면 함수에 부적인 동작을 추가하거나 작동을 바꿀 수 있다. 잘 사용한다면 코드가 훨씬 깔끔해지기 때문에 어느정도 Python이 익숙해진 개발자라면 꼭 사용하는걸 권장한다. decorator 만들기 def hello(): print('hello 함수 시작') print('hello') print('hello 함수 끝') def world(): print('world 함수 시작') print('world') print('world 함수 끝') hello() wo... Read More
-
boto3의 AWS 자격증명 확인 순서
python에서 boto3를 사용하여 AWS 서비스에 접근하려면 자격증명(credential)을 얻어야한다. boto3에서 자격증명을 확인하는 방법은 여러가지가 있는데 순서는 아래와같다. 문서 boto3.client, resource, session 함수에 자격증명을 매개 변수로 직접 전달 환경 변수(Environment variables) 공유 자격증명 파일 [ ~/.aws/credentials ] AWS 구성 파일 [ ~/.aws/config ] AssumeRole(임시 자격증명) 호출 [ ~/.aws/config ] Boto2 구성 파일 [ /etc/boto... Read More
-
Flax lenen 오류 모음
이 글을 읽기 앞서 Flax의 기초로 모든 Flax Module은 dataclass(Python 3.7이상)를 사용한다. 그래서 __init__을 사용하지 않으며, 사용해야한다면 setup()함수를 이용해야 한다. 그렇지 않은 경우에는 @nn.compact를 __call__()함수 위에 적어주고 사용하면 된다. 이 경우에는 __call__()에서 모델의 모든 부분을 정의해주면 되고, Flax의 경우는 후자의 방식을 권장한다. 보통 nn이라고 요약하여 사용하며, PyTorch처럼 Model class에서 nn.Module을 상속받아 사용한다. from flax import linen as nn class Mod... Read More
-
Git lfs 대용량 파일 올리기
‘일자리 시각화 경진대회’ 를 진행 중 수집한 데이터를 보관해야할 일이 생겼는데 Google Drive에 일일이 올리기 귀찮아 Github에 올리기로 했다. 하지만 git에 100mb이상의 파일을 올리려면 lfs를 사용해야하는데 사용하다 문제가 생겨서 사용을 그만두고 다시 google drive에 업로드하기로 결정했다. 나와 같은 상황의 유저들을 위해 사용하지 않기로한 이유를 먼저 밝히자면 아래와 같다. Github LFS는 3.4GB 용량 제한이 있다. (Github페이지에서 추가적인 용량을 유료로 구매할 수 있음) 제한 용량을 넘게되면 아래와 같은 에러가 뜨면서 push가 안된다; 아래의 이유로 사... Read More
-
Recommend system 평가 지표
이번 글에서는 추천시스템의 오프라인 성능 평가 방법에대해 알아보려한다. Recsys의 평가지표는 크게 3가지로 나눌 수 있다. 평점 예측 기반 평가 지표: MAE, RMSE Ranking 기반 평가 지표: Precision/Recall@K, MAP@K, NDCG@K, Hit Rate 특성 평가 지표: Coverage, Diversity, Novelty, Churn, Serendipity, Responsiveness 평점 예측 기반 출처: 코드잇 평점 예측 기반이란 위 그림과 같이 비어있는 평점을 예측하고 이를 정닶값과 비교하여 평가하는 방법이다. 예를 들어, 영훈이... Read More
-
colab 함수 모음
Google Drive Mount from google.colab import drive drive.mount('/content/drive') Read More
-
Loss function, Cost function, Objective function 차이
Objective function >= Cost function >= Loss function 간단하게 요약 정리하자면 위의 그림과 같다. 원문을 인용하자면 All that being said, thse terms are far from strict, and depending on context, research group, background, can shift and be used in a different meaning. With the main (only?) common thing being “loss” and “cost” functions being something that wan... Read More
-
An Image is Worth 16x16 Words Transformers for Image Recognition at Scale
이 내용은 모두의 연구소 - 슬로우페이퍼 시간에 토론한 내용을 바탕으로 작성하였습니다. NLP에서는 사실상 표준이 되어버린 Transformer. 이 NLP Transformer 아키텍처를 최대한 비슷하게 Vision에 적용한 Vision Transformer(ViT) 모델에 대해 알아봅시다. Embedding ViT에서는 2가지의 embedding을 학습합니다. 이미지를 sequential하게 만들기 위한 patch embedding sequential한 이미지의 위치를 기억하기 위한 positional embedding patch embedding ViT는 NLP Transformer... Read More
-
python 비동기(2/2) - asyncio
asyncio(Asynchronous I/O)는 비동기 프로그래밍을 위한 모듈이며 CPU 작업과 블로킹 I/O를 병렬로 처리하게 해준다. 즉, 비동기 프로그래밍이 만능이 아니며 멀티 스레드와 차이를 이해해야 한다.(간혹 초보 개발자 중에 비동기 프로그래밍이 동기 처리보다 무조건적으로 좋다고 이해하시는 분들이 있다) asyncio 사용법 코루틴 함수를 호출하여 생성한 코루틴 객체는 그 스스로 실행되지 않는다. 따라서 객체를 만든 후 따로 실행을 해줘야하는데 asyncio에서 코루틴을 실행하는 방법은 대략 3가지이다. 함수 외부 asyncio.run() 함수 -> 일반적인 비동기... Read More
-
python 비동기(1/2) - 코루틴
python3부터 비동기 프로그래밍을 지원한다. 이 글에서는 python에서 비동기 프로그래밍이 작동하는 방식과 사용법에 대해 알아보려 한다. coroutine? 비동기 프로그래밍을 사용한적 없는 사람들을 위해 코루틴이라는 개념에 대해 설명할 필요가 있다. coroutine은 cooperative routine을 의마하는데 서로 협력하는 루틴이라는 뜻이다. 즉, 메인 루틴과 서브 루틴처럼 종속된 관계가 아니라 서로 대등한 관계이며 특정 시점에 상대방의 코드를 실행할 수 있는 함수이다. 위 그림처럼 코루틴은 함수가 종료되지 않은 상태에서 메인 루틴의 코드를 실행한 뒤 다시 돌아와 코루틴 코드를 실행한다.... Read More
-
통계학 용어 정리
제가 보려고 만든 용어 정리글입니다. 아래 References의 블로그 글을 복사 및 정리 해왔습니다. 아래 References의 링크를 참고해주세요! 모수 수학과 통게학에서는 함수의 특정한 성질을 나타내는 변수를 뜻함 일반적으로 θ이라 표현 수학에서 모수의 의미 모수는 a, b, c를 뜻함 통계에서 모수의 의미 : 모집단의 어떤 특성을 기술하며 모수 값은 그 모수를 특정 값으로 표현한 값 예 ) 모집단 : 투표권이 있는 사람, 모수 : 모집단의 특성을 나타내줌 References https://preservsun.tistory.com/8 Read More
-
python generator
딥러닝 모델을 돌리려면 GPU에 데이터를 올리기위해 DataLoader를 사용하게되는데 DataLoader에서 사용되는 함수가 제너레이터(Generator)이다. 제너레이터는 이터레이터(iterator)를 생성해주는 함수이다. 이터레이터는 __iter__, __next__, __getitem__ 메서드를 구현해야 하지만 제너레이터는 함수 안에서 yield라는 키워드만 사용하면 끝이다. (참고로 제너레이터는 발생자라고 부르기도 한다) yield란? 그런데 generate라는 키워드를 사용하면 되지 왜 yield라고 이름을 지었을까요? yield는 생산하다라는 뜻과 함께 양보하다라는 뜻도 가지고 있습니다. 즉... Read More