들어가기 앞서 로직과 딥러닝의 차이를 살펴보고자 한다.
프로그램과 딥러닝 모두 입력값, 출력값 그리고 로직을 가지고 있지만 결과물이 다르다.
그림이 다소 생소할 수도 있지만 아래 그림을 살펴보자.
출처 - futurice.com우리는 이해를 돕기 위해 프로그램 로직 Program
을 하나의 수식 y = 2x + 1
이라고 가정해보자.
만약 프로그램 개발중이라면, 요구사항에 마추어 출력값 y, Result
를 얻는 것이 목적이다.
이를 위해 입력값 x, Input
을 사용하여 수식 program, 2x + 1
을 구현한다.
딥러닝의 경우 수식 program, 2x + 1
를 얻는 것이 목적이다.
여기서 우리는 입력값 Input
과 출력값 Result
을 이용하게 된다.
이 때 아래와 같은 질문이 나올 수 있다.
❝ 프로그램은 수식을 구현한다면 딥러닝은 대체 무엇을 구현하는 것일까 ? ❞
사실 딥러닝에서 얻을 수 있는 프로그램 program
은 무수히 많다.
❝ 무슨 말이냐고 ? ❞
데이터 (x, y) : (1, 3), (2, 5)
가 존재한다면 완전한 수식 2x + 1
을 만들 수 있다.
여기서 데이터를 추가로 수집하여 데이터 (x, y) : (1, 3), (2, 5), (3, 8)
가 될 수 있다.
그럼 무수히 많은 수식이 나올 수 밖에 없다.
❝ 왜나하면 해가 없기 때문이다. ❞
즉, 우리는 가장 작은 오차를 가진 수식을 얻으려 할 것이고 이를 얻기 위한 방법을 구현한다.
그리고 코드를 실행시켜주면
❝ 이를 학습시킨다. 라고 표현한다. ❞
더불어 얻게된 수식을 통해 출력값을 얻는 행위를
❝ 예측한다. 라고 표현한다. ❞
예전에는 딥러닝 알고리즘 Argorithm
이라고도 표현했다.
하지만 근래 들어 알고리즘 보다는 모델 Model
이라고 부른다.
본론으로 들어와서 딥러닝 모델은 예측이 가능한 형태를 말하며
뉴럴 네트워크 Neural Network
를 학습시킨 결과물이라 생각하면 된다.
❝ 그럼 뉴럴 네트워크는 어떤 모습일까 ? ❞
그래서 익숙한 그림을 준비했다.
먼저 입력층 Input Layer
과 출력층 Output Layer
은 우리가 미리 정해 놓을 수 있다.
우리는 <강아지, 고양이> 이미지를 각각 200 by 200
크기로 500
장 수집했다.
그럼 입력층은 200 by 200
로 받아줘야 할 것이다.
나는 특별하니까 500 by 500
으로 받으려한다면
❝ 눈으로 직접 에러를 확인할 수 있을 것이다. ❞
또한 두가지 이미지를 학습했기 때문에 <강아지, 고양이> 중에 하나로 예측된다.
따라서 출력층은 2 개의 값을 뱉어낼 수 있도록 만든다.
우리는 다시 한번 똑똑한 질문을 할 수 있다.
❝ 호랑이 이미지를 넣는다면 ? ❞
조심스럽게 답해본다.
❝ 고양이가 아닐까 ? 호랑이는 고양이과 동물이니까. ❞
위와 같이 안타깝게도 둘 중 하나로만 답을 한다.
자세한 내용은 이후 포스팅에서 다룰 예정이다.
마지막으로 단일 또는 다수의 은닉층 Input Layer
은 다양하게 구성될 수 있다.
❝ 마치 어릴적 조립 설명서 없이 빌딩을 만드는 것 처럼 말이다. 우리는 논리적이니까. ❞
이 때 사용되는 구성 요소에는 Conv Layer
Pooling Layer
Flatten Layer
Dense Layer
가 있다.
우리는 위와 같은 모든 구성 요소를 합쳐 뉴럴 네트워크라 부른다.
정리해보면 딥러닝 예측 모델을 만들기 위해서는 뉴럴 네트워크가 필요하다.
❝ 그럼 뉴럴 네트워크를 만들기 위해서는 무엇을 또 만들어야 하지 ? ❞
자주 반복되는 단어인 레이어 Layer
를 만들면 된다.
❝ 숲을 만들기 위해 나무를 심어야 하듯이 레이어는 나무와 같다. ❞
다음으로레이어에 대해 차근차근 알아보자.