기본 콘텐츠로 건너뛰기

5월, 2020의 게시물 표시

[Deep Learning-딥러닝]Transformer - Attention is all you need

Transformer - Attention is all you need 2017 년에 발명 된 Transformer는 전체 텍스트 입력을 동시에 처리하여 단어 (또는 sub-words) 간의 컨텍스트 관계(contextual relations)를 학습하는 어텐션 메커니즘을 사용한 모델입니다.  트랜스포머는 인코더, 디코더 두 부분으로 구성된다. 인코더는 인풋 텍스트와 벡터의 레터럴 표현읽는다(lateral representation of it (e.g. a vector for each word)). 디코더는 인코더 입력으로으로 부터 변화된 텍스트를 출력한다. Recurrent model은 순차적인 특성이 유지되는 장점이 있었음에도, long-term dependency problem이라는 단점을 가지고 있다. 이와 달리 transformer는 recurrence를 사용하지 않고,  attention mechanism만을 이용해 input과 output의 dependency를 알아낸다. Transformer는 attention만 사용해서 연산 량은 매우 줄었음에도 성능이 매우 높게 나오는 모델이다. Attention is All you need 논문에서, transformer는 6개의 encoder와 6개의 decoder로 구성되어 있다고 설명한다.  Encoder는 multi-head self-attention과 fully connected feed-forward network 두 개로 구성되어 있고, 각 layer에 residual connection과 layer normalization을 적용한다.  Decoder는 세 개의 sub-layers로 구성되어 있다. Illegal masking 방식을 적용한 multi-head self-attention과 encoder의 output을 K, V 로 전달받아 multi-head self-attention을 수행하는 layer와 fully connected feed-forward network로 구성되어 있다. D

[Deep Learning-딥러닝]Attention 신경망 - Seq2seq

Attention 기법 Attention Value는  Gradient Vanishing 문제를 보완하기 위한 방법으로, Encoder의 hidden state를 모아서 Decoder에서 이용하는 방법입니다.  Background Sequence-to-sequence model Seq2seq 모델은 번역 문제를 학습하기 위해서 많이 사용되는 RNN 구조 SOS(start of sequence), EOS(End of sequence)는 문장의 시작과 끝을 알리는 예약어 Encoder에서는 데이터가 단어 별로 입력되고, RNN 사이에 hidden state가 전달됨 Context에 Encoder의 모든 feature vector를 압축해서 담아 Decoder로 전달 Gradient vanishing 문제 발생 Context에 Encoder의 모든 정보를 담는데는 한계가 있음 입출력 연관 관계가 너무 멀리 떨어져 있으면 기울기 소실이 발생하여 학습이 잘 안됨 예) 번역에서 어순이 반대인 경우 Attention 구성 요소 Query: 질의, 찾고자 하는 대상/정보 Key: 키, 저장된 데이터를 찾고자 할 때 참조하는 값 Value: 값, 저장된 데이터 Dictionary: Key-Value Pair로 이루어진 집합 Querying Query를 날리면 Key를 비교해서 Value를 반환하는 과정을 말합니다. Attention mechanism Query를 날리면 Q에 대해 어떤 K가 유사한지 비교 유사도를 반영하여 V들을 합성한 것이 Attention Value Q와 K는 dimension이 n인 실수 Compare 함수는 Dot-Product(벡터의 내적 - Inner Product)으로 유사도 Normalize를 위해 Compare 결과에 Softmax 수행 Aggregation은 weighted sum을 많이 사용하며, 비슷할수록 더 많은 비중으로 출력됨 Attention - Seq2seq Seq2seq에서는 Encoder의 hidden layer들을 key와 v

[Deep Learning-딥러닝] GRU(Gated Recurrent Unit)

