Deep learning

Do it! chapter 8: 순환신경망

망삼드 2022. 5. 18. 17:06

챕터 8이네요.. 마지막 챕터가 9인데 책 한권 정리하기도 슬슬 끝이보이네요 

 

8.1 기억을 갖는 신경망 모델 RNN

데이터는 시간흐름에 따라 변해 시간적인 순서관계를 갖는 뇌파, 주가, 동영상/애니메이션, 이외에 순서관계를 갖는 공간적인 순서관계를 갖는데이터도 있다. 염기서열이나 프로그램, 글, 악보등이 그 예시이다. 이처럼 시간적, 공간적 순서관계가 있는 데이터를 순차 데이터라고 부른다. 순차 데이터는 시공간의 순서 관계로 형성되는 문맥, 콘텍스트를 갖는다.

 

존 홉필드는 1982년 기억을 저장하고 연상하는 연상메모리를 갖는 홉필드 네트워크를 제안했다.

새로운 입력이 들어오면 특정패턴으로 수렴하게 만들어 기억해둔 패턴을 연상하는 네트워크이다. 양극화 기법을 사용해 값이 1에 조금이라도 가까우면 1이 되고 -1조금이라도 가까우면 -1이 되게 만든다. 기억해둔 패턴을 연상하기 위해 입력 데이터가 점점 1과 -1로 양극화될때까지 출력을 입력으로 피드백해 뉴런 연산을 반복하다가 출력이 특정패턴과 같아지면 반복을 멈춘다. 순환 연산을 통해 입력 데이터의 패턴을 연상해내 불완전한 패턴이나 왜곡된 패턴이 제시되어도 본래의 완전한 형태를 유추할 수 있다. 이는 이후 순환신경망으로 발전한다.

 

인공신경망이 데이터 순서를 고려하는 콘텍스트를 만들려면 

1. 데이터의 순차구조를 인식가능

2. 데이터의 콘텍스트 범위가 넓더라도 처리할 수 있음

이 두가지 조건을 만족시키는 인공신경망이 순환신경망 RNN:recurrent neural network이다.

 

순환신경망은 데이터의 순차 구조를 인식하기 위해 데이터를 시간 순서대로 하나씩 입력받는다. 입력받은 데이터의 콘텍스트를 만들기 위해 은닉계층에 피드백 연결을 가진다.

기본적으로 모델은 입력계층, 은닉계층, 출력계층으로 이루어지고 은닉계층은 보통 1-2계층 이내로 쌓는다.(깊어도 성능이 크게 향상되지 않음) 순방향 신경망과 동일하게 입력계층->은닉계층->출력계층 순서대로 실행되는데 차이점은 은닉계층에 피드백 연결이 존재해 은닉 상태가 다음 단계로 전달된다는 점이다. 

은닉 상태에는 '시간 단계별로 입력된 데이터가 순차적으로 추상화되어 형성된 콘텍스트'를 저장한다. 피드백 연결은 시간의 흐름에 따라 '콘텍스트를 기억하는 과정'으로 생각할 수 있다.

 

<기본 순환 신경망 모델>

 

ht = tanh(Whh * ht-1 + Wxh*xt)

 =tanh((Whh Wxh)(ht-1 )

                       xt) 

= tanh(W(ht-1)

          xt)

행렬표현인데 티스토리에 표현해 쉽게 되지 않았다..

기본 순환 신경망 모델에는 세 종류의 가중치 Wxh(입력-은닉), Whh(은닉계층피드백연결), Why(은닉-출력)가 존재한다.  순환신경망의 가중치는 모든 시간단계에서 공유된다.

yt = Whyht

ht = tanh(Whh*ht-1 + Wxhxt)

 

이대 입력(ht-1,xt)와 은닉상태 ht는 무엇을 표현할까?

h1 = fw(h0,x1)

h2 = fw(h1,x2)

...

ht = fw(ht-1,xt)

*ht = x1-xt까지 순차구조가 추상화된 상태, ht-1= x1~xt-1가지 순차구조가 추상화된 상태

첫번째 단계에서 입력 (h0,x1)은 (x1)이므로 은닉상태 h1은 (x1)이 추상화된 콘텍스트를 나타낸다. 이런식으로 가다보면 은닉 상태를 지금까지 입력된 모든 데이터가 추상화되어있음을 알 수 있다. 여기서 fw는 추상화된 순차 구조를 한단계 확장된 추상화된 순차구조로 매핑하는 함수이다. 

 

