본문 바로가기

Book Review

[2018/01/01] 딥러닝 첫걸음

"딥러닝 첫걸음, 김성필"


2018년의 첫 책. 

0.
IT의 세계는 물론, 굉장히 많은 곳에서 인공지능, 머신러닝, 딥러닝, 기계학습, 신경망 등의 용어가 사용되고 있다. 이보다 조금 전 트렌디한 단어가 빅데이터였다면, 2016년~2017년에 와서 (극적으로는 이세돌의 알파고 대국 이후) 그 자리가 교체된 듯 싶다. 사실 트렌디한 단어들은 어떤 면에서 다소 역설적인데, 완전히 새로운 것이 등장하기보다 이전부터 있던 것에 시장에서의 새롭게 이름붙이기를 통해 주목을 받기도 한다는 점(심지어 기존부터 있던 이름이 그대로 쓰이는 경우도 많다.), 그리고 갑자기 왜 주목받는지 가끔 이해하기 어렵다는 점, 누구나 알 것 같지만 실제로 제대로 아는 사람이 없는 경우도 많다는 점, 끝으로 아주 많은 경우엔 그게 내 삶에 어떻게 도움이 되는지 크게 신경쓰진 않으면서도(심지어 도움이 되지 않는 경우도 많으면서도) 왠지 모르면 안 될 것 같은 느낌을 주기 쉽다는 점 등등에서 그렇다. 

1. 
인공지능의 극단적 엔드피쳐는, (굉장히 오래 전부터 여러 소설, 만화 등등에서 상상되어왔던) 인간과 구별되지 않는 안드로이드 형태의 로봇일 것이다. 물론 최근엔.. 인간의 뇌가 그대로 기계화되어 가상세계에서 영생을 누릴 수 있는 형태도 적지 않게 언급되기도 한다. 그에 비해, 요새 음성인식을 기반으로 뜨고 있는 AI(정확히는 AI 스피커)라는 용어는 좀 의아할 때가 있다. 아이폰 초기부터 'SIRI'는 있어왔고, 심지어 다음에서 음성인식 기반의 음성검색 혹은 음악검색 서비스가 처음 등장한 것 역시 상당히 오래 전이다. 스피커라는 하드웨어를 만나 갑자기 트렌디해진 것일까. 아님 대기업들이 AI라는 용어에 가장 빠르게 대응할 수 있는 구체적 형상이 스피커 형태였기 때문일까. 어쩌면 새롭게 팔 수 있는 상품을 위해 기존의 개념을 리브랜딩해낸 능력 때문인 걸까. 오히려 기술이 꽤 올라왔구나 싶은 건 영상 인식 기반의 구글의 이미지 검색인데, 생각해보면 이 역시 (꽤 오래 전 스마트폰이 등장한 뒤) 당신과 닮은 연예인은? 과 같은 식의 앱 서비스가 있었다. 이런 모습들을 보면, 기술을 발전시키는 것도 중요하지만 이를 시장과 현장에 어떻게 포지셔닝시키고 소위 '팔리게' 만드는 것이 못지 않게 중요하다는 생각도 들고.

2. 
작년부터 수학/통계학과 관련된 관심으로 이런저런 책을 보고 있는데, 이번에 읽은 이 책 역시 수학적인 부분이 조금 섞여있다. 다만, 입문 책이라 그렇겠으나 행렬식과 시그마 정도를 이해한다면 읽어가기 크게 어렵지 않은데 (이건 저자가 쉽게 풀었기 때문이기도 하지만) 엄청나게 어려워 보이는 기술의 본질에도 이렇게 기초적인 개념이 늘 자리한다는 것에 다시 놀란다. 세상에 행렬이라니. 서른 다섯에 내가 이러고 있을 줄 18년 전에 미리 알았다면, 고등학교 선생님한테 '제가 왜 행렬을 배워야 하나요, 확률과 통계는 복권말고 도대체 어디에 쓰인다는 말인가요.' 라는 질문을 하지 않았을 것이다. 인생의 깨달음은 늘 늦게 온다. 물론, 그 때 내가 행렬과 통계를 더 잘했다고 해도 서른 다섯의 지금 수학적 대가가 되어있으리라는 보장은 없다.

