전체 글 118

DNN(Deep Neural Network) 구현하기 with numpy(2) - Initialize

4. Initialization 앞으로 학습시킬 파라미터를 준비합니다. 이를 초기값을 설정한다 하여 initialize라고 합니다. 먼저, 필요한 파라미터 개수는 Fully-Connected layers의 개수 및 dimension에 따라 달라지므로 해당 정보를 argument로 받은 뒤 그에 맞게 weight와 bias를 initialize 합니다. 해당 세션에서는 총 4개의 layer로된 FC를 구성할 계획입니다. 그래서 model = [784, 128, 64, 10]와 같이 리스트 형태로 모델을 정의하도록 하겠습니다. 오직 MLP만 사용할 계획이므로 리스트로 표현하는 것만으로도 충분합니다. class Initializers: """Initializers Initializer list: xavier_..

DNN(Deep Neural Network) 구현하기 with numpy(1) - Preprocess

다층 퍼셉트론을 파이토치나 텐서플로가 아닌 numpy로 구현하는 작업이다. 이를 통해 머리로만 끄덕이고서 넘어갔던 구체적인 딥러닝 작동 방식을 좀 더 깊게 체득하고자 한다. 당연히 pytorch나 tensorflow보다 효율성이 떨어지겠지만 순수하게 어떤 방식으로 MLP가 작동하는지 직관적으로 이해하는데 도움이 된다. 데이터는 MNIST를 사용하고, 총 4개의 Fully-connected layers (784, 128, 64, 10)로 구성된 DNN 모델을 구현한다. 아래 코드를 통해 코드 전체를 확인할 수 있다. https://github.com/issuebombom/DNN_model_numpy GitHub - issuebombom/DNN_model_numpy Contribute to issuebomb..

pyenv와 virtualenv 활용법 (for Mac)

기능 pyenv를 활용하면 지정한 디렉토리 따라 다른 버전의 파이썬으로 자동 버전 변경되도록 설정할 수 있다. 또한 virtualenv와 연계해서 가상환경을 사용하면 해당 폴더로 진입할 시 자동으로 가상환경을 activate해주는 편리함이 제공된다. 참고로 pyenv는 맥에서만 작동하지만 2022년 이후 window에서 사용 가능한 pyenv가 있다고 한다. 아래 예시는 맥 사용 예시를 들고있다. 설정 brew 설치가 되어있지 않다면 brew 설치를 선행한다. brew 설치 후 아래 순서를 따라간다. brew install pyenv # 설치가 끝나면... brew install pyenv-virtualenv brew를 오랜만에 이용하면 brew update부터 진행하므로 시간이 꽤 걸릴 수 있으니 이상..

GPT3 모델의 대한 간략한 정리

GPT3 왜 나왔는가? 기존 PLM (pre-trained model) 은 사전 학습 이후 fine-tuning해서 사용. Downstream Task에 수천~수만 건이 데이터가 필요함 fine-tuning은 기존의 지니고 있던 일반화 성능을 저하시킨다. 실제 성능보다 SQuAD같은 특정 벤치마크에서 과대평가될 수 있다. (이것도 성능의 일반화 문제) 각 Task마다 fine-tuning된 모델이 필요하게 된다. (모델의 기능이 복합적이지 못함) GPT3의 특징 Few-shot learning이 가능 (매우 적은 수의 데이터로도 downstream task 학습이 가능함을 의미) GPT 모델의 작동 방식을 살펴보면 엄연히 말해서 학습한다고 말하기도 애매함 추가적인 파라미터 업데이트 없이 다양한 task ..

BERT의 파생모델 [DistilBERT]

DistilBERT 사전 학습된 Large BERT의 성능은 확실히 뛰어나지만 그에 걸맞는 무게를 자랑한다. 그렇기에 downstream task를 위해 fine-tuning을 마친 모델 또한 부담스럽고 무거운 모델이 되므로 주어진 컴퓨팅 리소스 내에서 모델을 실행하기가 어려울 수 있다. 가령 모바일 환경에서 모델을 실행해야할 경우 말이다. 이 문제를 해결하기 위해 지식 증류라는 개념이 도입되었고, 이를 기반으로 제작된 모델이 DistilBERT이다. DistilBERT는 BERT에서 레이어 수를 줄이면서 성능 저하를 최소화 하는 방향으로 설계되었다고 한다. 결과적으로 BERT 모델 사이즈의 40% 수준으로 감소할 수 있었고, 97% 수준의 성능을 유지하면서 60% 가량 빠른 속도를 뽑아낼 수 있다고 한..

BERT의 파생모델 [SpanBERT]

SpanBERT SpanBERT는 텍스트 범위를 예측하는 질문-응답과 같은 Task에서 주로 사용된다. 기존 BERT의 MLM방식과 더불어 SBO방식을 함께 사전 학습에 활용한다. token = [you, are expented, to, know, [MASK], [MASK], [MASK], [MASK], country] SBO span boundry objective의 줄임말이다. 토큰의 연속 범위를 무작위로 MASK 처리한다. 기존 BERT 모델에서는 MASK 토큰의 예측을 위해 MASK의 representations을 활용했다면 SBO에서는 연속적인 MASK 토큰의 예측을 위해 나열된 MASK의 양쪽 경계에 있는 문자 토큰의 representation을 예측에 활용한다. [you, are expent..

BERT의 파생모델 [ELECTRA]

ELECTRA MLM 방식에서 좀 더 확장된 태스크와 NSP으로 학습을 진행한다. 마스킹된 토큰을 맞히는 방식에서 더 나아가 MLM 예측값이 실제 토큰인지 아닌지 맞히는 태스크를 진행한다.→ 기존 BERT 모델에서도 마스킹된 15% 단어 내에서 10%는 마스킹 토큰[MASK] 대신 틀린 단어를 넣어 두고, 또 다른 10%는 마스킹하지 않는 방식으로 fine-tuning 학습 데이터와의 간극을 좁히고자 하였다. 하지만 MLM이 모델 학습의 주요 태스크이므로 MASKED 데이터를 안쓰는 것이 아니다. 반면 ELECTRA 모델에서 적용된 replaced token detection task의 경우 인풋 데이터로 실제 문장에서 일부 단어가 대체된 문장이 활용되므로 구멍없는 멀쩡한 문장을 쓴다는 점에서 MLM에서..

BERT의 파생 모델 [RoBERTa] 특징

BERT 모델과 비교했을 때 어떤 차이가 있는지 알아봅니다. MLM 태스크를 동적 마스킹 방법으로 학습 적용 NSP 태스크를 제외함 배치 크기를 증가해서 학습 BBPE 토크나이저 사용 동적 마스킹(Dynamic masking) 기존 BERT 모델은 MLM 사전 학습에서 정적 마스킹을 사용한다. → 정적 마스킹은 전처리 단계에서 단 한번 수행되어 epoch 마다 동일한 마스킹을 예측하도록 학습한다. 동적 마스킹은? → 학습 데이터(문장) 하나 당 $\times$10개의 문장을 복제해서 각각 다른 마스킹 결과가 나오도록 전처리한다. 40epoch을 돌리는 동안 10개의 마스킹된 문장이 학습되도록 하여 같은 문장이더라도 다른 마스킹 단어를 맞히는 태스크를 부여한다. 이렇게 되면 40epoch이 진행될 동안 마..

BERT의 파생 모델 [ALBERT]

BERT의 파생 모델 ALBERT A Lite version of BERT의 줄임말로 BERT의 라이트 버전이다. BERT모델 학습 및 추론 시 소비되는 시간 감소, 컴퓨팅 리소스 감소를 위한 모델 리소스 감소를 위해 아래 두 가지 방법을 제안한다 - factorized embedding parameterization - cross-layer parameter sharing Factorized embedding parameterization 논문에서는 토큰이 임베딩 레이어를 거치는 것은 맥락과는 독립적인 representation(임베딩 벡터) 학습을 거치지만, 그 뒤 히든 레이어를 거치는 것은 맥락 의존적인 결과를 낸다고 본다. 그리고 BERT와 같은 모델이 좋은 성능을 발휘하는데는 맥락에 대한 학습에..

BERT 모델에서의 임베딩 벡터 추출 방식에 관하여

사전 학습된 BERT 모델에서의 임베딩 벡터 추출 먼저 각 문장에 [CLS], [SEP], [PAD] 토큰을 추가한다. CLS 토큰은 각 문장의 맨 앞자리에 추가 생성한다. SEP는 문장의 끝에 추가 생성한다. PAD의 경우 모든 입력 문장의 길이를 맞춰주기 위해 문장 최대 길이(max_seq_len)에 미달하는 문장은 padding한다. 각 문장을 vocab 딕셔너리와의 매핑을 통해 int로 변환한다. 각 단어를 설정한 embedding_dimension 크기만큼의 벡터로 임베딩한다. BERT-base 모델의 경우 각 토큰 당 768차원의 임베딩 벡터로의 변환을 요구한다. 여기까지의 과정이 input_ids의 생성 과정이다. 실제 문장의 영역과 PAD 영역의 구분을 위해 attention_mask를 생..