RuntimeError: CUDA out of memory. 메모리 용량이 부족해 발생하는 문제이기 때문에 단순히 batch size를 줄이는 등 공간을 확보해 해결할 수 있다. 또 의도적으로 GC를 실행해 메모리를 확보하거나 cache를 비워줄 수 있다. import gc import torch gc.collect() torch.cuda.empty_cache() 하지만 batch 크기를 줄이게 되면 성능이 떨어지는 문제가 발생할 수 있다. 따라서 큰 batch 크기를 사용해 학습하는 것과 동일한 효과를 내는 방법이 존재한다. Gradient Accumulation 기존의 학습은 하나의 mini-batch를 거친 후 optimizer를 통해 학습을 진행한다. 하지만 gradient accumulation..
Hugging Face에서 제공하는 transformers를 이용하면, 모델의 구조를 전부 설계할 필요 없이 편리하게 사전 학습된 모델을 사용할 수 있다. * 아래에 작성한 코드는 Jupyter(Colab) 환경에서 실행한다는 전제로 작성하였다. 참고자료: https://huggingface.co/docs/transformers/index 🤗 Transformers Reinforcement learning models huggingface.co 설치 !pip install transformers Pipeline pipeline은 해결하고자 하는 문제(task)에 맞는 사전학습 모델을 제공한다. task의 분류는 pipeline에서 확인할 수 있다. 예를 들어, NER(개체명 인식 문제)을 통해 이름과 고..
단어 간 관계 일반적으로 특정 단어 사이의 관계를 확인하기 위해 사용하는 방법으로 word-word matrix + Cosine Similarity가 있다. ...is very complicated. Therefore, natural language is analyzed through several steps... 예를 들어 ±4 window를 사용한다면 특정 단어의 좌우 4 단어의 출현 빈도를 활용하는 것이다. 아래 matrix는 문서 전체에서 ±4 window로 단어 빈도를 카운트한 예시값이다. language science education culture 5 0 2 country 6 8 5 the 25 38 7 만약 culture와 country 간의 유사도를 알고 싶다면 아래와 같이 cosine ..
Batch 학습을 위해 사용할 데이터가 너무 많을 때 한 번에 학습시키는데 비용이 많이 들기 때문에 여러 개의 그룹으로 나누어 학습한다. 이때 나누어진 그룹을 Batch라고 한다. Batch Normaliztion Batch Normalization은 layer를 통과할 때마다 데이터 분포가 달라지는 Internal Covariate Shift를 해결할 수 있다. 따라서 정규화를 통해 안정적으로 학습될 수 있도록 한다. 정규화 스케일링 정규화란 데이터의 분포를 N(0, 1)로 조정하는 과정이다. 다시 말해 평균을 0, 분산을 1로 조정하는 과정이다. 아래 그래프에서 초록색 그래프가 정규화된 그래프이다. batch마다 분포가 다르기 때문에 정규화를 통해 일정하게 학습이 되도록 한다. 그렇기 때문에 정규화는..
Impurity 만약 초록 동그라미와 주황 네모를 두 상자에 분류하는 문제를 푼다고 가정하자. A와 B를 비교했을 때 A가 더 잘 분류했다고 할 수 있다. 그 이유는 A의 두 상자 안에 들어있는 도형이 더 일관성 있기 때문이다. 이러한 개념을 불순도(impurity)로 설명한다. 위 상황에서는 B의 불순도가 더 높다고 할 수 있다. 그리고 불순도를 나타내는 대표적인 지표가 엔트로피(entropy)와 지니 불순도(Gini impurity)이다. Entropy $Entropy(t)=-\sum_i^c p(i|t)log_2p(i|t)$ Gini Impurity $Gini(t)=1-\sum_i^c p(i|t)^2$ * p(i|t)는 노드 t에서 i 레이블에 속한 데이터의 비율을 뜻한다. 계산 예시 데이터: [ 1..
문제 만약 "I do not want it"라는 문장이 있다면, 해당 문장이 긍정인지 부정인지 분류하는 문제를 푼다고 생각하자. 해당 문제를 아래와 같이 표현할 수 있다. $P(positive | I, do, not, want, it)$ $P(negative | I, do, not, want, it)$ 위 수식을 자세하게 분석해 보면 [I, do, not, want, it]이 문장에 있을 때, positive일 확률과 negative일 확률을 각각 계산하는 것이다. 만약 positive가 더 크면 긍정, 반대면 부정을 뜻한다. Bayes rule 활용 베이즈 정리를 활용하면 위 문제를 쉽게 풀 수 있다. $P(label | tokens)=\cfrac{P(tokens | label)P(label)}{P(t..