728x90

 이 슬라이드 왼편을 보면 고양이 이미지를 입력으로 받는다고 하고, 합성곱 신경망을 돌려보겠습니다. 그러면 이 합성곱 신경망의 마지막 합성층의 출력을 격자로 된 특징 백터로 볼수 있습니다. 그러면 다음 이미지도 격자로된 특징 벡터를 얻을수가 있으며 각 격자 특징 벡터들은 이미지의 공간적 위치에 해당한다고 볼수 있겠습니다.

-> 격자 특징 벡터 하나 하나는 이미지의 어느 위치에 대한 특징 계산 결과임.

 

 

 

 다음으로 할일은 시퀀스 모델에서 했던것 처럼 어텐션 매커니점을 적용시켜볼건데, 은닉 상태로 그리드 벡터를 사용해서 디코더의 초기 은닉 상태 s0를 추정하겠습니다. 그러면 이제 디코더는 초기 은닉 상태 s0를 비교함수 f_att로 격자 특징의 모든 위치와 초기 은닉 상태 s0 사이의 쌍 배정 스코어 pairwise alignment score를 계산하는데 사용하겠습니다.

 

 모든 출력 결과는 스칼라 값이 나올것이고, 이 값은 해당 벡터 부분을 크게 중요하게 본다면 크고, 해당 벡터 부분을 덜 중요하게 본다면 낮은 값을 가지게 됩니다. 이런식으로 격자/그리드 배정 스코어를 얻을수가 있어요. 그래서 배정 스코어에 대한 그리드의 각 원소는 다시말하면 하나 하나가 f_att로 구한 스칼라값이 되겠습니다.

 그래서 이렇게 격자 어텐션 스코어를 구하였으면 이들을 확률 분포로 정규화해주기위해 소프트 맥스 함수를 사용하겠습니다. 이 결과는 출력 캡션의 첫번째 단어를 만들어낼 때 입력 이미지의 모든 위치에서 모델이 어느 부분에 집중을하였는지를 확률 분포로 나타내게 됩니다.

 

 그러면 이제 가중화된 은닉 벡터를 사용할건데, 어텐션 확률 스코어와 격자 벡터를 선형 결합을 시켜서 구할수가 있고 이 값이 첫번째 컨텍스트벡터 c1이 되겠습니다.

 이 컨텍스트벡터는 출력 시퀀스의 첫번째 토큰을 만드는데 사용할것이며, rnn 디코더 1층을 지나가면서 첫번째 단어로 cat을 만들어 냅니다.

 이제 다음으로 넘어가서 이 과정을 다시 반복하겠습니다.

 

 이번에는 (디코더의) 다음 은닉 상태인 s1을 격자 특징의 모든 지점과 비교하는데 사용해서 새 배정 스코어 격자를 만들어내고,

 

소프트맥스로 정규화시켜 이미지 전체 위치에 대한 확률 분포를 만들어 냅니다.

 

 그러면 이것으로 디코더의 두번째 타임스탭에서 사용할수 있는 새 컨텍스트 벡터를 구할수가 있겠고,