GRU(Gated Recurrent Unit) - LSTM의 간소화 LSTM의 연산 복잡도를 간소화한 GRU의 gate는 다음과 같습니다. Reset Gate(r): 현재 입력을 얼마나 사용할지 Forget Gate(z): 이전 hidden state 얼마나 잊을지 Hidden Gate(g, h): LSTM의 Cell state와 Hidden state의 역할을 모두 수행 Reset Gate Reset gate는 이전 hidden state와 현재 입력값을 이용해 생성되며, 활성화 함수는 sigmoid를 사용합니다. reset gate의 결과는 이후 g gate를 연산할 때 이전 hidden state를 조정합니다. 예) 입력값 ⓐ 나는 사과가 좋아합니다. ⓑ 너는 과일을 싫어합니다. Q) 나는 어떤 과일을 먹고 싶을까요? => 질문을 위해 ⓐ의 정보가 필요합니다. Reset gate는 ⓐ와 ⓑ를 구분하는 기능을 합니다. 수식 설명  이전 hidden state와 현재 입력값을 이용해 reset gate 생성 reset gate 결과는 현재 입력값을 조정하는데 사용 Forget Gate GRU의 Forget gate는 LSTM의 Forget gate와 Output gate의 역할 겸합니다.  Forget gate는 이전 hidden state와 현재 입력값을 이용해 생성되며, 활성화 함수는 sigmoid를 사용합니다. 이전 hidden state에 직접 곱해서 이전 hidden state의 특징을 제거 합니다.  이전 hidden state와 현재 입력값을 이용해 forget gate 생성 forget gate의 결과는 hidden state에서 이전 hidden state와 g의 값을 조정해 출력값을 내는데 사용 Hidden state GRU의 Hidden gate는 LSTM의 Cell state와 Hidden state의 역할을 모두 수행합니다. 즉....  GRU의 Hidden gate는 Reset gate, Forget gate를 모두 적용하여 계

[Deep Learning-딥러닝]SRU(Simple Recurrent Unit)

SRU(Simple Recurrent Unit) SRU는 병렬화와 시퀀스 모델링이 가능한 light recurrence한 unit입니다. 기존 RNN Architecture(RNN, LSTM, GRU)는 previous time step에 대한 의존성 때문에 병렬처리가 불가능하여 학습 속도가 느렸습니다. 이런 단점을 SRU는 높은 병렬화 및 시퀀스 모델링 기능을 제공하여 학습시간 단축시켰습니다. SRU는 분류, 질의응답에서 cuDNN-optimized LSTM보다 5~9배 빠른 속도를 보였고, LSTM과 convolutional models보다 좋은 성능을 보였습니다. 특징 SRU의 state연산은 time-dependent이지만, 각 state 차원은 independent입니다. 이것은 hidden dimension과 time steps에서 병렬화 연산하는 CUDA-level optimization으로 병렬 처리 가능합니다. SRU는 convolutions을 더 많은 recurrent 연결로 대체하였습니다(QRNN과 KNN과 같이). 이건 적은 연산으로 모델링을 유지합니다. SRU는 highway connection방법과 deep architecture에서 gradient전파에 맞게 조정된 매개 변수 초기화 체계를 사용하여 deep recurrent models training을 개선합니다. 연산방법 SRU는 forget gate, state, reset gate, hidden state 연산을 수행합니다. Light recurrence (1, 2번 수식) Forget gate: 정보 흐름을 제어 State: 이전 state와 현재 입력을 forget gate에 따라 조정 특징 - 문자열 정보를 위해 input x와 state c를 연산 - 이전 state에 영향을 받음 - 병렬처리를 위해 matrix multiplication 대신 point-wise multiplication 연산 수행 Highway network (3, 4번 수식) Hidden stat

[Deep Learning-딥러닝] LSTM(Long short term memory)

LSTM(Long short term memory) LSTM은 RNN의 문제점 Gradient Vanishing 문제를 해결한 Model입니다. Vanishing 문제점을 해결하기 위해 Hidden state외에 Cell state를 추가로 사용합니다. Forget Gate Forget Gate는 시간 t에서의 정보의 중요도에 따라 기억을 "잊고자 하는 정도"를 나타냅니다. W xf 와  W hf  는 h t-1 과 x t 정보의 중요도를 조정하는 weight입니다. 활성함수로 sigmoid를 사용하므로 0~1 범위를 가집니다. 특징은 여러 차원으로 되어 있으므로, 특징별로 Ct-1에서 불필요한 기억을 지우고 필요한 정보는 유지하는 결정을 합니다. Input Gate Input Gate는 시간 t에서 새로운 입력 정보를 받고자 하는 정도를 나타냅니다. 활성함수로 sigmoid를 사용하므로 0~1 범위를 가집니다. 특징은 여러 차원으로 되어 있으므로, 특징별 받아들일지 말지를 결정할 수 있습니다. Cell State Cell state는 기억을 총괄하는 메모리로, gradient vanishing 문제를 해결하기 위해 사용되었습니다. Input 정보를 얼마나 받아들일지 이전 cell state를 얼마나 망각할지를 결정합니다. 여러 차원으로 되어 있어, 각 차원은 특정 정보를 기억합니다. Hadamard 연산자의 특성으로 인해, 특징 별로 기억하고, 잊고, 새로이 정보를 받을 수 있습니다. Ct-1에 새로운 인풋 xt와 ht-1를 보고 중요한 정보를 넣는다. Output Gate Output Gate는 Cell State 중 어떤 특징을 출력할지 결정하는 역할을 합니다 . 활성함수로 sigmoid를 사용하므로 0~1 범위를 가집니다. Hidden state Hidden State는 다음 연속된 모듈에 Hidden State결정하는 역할 로, Cell State에 tanh

