딥러닝 스터디 순환신경망 고급 사용

정강훈·2022년 1월 5일
0

순환 드롭아웃(Recurrent Dropout)

3번째 줄의 recurrent_dropout이 순환 드롭아웃에 해당한다.

RNN에서 기본적인 Dropout 사용하면 중요한 과거 정보를 잃어버릴 확률이 높아지고, 그에 따른 모델성능이 나빠질 가능성이 있다.

이 문제를 해결하기 위해
순환 드롭아웃은 Network에서 과거의 정보가 갖는 Parameter에 드롭아웃을 적용하는 것이 아닌 현재 Input에 영향을 받는 Parameter에만 Dropout을 적용한다.

위 그림의 점선은 Dropout이 발생하는 연결, 실선은 일반적인 연결인데,
과거에서 오는 오른쪽방향은 언제나 그 값이 보존되지만, 현재의 Time Step, 아래에서 위로 올라오는 값은 설정한 Dropout 값에 의해 Dropout 진행된다.

(b) - RNN에서의 Dropout, (c) - Recurrent Dropout

Recurrent Dropout은 LSTM 모형에서 예를들면 tanh 위의 x와 + 사이의 값에서 드롭아웃이 일어난다.

양방향 순환층(Bidirectional recurrent layer)

2번째 줄의 Bidirectional이 양방향 순환층에 해당한다.

"나는 어제 영화를 보았다" 가 본 문장이라고 할 때
"나는 어제 _ _ " 에서 _ 를 예측하기는 어렵다 // 순방향
"나는 어제
_ _ 를 보았다" 에서 예측하는게 위의 예시보다는 쉽다 // 양방향

기존의 정방향으로 계산하는게 초록색 모델 xs[i-1]의 데이터가 xs[i]에 영향을 준다.
양방향은 정방향 뿐만 아니라 역방향도 계산(붉은색) 그 후 concat을 진행한다.

양방향 순환층의 단점으로는 연산량이 2배가 된다는 단점, 실시간 데이터 처리에는 사용을 못한다는 단점들이 있다.

예전 Dacon의 뉴스 토픽 분류 경진대회를 나갔을 때, 양방향 순환층을 추가하는 한줄의 코드만 추가했을뿐인데도
점수가 많이 올랐던 기억이 난다.
자연어 처리에서 양방향 순환층은 거의 필수적으로 사용해야 할 것 같다.

0개의 댓글