순차적 정보를 처리하는 심층신경망 구조
주가 예측, 자연어 처리, 기계 번역, 음성 인식, DNA 시퀀스
데이터 처리 등의 정보는 이전에 정보가 그 다음 순서의 정보에 영향을 미친다는 의미에서 순차적 처리, 즉
입력되는 순서가 중요한 정보들이다.
딥러닝으로 자연어처리를 공부하기 시작하면 이러한 순차적 정보 처리를 위한 심층신경망
구조를 배우게 되고 그 중에 처음 접하는 내용이 아마도 순환신경망 즉 RNN(Recurrent Neural
Network) 일 것이다.
RNN은 영상처리를 하는 CNN(Convolutional Neural Network)에 비해 상대적으로 원리를 이해하기 조금 어려워하는데
다행히 RNN을 알기 쉽게 비유를 들어가며 설명한 자료를 참조하며 설명해보려 한다. RNN 이후 메모리가 보강된 구조인 LSTM이라는 부분을 설명한
자료 도 관심있는 분들은 참고 바란다.
<그림 1. 문자 레벨 입력의 RNN 예>
위와 같은 RNN 구조에서 아래 입력
글자는 “hell” 이고 맨 위의 출력 층의 목표 문자는 “ello”로, 결국 아래에서 hello를 입력하는데 목표 문자는 그 다음 글자를
예측하는 것을 알 수 있다. 그런데 이 구조를 보면 아래와 같은 형태이다.
즉 새롭게 입력되는 정보가 다음 단계 신경망에 영향을 주는 구조다. 이는 우리 말의 문장을 이해하려면 순서대로 오는 정보를 마침표가 올때까지 모아서 봐야 맥락을 이해하듯이 이전
정보가 중요해서, 계속 순차적으로 다음 신경망으로 전달됨을 뜻한다.
사각형으로 표시된 RNN이라는 부분이
궁금할 텐데, 이 부분의 신경망 구조를 아주 단순화 시켜서 아래와 같은 예를 가지고 한번 살펴보자.
요리와 날씨에 따른 다음 요리 예측
핫도그, 피자, 스파게티를 요리하는 요리사가 있다. 다음 날 날씨가 해가 뜰 것으로 예상되면 요리사는 오늘 요리와 같은 메뉴를 내일 요리 일정에 넣고, 만약 다음 날 날씨가 비가 오면 오늘 한 요리의 다음 순서 요리를 선보인다. 요리 순서는 핫도그, 피자, 스파게티 순서로 빙글빙글 돈다. 자 그러면 아래와 같은 요리 일정이 될 것이다.
<그림 3. 요리 일정표>
심층신경망에는 입력 정보가 벡터로 입력되어서 ‘one hot encoding’으로 아래와 같은 형태로 입력된다. 우선 요리와 날씨가 각각 아래와 같다. one hot encoding 이란 물체를 서로 구별되게 벡터를 표시하는 것이다. 핫도그, 피자, 스파게티는 아래와 같은 3가지 벡터 로, 날씨는 2가지 벡터로 서로 구별된다.
<그림 4. 요리와 날씨의 원핫 벡터>
자 이제 아래와 같은 그림을 보자. 어떤
‘요리’ 행렬이 있다고 가정하고 요리 행렬은 3행3열의 행렬 두개를 연결(concatenated)한
행렬이라고 생각하자. Concatenat는 여기를 참고.
① 핫도그 벡터가 입력되어 요리 행렬과 만나면 내부적으로는 벡터의 합성곱(multiply)이 일어난다.
<그림 5. 핫도그와 요리의 합성곱 연산>
② 요리 행렬의 윗부분(3x3 행렬 2개가 연결(concatenated)된)과 핫도그 벡터의 합성곱 연산은 아래와 같이 된다. 이 부분은 결과가 핫도그 벡터와 같은 값으로 나온다. 벡터 나 행렬과 벡터의 곱에 대해서는 각각의 링크 참고.
<그림 6. 행렬의 합성곱 계산>
③ 요리 행렬의 연결된(concatenated) 아랫부분과 핫도그 벡터의 합성곱 연산을 위와 같은 형태로 연산해보면 피자와 같은 벡터 값을 출력한다.
이와 마찬가지로, 피자를 위의 ①②③ 과정을 수행해보면, 결과는 상위 3x3 행렬은 같은 피자, 아래 3x3 행렬 부분은 스파게티 가 출력된다. 스파게티도 역시 ①②③ 과정을 수행하면, 앞에 경우와 같다.
마찬가지로, 날씨 행렬도 해와 비 각각의 벡터와 합성곱 연산을 통해 아래 그림과 같은 출력을
표시하게 된다.
<그림 7. 날씨 행렬과 해, 비 벡터의 합성곱 연산>
그림 5와 그림 7의 요리 와 날씨 행렬은 예시를
위한 것으로 왜 그렇게 되는지 큰 의미를 두지는 말자. 아래 그림 8과
같이 왼쪽에 있는 행렬은 입력되어 심층신경망 안에서는, 노드와 노드 사이의 네트워크 상의 값(가중치(weight) 혹은 네트워크 파라미터)으로 나타난다.
행렬의 원소 즉 1 과 0 이 각 층의 노드로부터
다음 층의 노드로 연결되는 선 상에 값으로 인식됨을 알 수 있다. 딥러닝과 심층신경망에 대해 소개하는
자료 도 관심있는 분들은 참고 바란다.
<그림 8. 행렬과 신경망>
따라서 앞에서 본 요리와 날씨의 행렬은 각각 요리, 날씨의 벡터와 만나서 같은 출력을 상단에, 다음 내용을 하단에 출력하는 행렬이라는 것을 알 수 있다.
좀 더 복잡한 순환신경망(RNN)
자 이제 요리와 날씨 행렬이 어떻게 결과를 출력하는 지를 안 상태에서 보다 복잡한 순환신경망을 살펴보자.
결국 요리와 날씨 행렬은 상단의 행렬은 입력과 같은 내용을, 그리고 하단은 다음 내용을
출력하는 행렬임을 알았다. 만약 이 두 행렬을 더하기 연산을 행한다음 병합하면 어떤 일이 벌어질까?
<그림 9. 요리와 날씨 행렬의 병합>
그러면 연산은 아래와 같은 형태로 일어날 것이다. 즉 요리는 상단에 핫도그 하단에는 다음날 요리인 피자가, 그리고 날씨는 상단은 해 가, 하단은 비 가 위치하고, 이 둘을 더하면 맨 오른쪽의 행렬의 값으로 나타난다.
<그림 10. 요리 더하기 날씨 연산>
그 다음에, 이 출력 값을 아래 그림과 같은 동작을 수행한다.
① 출력 값에 최대값을 1 로 하고 나머지는 0으로 하는 함수(활성화함수라고 함)를 통과시킨다. 이렇게 되면, 가장 큰 2를 제외한 나머지 값들은 0으로 변한다. 활성화함수는 여기를 참고
② 연결(concatenated)된 상위 와 하위의 3x1의 행렬 둘을 병합한다.
③ 그 결과, 맨 오른쪽에 피자에 상응하는 출력이 나옴을 알 수 있다.
<그림 11. 비선형 함수와 병합 수행>
결언
지금까지 살펴본 내용은 순차적으로 요리와 날씨라는 요소가 다음 요리에 영향을 미치는
경우를 알기 쉽게 예시를 들어서 설명한 것이다. 순환신경망으로 입력되는 순차적 정보들은 심층신경망의
학습을 하는 과정을 통하여 옆자리에 이웃할 확률 등이 계산되는 보다 복잡한 과정을 거치게 된다. 순환신경망은
신경망 층(layer)의 깊이가 늘어날수록, 즉 다시 말하면, 문장의 길이가 늘어날수록, 맨 앞의 정보를 놓치는 약점이 있어 이러한
정보를 놓치지 않도록 메모리를 추가한 LSTM, GRU 등의 보다 진보된 구조로 진화하였다.
그러나 그 이후 2017년에 사람이
문장을 이해하는데 주목할 단어에 보다 집중하여 긴 문장을 직관적으로 이해하듯이 순차적 정보가 상대적으로 늘어나도 각 처리하는 단계에서 어떤 단어에
보다 집중해야 하는 지의 가중치를 감안한 정보들을 활용하여 처리하는, 정보의 양과 예측 정확성을 획기적으로
향상한 기술이 발표되었고, 그 이후 RNN 같은 구조를 전혀
사용하지 않고 attention이라는 기능만을 구현한 transformer 라는 기술이 발표되어 발전하였다. 이 내용이 궁금하신 분들은, 이전 뉴스레터 4회에서 GPT-3 라는 최신 언어모델을 다룬 내용을 참고하면 좋겠다.
이상 살펴본 바와 같이, 자연어처리와
같은, 순차적으로 입력되는 정보를 다루는 심층신경망이 어떻게 동작하는지 간단하게 살펴보았다.
댓글 없음:
댓글 쓰기