반응형

배울 점이 많은 강의가 있어서 추천드리며, 시리즈로 글을 쓰고자 합니다.

비정형 데이터 분석 9/11 #Seq2Seq, #Attention

https://youtu.be/iYTYiAELk-U

 

키워드 및 핵심 내용

Seq2Seq

- endcoder -> context -> decoder

- 텍스트, 음성, 영상 등 이러한 시계열 데이터들을 다른 시계열 데이터로 변환하는 문제에 적합

Attention

- Seq2seq의 구조를 살펴보면, Encoder에서 계산한 여러 Hidden State 중 마지막 Hidden State만을 Decoder에서 사용하게 된다.

어텐션 매커니즘은 바로 이 사용되지 않은 Hidden State를 이용하자는 아이디어이다.

- attention weights * context vector -> attention vector

 


 

[RNN과 비교]

https://blog.naver.com/kbsdr11/221586617910

오른쪽 모델을 보면 알겠지만 Seq 2 Seq모델은 시퀀스를 입력받고 출력한다.

그런데 RNN모델은 태어난 이유 자체가 시퀀스 데이터를 다루기 위함이었는데

Seq 2 Seq모델이 굳이 필요할까?

일반적인 RNN과 다른 점은 무엇일까?

Seq 2 Seq이 잘 작동하는 테스크는 대표적으로 번역이나 챗봇이 있다.

위의 사진을 보면

이별한지 얼마 안 된 사람이, '완벽한 날씨가 날 더 슬프게 해.'라고 말한다.

그런데 RNN모델로 챗봇작업을 수행하게 되면

완벽한 날씨니까 좋은 기분일것이라고 유추하면서 문장을 출력하다가

sad라는 단어를 마지막에 입력받고 굉장히 일이 꼬이게 될 것이다.

이 처럼 일반적인 RNN모델에서 문장을 다 듣기도 전에 답변을 하게 되면 제대로 답변할 수 없는 문제가 발생하는데

Seq2Seq는 말을 끝까지 듣고 출력하도록 만들어진 모델이라고 볼 수 있겠다.

[출처] Seq2Seq|작성자 kbsdr11


 

[Seq2Seq 추가 자료]

https://blog.naver.com/sooftware/221784419691

세상에는 많은 시계열 데이터 (Sequence Data)가 존재한다.

텍스트, 음성, 영상 등 많은 종류의 시계열 데이터가 존재하고,

이러한 시계열 데이터들을 다른 시계열 데이터로 변환하는 문제들도 숱하게 생각할 수 있다.

Encoder는 어떤 시계열 데이터를 압축해서 표현해주고,

Decoder는 압축된 데이터를 다른 시계열 데이터로 변환해준다.

Encoder는 RNN (or LSTM, GRU)을 이용하여 데이터를

h라는 Hidden State Vector로 변환한다.

Encoder가 출력하는 벡터 h는 마지막 RNN 셀의 Hidden State이다.

즉, Encoder는 그냥 RNN을 이어놓은 것에 불과하다.

여기서 주목할 점은 Encoder가 내놓는 Context Vector는 결국 마지막 RNN 셀의

Hidden State므로, 고정 길이 벡터라는 사실이다.

그래서 인코딩한다라는 말은 결국 임의 길이의 시계열 데이터를 고정 길이 벡터로 변환하는 작업이 된다.

다음으로 Decoder를 살펴보자.

Decoder는 기본적으로 RNNLM (RNN Language Model)이다.

Decoder는 Encoder로부터 Context Vector (h)를 넘겨받는다.

그리고 첫 입력으로 문장의 시작을 의미하는 심벌인 <s>가 들어간다.

(<s>는 <sos>, <bos>, <Go> 등 많은 이름으로 불린다)

여기서 디코더와 RNNLM (RNN Language Model).

즉, RNN을 이용해서 문장을 생성하는 모델과의 유일한 차이점은

인코더에서 만든 Context Vector를 입력받는다는 점만이 다르다.

콘텍스트 벡터를 초기 입력으로 받는다는 사소한 차이점이 평범한 언어 모델도

