글 수 108

긴글) 방학 동안 얕게나마 딥러닝 공부했던 후기

조회 수 138 추천 수 0 2018.08.24 09:48:43


  이세돌씨와 알파고의 대결 이후 인공지능에 관심을 가지고 조금씩 공부하다가 이번 방학 때가 되서야 간단한 것들을 만들어 볼 수 있었습니다. 힘든 학기를 끝내고 방학 때는 많이 쉬고 싶었습니다. 하지만 이렇게 여유있는 시간을 가질 수 있는 것이 학창시절 뿐이라는 생각이 드니 마냥 놀기만 하기에는 시간이 아깝다는 생각이 들어서 텐서플로우를 공부해보기로 했습니다.

 

  시작은 유튜브에 있는 텐서플로우 강의로 시작했습니다(http://hunkim.github.io/ml/). 홍콩 과기대 교수님으로 계시는 분의 쉬운 강의를 보면서 강의에 나왔던 예시들을 따라 해봤습니다. 하지만 코드들을 응용하는 것이 무척 어렵더군요. 이러한 한계점을 느끼고 머신러닝 쿡북과 같은 책 몇권을 구입해서 같이 병행하게 되었습니다. 수학적인 깊은 내용을 공부하지 않음에도 무척이나 어려워서 힘들었습니다. 개발 언어가 저에게 조금익숙한 C가 아닌 파이썬이라 더욱 그랬던 것 같습니다. 이걸 최초로 만들어내신 과학자 수학자 들이나 개발자분들이 무척 대단하다고 느꼈습니다. 하지만 워낙 재미를 느끼고 있어서 욕심내지 않고 조금씩 조금씩 공부를 했습니다.

 

  이번 방학 때는 숫자 인식 신경망을 하나 만들어보는 것을 목표로 잡고 공부를 하였습니다. 그래서 콘볼루션이나, 맥스풀, 소프트맥스 등을 위주로 먼저 예제를 만들어보면서 익히고, RNN도 한번 정도 예제를 만들어봤습니다. 그러면서 어떻게 인식 신경망을 만들까 고민하던 중에 앞서 말씀드린 강좌에서 구글에서 개발한 인셉션 모델을 소개한것이 떠올랐습니다. figure.1  여러 사이트를 보면서 구조를 살펴봤는데, 일정한 블럭단위가 반복되는 어느정도 단순한 구조였습니다. 그래서 인셉션 신경망을 만들어보고 숫자 인식을 성공하기로 마음을 먹었습니다.

 

캡처.PNG

 

  일단은 인셉션 모듈을 하나 정도 사용한 간단한 모델을 만들어 구현한 모듈이 제대로 작동하는지 확인하는 작업을 했습니다. 그런데 loss가 줄지 않거나 시작부터 nan이 되는 등 학습이 잘 이루어지지 않아서 당황했습니다. 모델을 잘못 코딩했나 살펴봤는데 그런 점이 없어서 더욱 그러했습니다. 한참 삽질을 하다가 구글에 검색해보니 복잡할수록 learning rate를 작게하라는 문장을 볼 수 있었습니다. 저는 보통 이 수치를 0.05를 사용하고 있었는데 과감하게 0을 한두개 더 붙이니 학습이 이루어졌습니다. 

 

  동작을 확인한 후에 본격적으로 코드를 만들어봤습니다. 

캡d처.PNG

 

  코드를 완성하고 실행해봤는데, 동작은 제대로 하는 것을 확인했습니다. 목표의 반을 성취했다는 점에서 일단 만족스러웠습니다. 콘볼루션 하나 만들기도 버거워했던 때가 새삼 기억나더군요. 방학 때 공부했던 것의 결과가 직접 드러나니 무척 뿌듯했습니다.

 

  감격을 뒤로하고 학습 과정을 지켜보았습니다. 확실히 비교적 큰 모델이라 시간도 무척 오래 걸리고 메모리가 부족하다는 주의 메시지까지 떴습니다;;;. 유감스럽게도 학습은 제대로 이루어지지 않았습니다. 로스함수는 꾸준하게 조금씩 줄어드는데 정확도는 10퍼센트를 웃돌았습니다. 숫자 10개 중 하나를 고르는 신경망이니 결국 제대로 답을 고르는 것이 아니라 찍어서 맞추는 수준이라는 것입니다. 혹시 몰라 학습 횟수를 1000번으로 늘려서 학습해봤습니다만 로스 수치만 줄어들 뿐 정확도는 그대로였습니다. 아까처럼 learning rate 수치가 적절하지 못한 것인 가하여 이번에는 학습이 진행됨에 따라 수치를 감소시키는 함수까지 추가해봤지만 결과는 같았습니다. 학습 횟수가 모델 크기에 비해 부족한 것인지 learning rate가 부적절한 건지는 잘 모르겠습니다. 외부적인 문제도 알게되었습니다. 개발환경이 노트북인데 메모리 부족 등의 문제도 있지만 발열 문제가 가장 큰 것 같습니다. 발열량이 상당하더군요. CPU가 90도를 찍었고, GPU역시 80도 정도의 높은 온도를 유지했습니다. 10도 높아질 때마다 수명이 많이 줄어드는 걸로 아는데 이걸 알게 되니 노트북에서 학습하는 것이 약간 부담스러워졌습니다.

 

  이번 방학 때 알게 된 것은 단순히 모델 구조만을 구현한다고 해서 인공신경망을 완성할 수 없다는 것 입니다. 처음 유튜브 강좌를 들었을 때는 모델만 따라 만들면 되지 않을까 하는 생각을 했는데 어쩌면 제가 인공신경망을 너무 쉽게 생각했을지도 모릅니다. 비록 취미로 시작한 텐서플로우지만 좀더 진지한 태도를 가져야 할 것 같습니다. 이 부분에 대해 다음 방학 때 조금 더 공부를 해볼 계획입니다.

 

   긴글 읽어주셔서 감사합니다. 질문에 항상 친절하게 답변을 해주신 깊은 바다님께도 무척 감사하다는 말씀을 올리고 싶습니다.


깊은바다

2018.08.24 12:40:14
*.68.247.188

좋은 글 잘 읽었습니다~

역시 딥러닝을 실제로 응용해서 구현한다는게 쉽지많은 않네요^^;

사지방컴

2018.08.24 21:28:50
*.145.249.61

와우 많은 것을 이루셨군요

List of Articles
제목 글쓴이 날짜 조회 수
간단하게 제가 접근해본 방법 공유합니다. 맛동산 2018-11-13 21
안녕하세요 그나마 이사이트 국내에서는 제일 좋은듯 합니다. [1] 맛동산 2018-11-13 32
[질문] Mnist가 아닌 제가 가진 이미지셋으로 GAN 구현 중 질문 드립니다 file [1] 하얀천사 2018-10-31 35
카테고리 자동분류 [1] 와니와니 2018-10-24 61
영화 패신저스의 대화 인터페이스 깊은바다 2018-10-03 92
안녕하세요 [1] 불새의전설 2018-09-10 87
질문있습니다.. - Dialogflow와 Heroku로 카카오톡 챗봇 만들기 [1] swgooddream 2018-09-09 85
챗봇, 그리고 신 직업.. 어찌 생각하시나요. [4] lopez7 2018-09-05 156
초보자가 공부할만한 강화학습(DQN) 책 없을까요? [1] 딥린이 2018-08-31 95
인셉션 모델(버전 1)의 학습이 진행되고 있습니다. file [1] 딥린이 2018-08-26 80
긴글) 방학 동안 얕게나마 딥러닝 공부했던 후기 file [2] 딥린이 2018-08-24 138
질문) 텐서플로우로 구글의 인셉션 모델을 만들고 있습니다. [2] 딥린이 2018-08-17 115
여기는 처음인데 질문이 있습니다 [2] jianjian 2018-08-16 88
안녕하세요 [1] jyk12 2018-08-14 58
안녕하세요 [1] 이근섭 2018-08-08 69