[리뷰] 파이썬과 NumPy로 배우는 선형대수



개요

본 리뷰는 비제이퍼블릭 출판사 "파이썬과 NumPy로 배우는 선형대수(이정주 저)"를 읽고 얻은 지식을 정리한 글입니다.

도대체 보스턴 주택가격 예측이 선형대수랑 뭔 상관이야?


책 소개에 앞서 잠시 선형대수의 맛을 보여드리고자 한다. 선형대수의 맛이라도 보지 않고는 그저 고1때 배웠던 행렬 정도로 피상적인 주입식 개념만 가진 채 앞으로도 그때처럼 선형대수를 마주하게 될 것이다. 그렇게 배운 지식은 쉽게 잊혀지고 잊혀지지 않아도 언제 어디에 써야 하는지 알수가 없다. 더불어 이 책이 왜 필요한 것인지도 제대로 알 수 없다.

아마 이 글을 읽고 계신 대부분의 독자분들은 선형대수 자체를 배우기 위한 목적보다는 데이터 사이언스, 머신러닝, 딥러닝 예제를 구현하다 거꾸로 선형대수라는 기초를 튼튼히 하고자 오신 분들이 대다수일 것이다. 선형대수 책을 펴면 역행렬, 가우스 소거법, 단위행렬과 같은 생소한 수학 단어들이 즐비한데 보스턴 주택가격 예측 예제에는 저런 단어들이 나오지 않는다. 본 포스팅은 그 먼 간격을 좁히고 그 과정에 이 책이 얼마나 도움이 되는지를 알리는 데에 있다. 먼저 선형대수를 왜 알아야하는지 설명하면서 그 간격을 좁혀보고자 한다.

  • 가우스소거법과 역행렬
    • 연립방정식 : 수포자가 아니라면 “그래 이 정도는 알고 있지.”라고 생각하실 것이다.
      • 1식 : 2x + 3y = 7
      • 2식 : x + y = 3
      • 그렇다. 미지수가 2개이고 방정식도 2개이며 x, y를 각각 구하는 문제이다. 기억이 나시는지?
    • 가우스소거법 : “어디서 많이 들어봤는데..” 그렇다. 우리는 주입식 교육으로 중고교 시절 분명히 이것을 들었다. 먹고 사느라 잊혀졌지만 사실 별건(?) 아니다.
      • (2,3) * (x) = (7)
      • (1,1) * (y) = (3)
      • 위 식을 이렇게 행렬로 변환한 후 역행렬과 단위행렬을 활용해 해를 구하는 방법이다. 여기서 우리가 알던 수식들이 다른 차원의 세계 즉, 행렬의 형태로 변환이 가능하고 심지어 해도 구할 수 있다는 것을 알게된다.
    • 역행렬 : “분명 배웠는데 뭔진 모르겠네..” 역시 별것아니다. 행렬 A에 곱하면 결과가 단위행렬이 되는 행렬이다.
      • 그럼 이건 왜 중요하냐? 역행렬이 존재하면 연립방정식의 해가 존재하는지 알 수 있다. 더불어 고유값, 고유벡터 계산시 활용된다.
  • 벡터, 벡터공간, 선형사상
    • 벡터 : (2,3)과 같이 그저 1차원의 행렬이다. 가로, 세로 둘중에 하나만 있는 행렬이라고 생각하면 된다.
      • 이걸 좌표에 그려보자. 그럼 x축이 1이고 y축이 2인 선이 만나는 곳에 점이 찍힐것이고 이것을 어떤점과 이으면 그것이 벡터다.
      • 어? 그런데 위의 연립방정식 1식을 x,y축 좌표에 그리면 비슷한 모양의 직선이 된다.
      • 모양이 비슷하지 않은가? 여기서 우리는 "벡터=함수"라는 것을 착안할 수 있다.
    • 벡터공간 : 2개의 벡터가 만나면 생기는 공간. 여기서 우리는 벡터 2개로 2차원의 평면 세계를 다룰 수 있음에 주목해야 한다.
    • 선형사상 : (2,3)과 같은 벡터에 10을 곱하면 (20,30)으로 변한다. 즉, 벡터라는 함수에 10을 곱하는 함수를 곱할 수 있다.
  • 시각화와 GPU
    • 시각화
      • 우리는 머신러닝을 다룰 때 시각화에 크게 의존한다. 수식 자체보다는 시각적 요소가 우리에게 직관을 쉽게 전달해주기 때문이다.
      • SVM 분류를 다룰 때 초평면을 사용한다. 수식으로 보면 난해하겠지만 시각화를 이용하면 분류의 성공여부를 쉽게 파악할 수 있다.
      • 수식으로만 알고 있던 것들이 벡터로 표현 가능함을 알았고 벡터로 그림을 그릴 수 있음을 위에서 설명했다. 이제 시각화 도구를 구현하려면 위에서 설명한 선형대수를 활용하면 가능하다는 것을 알게 되었다.
    • GPU
      • GPU는 대량의 실수 연산처리를 병렬로 수행할 수 있다. 가우스소거법에서 든 예처럼 행렬로 데이터를 전달하면 GPU의 자원을 매우 효율적으로 활용할 수 있게 된다.
  • 컴퓨터그래픽스와 이미지 전처리
    • 데이터 사이언스와 별개로 특히 게임분야에서는 렌더링, 물리엔진 등 수학적 기법이 활용되고 있다. 2D, 3D 등 그래픽스의 구현을 위해서 위에서 설명한 선형대수가 활용된다.
    • 딥러닝에 있어서도 이미지 전처리 과정에서 벡터를 중심으로 한 선형대수가 활용된다. 드랍아웃은 물론 이미지 회전, 이동, 확대/축소, 스케일 변환에 있어서 선형대수로 거의 모든 처리가 가능하다. 즉, 수식을 행렬로 바꾸어 GPU에 전달이 가능해진다.
  • 최소제곱법과 딥러닝
    • 최소제곱법은 익숙하실 것이다. 보스턴 주택가격 예측 예제 코딩하면서 시각화를 통해 선형회귀 모델의 결과로 산점도 사이의 정중앙을 통과하는 직선을 우리는 보았다. 그런데 이게 선형대수와 무슨 상관인가? 이제 간격을 좁힐때가 왔다.
    • 연립방정식의 해는 방정식의 수와 미지수가 동일할 때 구할 수 있다. 하지만 방정식이 더 적고 해가 많다면 해가 무수히 존재하게 된다. 이때 해를 찾을순 없지만 정답에 가까운 근사해를 찾고 싶다면 오차제곱합이 가장 적은 하나의 선을 얻게 되는데 바로 이 기법이 최소제곱법이다. 즉, 위의 예시와 같이 수많은 연립방정식이 선형대수를 활용하여 빠르게 GPU에게 연산을 맡길 수 있게 된다.
  • PCA(주성분분석)
    • 주성분분석은 데이터 개수에 비해 차원이 클 경우에 대량의 차원에서 최대한 특성을 보존한채로 차원을 축소하는 기법이다.
    • 이때 특성을 최대한 보존하기 위해 분산이 최대인 주성분을 찾게 되는데 이것이 고유벡터다.