이걸로 다음 단어를 만드는데 사용하겠습니다.

 

 이미지에 있는 내용들을 계속 순방향으로 정리해가면서 캡션 "cat sitting outside <stop>"을 만들어 냅니다. 지금 본 이 구조는 시퀀스 투 시퀀스로 번역했을때 경우와 매우 비슷한 구조인걸 알수 있습니다. 그래서 이 덕분에 모델이 입력 이미지의 격자 특징을 가중치를 주며 재조합을하여 새 컨텍스트백터를 생성할수 있게 만들었습니다.

 

 한번 이 새 이미지에 대해서 한번 고민해보면, 이 모델은 새 이미지를 입력으로 받고 있고 출력으로 단어 시퀀스 "a bird is flying over a body of water"를 만들어 내고 있다.

 

 출력 시퀀스를 만들어내는 모든 타임 스탭에서 모델은 어텐션 가중치들을 추정하며, 합성곱 신경망으로 입력 이미지를 처리하여 얻은 격자 특징의 위치들에 대한 확률 분포를 알려준다.

 

 모델이 "bird flying"이란 단어를 추정해낼때 모델은 입력 이미지에서 새에 집중하고 있으며, "water"라는 단어를 추정할때는 어텐션 가중치가 새를 제외한 나머지 부분들 수면에 집중하는걸 볼수 있겠습니다.

 

 

 

 왜 이런 매커니즘을 이미지 캡셔닝에서 사용해야하는지를 정리하자면 생물학적으로 생각해보면 좋겠는데, 왼쪽의 사람 눈 그림을 보자. 사람의 눈은 원형이고, 한쪽 면에는 빛이 들어올 수 있는 렌즈가 있고, 렌즈를 통해서 들어온다. 눈의 뒤에는 망막이라고 부르는 영역이 있는데, 렌즈를 통해 들어온 빛이 망막에 맺히게 된다. 망막은 광각 세포? photosensitive cells를 가지고 있는데 여기서 빛을 감지하여, 광각 세포로 얻은 신호는 두뇌로 보내져서 우리가 보고 있는 것을 해석/보여준다.

 

 그런데 밝혀진 사실은 망막은 모든 부분들이 신호를 동등하개 만들어내지 않고, 특히 망막의 중간에 있는 포비아 phobia라고 부르는 영역이 망막의 다른 부분보다 가장 민감합니다.

 

 이 오른쪽 그래프에서 말하고자 하는것은 그래프의 y축은 시각적 활성, x축은 망막의 위치를 나타내는데, 멀리 있는 것일수록 시각 활성이 낮고, 포비아에 가까워질수록 시각활성이 증가하게 되다가, 포비아에서 가장 활성되었다가 다시 멀어지고 망막 끝에 다가가면서 내려가 시각 활성이 매우 작아지게 됩니다. 

 

 이것이 의미하는것은 눈에서 아주 좁은 영역에서만 고해상도로 세상을 볼수 있다는 것이고, 손을 우리 바로 앞에 놓으면 자세히 볼수 있지만 옆면으로 이동시키면, 옆에 뭔가 있다고 말할수는 있지만 정확히 그게 뭔지, 손가락이 몇 개인지 새어보기도 어렵게 됩니다. 이는 망막의 위치별로 서로 다른 민감도를 가졌기 때문입니다. 

 

  사람의 망막 구조로 인한 이 문제에 대처하기 위해서, 우리의 눈은 매우 빠르게 움직이고 있으며 어떤 물체를 정상적으로 보고 있는것처럼 느껴지더라도, 계속 움직이면서 여러 시각적 장면들을 가져옵니다. 이러한 눈의 매우 빠른 동작을 psychotics라고 부릅니다. 이들은 의식적으로되는 행동이 아니라 망막의 아주 일부만 민감한 문제를 극복하기 위해서 몸이 기본적으로 하는 메커니즘이 되겠습니다.

 

 

  이번에 rnn을 이용한 이미지 캡셔닝같은 경우는 사람의 빠른 눈동작의 효과가 적은 방법이지만 무언가를 볼때 그 장면의 다양한 부분들을 보게되는걸 알고 있는것 처럼, 비슷하게 어텐션을 이용한 이미지 캡셔닝 모델을 사용할때도 매 타임 스탭마다 빠르게 다양한 위치들을 훑어보게 됩니다. 이는 사람의 눈이 하는 약간의 정신적인 동작같은 거에요.

 

 

 이 아이디어가 처음으로 소개된 논문에서는 show, attend, tell이라고 부르고 있는데 이 이유는 모델은 입력 이미지를 받고, 이미지의 여러 부분들에 집중해서, 그 시점에 무엇을보았는지 단어를 생성하였기 때문입니다. 이 논문 제목이 워낙 기억하기 쉽다보니 다른 사람들도 어텐션을 다른 방향으로 사용한 모델에 대해서 이런 식으로 제목을 짓기 시작하였습니다.

 

 ask, attend, answer나 show, ask, attend, and answer 같은 경우에 어떤 걸 연구했는지 알수 있겠죠. 이런 모델들은 이미지를 보고, 이미지에 대한 질문이 주어질때, 이미지의 여러 부분에 집중하거나 혹은 질문의 다른 부분에 집중해서, 그 질문에 대해서 대답하는 식이겠습니다.

 

 "Listen, attend, and spell"의 경우 음성을 처리해서 이 소리가 어떤 단어를 발음한것인지 만들어낼것인데, 매 타임 스탭마다 단어를 만들어낼때 입력 오디오 파일의 어느 부분에 집중을 하는 식이겠습니다.

 

 

 

 

 

300x250

+ Recent posts