기계 번역, 음성 인식과 같은 복잡한 문제도 풀 수 있는 Decoder로 탈바꿈시킬 수 있다.

Seq2seq 개선

이번에는 앞에서 본 기본적인 Seq2seq 구조를 조금 개선해보자.

효과적인 기법이 몇 가지 존재하는데 그중 2가지를 살펴보자.

입력 데이터 반전 (Reverse)

첫 번째 개선안은 아주 손쉬운 방법이다.

위 그림에서 보듯이 입력 데이터의 순서를 반전시키는 것이다.

위의 트릭은

「"Sequence to sequence learning with neural networks." Advances in neural information processing system. 2014.」

논문에서 제안했다.

이 트릭을 사용하면 많은 경우 학습이 빨라져서, 최종 정확도도 좋아진다고 한다.

그렇다면 왜 입력 데이터를 반전시키는 것만으로 학습이 빨라지고 정확도가 향상되는 걸까?

직관적으로는 Gradient의 전파가 원활해지기 때문이라고 볼 수 있다.

이어서 Seq2seq 두 번째 개선안(Peeky Seq2seq)이다.

앞서 배운 Seq2seq의 동작을 다시 한번 살펴보게 되면,

Encoder는 입력 데이터를 고정 길이의 콘텍스트 벡터로 변환한다.

Decoder 입장에서는 이 컨텍스트 벡터만이 예측을 하는데에 제공되는 유일한 정보인 셈이다.

그러나 이 중요한 정보를 기본 Seq2seq에서는 최초 RNN 셀에만 전달이 된다.

이러한 점을 수정해서 중요한 정보가 담긴 콘텍스트 벡터를 디코더의

다른 계층들에게도 전달해주는 것이다.

이러한 아이디어는

「”learning phrase representation using RNN encoder-decoder for statistical machine translation” Cho, Kyunhyun 2014.」

논문에서 제안되었다.

Peeky Seq2seq는 기본 Seq2seq에 비해 꽤나 더 좋은 성능을 보인다고 알려져 있다.

하지만 Peeky Seq2seq는 기본 Seq2seq에 비해 파라미터가 더 늘어나기 때문에

계산량 역시 늘어나게 된다.

그리고 Seq2seq의 정확도는 하이퍼파라미터에 영향을 크게 받으므로,

실제 문제에서는 어떤 성능을 낼지 미지수이다.

Seq2seq의 한계

하지만 이러한 기본적인 Seq2seq에는 한계점이 존재한다.

입력 데이터가 길어지게 되면 성능이 확연하게 떨어진다는 것이다.

이러한 Seq2seq의 한계를 극복하기 위해 제안된 Attention Mechanism이 있다.

실제로 엄청난 성능 향상을 일으킨 이 어텐션 기법에 대해서는 다음 글에서 알아보자.

[출처] [Sooftware 머신러닝] Seq2seq (Sequence to sequence)|작성자 Sooftware


 

[Attention 추가 자료]

https://blog.naver.com/sooftware/221784472231

Seq2seq의 한계

기본적인 Seq2seq 모델은 간단한 구조라는 장점이 있었지만, 크게 2가지의 문제점이 존재한다.

첫째, 하나의 고정된 크기의 벡터에 모든 정보를 압축하다 보니 정보 손실이 발생한다.

둘째, RNN의 고질적인 문제인 Vanishing Gradient Problem이 존재한다.

이러한 문제점들은 입력 데이터가 길어지면 성능이 크게 저하되는 현상으로 이어지게 된다.

이를 위한 기법으로 입력 데이터가 길어지더라도,

정확도가 떨어지는 것을 보정해주기 위해 등장한 방법이 어텐션(Attention) 기법이다.

Seq2seq의 문제점 Encoder의 Hidden State들을 활용하지 않는다

Seq2seq의 구조를 살펴보면, Encoder에서 계산한 여러 Hidden State 중

마지막 Hidden State만을 Decoder에서 사용하게 된다.

즉, 마지막 Encoder의 RNN 셀의 마지막 Hidden State를 제외하고는 사용되지 않는다.

어텐션 메커니즘은 바로 이 사용되지 않은 Hidden State를 이용한 아이디어이다.