글이 예상외로 너무 길어져 이 즈음에서 줄일까 한다. 선형대수는(다른 수학도 마찬가지) 적어도 공학에 적용됨에있어서 만큼은 WHAT << WHEN & WHERE임을 강조하고 싶다. 우리나라 교육의 문제이기도 하다. 우리는 WHAT을 암기로만 외웠고 그 암기로 계산을 빨리 푸는데에만 집착했다. 그런데 그렇게 배운 지식을 언제, 어디에 써야하는지는 아무도 모른다.

우리는 수학을 배워서 구멍가게에서 과자 사먹을때 계산할 때나 쓰지 언제쓰냐고 하고 있을 때, 미국에서는 선형대수와 미적분으로 경사하강법, 오차역전파법을 고안했고 그 결과 알파고를 만들 수 있었다.

선형대수를 쉽게 익히기 위한 본 도서의 장점


위 장에서 선형대수를 통해 우리 세상의 복잡한 수식을 연산 구조를 보존한 채 효율적으로 정형화 된 형태로 표현할 수 있음을 어렴풋하게나마 알게 되었다. 더불어 컴퓨터가 빠른 속도로 계산하기 쉬운 형태로 변환할 수 있다는 점, 그로인해 시각적 표현도 가능해 졌다는 점을 알게 되었다. 이제 그 구체적인 방법을 배울 차례인데 이 책에 그 해답이 담겨있다.