출력은 무엇을 표현할까? 

첫번째 출력은 x1이 주어졌을때 y1은 조건부확률 p(y1|x1)을 표현한다. 이런식으로 일반화 시키면 yt는 p(yt|x1,x2,...xt)이고 이는 p(yt|ht)로 근사할 수 있다. 은닉상태에서 h1는 (x1,x2...xt)가 추상화되어있기 때문이다.

 

순환신경망은 모든 가중치를 공유하는데 이와같은 이점이있다.

1) 순차구조를 포착할 수 있다.

2) 가변 길이 데이터를 처리하기 쉽다

3) 파라미터 수가 절약되고 정규화 효과가 생긴다.

 

8.2 순환 신경망의 주요 모델

순환신경망은 입출력 형태와 처리방식에 따라 모델 구성이 다양하다.

1. 다대일모델

입력은 순차열 출력은 순차열x 사용, 모든단계에서 입력을 받지만 출력은 마지막 단계에서만 한다. ex)영화평론 긍부정 감성분석

 

2. 다대다모델

입출력의 길이가 같은 순차열일때 사용, 모든단계에서 입력받고 모든단계에서 출력한다. 이때 티처포싱을 사용하면 학습이 안정화되고 수렴속도가 빨라지는데 현재 단계의 출력을 다음단계에 입력하는 방법이다.

티처포싱을 사용할때 주의할점이 훈련 시에는 모델의 예측 결과 대신 타깃을 직접 지도 신호로 사용해야 한다는 것이다.

 

3. 일대다 모델

입력은 순차열x 출력은 순차열o, 첫번째 단계에서만 입력하고 모든 단계에서 출력한다. ex)이미지 캡션을 생성할때 첫번째 단계에서 이미지 context입력, 각 단계에서 이미지를 설명하는 문장의 단어를 순서대로 출력한다.

 

4. 양방향 모델

입력을 양쪽으로 살펴보는 방식이다. 시간순 데이터는 인과관계에 따라 과거에만 의존하지만 공간적 순서관계를 갖는 데이터는 상대적인 순서가 중요하기때문에 양방향으로 살펴본다. 예를 들어 기계 번역을 할때 사용한다. 순방향 계층와 역방향 계층의 출력은 출력 계층에 입력되며 출력계층에서는 두 결과를 합쳐서 예측한다.

 

5. 인코더-디코더모델

입력과 출력의 길이가 서로다른 순차열일때 사용, 입력 데이터를 요약하는 인코더와 요약 데이터를 이용해 출력 데이터를 생성하는 디코더로 구성된다. 순차열을 다른 순차열로 변환한다해서 Seq2Seq모델이라고도 부른다

인코더는 입력 데이터를 순차적으로 처리하다가 마지막 단계의 은닉상태를 콘텍스트 벡터로 출력한다. 디코더는 인코더로부터 전달받은 콘텍스트 벡터를 모든 단계에 입력하고, 단계별로 예측하면서 안정적인 학습을 하기 위해 티처포싱을 사용한다.

 

8.3 시간펼침 역전파

순환신경망에 역전파 알고리즘 적용, 역전파를 시간 순서대로 펼쳐놓은 상태에서 수행해 시간펼침역전파 backpropagation through time로 구분하며 약자로 BPTT라 부른다. 순환신경망의 손실함수도 단계별로 정의된다.

L1 = J(f(x1; θ),t1)

L2 = J(f(x1,x2; θ),t2)

...

J(f(X;θ),t)=L1+L2..(전체손실함수)

각 단계의 손실함수는 회귀문제라면 평균제곱오차, 분류문제라면 크로스 엔트로피로  정의한다

이런식으로 역순으로 진행되는데 가중치는 계속 업데이트 된다. 끝이없는 순차열의 경우 절단 시간펼침 역전파를사용한다. 일정단계를 묶어 순방향으로 진행하고 역전파를 실행하는 방법이다. 이때 중요한건 첫번째 묶음과 두번째 묶음의 순차열이 연속적인 순차열이 되도록 만들어야한다는 것이다.

 

8.4 LSTM과 GRU

기본 순환 신경망은 최적화하기 어렵고 성능적인 한계도 있다. 이런점을 극복하기 위해 LSTM(long short term memory)와 GRU(gated recurrent unit)같은 셀구조를 갖는 순환 신경망이 등장했다.

 