3. 
머신러닝, 딥러닝과 신경망에 대한 기초적인 이해를 하기에 괜찮은 책이다. (일단, 이 책 덕분에 헷갈려하던 여러 개념을 다시 정리할 수 있었다.) 예제들은 MATLAB으로 구성되어있는데 이걸 할 줄 모르기 때문에 코드를 읽어보는 수준으로 지나쳤으나 (다음 읽을 책이 모두의 딥러닝인데 이건 예제가 파이썬으로 되어있어 실습하기 좋아보였다. 실제 프로그래밍과 구현은 이 책을 읽을 때 해보기로 했다.) 생각해보면 학부 시절 실험심리학에서 실험 결과를 분석할 때 사용했던 툴이다. 세상에, 14년 뒤 내가 이러고 있을 줄 알았다면 그 수업을 좀더 열심히 들었을지도 모른다. 실제 여러 연구실에서 지금도 MATLAB을 많이 쓰고 있는 것 같던데 어떤 장점 때문인지는 잘 모르고 있지만, 당시 실험심리 연구 대상은 화면에서의 영상을 인지하고 사람의 눈동자가 움직이는 패턴을 분석하는 것이었고 그 때도 이를 통해 분석했던 기억이 난다. 내가 그 실험에 더 열의를 가졌다면 지금쯤 '모바일 화면에서의 컨텐츠 소비 패턴에 대한 분석과 제안 - 사용자 안구 동선 및 터치, 스와이핑을 바탕으로 한 심층신경망 연구'와 같은... 논문을 쓰고 있진 않았겠으나 그래도 뭔가 아쉽다. 더 어린 나이에, 더 많은 공부에 열의를 가졌더라면. 어땠을까. 

4. 
모를 일이다. 마흔이 되어 5년 전 지금이라도 더 공부하지 않은 것을 후회할지. 역시나 모를 일이다. 쉰이 된 15년 뒤, 그 때 그냥 모든 걸 그만두고 글을 쓰거나 더 여행하지 않은 것을 후회할지. 경험은 늘 오늘보다 뒤늦은 시점에 오고, 경험에 앞선 선험적 판단과 의지는 늘 상상된 위험을 수반하게 하고, 아직 오지 않은 그 위험은 보통 (심지어 미리 회피하려고 하기 때문에) 상상했던 예전 시점보다 더 적거나 없던 것처럼 느껴지기 마련이고, 그 결과 사람은 가지 않은 길에 후회를 반복한다. 그리고 물리적 시간이 점점 지나갈 수록 이 편차는 가중되는 느낌인데, 찾아올 시간 대비 다시 오지 않을 시간의 비율이 점점 높아지기 때문일 것이다. 그래서 더 늦지 않을 때, 가 늘 고민되면서도 항상 더 늦는 기분이다. 머신러닝도 딥러닝도 아직 오지 않은 미래에 혹은 정답을 모르는 어떤 것에 대해, 기존의 경험(학습 데이터)를 바탕으로 현재 시점의 판단을 돕고자 이후의 예측치를 정답에 가깝게 도출해주기 위한 기술들이지만 한 인간의 삶은 이 기술에 의존하기 어렵다. 문제 상황에서의 일반적인 행동 패턴이 한 개인의 행동과 판단을 가이드할 수 있는 것과 살아가는 것 그 자체는 아무래도 다르다.

5. 
"딥러닝은 머신러닝의 하나, 머신러닝은 인공지능의 하나로 개념적 설명이 가능하다. 학습 데이터를 바탕으로 머신러닝을 통해 모델을 만들며, 이렇게 만들어진 모델에 입력 데이터를 받아 실제 결과를 얻는 방식이다."

"과적합의 경우 모델이 학습데이터에 지나치게 최적화된 경우로, 학습 데이터에서는 성능이 좋지만 실제 입력 데이터에서는 그렇지 못하다. 머신러닝 모델의 일반화를 위해 과적합을 해결해야 하며 이를 위한 방법은 정칙화와 검증이 있다. 정칙화는 최대한 단순한 모델을 유도하려는 수치해석적 기법이고, 검증은 학습 과정에서 과적합 여부를 미리 알아내 조치를 취하고자 고안된 기법이다."

"머신러닝은 학습 방법에 따라 지도학습, 비지도학습, 강화학습으로 구분되며 지도학습의 경우 학습데이터의 형태는 {입력, 정답}, 비지도학습의 경우 {입력}, 강화학습의 경우 {입력, 출력, 출력에 대한 점수}의 형태가 된다. 이 중, 지도 학습은 분류외 회귀로 구분할 수 있다. 입력 데이터가 어느 범주에 속하는지 알아내는 문제는 분류이고 이 경우 학습 데이터의 정답은 범주로 주어진다. 회귀는 값을 예측하는 문제이며, 이 경우 학습 데이터의 정답은 값으로 주어진다."

"신경망은 뇌의 신경세포에 비유될 수 있는, 노드들의 네트워크이다. 노드는 입력 신호들의 가중합을 구하고, 이 값을 활성함수에 입력해 나온 값을 외부로 출력한다. 그리고, 계층 구조로 된 신경망에서 신호는 입력층으로 들어가 은닉층(들)을 거쳐 출력층의 순서로 처리된다. 신경망에서 지도학습은 신경망의 출력과 주어진 정답의 차이를 줄이도록 연결 가중치를 변경하는 과정을 의미하며, 주어진 학습데이터에 맞춰 신경망의 가중치를 변경하는 방법을 학습 규칙이라고 한다."