[Deep Learning-딥러닝]RNN; Recurrent Neural Network 계열 Layer

시계열 데이터 내용은 다음 포스팅을 참고 바랍니다. https://sungwoony.blogspot.com/2020/05/blog-post.html RNN RNN은 시계열 데이터를 처리하기 위해 사용되는 Deep Learning Network입니다. 시퀀스의 모든 요소에 동일한 작업(변수)을 수행하고, 출력은 이전 계산에 의존적입니다. 지금까지 계산 된 정보는 메모리 저장합니다. RNN 은 입력층, 은닉층, 출력층 으로 구성되있다. hidden state는 현재 입력값 x와 이전 hidden state값에 영향을 받습니다. 활성함수는 Hyperbolic Tangent(tanh)를 사용합니다. 이를 식으로 표현하면 다음과 같습니다. RNN은 행렬 연산으로 수행되며 각 벡터와 행렬의 크기는 다음과 같습니다.   RNN 셀은 두 개의 입력을 리턴하는데, 첫번째 리턴값은 모든 시점(timesteps)의 은닉 상태들이며, 두번째 리턴값은 마지막 시점(timestep)의 은닉 상태입니다. 다음 GIT에서 RNN 소스 확인할 수 있습니다. https://github.com/ynebula/NLP/blob/master/RNN.ipynb RNN Back Propagation (Through Time) 순방향 계산이 완료 되면, 비용함수로 예측값과 정답을 비교해 Loss를 구함 이 Loss값을 trainable variable로 미분하여 가중치를 갱신함. 가중치 갱신 방법은 다음 포스티을 참고 바랍니다. https://sungwoony.blogspot.com/b/post-preview?token=APq4FmDDOJ4dTYtjdTq4oBg1DdEXIMwHDxvqR43wRk6_kdF1fLtodGA64Td5HVdD5tG00nUEmzwa-_Fa5IrZk4cJcuT8wXsxXGp5HOnikhFR7esCM8Ey_t7n-O6DDMT3l6agbYPHYBzJ&postId=5936716516921891524&type=POST RNN 문제

[Deep Learning-딥러닝]자연어 처리 및 순환 신경망 소개

자연어(Natural Language) 사람이 일상 생황에서 사용하는 언어를 자연어라고 합니다.  자연어 처리(NLP; Natural Language Processing) NLP는 자연어의 의미를 분석하여 컴퓨터가 처리할 수 있도록 하는 일을 말합니다.  언어학 지식을 인공지능을 이용해서 컴퓨터 과학으로 구현해 어떻게 효율적으로 사용하느냐를 연구하는 분야입니다. 자연어 처리 특징(어려움) 복잡성(Complexity) 애매함(Ambiguity) 의존성(Dependency) 머신러닝 VS 딥러닝 머신러닝 언어학이 많은 비중을 차지하였습니다. 도메인 지식을 상당히 요하기 때문에, 진입 장벽이 높고 기대효과가 분명합니다. 딥러닝 도메인 지식의 상당 부분을 Data-Driven으로 해결 하여 의외의 Insight를 얻을 수 있습니다. 애플리케이션 소개 문장 번역(Machine Translation) 감정 분석(Sentiment Analysis) 챗봇(Chatbots) 문맥 광고(Contextual Advertising) 자동 음성 인식(ASR; Automated Speech Recognition) 광학 문자 인식(OCR; Optical Character Recognition) 순차 데이터(Sequential Data) 순서가 의미가 있으며, 순서가 달라질 경우 의미가 손상되는 데이터를 순차 데이터 라고 합니다. 시간적 의미가 있는 경우 Temporal Sequence 라고 하며, 일정한 시간차라면 Time Series 라고 합니다. Temporal Sequence는 시간과 Value가 쌍으로 이루어지고, Time Series는 x축을 시간으로 보지 않고 step으로 봅니다. 순환 신경망 종류 순차 데이터셋의 구조 및 네트워크 다중 입력, 단일 출력 마지막 입력에는 EOS(Special Token)을 넣어서 문장 종료를 알림 다중 입력,