본문 바로가기
  • 기술을 이야기하지만 사람을 생각합니다.
20. 인공지능과 딥러닝

밑바닥부터 시작하는 딥러닝 2 :: Ch 08 어탠션 (3) seq2seq2 심층 + skip 연결

by WE DONE IT. 2019. 7. 14.

이 글은 <밑바닥부터 시작하는 딥러닝 2> <8장. 어텐션>을 스터디를 하면서 제가 리딩한 파트를 설명/공유하기 위해 작성하였습니다. 추가적인 설명을 하기 위해 관련 논문이나 아티클 등도 참고하였습니다. 혹시 잘못 작성한 부분이나 코멘트는 댓글로 남겨주세요!


LSTM 계층에서 Encoder와 Decoder에서 같은 층 수를 이용하는 게 일반적이다. Attention 계층에서는 모델의 구조에 여러 변형을 줄 수 있다. <밑바닥부터 시작하는 딥러닝 2>에 소개된 변형 방법은 다음과 같다. 

 

Encoder와 Decoder로 3층 LSTM 계층을 사용하고 있다.

Decoder의 LSTM 계층의 은닉 상태를 Attention 계층에 입력하고, Attention 계층의 출력인 맥락 벡터를 Decoder의 여러 계층 (LSTM 계층과 Affine 계층)으로 전파한다.

 

이 외에도 다양하게 변형할 수 있으며, 계층이 깊어질 수록 일반화 성능을 떨어트리지 않는 것이 중요하다. 이 문제를 해결하기 위해서는 <6장. 게이트가 추가된 RNN>에서 소개한 (1) 드롭아웃(2) 가중치 공유 등의 기술이 효과적이다.

 

skip 연결 (skip conection)

 LSTM 계층을 깊게 할 때 사용되는 중요한 기법으로 (3) skip 연결(잔차 연결, 숏컷)이 있다. skip 연결은 '계층을 건너뛰는 연결'이다. skip 연결 시, 출력이 원소별로 더해진다. 덧셈은 기울기를 그대로 흘려보내므로, 층이 깊어져도 기울기 소실 또는 폭발(gradient vanishing and exploding) 문제를 일으키지 않고 전파된다. 

skip 연결의 접속부에서는 2개의 출력이 더해진다.

 

RNN 모델의 기울기 소실 또는 폭발 문제에 대한 해결 방안

  • RNN 역전파 과정에서 기울기 폭발 시, '기울기 클리핑*' 활용
  • RNN 역전파 과정에서 기울기 소실 시, LSTM 또는 GRU 등의 '게이트가 달린 RNN'으로 대응
  • RNN 깊이 방향에 따른 기울시 소실 시, 'skip 연결' 활용

* 기울기 클리핑 (Gradients clipping)

<6장. 게이트가 추가된 RNN>에 나온 개념으로, threshold(문턱값)을 설정하고 기울기의 L2 노름이 threshold를 초과하면 기울기를 수정하여 기울기 폭발 문제를 해결한다.

 

기울기 클리핑의 의사코드
기울기 클리핑을 적용한 경우, 기울기 폭발(Gradient exploding) 문제를 해결할 수 있다.

 

 

 

 

댓글