K 개발자
순환 신경망과 어텐션 본문
Char-RNN
RNN을 훈련하여 문장에서 다음 글자를 예측 (한 번에 한 글자씩 새로운 텍스트를 생성할 수 있다.)
순차 데이터셋을 나누는 방법
텍스트에 있는 글자는 섞으면 안 된다.
훈련 세트, 검증 세트, 테스트 세트가 중복되지 않도록 만드는 것이 중요 (두 세트 사이에 문장이 걸치지 않고 완전히 분리될 수 있도록 세트 사이에 간격을 두는 것도 좋은 생각)
시계열을 다룰 때는 보통 시간에 따라 나눈다. (경우에 따라 훈련할 시간 간격을 더 길게 하기 위해 다른 차원을 기준으로 나눌 수도 있지만 시간에 따라 나누는 것이 안전)
암묵적으로 RNN이 과거(훈련 세트)에서 학습하는 패턴이 미래에도 등장한다고 가정
다른 말로 하면 이 시계열 데이터가 (넓은 의미에서) 변하지 않는다stationary고 가정
시계열이 충분히 안정적인지 확인하려면 시간에 따라 검증 세트에 대한 모델의 오차를 그려볼 수 있다.
모델이 검증 세트 마지막보다 첫 부분에서 성능이 더 좋다면 이 시계열은 충분히 안정되지 않은 것 (더 짧은 시간 간격으로 모델을 훈련하는 것이 좋다.)
상태가 있는 RNNstateful RNN
RNN이 한 훈련 배치를 처리한 후에 마지막 상태를 다음 훈련 배치의 초기 상태로 사용
이렇게 하면 역전파는 짧은 시퀀스에서 일어나지만 모델이 장기간 패턴을 학습
배치에 있는 각 입력 시퀀스가 이전 배치의 시퀀스가 끝난 지점에서 시작해야 한다. (순차적이고 겹치지 않는 입력 시퀀스)
단어 수준 RNN
마스킹masking
패딩 토큰을 무시하도록 모델에게 알려주어 실제 의미가 있는 데이터에 집중할 수 있게 만드는 것
순환 층은 마스킹된 타임 스텝을 만나면 이전 타임 스텝의 출력을 단순히 복사
마스크가 출력에도 전파된다면 (시퀀스를 출력하는 모델) 손실에도 적용
따라서 마스킹된 타임 스텝은 손실에 영향을 미치지 못할 것 (이 타임 스텝의 손실은 0)
사전훈련된 임베딩 재사용하기
대량의 텍스트 코퍼스corpus(e.g. 위키백과 문서)에서 훈련된 단어 임베딩을 재사용할 수 있다.
비슷한 의미를 가진 단어는 다른 작업(e.g. 문장에서 다음 단어 예측하기)에서도 임베딩 공간에 군집을 이룰 가능성이 높다.
그러므로 많은 파라미터를 사용해 단어 임베딩을 학습하기보다 사전훈련된 임베딩을 재사용할 수 있는지 검토
신경망 기계 번역neural machine translation(NMT)을 위한 인코더-디코더 네트워크
기본 설명은 순환 신경망과 합성곱 신경망을 참고
디코더는 이전 스텝의 타깃 단어를 입력으로 사용 (맨 처음 단어는 SOSstart-of-sequence 토큰으로 시작하고 문장의 끝에는 EOSend-of-sequence 토큰이 있을 것으로 기대)
인코더에 입력되는 문장은 주입되기 전에 거꾸로 뒤집는다. (i.e. 문장의 시작 부분은 디코더가 번역할 첫 번째 단어이기 때문에 인코더에 마지막으로 주입)
각 단어는 초기에 1차원으로 표현되어 있고 임베딩 층이 단어 임베딩을 반환 (이 단어 임베딩이 인코더와 디코더로 주입)
각 단계마다 디코더는 출력 어휘 사전에 있는 단어에 대한 점수를 출력하고 소프트맥스 층이 이 점수를 확률로 바꾼다. (가장 높은 확률의 단어가 출력)
(훈련이 끝나고) 추론 시에는 디코더에 주입할 타깃 문장이 없으므로 이전 스텝에서 디코더가 출력한 단어를 주입
양방향 RNN(양방향 순환 층bidirectional recurrent layer)
신경망 기계 번역 같은 여러 종류의 NLPnatural language processing (자연어 처리) 작업은 주어진 단어를 인코딩하기 전에 다음 단어를 미리 보는 것이 좋다.
이를 위해 동일한 입력에 대해 두 개의 순환 층을 실행 (하나는 왼쪽에서 오른쪽으로 단어를 읽고 다른 하나는 오른쪽에서 왼쪽으로 읽는다.)
그다음 일반적으로 타임 스텝마다 이 두 출력을 연결
빔 검색beam search
스텝마다 무조건 가장 가능성 있는 단어를 출력해서는 최적의 번역을 만들지 못한다.
k개의 가능성 있는 문장의 리스트를 유지하고 디코더 단계마다 이 문장의 단어를 하나씩 생성하여 가능성 있는 k개의 문장을 만든다. (파라미터 k를 빔 너비beam width라고 부른다.)
어텐션 메커니즘
각 타임 스텝에서 (인코더에 의해 인코딩하여) 적절한 단어에 디코더가 초점을 맞추도록 하는 기술
입력 단어에서 번역까지 경로가 훨씬 짧아지는 것을 의미하므로 RNN의 단기 기억의 제한성에 훨씬 적은 영향을 받게 된다.
인코더의 마지막 은닉 상태만 디코더에 보내는 것이 아니라 인코더의 모든 출력을 디코더로 전송
각 타임 스텝에서 디코더의 메모리 셀은 이런 모든 인코더 출력의 가중치 합을 계산 (주의를 집중할 단어를 결정)
가중치는 정렬 모델alignment model(또는 어텐션 층attention layer)이라 부르는 작은 신경망에 의해 생성
바흐다나우 어텐션Bahdanau attention
하나의 뉴런으로 구성되고 인코더의 모든 출력을 입력으로 받아 디코더의 이전 은닉 상태를 연결하는 층으로 시작
이 층은 각 인코더 출력에 대한 점수(또는 에너지)를 출력 (이 점수는 각 출력이 디코더의 은닉 상태와 얼마나 잘 맞는지를 측정)
마지막으로 모든 점수가 소프트맥스 층을 통과해 각 인코더 출력에 대한 최종 가중치를 얻는다.
주어진 디코더 타임 스텝에 대한 모든 가중치 합은 1 (소프트맥스 층은 타임 스텝에 각각 적용되지 않기 때문)
인코더의 출력과 디코더의 이전 은닉 상태를 연결하기 때문에 연결 어텐션concatenative attention(또는 덧셈 어텐션additive attention)이라고도 부른다.
루옹 어텐션Luong attention(곱셈 어텐션multiplicative attention)
이 어텐션 메커니즘의 목적은 인코더의 출력 하나와 디코더의 이전 은닉 상태 사이의 유사도를 측정하는 것이기 때문에 간단히 두 벡터 사이의 점곱을 제안 (점곱은 좋은 유사도 측정 방법)
이렇게 하려면 두 벡터는 동일한 차원을 가져야 한다.
점곱은 하나의 점수를 만들고 바흐다나우 어텐션처럼 (어떤 디코더 타임 스텝에서) 이 점수가 모두 소프트맥스 층을 통과해 최종 가중치를 만든다.
또 다른 간소화된 버전은 이전 타임 스텝이 아니라 현재 타임 스텝에서 디코더의 은닉 상태를 사용
그다음 어텐션 메커니즘의 출력을 사용하여 (디코더의 현재 은닉 상태를 계산하지 않고) 바로 디코더의 예측을 계산
또한 인코더의 출력이 점곱 계산 전에 먼저 선형 변환(편향이 없는)을 통과하는 점곱 메커니즘의 변종을 제안 ('일반' 점곱 방법)
(스케일 재조정 파라미터 벡터 v를 추가한) 연결 어텐션 메커니즘과 이 점곱 방법을 비교했더니 점곱의 변종이 연결 어텐션보다 더 높은 성능이 나왔다.
비주얼 어텐션visual attention
합성곱 신경망이 먼저 이미지를 처리하여 일련의 특성 맵을 출력
그다음 어텐션 메커니즘을 장착한 디코더 RNN이 한 번에 한 단어씩 캡션을 생성
디코더 타임 스텝마다 (단어 마다) 디코더는 어텐션 모델을 사용해 이미지에서 적절한 부위에 초점을 맞춘다.
트랜스포머Transformer 구조 : 어텐션이 필요한 전부다Attention is all you need
순환 층이나 합성곱 층을 전혀 사용하지 않고 어텐션 메커니즘만 (그리고 임베딩 층, 밀집 층, 정규화 층, 몇 가지 다른 구성 요소를 더해) 사용해 NMT 문제에서 최고 수준 성능을 크게 향상
추가적인 장점은 빠르게 훈련할 수 있고 병렬화하기 쉽다는 것
위치 인코딩positional encoding
문장에 있는 단어의 위치를 나타내는 (단어 임베딩과 유사한) 단순한 밀집 벡터
n번째 위치 인코딩이 각 문장에 있는 n번째 단어의 단어 임베딩에 더해진다. (이를 통해 모델이 각 단어의 위치를 알 수 있다.)
이는 멀티-헤드 어텐션 층이 단어 사이 관계만 보고 단어의 순서나 위치를 고려하지 않기 때문에 필요
그 외 다른 층은 전부 타임 스텝에 독립적이므로 각 단어의 (상대적이거나 절대적인) 위치를 알 방법이 없다. (상대적이고 절대적인 단어 위치는 중요)
멀티-헤드 어텐션multi-head attention
인코더의 멀티-헤드 어텐션 층은 관련이 많은 단어에 더 많은 주의를 기울이면서 각 단어와 동일한 문장에 있는 다른 단어의 관계를 인코딩
이 어텐션 메커니즘을 셀프-어텐션self-attention이라고 한다. (문장 자기 자신에게 주의를 기울인다.)
디코더의 마스크드 멀티-헤드 어텐션masked multi-head attention 층도 동일한 작업을 수행하지만 각 단어는 이전에 등장한 단어에만 주의를 기울일 수 있다.
디코더의 멀티-헤드 어텐션 층은 디코더가 입력 문장에 있는 단어에 주의를 기울이는 곳
실습코드링크 : RNN과 어텐션
'인공지능 > 핸즈온 머신러닝' 카테고리의 다른 글
강화 학습 (0) | 2021.02.17 |
---|---|
오토인코더와 GAN (0) | 2021.01.26 |
순환 신경망과 합성곱 신경망 (0) | 2021.01.07 |
합성곱 신경망 (0) | 2020.12.28 |
텐서플로 데이터 API (0) | 2020.12.19 |