Sentence-BERT
·
머신러닝/딥러닝
Sentence-BERT는 문장 쌍 분류, 두 문장의 유사도 계산 등에 사용되는 모델이다. 문장 표현 계산 사전학습된 Bert에서 문장표현을 가져와서 사용한다. 여기서 문제점은 파인튜닝없이 Bert를 사용하는 경우 [CLS] 토큰의 문장표현이 정확하지 않다는 것이다. 그래서 문장표현으로 [CLS] 대신 모든 토큰에 풀링(Pooling)을 적용해 계산한다. 평균 풀링 : 모든 토큰에 평균 풀링을 적용하면 문장 표현은 모든 단어의 의미를 갖는다. 최대 풀링 : 모든 토큰에 최대 풀링을 적용하면 문장 표현은 중요한 단어의 의미를 갖는다. 샴 네트워크 Sentence-BERT BERT를 파인튜닝해 문장 쌍 태스크에 사용하기 위해 샴네트워크 아키텍처를 사용한다. 샴 네트워크란 동일한 가중치를 공유하는 2개의 동일..
텍스트 요약을 위한 BERTSUM
·
머신러닝/딥러닝
텍스트 요약 태스크에 맞춰 파인튜닝된 Bert 모델을 BERTSUM이라고 한다. 긴 문서를 몇개의 핵심문장으로 요약, 뉴스기사 요약, 논문 요약 등 다양한 영역에서 널리 사용된다. 요약에는 크게 추출요약(Extractive)과 생성요약(Abstractive) 두가지 방식이 존재한다. 추출 요약 Extractive Summarization : 텍스트에서 중요한 문장만 추출해 요약한다. 문장을 그대로 추출하는 것이기 때문에 문서에 따라 성능이 아쉽다고 느껴질 수도 있다. 생성 요약 Abstractive Summarization : 텍스트를 의역(Paraphrasing)해 요약을 만든다. 여기서 의역이란 텍스트의 의미를 좀 더 명확하게 나타내기 위해 다른 단어를 사용해 주어진 텍스트를 새롭게 표현하는 것을 말..
Bert(Bidirectional Encoder Representation from Transformer)
·
머신러닝/딥러닝
Bert란 bert란 구글에서 발표한 임베딩 모델로 문맥을 고려한 임베딩을 제공하기 때문에 여러 nlp task에서 좋은 성능을 보여줬다. 워드투벡과 같은 단어 임베딩 모델에서는 문맥이 달라도 동음이의어를 구분하지 못하고 동일한 임베딩을 제공하는 반면, 버트는 문장의 문맥을 이햐 한 다음 문맥에 따라 단어 임베딩을 생성한다. Bert의 동작 Bert는 트랜스포머 모델의 인코더만 사용한다. Bert의 Bidirectional은 양방향 이란 뜻으로, 디코더는 문장을 순차적으로 생성해야 해서 단방향으로만 읽게되지만 인코더는 원래 양방향으로 문장을 읽을 수 있기 때문에 붙은 이름이다. 인코더에 문장을 입력하면 멀티 헤드 어텐션 메커니즘을 사용해 문장의 각 단어의 문맥을 이해해 문장에 있는 각 단어의 문맥 표현을..
seq2seq과 Attention
·
머신러닝/딥러닝
Seq2seq 모델 Sequence-to-Sequence( seq2seq) 시퀀스를 입력으로 받아 시퀀스를 출력하는 구조의 네트워크. 인코더- 디코더 구조로 이루어져있다. many to many의 경우 기계번역에 주로 사용된다. 인코더 입력으로 들어오는 문장의 내용을 RNN을 이용해 벡터 형태로 만들며 이런 과정을 인코딩이라고 한다. 입력의 마지막 단어의 통해 나온 context 벡터를 디코더의 입력으로 사용한다. 디코더 인코딩된 정보 벡터를 이용해 결과문장으로 하나하나 풀어내는 과정으로 디코딩이라고 한다. 인코더의 마지막 출력, context 벡터과 SOS( Start of Sequence)를 입력으로 받아 RNN을 거치며 y값을 생성해낸다. Teacher Forcing 학습시 모델이 처음에 틀리게 예..
FastText, Glove
·
머신러닝/딥러닝
오늘 알아볼 모델은 fasttext와 glove로, 둘 다 wordevec을 기반으로 조금씩 아이디어를 더해 보완한 모델이다. 그래서 기본적으로 학습은 word2vec과 거의 동일하니 아이디어 중심으로 어떤 것을 보완했는지 알아보자. FastText 기존 word2vec 문제 word2vec은 단어를 하나의 단위로 생각하기 때문에 확장성이 떨어진다. 예를들면 attain - attainable - attainability 라는 단어의 형태 변화가 있을때 word2vec은 이를 다 다른 단어로 학습하기 때문에 효율적이지 못한 학습을 하게된다. 또한 사전에 없는 단어는 표현 할 수 없는 문제도 있다. (out of vocabulary) Character N-gram (subword) 패스트 텍스트는 단어 단..
가중치 초기화
·
머신러닝/딥러닝
기울기 소실 신경망의 역전파 과정에서 출력층과 멀어질 수록 기울기 값이 매우 작아지는(0에 가깝게) 것을 말한다. 시그모이드 함수는 미분을 했을경우 기울기가 0~0.25 사이의 값을 갖게 되는데 1이하의 값을 계속해서 곱하게 되면 값이 점점 작아져 결국 0에 수렴하게 될 것이다. 그래서 신경망이 깊어질수록 기울기가 소실되어 가중치 업데이트가 잘 이루어지지 않는다. 가중치 초기화 Weight initialization 위에서 언급한 신경망의 문제인 기울기 소실/폭발의 문제를 해결하기 위한 방법 중 하나이다. 초기 가중치는 중요한 파라미터 중 하나로 시작점을 어디로 잡느냐에 따라 학습이 어느 방향으로 나아가게 될지 결정한다. 모든 weigth를 같은 값으로 설정한다면 역전파 시 모두 같이 업데이트가 되어 학..
배치 정규화, 레이어 정규화
·
머신러닝/딥러닝
Batch 배치 Gradient decent 과정에서 컴퓨터가 대용량의 데이터를 한번에 처리하기 힘들기 때문에 데이터를 batch 단위로 나눠서 학습을 한다. 즉 배치 사이즈만큼의 데이터만을 이용해 기울기를 업데이트 하는 것이다. 모든 배치를 사용해 학습 데이터 전체를 한번 학습한 것을 Epoch라고 부른다. 이렇게 배치 단위로 학습을 하게 되면 학습과정에서 계층 별로 입력의 데이터 분포가 달라지는 현상이 발생 하게 된다. 데이터를 배치로 나눴기 때문에 배치 마다 데이터의 분포의 차이가 생기는 것이다. 이렇게 되면 훈련을 할때마다 분포가 달라지고, 신경망이 깊어 질수록 변화가 누적되어 feature의 분포변화가 점점 더 심해지게 된다. 이를 Internal Covarient Shift 라고 부르며 이 문..
역전파 Backpropagation
·
머신러닝/딥러닝
기계학습은 가중치 매개변수의 초깃값을 먼저 신경망에 적용한 이후, 최적화를 하기위해 각 가중치 매개변수에 대한 손실함수의 gradient를 이용하여 가중치의 값을 조정해 나간다. 이때 모든 가중치를 하나하나 일일히 계산하여 업데이트 하는 것은 시간이 오래걸려서 비효율적이다. 그래서 순전파를 통해 구해진 오차를 역전파해서 효율적으로 가중치를 업데이트 해나가는 것이다. 이때의 오차 값은 여러 가중치와 활성화 함수를 거쳐서 나오게 된 값으로 이를 거슬러 올라가기 위해 미분의 chain rule 성질을 이용한다. 해당 신경망에서 체인룰을 이용해 w5의 에러 함수 미분을 한다면 아래의 식과 같다. $$ \frac{\partial E_{total}}{\partial w_5} = \frac{\partial E_{to..
경사하강법 Gradient Descent (2)
·
머신러닝/딥러닝
https://hajinnote.tistory.com/26 이번시간에는 경사하강법을 보완한 다양한 방법들을 알아보자. Momentum 모멘텀은 최소 값으로 진행하는 속도에 관성을 줘서 경사하강법이 가진 단점인 평탄한 곳에 빠지거나 속도가 느린점을 보완하는 방법이다. 이전 gradient에 대한 정보가 담긴 모멘텀 벡터를 추가해서 얼마나 업데이트를 할지 결정한다. 너무 빠르게 진행되지 않도록 γ 파라미터를 추가해 속도를 제어 한다. (ex. 이전 기울기 값이 양수라면 양수 값이 계속 더해져서 스텝사이즈가 너무 커지는 것을 방지) $$ v = \alpha v + \eta \frac{\partial L}{\partial W} $$ $$ W = W+v $$ Neserov accelerated gradient N..