여기서 재미있는 점은 순환 신경망 언어 모델을 학습시키는데 사용한 데이터에 따라서 사용한 데이터의 특성을 갖는 텍스트가 생성된다는 점이다. 예를 들어서 셰익스피어 전체 작품을 텍스트 파일로 다운 받으면 아주 긴 문자 시퀀스가 될건데, 셰익스피어 전체 작품으로 순환 신경망을 학습할수 있고, 그러면 어떤 문자들이 주어질때 다음에 올 단어가 어떤게 올지 예측하도록 시도해볼수 있겠다.
순환 신경망을 학습 시키킴으로서 목표는 세익 스피어의 전체 작품을 참고해서 다음에 올 단어가 어떤것인지 예측하기 위한것이다보니,
이 데이터를 학습시키고나면 훈련된 모델로부터 예측한 단어를 얻을 수가 있으나 첫 몇 반복만으로는 잘 동작하다고 보기 어려운 결과가 나온다. 여기서 동작하는 과정은 신경망으로 다음에 올 단어를 구하고, 이 단어를 다음의 입력으로 사용하고, 이 과정을 반복하여 위의 새로운 데이터를 생성시켰다.
하지만 첫 번째로 생성한 것은 학습이 충분히 길게 수행되지 않아서 텍스트의 구조를 파악하기전이다보니 가중치가 보다 고르게 되있지 않아 쓰래기 값들이 만들어 졌다.
이걸 조금 더 길게 학습을 시키면 텍스트 구조를 인지하기 시작하여, 단어 같은 것들이 만들어지고, 이 단어들 사이에 스페이스도 들어가고, 어떤 경우에는 따옴표가 들어가도록 생성하게 되었다.하지만 여전히 쓰래기값이 존재하는게 보인다.
여기서 더 학습을 시키면, 이제 문장이라고 볼수 있는 것들이 만들어지는데 aftair fall, unsuch 같이 스펠링 오류들이 존재 한다. 이게 뭔가를 설명하는것 같긴하지만 여기서 더 길게 학습시킨다면 더 좋고, 현실적인 텍스트가 만들어 진다.
"why do what that day," replied natasha and wishing to himself the fact the princess mary was eaiser ... 라는 텍스트가 생성되었는데, 문법은 완벽하지는 않지만 실제 영어 문장 처럼 만들어 졌다.
그리고 여기서 아주 오래, 더 긴 시퀀스로 학습을 시키면 훨씬 셰익스피어가 쓴것 같은 텍스트를 만들수가 있다. 위 슬라이드와 같이 대본이 만들어진것을 볼수 있는데,
"pandarus : alas, i think he shall be come approached in the day with little strain would be attain'd into being never fed' and who is but a chan and subjects of his death, i should not sleep "
훨씬 극적이고, 셰익스피어가 쓴것 처럼 만들어 졌다. 하지만 여전히 횡설수설하고 있다. 여기서 더나아가서 다른 타입의 데이터로 학습을 해나갈수도 있겠고, 이건 셰익스피어의 작품 전체만 사용한게 되겠다.
몇년 전에 이와 비슷한 일을 했었는데, 추상 대수 abstract algebra 과정이나 대수 기하학 algebraic geometry과정을 수강한 사람이라면 그 과목들이 수학의 추상화 부분을 다루는 것으로 알고 있을텐데 이 대수 기하학에 대한 오픈 소스 책이 만들어졌으며 이 책은 수천 페이지의 저차 기술들이 정리되어 있다.
(교수님이) 여기서 한 작업은 수천 페이지 짜리의 대수 기하학 책의 소스 코드를 다운받아서, 순환 신경망에다가 이책 소스코드 수백개 문자를 입력으로 주어 다음 라텍스 소스코드의 문자를 생성하도록 신경망을 학습시켰다. 그러면 학습된 순환 신경망으로 가짜 수학공식을 만들수 있었으나 불행히도 컴파일 할수는 없었다.
그래서 문법을 정확히 따르는 저 수준 소스 코드를 생성하기 어렵더라도 발생되는 컴파일 에러는 수동으로 고쳐질수 있고, 컴파일을 시켜볼수 있겠다.
위 슬라이드는 순환 신경망으로 대수 기하학 교제를 학습해서 생성한 텍스트의 예시를 보여주고 있다. 이 내용들은 추상 수학같은 것으로 보조 정의 lemma들이 있고, 증명 proof들이 있으며, 증명 끝에 소괄호로 증명을 마무리하려고 하는데, 이걸로는 증명이 된건지 안된건지도 모르겠고, 실제 수학 교재라고 하기에는 잘못된점이 많겠다. 이 증명들을 정리하고, 이해하려면 참고 서적들을 살펴봐야 되겠다.
대수 기하학에 대해서 조금 더 살펴보면 여기에 가환 다이어그램 commutative diagram을 볼수가 있는데, 이 그림은 수학적 공간 사이에서의 관계를 보여주고 있으며 저레벨 소스코드로 생성되었다. 그래서 이건 순환 신경망이 증명을 설명하기 위해서 가환 그림을 생성시킨것이라고 할 수 있겠다. 이 페이지에서 다루고 싶은 부분 중 하나는 보통 수학 책에서 자주 보는 증명이 생략되었다.
정리하면 이런 문자 수준의 순환 신경망 언어 모델은 우리가 사용하고자 생각하는 어떤 종류의 데이터로도 학습할수 있으며, 리눅스 커널 전체 소스 코드를 다운받아서 순환 신경망 언어 모델을 학습시켜서, 리눅스 커널의 C 소스코드를 만들어 낼수가 잇다.
이게 생성시킨 C 소스코드의 예시인데, 제대로 보지 않으면 꽤 실제 커널 C 소스코드처럼 보인다. 내용을 보면 괄호도 있고, static, void, 포인터, 왼쪽 시프트 등 같은것들있고, 주석을 보면 Free our user pages pointer to place camera if all dash라고 말이 안되지는 않지만 주석이 추가되긴 한걸 볼수 있겠다.
이번 예시에서는 C 파일의 맨 위에 카피라이트가 작성되어있는데, 이는 C 소스코드 파일의 구조를 알고 있다고 볼수 있겠다. 카피 라이트 내용 이후에는 include 들이 있고,
매크로도 정의되고, 상수도 정의되고 그 이후에 함수가 정의되고 있다.
다음에 올 문자를 예측하는건 꽤 간단한 작업이기는 하지만 순환 신경망이 복잡한 리눅스 커널 C 소스 코드로부터 많은 구조들을 캡처했다고 할수 있겠다. 이 과정이 어떻게 이뤄지는지 궁금할수 있겠는데,
이게 데이터를 학습하는 중간에 순환 신경망을 표현한것으로, carpathia johson과 feifei가 몇년전에 투고한 논문의 것인데 순환 신경망을 다른 타입의 시퀀스 데이터로 학습시킬때, 순환 신경망 언어 모델이 무엇을 학습중인지 이해를 하려고 했었다.
여기서 사용하는 방법론은 순환신경망을 가지고와서 시간 스탭에 따라 풀어나가고, 다음에 올 문자를 예측시킨다. 다음 단어 예측 처리 과정에서 순환 신경망은 은닉 상태 시퀀스가 생성이되는데, 입력의 문자 하나당 하나의 은닉 상태이며, 이 은닉 상태들/시퀀스로 출력/문자를 만든다.
여러 차원의 은닉 상태를 캡처해서 뭘 할수 있을까? 예를 들어 은닉 상태가 56 차원이라 하고 tanh 함수의 출력을 사용한다면, 은닉 상태 벡터의 각 원소는 -1 ~ 1사이의 값이 되겠다. 56개의 원소를 가진다는 이점을 가지고, 은닉 상태의 값 0 ~ 1에 따라서 색상을주면, 신경망의 처리과정에서
'번역 > 컴퓨터비전딥러닝' 카테고리의 다른 글
딥러닝비전 12. 순환 신경망 - 6. LSTM (0) | 2021.03.15 |
---|---|
딥러닝비전 12. 순환 신경망 - 5. 이미지 캡셔닝과 Vanilla RNN Gradient Flow (2) | 2021.03.15 |
딥러닝비전 12. 순환 신경망 - 3. 언어 모델과 역전파 (0) | 2021.03.12 |
딥러닝비전 12. 순환 신경망 - 2. 순환 신경망과 계산 그래프 (0) | 2021.03.11 |
딥러닝비전 12. 순환 신경망 - 1. 이전 시간 복습과 순환 신경망 활용 (0) | 2021.03.09 |