어텐션의 기본 아이디어는 Decoder에서 출력 결과를 예측하는 매 시점(time step)마다,

Encoder의 Hidden State를 다시 한번 참고한다는 아이디어다.

그리고 이 참고하는 비율을, 해당 시점에서 예측해야 하는 결과와 연관이 있는 부분을 판단하여

좀 더 집중 (Attention) 하여 본다고 하여 Attention Mechanism이라고 부른다.

다양한 종류의 어텐션

다양한 종류의 어텐션 (출처 : https://wikidocs.net/22893)

어텐션은 그 효과가 검증된 만큼, 많은 종류의 기법이 존재한다.

하지만 다른 어텐션들과의 차이는 어텐션 스코어를 구하는 중간 수식의 차이일 뿐이지,

크게 개념을 벗어나지 않는다.

위의 표처럼 다양한 어텐션의 종류가 있으며, 어떤 어텐션을 적용하느냐도 모델의 성능을 좌우할 것이다.

[출처] [Sooftware 머신러닝] Attention Mechanism (어텐션 메커니즘)|작성자 Sooftware


 

[Attention 추가 자료]

https://blog.naver.com/teach3450/221900313366

지난 시간에 구현했던 모델과 이번 업그레이드 버전의 모델의 성능 비교

loss의 줄어드는 속도가 급격히 상승했다.

[출처] 텐서플로우(tensorflow) : seq-to-seq 구조의 RNN(순환신경망)을 이용하여 기계번역 문제 해결하기 *attention weight upgrade version*|작성자 용쓰


 

[이은아님 강의 모음]

https://www.youtube.com/playlist?list=PLGAnpwASolI0vViZItiP90nWI_s9m91Av


 

반응형
반응형

- 주로 사용하는 단어를 통해 심리와 사고 방식을 개선할 수 있다.

· 관찰력을 키우기 위해 '주목'이란 단어를 붙이면 된다.

· 문제를 파고들어 해결하려면 '왜'라는 단어를 붙이면 된다.

· 편안함 마음을 위해 '괜찮아'라고 말하면 된다.

· 조급한 마음이 들면 '지겨움은 좋은 신호다 대부분이 여기서 좌절할 것이다'.

· 무슨 일을 '시작하려니 막막하다 좋은 신호다 그 일에 관해 조금 더 조사해보자'.

· 책을 읽을 때 '글이 눈에 안들어오면 좋은 신호다 한문장 한단어씩 천천히 읽어보자'.

· 교통체증으로 '답답하면 좋은 신호다' 천천히 간다고 생각하고 마음을 비울 시간이다. 조만간 씽씽 달리게 될 것이다.

· 돈을 쓰는 이 순간 '가지고 있음'을 '충만하게' 느끼자.(더 해빙)




[Vinci] 생각기술 : 메타인지 능력 키우는 간단한 방법

단어와 심리의 상관관계...

단어를 통해 심리를 알 수 있다!

나는 이걸 이렇게도 생각한다.

단어를 통해 심리를 바꿀 수 있다!

사용하는 단어를 통해 심리를 알 수 있다는 것은... 다른 단어를 사용하면, 그에 따라 심리가 달라질 가능성이 높다는 의미가 될 것이다. 내가 주로 사용할 단어를 선택하는 것... 그것은 내 마음을 경영하는 좋은 방법이 될 수 있다. 감정에 있어서도, 실력에 있어서도 그러하다. 내가 쓰는 단어는 내 마음을 좌우하기에... 내가 쓰는 단어를 현명하게 선택함으로써, 내 마음을 더욱 행복하게 혹은 더욱 성공적으로 만들 수 있다.

난 이것이 메타인지 능력을 키우는데에도 쓰일 수 있다고 생각한다.

관찰하고 있는 나를 관찰해보는 것....

내가 어떤 생각 과정을 거쳐 이런 결론을 내리게 된 것인지를 관찰해보는 것...

내가 이걸 지금 아는지 또는 실은 모르면서 아는 척하는 건지를 살펴보는 것... 모르면 왜 모르는지를 생각해보는 것...

나의 감정을 단지 느끼기만 하는 게 아니라 관찰해보고 생각해보는 것...

무의식적으로 튀어나오는 나의 감정을 내 가치관으로써 평가해보는 것...

이런 것들이 메타인지라 할 수 있다.

메타인지는 학습능력을 키우는데에도... 행복한 삶을 사는데에도... 자기주도적인 삶을 사는데에도... 소중한 가치를 가지고 있는 중요한 것이다.

메타인지 능력은 어떻게 키울 수 있을까?

이에 도움이 되는 것 중 하나는... 단어이다. 말할 때든 글쓸 때든, 관찰할 때든 생각할 때든... 어떤 단어를 많이 사용하는지에 따라서, 메타인지 능력이 달라질 수 있다는 것이다.

이것이 효과적인 이유는... 단순함 때문이다. 무언가를 실용적으로 잘 쓰기 위해서는... 간단한 것이 좋다. 그 내부적인 원리는 복잡하더라도, 행동 지침은 간단해야 한다. 복잡한 것은 실용성이 떨어진다. 전자기기도 그렇지 않던가. 전문가용 전자기기라면, 복잡해도 괜찮겠지만... 대중들이 널리 쓰는 전자기기라면, 사용이 단순해야 한다. 뇌영상 촬영기기라면, 복잡해도 괜찮겠지만... 스마트폰은 사용이 단순해야 한다.

'특정 단어를 많이 사용해보자!' 이것은 단순한 지침이기 때문에, 메타인지 능력을 키우는 사소하지만 효과적인 방법이 될 수 있다. 그렇다면 메타인지 능력을 키우기 위해 어떤 단어를 많이 사용해야 하는 걸까?

그 대표적인 단어는...

'주목'이다.

이런 말을 자주 쓰면 된다.

'주목된다'

'주목해보자'

사실 주목이라는 단어가... 그리 일상적인 단어는 아니다. 구어보다는 문어에 주로 등장하는 단어이고... 어릴 적 학교에서 선생님이 교실의 소란을 잠재우고 수업을 시작하기 위해 '자 여기 주목!' 이 정도만 구어로 쓰이는 정도이다. 문어로도 그다지 자주 쓰이진 않는다. '귀추가 주목된다' 이런 관용적 표현이 있고... 칸이 주목한 천재감독! 이런 정도로 쓰인다. 그리고 주목이란 단어의 쓰임이 분산되는 것이... '주의'라는 단어가 있기 때문이다. 주의를 기울이다! 라고 하지... 주목을 기울이다! 라고 하지 않는다. 주의력이라 하지, 주목력이라 하지 않는다. 그러나 사실 다 같은 의미이다. 주의나, 주목이나... attention 이다.

내가 생각하기에... '주목'은 인지심리의 가장 핵심적인 단어이다. 때문에 인지를 인지하는 것... 메타인지에 있어서도 핵심적인 단어라 생각한다. '주목'이란 단어를 자주 사용함으로써 메타인지 능력을 키울 수 있다.

명상도 그런 것 아니겠는가. 호흡에 주목해야 한다. 그리고 내가 호흡에 주목하고 있는지를 관찰해야 한다. 그리고 그 주목을 내 마음으로 옮겨서, 내 마음을 살펴봐야 한다. 그리고 내가 무엇에 주목하고 있는지를 관찰해야 한다. 그러면서 내 마음에 어떤 감정이 요동치고 있는지에 주목하여 이를 관찰해야 한다. 그럼으로써 내 마음에 대한 주도성을 갖게 될 수 있는데... 이런 과정이 곧 메타인지라 할 수 있다. 그리고 명상의 핵심은 호흡이 아니라, 주목이다.

그런데 문제가 있다. 일상적인 대화에 있어서... '주목'이란 단어를 쓰는 건 어색한 경우가 많다는 것이다.

'와 저기 귀걸이 좀 봐!'

이렇게 말하는 게 일상적이다.

'와 저기 귀걸이에 좀 주목해봐!'

라고 말하는 건 어색하다. 즉 일상어에 있어서는... '주목'이란 단어가 생략되어 있다. 내 생각엔... 대화에 있어 어색한데 굳이 쓰는 건 그리 좋지 않은 것 같다.

그보다는 글을 쓸 때나... 혹은 내심으로 관찰하거나 사색할 때... 그럴 때 '주목'이란 단어를 자주 사용하면 된다.

'이 뮤직비디오의 빨간 색에 주목해보자!'

이렇게 내심으로 말하고... 관찰해보는 것이다.

'이 서비스의 사회적 가치에 주목해보자!'

이렇게 내심으로 말하고... 생각해보는 것이다.

나의 경우... 블로그에 '주목'이란 단어를 사용한 글이... 600개가 넘는다. 글쓸 때... 습관적으로 주목이란 단어가 자주 사용되도록 하면 좋다.

일기에도... 메모에도... 주목이란 단어를 쓰면 좋다.

나의 경우 책을 읽을 때에 노트북이나 스마트폰에 메모하는 경우가 많은데, 이때 주목이란 단어를 꽤 자주 쓰곤 한다. 이를테면 이런 거다.

'

£. 후각피질이 척수로부터 먼 곳에 있다는 점이 주목된다. 이건 어떤 의미가 있는 것일까? 한편 설치류나 인간이나... 후각망울의 크기가 비슷하다는 점도 주목할만하다. 이 정도 크기는 있어야 육상에서 기본적인 후각분석이 가능한 것인가... 하는 생각도 든다.

£. 사람의 주목은 차이를 향할 가능성이 높다. 맥락을 통해 차이를 보여주는 것은 주목할 확률을 높일 것이다.

'

학생들이 시험 준비를 함에 있어서... 미리 과목별 계획을 짤 때에도... '이 점에 주목할 것!' 이라 적어둘 수 있을 것이다. 어떤 문제를 풀었는데 틀렸다고 해보자. 그렇다면... 빨간펜으로 이렇게 적어놓을 수 있을 것이다. '다음에 이런 문제를 접할 때에는... 이 부분에 주목할 것!'

풀이 속도를 높이기 위해 이렇게 적을 수도 있을 것이다. '습관적으로 이 부분에 먼저 주목하게 되는데, 그래서 시간을 허비하게 되는데, 다음에는 저 부분부터 주목해야겠다!' 암기 효율을 높이기 위해 기출문제를 살펴보면서, '교과서 볼 때에 이런 부분에 주목할 것!' 이라 적어놓을 수도 있을 것이다.

자신의 주목을 전략적으로 관리함으로써, 학습 능력을 키우는 것이다.

학생들이 어디에 주목해야 하는지를 알며 + 학생들이 지금 이 순간 어디에 주목하고 있는지를 디테일하게 알아야 한다. 그래야 효과적인 피드백을 학생들에게 주면서 학습력을 개선시킬 수 있다. 그래야 효과적인 피드백을 선생님 자신에게 주면서 강의력을 개선시킬 수 있다.

주목이란 무엇일까?

비유적으로 말하자면, 이는 '정신적인 에너지'이다. 에너지를 관리하기 위해서는... 에너지에 이름을 붙여 자주 불러줘야 한다. 한편 이렇게도 말할 수 있다. '주목은 인지자원'이다. 경영의 기본은 '자원'이다. 관리적인 측면에서도, 전략적인 측면에서도... 결국 자원이다. 경영은 자원을 자원으로 바꾸는 활동이다. 그리고 이는 자기 자신을 경영함에 있어서도 마찬가지다. 인지자원을 살피는 것이 중요하며, 이를 유도하는 것은 그 자원에 이름을 붙이고, 그 이름을 자주 사용하는 것이다.

주목을 물리적으로 말하자면, 이는 '전류'이다. 주목은 전류다. 신경세포의 전류... 그것이 주목이라 할 수 있다. 무언가에 주목한다는 것은... 그 무언가에 전류를 많이 사용함을 의미한다. 무언가에 주목하면, 그 부분에 해당하는 두뇌 신경활동이 활발해지는데, 그건 물리적으로 전류가 증폭되는 것을 의미한다. 감정의 효과 중 중요한 것도 여기에 있다. 감정은 무언가에 전류를 증폭시켜, 이를 주목하게 만든다. 호기심은 새로운 것에 주목하게 만들고, 분노는 타인의 잘못에 주목하게 만든다. 의식의 중요한 능력도 여기에 있다. 의식은 주목을 통제할 수 있다. 물론 그 크기에 한계는 있지만, 의식은 어디에 의식적인 주목을 기울일지를 선택할 수 있다.(과연? 자유의지는 있는가?)

다만 메타인지가 잘 되지 않고 있는 경우... 자신이 무엇에 주목하고 있는지를 살피지 않는 경우... 그걸 정말 의식적인 것이라 말할 수 있는지는 의문이다. 의식적인 주목이 반복되면, 그중 상당 부분은 무의식화되어 자동적으로 주목하게 되는데... 메타인지 능력이 부족하면, 이는 대부분 환경이 선택한 것이지 내 의지가 자유로써 선택한 것이라 보기 힘들 것이다. 그건 자기주도성이 떨어진다는 것을 의미한다. 내가 내 삶의 주인이 되기 위해서는... 내가 나의 진정한 주인이 되기 위해서는... 중요한 것이 메타인지이고... 메타인지에서 중요한 것은 주목이며, 이를 위해 간단한 실천지침은 '주목'이란 단어를 관찰할 때나 생각할 때나... 말할 때나 글쓸 때나... 자주 사용하는 것이다.

'주목'이란 단어를 자주 사용하는 것은... 메타인지 능력 이외에 또 다른 효과가 있는데... 그건... 감성지능 즉 EQ를 높인다는 것이다. 자기자신에 대한 것은 메타인지 능력과 겹치는 것이고... 타인에 대한 것도 그러하다.

타인의 감정을 이해하는데 있어 중요한 것은 공감능력만이 아니다. 타인이 무엇에 주목하고 있는지를 살피는 것... 그것이 너무나 중요하다. 그래야 타인의 감정을 세심하게 이해할 수 있기 때문이다. 아기를 키운다는 것도 그 기본은... 지금 이 순간 아기가 무엇에 주목하고 있는지를 살피는 것... 그것이 아니던가. 그래야 말 못하는 아기의 불편을 세심하게 이해하고 해결해줄 수 있을 것이다.

이는 일상에서 사람들과 소통할 때뿐만 아니라... 즉 일상적 가치뿐만 아니라, 상업적 가치도 크다.

사람들이 무엇에 주목하고 있는지를 살피는 것... 무엇에 습관적으로 주목하게 되는지를 살피는 것... 무엇에 주목하게 될 지를 예측하는 것... 이것은 상업적인 가치가 크다. 사람들이 주목하지 않는 것에서는 자원을 아끼고, 사람들이 주목하는 것에 자원을 집중 투자하는 것이... 상업적 전략의 기본이라 할 수 있는데... 그러려면 먼저 사람들의 주목을 살펴야 한다. 고객의 주목을 살펴야 한다. 거래란 것도 상대방이 무엇에 주목하고 있는지를 살피는 게 기본 아니던가. 사회적인 갈등을 조정하는 것도 마찬가지이다. 각자 무엇에 주목하고 있는지를 살펴야 하며, 각자 무엇을 얼마나 소중하게 생각하는지를 살펴야 한다.

이해관계를 살핀다는 것은... 숫자적인 득실을 따지는 것만이 아니다. 사람들의 주목과 가치관을 살피는 것... 그 심리적인 것이 이해관계에 있어 매우 중요한 부분이다. 이를 잘 알아야 더욱 잘 설득할 수 있고, 더욱 좋은 해결책을 만들 수가 있다. 이는 뭐 대단히 거창한 것뿐만 아니라, 일상에서 일어나는 사소한 갈등에 있어서도 마찬가지다. 주목과 가치관을 살펴야 한다.

주목에 대한 이해를 돕고 그 가치를 어필하기 위해 여러 이야기를 했지만, 실천적으로는 단순하게 이것 하나면 충분하다.

'주목'이란 단어를 많이 사용해보자!

이는 메타인지 능력을 키워줄 것이다.


[보너스] Sequence to Sequence Learning(Attention)








반응형

+ Recent posts