필자는 프로그래머이고 위에서 언급했듯 선형대수를 익히기 위해 WHAT보다는 WHEN, WHERE가 중요했고 그로인해 수학 기본서보다는 프로그래머 전용의 수학책을 선호한다. 이 책도 그 중 하나인데 다른책에 비해 매우 쉽게 선형대수에 접근할 수 있다는 장점이 있다.

딥러닝을 학습하다보면 배워야 할 것이 너무 많아 자칫 기본을 소홀히하고 지나가기 쉽다. 코딩 한줄 음미하여 그런가보다 하고 넘어가다보면 캐글 같은 문제를 접하거나 모델링을 시도할 때 어디서부터 시작해야 할지 막막해지곤 한다. 가끔 침착한 마음으로 그 본질을 되새기다보면 머리속 복잡했던 개념들이 말끔히 정리되어 불현듯 해답이 떠오르곤 하는데 이 책을 읽다가 그런 느낌을 자주 받을 수 있었다.

저자는 미처 선형대수에 접근하지도 못한 채 낙오하는 독자를 한명도 남기지 않고자 파이썬을 다루기 위한 사전 작업에서부터 꽤 신경을 쓴 것 같다. 파이썬의 기본문법은 물론이고 설치과정, Numpy까지 친절히 설명하며 리스트 등의 다른 자료구조와 무엇이 다르고 그로인해 어떤점을 유의해야 하는지 자세한 예제를 통해 전달한다. 그 과정에서 파이썬과 Numpy에 대한 상당한 자신감을 갖고 선형대수를 접하게 된다.

선형대수 역시 기본부터 천천히 다룬다. 인상적이었던 점은 모든 과정을 시각화하며 확인한다는 점이다. 처음엔 자칫 느린 진행처럼 보여 시간이 아깝진 않을까 우려가 되었으나 급할수록 돌아가라 했던가. 코드로 직접 구현하며 수식을 음미하고 시각화를 통해 눈으로 확인하는 확인사살까지 거치다보니 투자한 시간이 전혀 아깝지 않을정도로 머리속에 모호했던 개념들이 뚜렸하게 보이기 시작했다. 그리고 코드 구현 및 시각화 구현 과정에서 소요된 시간은 생각보다 길지 않았다.

예를들어 아래 그림은 역행렬이 존재하지 않아 연립방정식의 해가 존재하지 않는다는 예제를 다룬 페이지이다. 위에서 언급한 기본 개념을 코드 및 시각화 구현을 통해 확실히 이해함으로써 역행렬의 개념을 보다 확실히 잡을 수 있었다. 역행렬

다음 그림은 최소제곱법을 도출하는 수식을 제시하고 코드 및 시각화를 통해 어떤 상황인지 명확히 인지시켜준다. 그동안 두루뭉실하게 외우고 넘어갔던 지식들을 제대로 이해하는 계기가 되었다. 최소제곱법

이미지를 확대, 축소, 이동, 변환하는 예제를 직접 구현하여 시각화해보면 수식과 숫자에 숨어있는 또 다른 의미가 명확히 보이게 된다. 수식에 대한 가독성이 높아진다고나 할까? 시각화를 선택한 저자의 판단은 옳았다. 변환

그렇게 선형대수에 대한 자신감이 끓어오를때 즈음 이미지에 적용한 응용 예제가 나온다. 이미지의 기하학적 변환, Planar Rectification 등의 예제를 통해 선형대수가 어떻게 공학에 활용되는지 보다 구체적인 인사이트를 얻을 수 있다.
Rectification

마지막으로 저자 특유의 꼼꼼한 설명으로 인공신경망에 대해 정리해준다. 선형대수와 크게 관련이 없는 내용이지만 인공신경망의 구조를 처음 접했을때와 달리 선형대수의 시각에서 접근하며 보게되어 밀도 높은 학습효과를 준다. 전체적으로 수수하면서도 내실이 꽉찬 묘한 정이 가는 기술서이다.

