본격적으로 딥러닝 알고리즘을 다루기 전에 무엇을 어디까지 배워야 하는지 알아두면 두고두고 내비게이션처럼 사용할 수 있습니다. 큰 그림을 이해하면 이후 상세 설명을 이해하는 데 도움이 될 겁니다.
이제부터 딥러닝 입문자가 알아야 하는 4+1가지를 알려드리겠습니다.
① 딥러닝 문제 해결 프로세스
② 딥러닝 체크리스트
③ 최소한의 통계 개념
④ 시각화 그래프
⑤ 파이토치 권고 코딩 스타일
① 머신러닝 문제 해결 프로세스
딥러닝으로 문제를 해결하는 순서는 다음과 같습니다.
❶ 가장 먼저 해결할 문제를 정의합니다. 예를 들면 이미지를 읽어들여 분류한다든가, 문장 안에 비어 있는 단어를 알아맞추는 등의 문제를 정의합니다.
❷ 다음으로는 문제를 푸는 데 필요한 데이터를 수집합니다. 딥러닝은 데이터를 기반으로 학습이 이루어집니다. 그렇기 때문에 딥러닝 모델이 읽어들이는 입력 데이터에 대한 딥러닝 모델의 예측이 올바른지를 판단할 정답이 필요합니다. 예를 들어 다음 그림은 두 가지 범주를 갖는 학습용 데이터셋을 표현하고 있습니다. 왼쪽은 검정색, 오른쪽은 하얀색이 정답입니다.
충분한 양의 데이터를 수집했다면 다음으로는 ❸ 데이터를 가공해야 합니다. 데이터를 수집하다 보면 정답이 잘못된 데이터, 혹은 문제 해결에 도움이 되지 않는 데이터 등이 섞이게 됩니다. 이런 데이터는 학습에 악영향을 미치므로 데이터에서 제거해줘야 합니다. 이렇게 딥러닝 모델의 입력으로 사용하기 전에 학습이 원활하게 이루어지도록 가공하는 작업을 데이터 전처리라고 합니다. 다음 그림에서 검정색 데이터에 흰색 데이터가 들어 있습니다. 잘못된 값입니다(경우에 따라 적절한 처리를 하거나 무시합니다).
이제 ➍ 딥러닝 모델을 만들 차례입니다. 해결할 문제에 알맞는 딥러닝 모델을 설계해야 합니다(딥러닝 모델 설계에 대한 자세한 내용은 4장부터 본격적으로 다룹니다). 이 책에서는 이해를 돕고자 〈기본 블록〉을 먼저 그림으로 설계한 후 코드로 딥러닝 모델을 정의합니다.
딥러닝 모델의 설계를 완료했으면 데이터를 이용해 ➎ 딥러닝 모델을 학습해야 합니다. 데이터를 딥러닝 모델의 입력으로 주면 예측이 올바른지 정답과 비교해가며 모델을 학습합니다. 이때 얼마나 올바르게 학습했는가를 근사적으로 나타내는 수치를 ‘손실’이라고 하는데, 이 손실이 작아지도록 학습합니다. 이 책에서는 먼저 〈학습 루프〉를 그림으로 설계한 후 학습 코드를 정의합니다.
마지막으로 학습 때 이용하지 않은 데이터를 이용해서 학습이 완료된 모델의 ➏ 성능을 평가합니다. 딥러닝 모델의 성능을 평가하는 데 ‘평가 지표’를 이용합니다. 이 평가 지표가 딥러닝 모델의 성능을 근사적으로 나타냅니다.
딥러닝 모델의 학습 흐름을 더 자세하게 그림으로 만들어보았습니다.
② 문제 해결 체크리스트
딥러닝의 문제 풀이 흐름은 거의 고정적입니다. 각 단계마다 확인 사항을 간략하게 체크리스트로 정리해두었습니다. 학습과 업무에 도움이 되길 빕니다.
문제 풀이 단계 | 항목 |
풀어야 할 문제 이해하기 |
|
데이터 파악하기 |
|
데이터 전처리 |
|
신경망 설계 |
|
신경망 학습 |
|
손실이 무한대로 발산한다면 |
|
손실이 0으로 수렴한다면 |
|
③ 최소한의 통계 개념
딥러닝을 이해하려면 기초적인 통계 지식이 필요합니다. 매우 간단한 개념만 이해하면 되므로 걱정하지 않아도 됩니다. 다음 네 가지 용어에 대해 설명드리겠습니다.
- 종속변수와 독립변수
- 평균과 분산
독립변수는 다른 변수에 영향을 받지 않으며, 결괏값을 결정하는 변수를 말합니다. 설명이 복잡하지만 쉽게 생각하면 입력값이라고 보면 됩니다. 즉 딥러닝 모델의 입력으로 들어가는 값이 독립변수입니다. 1장 이후에 ‘모델의 입력’, ‘입력 벡터’, ‘입력 데이터’, ‘입력 텐서’ 등의 용어가 등장하게 되는데, 모두 독립변수를 지칭하는 용어입니다(경우에 따라 알맞게 사용합니다).
반대로 종속변수는 독립변수에 의해 값이 결정되는 변수를 의미합니다. 쉽게 말하면 딥러닝 모델의 출력이 되는 변수라고 보면 됩니다. 딥러닝 모델의 출력값은 입력으로 사용한 데이터에 의해 변하게 되므로 딥러닝 모델의 출력이 곧 종속변수입니다. 이후에는 ‘모델의 예측값’, ‘모델의 출력’ 등의 용어가 등장하는데, 모두 종속변수를 지칭합니다(역시나 경우에 따라 알맞게 사용합니다).
평균과 분산은 데이터의 대략적인 분포를 알수 있게 해줍니다. 평균은 모든 데이터의 합을 데이터 수로 나눈 값을 의미합니다. 평균은 정규분포와 같이 종형 분포를 갖는 확률 분포에서 랜덤하게 데이터를 뽑았을 때 평균에 가까운 값이 나올 확률이 가장 크다는 것을 의미합니다.
분산은 데이터가 얼마나 퍼졌는가를 나타내는 지표입니다. 즉, 분산이 크다는 것은 평균으로부터 넓게 흩어져 있는 데이터가 많다는 것을 의미하고, 분산이 작다는 것은 평균 근처에 데이터가 몰려있다는 뜻입니다. 이때 분산의 양의 제곱근을 표준편차라고 부릅니다.
④ 시각화
시각화는 딥러닝 모델의 동작을 눈으로 직접 확인하는 방법입니다. 이 책에서는 파이썬의 시각화 라이브러리인 맷플롯립(matplotlib)을 사용합니다. 맷플롯립은 이미지를 그리거나, 데이터 시각화 등에서 사용하는 라이브러리입니다. 이 책에서는 두 방식의 시각화를 이용합니다.
하나는 이미지를 한눈에 볼 수 있도록 하는 서브플롯subplot입니다. 서브플롯은 여러 그래프를 비교하거나 두 이미지의 차이를 비교하는 등 한 번에 여러 그래프를 그릴 때 사용합니다. 딥러닝 모델의 예측과 실제 정답을 비교할 때 주로 사용했습니다.
다른 하나는 꺾은 선 그래프를 그리는 플롯(plot)입니다. 가장 기본이 되는 그래프로 시간의 흐름에 따른 데이터의 변화를 한눈에 알아볼 수 있기 때문에 순서가 있는 데이터를 다룰 때 사용합니다.
주로 사용하는 선형 그래프, 서브플롯, 히스토그램을 간단히 실습해보겠습니다. 먼저 맷플롯립과 넘파이를 설치해주세요(구글 코랩에서는 다음과 같이 pip 앞에 !를 붙입니다).
예제에 사용할 간단한 데이터(0부터 5까지 0.2씩 증가시킨 값)를 만들겠습니다.
이 데이터를 이용해서 3가지 그래프를 그려보겠습니다.
⑤ 권고 스타일
지금까지 딥러닝 입문자가 알아야 하는 4가지를 소개했습니다. 마지막으로 파이토치 권고 코딩 스타일이 남았네요. 해당 내용은 다음 링크를 참조해주세요.