기본순환신경망은 '장기의존성문제'와 '그레디언트 소실과 폭발'이 쉽게 일어나는 구조적 문제가 있다. 장기 의존성이란 콘텍스트 범위가 넓을 때 멀리 떨어진 입력에 대한 의존성이 있음에도 불구하고 입력의 영향이 점점 사라지는 현상이다. 그레디언트 소실과 폭발은 학습하면서 그레디언트가 없어지거나 발산하는 현상을 말한다. 가중치 행렬 w가 반복적으로 곱해지는 구조때문에 그레디언트 소실과 폭발이 쉽게 일어난다.

 

그레디언트 폭발은 '그레디언트 클리핑'을 해서 그레디언트가 일정 크기 이상으로 커지지 않게 하면 된다

그레디언트가 g이고 임계치가 v라고 할때

g<-(g/||g||)*v, if ||g||>v

결과적으로 일정한 크기로 클리핑한 그레디언트를 구할 수 있다.

순환 신경망의 손실 곡면에는 가파른 절벽이 많은데 이러한 경우 최적화가 늦어지거나 잘 진행되기 어렵다. 이때 그레디언트 클리핑을 하면 보폭이 줄어들어 가파른 절벽을 만나도 경로를 이탈하지 않고 조금씩 전진하는 경로를 만들 수 있다.

 

LSTM

LSTM은 그레디언트 소실의 원인이 되는 가중치 W와 행렬곱 연산이 그레디언트 경로에 나타나지 않도록 구조를 변경한 모델이다. 

LSTM은 셀상태와 은닉상태로 뇌의 장기기억과 단기기억을 모델링했다. 장기기억은 오래 지속되지만 새로운 사건이 발생할 때마다 조금씩 강화하거나 약화하고 자주 사용하지 않으면 잊히기도 한다. LSTM은 이러한 특성을 만족하도록 셀 상태를 W의 방해 없이 그대로 전달되는 구조로 설계했다. 반면 단기기억은 최근에 일어난 사건을 빠르게 기억하지만, 상황이 전환되면 빠르게 잊히는 특성 있다. 또한 사건이 지속되서 일어나면 장기기억으로 전환되기도 한다. LSTM은 이러한 특성을 구현하기 위해 사건에 콘텍스트가 형성되도록 W가 곱해지는 구조로 설계했다.

 

LSTM에는 기억을 형성하는데 관여하는 4가지 종류의 게이트가 있다. 게이트는 기억에 지속여부를 결정하는 역할을 한다.

1)망각게이트는 장기기억을 지속할지 잊을지 판단하고 잊어야 하는 장기기억은 게이트를 통과하지 못한다.

2)입력게이트는 새로운 사건으로 형성된 기억 중 장기기억으로 전환해야 할 기억을 선택한다.

3)기억게이트는 장기기억을 새롭게 갱신하기 위해 망각 게이트를 통과한 장기기억에 입력 게이트를 통과한 새로운 기억을 더한다

4)출력게이트는 갱신된 장기기억에서 갱신된 단기기억에 필요한 기억을 선택한다

 

GRU

GRU는 LSTM의 장점을 유지하며 게이트 구조를 단순하게 만든 순환신경망이다. 셀 상태를 없애고 은닉상태가 장기기억과 단기기억을 모두 기억하도록 설계했다.

구조를 보면 위쪽 경로는 W 연산이 없는 장기기억을 전달하는 지름길이고 아래쪽 경로는 W의 연산이 있는 단기기억을 전달하는 경로이다. 또한 게이트는 두 종료로 간소화되었다 rt는 리셋 게이트로 새로운 사건이 발생했을 때 기억을 새롭게 형성하기 위해 장기기억과 단기기억에서 필요한 부분을 선택한다 zt는 업데이트 게이트로 기억을 갱신하기 위해 기존 기억과 새롭게 형성된 기억의 가중 평균을 계산하는 가중치역할을 한다.

 

 

8.5 순환 신경망 개선

LSTM과 GRU같은 새로운 순환 신경망의 등장으로 장기 의존성 문제와 그레디언트 폭발 문제가 조금은 완화됐지만 구조적으로 순환 신경망에서 이문제를 완전히 해결하기는 어렵다. 긴 콘텍스트를 다루기 위한 방법 중 2가지를 다뤄볼건데 첫번째는 어텐션을 사용해 모든 기억을 동등하게 기억하지 않고 연관성 있는 기억에 집중해 기억하도록 구조화하는 방법이다. 두번째는 시간 팽창 콘벌루션을 사용해 오래전 기억이 빠르게 전달되도록 모델을 계층화하는 것이다. 이때 순환 구조는 전혀 사용되지 않는다

 

