관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

텍스트를 위한 인공 신경망 1 - 순차 데이터와 순환 신경망 1 : 순차 데이터와 순환 신경망 본문

인공지능/딥러닝

텍스트를 위한 인공 신경망 1 - 순차 데이터와 순환 신경망 1 : 순차 데이터와 순환 신경망

huenuri 2024. 12. 17. 21:57

JSP와 서블릿 공부를 오후에 다 마치고 오늘 저녁부터 RNN 공부를 시작해보려고 한다. 하지만 저녁식사 후에는 무척 졸리기 때문에 얼마 하지 못하고 취침을 하게 될 것 같다.

어쨌든 내일부터 본격적으로 언어지능 공부를 해 볼 것이다.

 

시작하기 전에


 

 

 

 

순차 데이터

순차 데이터는 텍스트나 세계열 데이터와 같이 순서에 의미가 있는 데이터를 말한다. 예를 들어 "I am a boy"는 쉽게 이해할 수 있지만 "boy am a I"는 말이 되지 않는다. 또 일별 온도를 기록한 데이터에서 날짜 순서를 뒤죽박죽 섞는다면 내일의 온도를 쉽게 예상하기 어렵다.

 

 

지금까지 우리가 보았던 데이터는 순서와는 상관이 없었다. 예로 패션 MNIST 데이터를 생각해 보자. 이 데이터를 신경망 모델에 전달할 때 샘플을 랜덤하게 섞은 후 훈련 세트와 검정 세트로 나누었다. 즉 샘플의 순서와 전혀 상관이 없다. 심지어 골고루 섞는 편이 더 좋다.

이는 딥러닝뿐만 아니라 일반적인 모델에서도 마찬가지다.

 

이 장에서 사용하려는 댓글, 즉 텍스트 데이터는 단어의 순서가 중요한 순차 데이터이다. 이런 데이터는 순서를 유지하며 신경망에 주입해야 한다. 단어의 순서를 마구 섞어서 주입하면 안 된다. 

따라서 순차 데이터를 다룰 때는 이전에 입력한 데이터를 기억하는 기능이 필요하다. 예를 들어 "별로지만 추천해요"에서 "추춘해요"가 입력될 때 "별로지만"을 기억하고 있어야 이 댓글을 무조건 긍정적이라고 판단하지 않을 것이다.

 

 

완전 연결 신경망이나 합성곱 신경망은 이런 장치가 없다. 하나의 샘플(또는 하나의 배치)를 사용하여 정방향 계산을 수행하고 나면 그 샘플은 버려지고 다음 샘플을 처리할 때 재사용하지 않는다.

 

 

신경망 이전에 처리했던 샘플을 다음 샘플을 처리하는데 재사용하기 위해서는 이렇게 데이터 흐름이 앞으로만 전달되어서는 곤란하다. 다음 샘플을 위해서 이전 데이터가 신경망 층에 순환될 필요가 있다. 이런 신경망이 바로 순환 신경망이다.


 

 

 

 

 

순환 신경망

 

순환 신경망(recurrent neural network, RNN)은 일반적인 완전 연결 신경망과 거의 비슷하다. 완전 연결 신경망에 이전 데이터의 처리 흐름을 처리하는 고리 하나만 추가하면 된다. 다음 그림에서 은닉층에 있는 붉은 고리를 눈여겨보자.


 

 

 

 

 

 

 

 

 

 

다른 신경망과 마찬가지로 순환 신경망 그림에도 번거로움을 피하기 위해 활성화 함수로 표시하지 않는 경우가 많다. 하지만 순환 신경망에도 활성화 함수가 반드시 필요하다는 것을 꼭 기억하자.

합성 신명망과 같은 피드포워드 신경망에서 뉴런은 입력가 가중치를 곱한다. 순환 신경망에서도 동일하다. 다만 순환 신경망의 뉴런은 가중치가 하나 더 있다. 바로 이전 타이스텝의 은닉 상태에 곱해지는 가중치이다. 셀은 입력과 이전 타임스텝의 은닉 상태를 사용하여 현재 타임스텝의 은닉 상태를 만든다.

 

 

 


 

 

 

 

 

학습을 마치고

오늘 처럼으로 순환 신경망 공부를 시작해보았다. 인사교에서 수업도 4일에 걸쳐 진행되었지만 수업이 솔직히 별로였고 책으로 공부하는 게 훨씬 나은 것 같아 수업은 듣지 않기로 했다. 그리고 수업 시간에 진행되었던 실습 프로젝트는 솔직히 별로 하고 싶지 않았다.

다시 딥러닝 공부를 이어서 할 수 있어서 참 감사했다. 아직까지는 흥미를 느끼지 못하지만 나중에 필요하기 때문에 공부를 하는 것이다. 난 이제 하기 싫은 일도 내게 필요하다면 하는 사람이 되었다.