누가 읽어야 하는가?


  • 데이터사이언스 선행학습으로 선형대수의 기본 개념을 탄탄히 잡고싶은 개발자.

  • 선형대수를 프로그래밍으로 구현해보고 싶은 수학도.

  • 선형대수의 기초 개념조차도 이해하기 쉽지 않으신 분.

  • 기타 선형대수, Python, 이미지 전처리 등을 배우고 싶은 학생, 실무자, 경영자 등

책의 구성 및 요약


이 책은 크게 세부분으로 구성되며, 각 파트에서 다루는 내용을 아래와 같이 요약해 보았다.

  • 1. 파이썬과 넘파이(1 ~ 2장)
    • 파이썬 개발환경 셋팅, 데이터타입, 제어문, 함수, 모듈, 입출력 등
    • 넘파이 배열, shape, 슬라이싱, 복사, 브로드캐스팅 등
  • 2. 선형대수(3장)
    • 시각화, 벡터, 행렬
    • 선형결합, 벡터공간, 벡터와 행렬 간 곱셈 등
    • 선형 연립방정식, 행렬식, 고유값, 고유벡터 등
  • 3. 응용예제 및 인공신경망(4장 ~ 6장)
    • 이미지의 기하학적 변환
    • 호모그래피 행렬과 Planar Rectification
    • 인공신경망의 기본구조(레이어, 활성화함수, 가중치, 모델학습, 피드포워드, 경사하강법, 역전파 등)

요약하며…


딥러닝을 학습하다보면 배워야 할 것이 너무 많아 시간에 쫓겨 자칫 기본을 소홀히하고 지나가기 쉽다. 이 책은 시간에 대한 부담은 잠시 접어두고 기본에 충실하게 만든다. 마치 여행을 한번 갔다오는듯한 착각을 불러일으키는 책이다. 파이썬의 기본문법은 물론이고 설치과정, Numpy까지 친절히 설명하며 다른 자료구조와의 차이점, 유의사항까지 상세한 예제를 통해 전달한다.

이 책의 백미는 모든 과정을 시각화하며 확인한다는 점이다. 코드로 직접 구현하며 수식을 음미하고 시각화를 통해 눈으로 확인사살까지 거치다보면 머리속에 모호했던 개념들이 뚜렷하게 보이기 시작한다. 선형대수의 이해를 위해 전 과정을 시각화 한 저자의 선택이 탁월했다고 생각하며, 덕분에 수식과 숫자에 숨어있는 또 다른 의미가 명확히 보이게 된다. 일종의 수식에 대한 가독성이 높아진다. 특히 선형대수에 고질적인 어려움이 있는 독자라면 꼭 일독을 권하고 싶다.

반면 아쉬운 점은 크게 없지만 컬러판이 아니라는 정도인데 상당한 지면수에 따른 비용을 감안할 때 어쩔 수 없는 선택이었다는 생각이 든다. 더불어 인공신경망 부분의 설명은 선형대수 중심으로 전개하고 기존 시중에 나온 서적과의 중복된 부분은 개념위주로 최소화 했다면 더욱 명작이 되지 않았을까하는 아쉬움이 남는다.

전반적으로 겉모습은 수수한데 내실은 꽉찬 장인의 냄새가 나는 묘한 정이 가는 기술서이다. 선형대수에 관심이 있는 사람이라면 일독을 권한다. 그동안 경험하지 못했던 선형대수에 대한 새로운 시각을 얻게 될 것이다.

<비제이퍼블릭 출판사>

책 한권만으로도 실무를 수행할 수 있을 정도의 실용성, 기존 출간된 책에서 다뤄지지 않았던 가려웠던 구석을 시원하게 긁어주는 참신함, 피상적인 접근으로 그런가보다 넘어가기 쉬운 지식에 대한 깊이있는 고찰을 담은 장인 냄새가 나는 출판사입니다. 더불어 참신한 해외 번역서, 최신 트렌트를 겨냥하는 양질의 서적을 자주 출간하여 필자의 책장에도 어느덧 십여권의 책이 꼽혀있네요. IT 실력을 향상시키는데 있어 뭔가 허전하거나 시간은 투자대비 내공이 채워지지 않는 공허함이 생긴다면 비제이퍼블릭 출판사의 책 목록을 살펴보시기 바랍니다.

비제이퍼블릭 바로가기




© 2019.04. by theorydb

Powered by theorydb