"단층 신경망의 대표적 학습 규칙인 델타 학습으로는 다층 신경망을 학습시킬 수 없으며, 다층 신경망의 경우 역전파 알고리즘으로 학습시켜야 한다. 역전파 알고리즘은 신경망의 출력 오차를 출력층에서부터 역순으로 전파시켜 은닉층의 오차를 정의한 다음, 델타 규칙에 의해 각 계층의 가중치를 갱신한다. 비용함수는 신경망의 출력 오차를 계산하는 함수로 오차에 비례하는 값을 갖는다. 오차에 민감한 크로스 엔트로피 함수가 많이 쓰인다."

"신경망은 분류 문제와 회귀 문제에 모두 사용할 수 있지만, 보통 분류 문제에 사용된다. 데이터를 둘 중의 하나로 분류하는 이진 분류기는 의외로 쓸모가 많다. 스팸 메일의 판별, 대출 승인 등이 대표적인 이진 분류문제이다. 범주가 2개인 경우엔 출력 노드가 1개만 있으면 된다. 출력 노드의 활성함수로 시그모이드 함수를 사용한다면 신경망의 출력이 0.5 이상인지 여부로 판별하면 된다. 범주가 3개 이상인 문제에서 출력 노드는 범주와 같은 개수를 사용하는게 보통 가장 좋다. 다범주 분류기의 경우 출력 노드의 활성함수로 소프트맥스 함수를 사용하는게 일반적이다. 이진 분류와 다범주 분류 문제 모두 학습 규칙의 비용함수로는 크로스 엔트로피 함수를 사용한다."

"딥러닝의 경우, 심층 신경망을 이용한 머신러닝 기법으로 정의할 수 있다. 학습 데이터를 바탕으로 학습 규칙을 사용하여 심층 신경망으로 구성하고, 입력 데이터이 이 심층 신경망을 통과하게 해 결과를 얻는다. 선형 분리 가능한 단층 신경망 이후, 은닉층이 하나 추가된 신경망이 나오기까지 약 30여년이 걸렸다. 이는 학습 규칙을 찾지 못했기 때문이었고, 1986년 역전파 알고리즘이 개발되면서 해결되었으나, 심층 신경망 기반의 딥러닝이 등장하기까지 다시 20년이 걸린 이유는 성능 문제 때문이었다. 다층 신경망의 은닉층을 늘려 역전파 알고리즘으로 학습시키면 오히려 성능이 더 떨어지는 경우가 많았는데, 딥러닝은 이 문제를 해결했다."

"역전파 알고리즘으로 심층 신경망을 학습시킬 때 겪는 어려움은 크게 세가지이다. 그래디언트 소실 현상의 경우, 학습 과정에서 출력층에서 멀어질수록 신경망의 출력 오차가 반영되지 않는 현상을 의미하며 이를 해결하기 위해 노드들의 활성함수를 ReLU(Rectified Linear Unit) 함수로 바꾼다. 두번째는 과적합으로 심층 신경망에서 은닉층이 늘어날 수록 연결 가중치가 많아져 더 복잡한 모델이 된다. 신경망의 성능을 높이려면 계층 구조를 더 깊게 해야 하는데 그럴 수록 과적합 문제에 취약해지는 딜레마가 있다. 이에 대한 대표적인 해결책은 드롭아웃이다. 신경망 전체를 다 학습하지 않고 일부 노드만 무작위로 골라 학습하는 방법이다. 끝으로, 은닉층이 많을 수록 연결 가중치가 늘고 이에 학습 데이터가 많이 필요해 계산량이 급증할 수 있다. 학습 기간의 경우 고성능 하드웨어, 배치 정규화 등의 알고리즘으로 개선해나가고 있다."

"머신러닝의 3대 과제로 영상 인식/음성 인식/자연어 처리가 있는데 이 중 컨벌루션 신경망의 경우 영상 인식에 특화된 심층 신경망이다. 이미 20-30년 전에 등장한 오래된 기술이지만 현상의 복잡한 이미지 처리가 되지 않는다는 이유로 잊혀졌다가 2012년에 재등장했다. 기본적으로 영상 인식 문제는 분류 문제에 해당한다. 이에 영상 인식에 사용되는 컨벌루션 신경망의 경우 다범주 분류 신경망으로 구성되는 것이 일반적이다. 영상 인식 성능을 높이려면 원본 입력 이미지 대신 특징이 부각된 이미지(특징 맵)을 분류기에 입력해야 한다. 컨벌루션 신경망은 특징 추출 신경망과 분류 신경망을 직렬로 연결한 구조로 되어 있는데, 학습 과정을 통해 분류 신경망뿐만 아니라 특징 추출 신경망의 가중치들도 학습된다. 특징 추출 신경망은 컨벌루션 계층과 풀링 계층을 연달아 여러 층으로 쌓은 형태로 되어 있으며, 컨벌루션 계층은 컨벌루션 연산을 통해 이미지를 변환하고 풀링 계층은 이미지의 차원을 줄이는 역할을 한다."

-----

서른 다섯의 삶이 시작되었다.