Data/ML&DL

Attention(Seq2Seq와 Attention)

동동 2023. 4. 23. 02:03
728x90

Attention(Seq2Seq와 Attention)

  1. Seq2Seq
    1. 프로세스 : input → Encoder → Context Vector → Decoder → output
  2. 문제점
    1. Information Bottleneck : Seq2Seq 모델의 가장 큰 문제점 중 하나는 입력 시퀀스의 길이가 길어질수록 성능이 저하되는 현상입니다. 이는 Encoder RNN이 고정된 길이의 context vector만 생성하기 때문에 입력 시퀀스의 맨 앞부분의 정보가 손실되기 때문입니다. 또한, Decoder RNN은 이 context vector를 사용하여 출력 시퀀스를 생성하기 때문에, context vector가 어떤 정보를 포함하느냐에 따라 출력 시퀀스의 질이 크게 좌우될 수 있습니다.
    2. 또한, Seq2Seq 모델은 하나의 context vector만을 생성하기 때문에, 입력 시퀀스 내에서 다양한 의미를 갖는 부분들을 구분하지 못하고, 하나의 벡터로 압축해야 합니다. 이로 인해 입력과 출력 사이의 연관성이 약한 데이터에 대해서는 성능이 좋지 않을 수 있습니다.

Seq2Seq의 Information Bottleneck을 해결하는 방법

  1. Attention의 등장
    1. : 각 시점t 마다 Decoder에서 입력 Sequence의 특정 부분에 초점을 맞출 수 있도록 Encoder로 직접적으로 연결
    2. Attention 모델에서는 Encoder RNN이 입력 시퀀스를 처리하는 동안, 각 시점(time step)에서 생성된 hidden state들을 저장합니다. 그리고 Decoder RNN이 각 시점에서 출력을 생성할 때마다, Encoder RNN의 hidden state들 중 어느 부분에 집중할지를 선택하도록 하는 가중치 벡터를 계산합니다. 이 가중치 벡터를 사용하여 context vector를 생성하고, 이를 입력으로 사용하여 출력을 생성합니다.
    3. 이렇게 Attention 모델에서는 출력을 생성할 때마다, 입력 시퀀스에서 어떤 부분에 집중해야 하는지를 계산하므로, 입력 시퀀스의 길이가 길어져도 성능이 저하되지 않습니다. 또한, context vector를 계산할 때, 입력 시퀀스 내에서 다양한 부분에 대한 정보를 모두 고려할 수 있어서 Seq2Seq 모델보다 더 좋은 성능을 보일 수 있습니다.
  2. Decoder RNN이 가중치 벡터를 만드는 과정
    1. Query 벡터 생성 : Decoder RNN의 현재 Hidden State를 사용하여 query 벡터를 생성합니다.
    2. Key, Value 벡터 생성 : Encoder RNN에서 생성된 모든 Hidden State를 사용하여 key와 value 벡터를 생성합니다.
    3. Attention Score 계산 : query 벡터와 key 벡터 사이의 내적(dot-product)을 계산하여 score를 구합니다. 이것은 현재 Hidden State와 입력 시퀀스의 모든 Hidden State 간의 유사도를 측정합니다.
    4. Softmax 계산 : 모든 score를 softmax 함수를 사용하여 정규화합니다. 이렇게 함으로써 각 Hidden State 벡터에 대한 가중치가 결정됩니다.
    5. 가중합 계산 : softmax로 정규화된 각 Hidden State 벡터의 가중치를 곱하여 가중합을 계산합니다. 이것은 Context 벡터가 됩니다.
    6. 이러한 과정을 통해 각 Hidden State 벡터의 중요도를 나타내는 Attention distribution이 계산되고, 이를 사용하여 Context 벡터가 계산됩니다. 이 Context 벡터는 Encoder RNN에서 생성된 Hidden State 벡터 중에서 현재 출력에 가장 관련이 높은 부분을 선택하고, 이를 Decoder RNN에서 현재 시점에서의 출력을 생성하는 데 사용합니다.
728x90