1) 어텐션Attention

언어 모델에 에텐션을 적용한다면 문장의 특정 단어를 볼 때 문장 내의 다른 단어와의 연관성을 어텐션값으로 사용한다.

어텐션 = attention(q,k,v)

q:퀴리,k: key, v:value

score(q,k1) * v1 = attention1 

score(q,k2)* v2 = attention2 

                 ...                        = attention

최종 어텐션 값은 가장 큰 어텐션 점수와 대응되는 vi를 곱해 최종 어텐션으로 사용하거나 계산된 어텐션 점수와 값 vi를 곱해서 모두 합산하는 방법이다.

어텐션 점수는 쿼리와 키 사이에 연관성 또는 유사도를 나타내므로 보통 내적 또는 내적을 변형한 방법으로 계산한다.

score(q,k) = q^T *k/√n(q와 k벡터크기)

종종 어텐션 점수에 소프트 맥스를 적용해 확률로 변환하기도 한다

softmax(score(q,k))

 

셀프어텐션

자기자신을 구성하는 부분끼리 연관성을 찾고자할 때 사용하는 어텐션 방법이다. 예를 들어 문장을 순차적으로 읽을 때 현재 단어와 연관성이 높은 이전 단어를 파란색이 진해지도록 표시하는 예가 있다.

 

하드 어텐션과 소프트 어텐션

하드 어텐션은 가장 집중하는 정보를 선택하는 방식으로 어텐션 방법 중 최댓값을 계산한다. 반면 소프트 어텐션은 어텐션 점수를 가중치로 사용해 전체 정보를 가중합산해 계산하는 어텐션 계산 방법이다. 위쪽은 소프트 어텐션, 모든 영역에 대해 단어가 집중하는 강도를 보여준다. 이에 반해 아래쪽은 하드어텐션으로 단어가 가장 집중하는 영역을 보여준다.

 

트랜스포머에 어텐션 사용

transformer은 2017년에 소개된 언어모델로 순환 신경망을 사용하지 않고 순수하게 어텐션 메커니즘으로 구성된 인코더-디코더 모델이다

attemtion(Q,K,V) = softmax(QK^T/√dk)V dk:키 벡터 k의 크기

인코더 블록은 n번 반복하고 디코더는 디코더 블록을 n번 반복한다. 순환 신경망에서는 문장을 구성하는 단어를 순서대로 입력하기 때문에 단어의 순서정보를 자동으로 인식하지만 트랜스포머에서는 모든 단어를 한꺼번에 입력하기 때문에 단어의 순서 정보를 명시해줘야한다. 그래서 입력 단어위치를 나타내는 위치 인코딩 정보를 단어와 함께 입력한다. 

 

인코더 블록은 멀티 헤드 어텐션 계층과 완전연결계층으로 구성되며 각 계층은 잔차연결을 가지고 계층 정규화를 수행한다.  디코더 블록은 마스크처리된 멀티 헤드 어텐션을 하는데 이는 입력데이터의 앞쪽 단어와 어텐션을 계산하도록 제한하기 위해 뒤쪽 단어를 마스크 처리하는 방법이다.

 

<시간팽창콘벌루션>

1.웨이브넷 wavenet

이미 생성된 자기 자신의 데이터를 이용해서 추가 데이터를 생성하는 자기회귀방식의 오디오 생성모델로 TTS(text-to-speech)에 사용하거나 음악을 생성할때 사용한다.

오디오데이터를 생성하기 위해 1차원 인과 컨볼루션을 사용하는 컨볼루션 신경망 모델이다. 인과 컨볼루션은 데이터 사이에 인과관계가 존재할 때 현재 결과의 원인이 되는 과거 데이터만을 사용하는 컨볼루션 방식이다.

웨이브넷은 시간 팽창 컨볼루션을 사용해 수용영역을 대폭 넓혔다. 

 

2. 메타러닝 모델 SNAIL

SNAIL(simple neural attentive learner)방법은 학습 방법을 학습하는 메타학습모델이다. 메타학습은 동일한 작업 분포를 이루는 여러 작업에 대한 학습방법을 학습한 뒤에 유사한 작업을 적은 데이터로 빠르게 학습할 수 있게 한다. SNAIL은 시간 팽창 컨볼루션 과 어텐션을 사용해 기존 순환 신경망 모델의 성능을 개선한 블랙박스 모델로, 지도 학습과 강화학습에 모두 적용할 수 있다.