인공지능에서 최근 몇년간 가장 핫한 분야가 된, 딥러닝 쪽에 관심이 있어서 이것 저것 보다보니, Pyhthon에서 keras와 Tensorflow로 가는 것이 거의 주류인 듯이 보인다. 배우기 쉽고 이것 저것 깔고 찾고 환경 설정하는 신경쓸 필요가 1도 없는 Matlab 은 상업용 프로그램이라서 그런지, 구글에서 밀어주지 않아서 그런지 뭔가 한물 간 듯한 느낌이지만, 처음 배우는 사람들, 그리고 학교나 기관에서 matlab이 깔려져 있는 사람들에게는 matlab의 진입장벽이 가장 낮다. 우연히 이 책이 보여서 스르륵 넘겨보았다. 표지에 적시하지는 않았지만, 본문의 소스코드가 matlab으로 되어 있다. matlab은 기존 프로그래밍 언어 경험이 조금만 있으면 단 몇 시간만 투자해도 쉽게 습득할 수 있는 언어다. 까다로운 규칙도 없고, 통합환경에서 에디터에서 디버거까지, 복잡한 수학 및 통계 계산에서 이미지 처리 및 그래프 등을 별도의 라이브러리 설치 등이 필요없이 거의 모든 개발환경을 지원해준다.
한빛 미디어에서 비슷한 표지로 첫걸음 시리즈가 몇개 있는데, 저자가 모두 국내인들이다. 대부분이 외국인 저자들의 책을 빠르게 번역해서 내는 데 비해 직접 한국말로 작성한 책들은 훨씬 가독성이 좋다. 딥러닝 분야가 이론은 여러가지 다른 이름으로 오래 전부터 있어왔지만, 네트웍과 빅데이트 GPU 등의 기술이 비약적으로 발전해 딥러닝의 실세계 구현이 가능한 시대가 된 것이다. 그래서 컴퓨터 프로그램을 조금이라도 하는 사람들이라면 이 분야에 관심을 가질 수밖에 없고. 이걸 모르면 어쩐지 낙오되는 듯하고, 생존하지 못할 것 같은 느낌이드는 것도 사실이다. 하지만 이렇게 새롭게 뜨는 분야라, 단어들이 몹시 생소하여, 영어로 읽어도 한국말로 읽어도 생소할 언어 투성이이다. 그렇다고 이런 언어들을 기초부터 하나씩 차근차근 배워나가기에는 생각하고 코딩하고 런 하는 습관이 눈에 밴 사람들에게 고통스런 배움의 과정이 선행되어야 한다.
내 생각에 딥러닝을 접근하는 데는 두 가지 방법이 있을 수 있다. 하나는 먼저 돌려보는 것이다. 먼저 돌려보는데 있어 가장 적합한 방법은 글쓰는 이 시점에서는 python 환경에서 tensorflow와 keras 라이브러리를 이용하는 구글의 딥러닝 튜토리얼 예제를 코랩 클라우드 환경에서 바로 돌려보는 일이다. 코드를 한줄씩 혹은 한 블럭씩 복사해서 코랩에 붙여넣기 한 후 그냥 한줄씩 실행해 보면 대략 이런 과정이라는 걸 짐작할 수 있다. 물론 거기에 있는 코드 대해서는 생초짜로서는 별로 이해할 수 있는 일이 없다. 딥러닝계의 hellow world는 손글씨로 씌어진 10개의 숫자 학습 프로그램인데, MNIST라는 데이터셋에서 불러온 6만개 정도의 손글씨 이미지 자료와 그 이미지의 실제 숫자들을 읽어 학습시킨 후, 판별해보는 프로그램이다. 수많은 딥러닝 입문 프로그램이 예제로 이 실습을 이용하고 있으며 이 책도 마찬가지로 이 예를 사용한다. 어쨌거나 이렇게 신기한 경험을 한 번 하고 나면, 각각의 tensorflow 명령과 수많은 파라미터들이 무엇을 뜻하는지가 궁금하게 될 것이다. 이것은 classification 범주에 속하는 지도 학습supervised learning의 예인데 regression의 경우와 비지도 학습 등 여러가지 예를 통해 감을 익히다보면 자연스럽게 딥러닝 프로세스에 필요한 단계를 파악하게 되는데, 매 단계마다 주어지는 여러가지 패러미터들에 대해서는 여전히 점점 더 궁금증만 쌓여갈 것이다. 이 때 Andrew 의 그 유명한 10년된 machine learning 학습 비디오를 보거나 머신 러닝의 입문책을 보면 비로소 궁금증이 해결되면서 책을 파는 것보다 훨씬 능동적으로 딥러닝의 요소들을 배울 수 있을 것 같다.
또다른 방법은 바로 입문서를 이용하는 것이다. 이러한 책들이 도움이 된다. 앞서 말한 Andrew의 쿄세라 강의 역시 딥러닝의 직관적인 이해에 큰 도움이 될 것이다. 이 책의 특징은 (다른 입문서와 마찬가지지만) 딥러닝이란 무엇인지 인공지능, 머신러닝, 딥러닝, 등등의 용어의 상호 관계를 비롯한 개념을 간단하게 설명하고, 머신러닝이 가진 난제들을 나열한 후 신경망, 다층 신경망, 분류 문제, 딥러닝, 컨벌루션 신경망을 차례로 그 개념에서부터, 예시까지 간략하지만 군더더기 없고 잘 정리된 형태의 문서로 제시한다. 따라서 각 딥러닝의 개념적인 이해를 실례와 함께 차근차근 밟아나가고 싶다면 이 책은 좋은 선택이 될 것이다. 예제 코드를 돌려보지는 않았고, 대략적으로 넘겨본 것에 대한 리뷰이다.
신경망은 뇌의 신경세포에 해당되는 노드라고 하는 작은 요소들을 연결해 만든 네트웍입니다. ...가장 중요한 신경세포들의 연결관계를 신경망은 노드들의 연결가중치로 흉내냅니다... 신경망에서 정보는 가중치와 바이어스의 형태로 바뀌어 저장됩니다.
신경망의 노드 동작 과정