목록전체 글 (222)
꺼내먹는지식 준
그간 코딩 테스트를 좀 주먹구구식으로 풀었다. 그러다보니 특정 알고리즘 문제를 풀어도, 내가 얼마만큼 왔고 어느정도 더 해야하는지 감이 잘 안잡혔다. 이를 위해 1독을 목표로 한 책을 선정했다. 바로 나동빈씨의 "이것이 취업을 위한 코딩 테스트다" 라는 책이다. 그 중 첫 쳅터인 그리디이다. 그리디 1) 어떠한 문제가 있을 때 단순 무식하게, 현재 상황에서 지금 당장 좋은 것만 고르는 방법 2) 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 그리디는 다익스트라와 같이 암기 기반 알고리즘과 다르게 출제 폭이 럽어 단순 암기가 불가능하다. 즉 다양한 문제를 접해봐야한다. 그리디 알고리즘은 기준에 따라 좋은 것을 선택하므로 문제에서 '가장 큰 순서대로', '가장 작은 순서대로'와 같은 기준을 알..
MLP NCF neural collaborative filtering 에 맞는 형태로 데이터를 변환 ratings_df = pd.read_csv(data_path + 'u.data', sep='\t', encoding='latin-1', header=None) ratings_df.columns = ['user_id', 'movie_id', 'rating', 'timestamp'] user_ids = ratings_df['user_id'].unique() movie_ids = ratings_df['movie_id'].unique() ratings_matrix = ratings_df.pivot(index='user_id', columns='movie_id', values='rating') #pivot 함수,..
Single layer 싱글 layer의 weight 초기화를 위해 torch.nn.init함수를 사용할 수 있다. conv1 = torch.nn.Conv2d(...) torch.nn.init.xavier_uniform(conv1.weight) 대안으로, parameters 를 weight.data 에 접근하여 조정할 수 있다. (torch.Tensor) conv1.weight.data.fill_(0.01) biases에도 동일하게 적용된다. conv1.bias.data.fill_(0.01) nn.Sequential or custom nn.Module 초기화 함수를 torch.nn.Module.apply로 넘긴다. 이는 nn.Module의 모든 weight 를 recursive 하게 초기화 한다. app..
Error: Cannot install under Rosetta 2 in ARM default prefix (/opt/homebrew)! To rerun under ARM use: arch -arm64 brew install ... To install under x86_64, install Homebrew into /usr/local. 다음과 같은 에러메세지가 나올 때 다음과 같이 대처 !arch -arm64 brew install
주어진 input에 대해서 추론된 reconstructed input 과 차이를 최대한 줄이는 방법으로 loss function 을 구성하고, 이미지 데이터 같은 경우에는 root mean square error, sparse vector 는 softmax 를 loss function 으로 사용한다. 꼭 똑같이 사용하는 것 만이 아니라 노이즈가 있는 이미지를 노이즈가 없는 이미지로 전환하는 등 다양하게 사용된다. 오토인코더의 발전된 형태 일부러 random noise 를 추가하여 강제로 noise 한 입력값을 넣고, noise 가 없는 이미지가 복원되도록 함으로써 더 robust 한 모델이 학습된다. (또한 깨끗한 이미지에만 overfitting 되지 않는다.) 그 이후에도 variational auto..
딥러닝 추천 모델의 장점 한마디로 사람을 통해 직접 하기 어려운 학습이 가능하다. 사람들은 수식의 단순화 등의 여러 이유로 인해 data의 선형성을(선형가정) 통해 모델을 만들곤 한다. 하지만 딥러닝은 tanh, relu 등의 non-linear activation 을 통해 non-linearity 를 효과적으로 학습 가능하다. 또한 사람이 직접 찾아야 하던 feature 을 모델이 데이터로부터 직접 학습하므로 사람이 찾지 못한 feature도 효과적으로 학습한다. (많은 연구가 이뤄지지 못한 분야에도 바로 적용이 가능하다.) 특히나 자연어, 음성 같이 sequence modeling 에서 강력한 성능을 보인다고 한다. 추천 시스템에서 next-time prediction(현재까지 소비한 아이템으로 다음..
주어진 vector space 에서 내가 원하는 query vector와 가장 유사한 vector 를 찾는 알고리즘 추천 모델 서빙 자체는 Nearest Neighbor Search 와 굉장히 유사하다. 모델 학습을 통해 생성된 유저 아이템 벡터를 사용하여 주어진 query vector와 가장 유사도 높은(인접한 이웃) 벡터를 찾아주는 것이 추천 시스템이다. 아주 정확한 Nearest Neighbor 를 찾기 위해서는 Brute Force 가 가장 간단하다. 사실 MF 에서 Brute Force 로 유사도를 비교하는 과정을 보며 그 과정자체가 굉장히 비효율적이라고 느꼈었는데, 이에 대한 문제를 해당 기법이 해결해주는지 한번 잘 참고해고자 한다. 벡터의 차원이 커질 수록 유사도 연산이 오래걸리고, 벡터의 ..
임베딩이란? 주어진 데이터를 낮은 차원의 벡터로 만들어서 표현하는 방법 Dense Representation은 Sparse Representation을 훨씬 작은 차원으로 효과적으로 표현할 수 있도록 한다. Item2Vec 을 이해하기 위하여 먼저 Word2Vec을 살펴보자. 예전에 Word2Vec 을 공부해보며 관련 내용을 정리한적 있다. https://blog.naver.com/ha_junv/222285855664 Word2Vec (word embedding) Word 임베딩에 관련해서는 웬만한 교수님 강의를 보는 것보다, 해당 글을 읽는 것이 더 직관적인 이해에 ... blog.naver.com https://ratsgo.github.io/from%20frequency%20to%20semantics..
이웃 기반 CF 에서 벗어나 Model 기반 CF 에 들어선다. 다루고자하는 내용은 다음과 같다. 추천시스템에서 가장 중요한 '모델' Matrix Factorization을 이해하기 위해 간단 로드맵을 거친다. Sparsitiy: 결국에 Neighboorhood CF 는 데이터가 적으면 유사도 계산이 부정확하다는 큰 한계가 있다. 또한 유저와 아이템 개수가 늘어나면 계산량이 늘어난다. Scalability: K-NN 으로 최소화 한다고 해도, 이전에 글에서 제기한 의문 같이 '유사도' 계산에서 bottle neck이 걸릴 수 있는 것이다. 다만 역설적으로 정확한 예측을 하기위해서는 데이터가 많아야한다. 모든 분야에서 그렇듯이, 단순 유사성에서 벗어나 내재된 패턴을 이용하면 보다 정확한 결과를 얻곤 한다...
모든 내용은 https://angeloyeo.github.io/2020/09/09/row_vector_and_inner_product.html 행벡터의 의미와 벡터의 내적 - 공돌이의 수학정리노트 angeloyeo.github.io 공돌이의 수학노트가 깨져보여서 더 잘 보기 위해 옮겨놓으며 원래 알던 부분들을 제외한 것 뿐입니다. 해당 포스트는 저를 위한 포스트이니 위 링크를 타고 들어가 나오는 강의를 따로 참고해주세요. 벡터란 상수배(곱셈 규칙)와 덧셈 규칙이 정의되는 원소들이라고 하였으며, 이들의 집합에 이 연산들이 정의된 집합을 벡터 공간(vector space)라고 한다고 하였다. 여기서 이러한 상수배와 덧셈 규칙이 정의되는 원소들을 ‘선형성을 갖는다’라고 표현한다. 행렬은 벡터를 또 다른 벡터로..