1. 들어가며
지난 글에서는 머신러닝에 대해 살펴봤습니다.
머신러닝은 이전 AI 방법인 전문가 시스템과는 반대되는 철학을 갖고 있는 방법론이었죠. 전문가 시스템은 문제를 해결하기 위한 모든 규칙을 사람이 직접 찾아 컴퓨터에게 가르쳐주는 방법이었습니다. 반면 머신러닝은 다량의 데이터 속에서 컴퓨터가 문제를 해결하기 위한 규칙을 직접 찾는 방식이었죠.
머신러닝에는 다양한 방법이 있습니다.
대표적으로 k-NN, kernel SVM, 인공신경망, 딥러닝 방법을 살펴봤습니다.
각각의 방법은 장단점을 갖고 있었죠.
현재의 AI는 딥러닝 방법이 대세를 이루고 있습니다. 딥러닝은 인공신경망을 깊게 만든 구조를 말합니다. 이번 시리즈 글의 주제이기도 하죠. 이번 글에서는 인공신경망과 딥러닝에 대해 자세히 살펴보겠습니다.
먼저 인공신경망에 대한 글의 전개 순서는 다음과 같습니다.
- 구불구불한 울타리로 데이터셋을 표현하는 방법을 알아봅니다.
- 사칙연산을 사용하여 구불구불한 울타리를 만드는 방법을 알아봅니다.
- 인공신경망 이름의 유래에 대해 알아봅니다.
- 인공신경망을 학습한다는 의미를 알아봅니다.
다음으로 딥러닝에 대한 글의 전개 순서는 다음과 같습니다.
- 인공신경망의 한계에 대해 알아봅니다.
- 인공신경망을 깊게 쌓는 방법을 알아봅니다.
이제부터 하나씩 자세히 살펴보겠습니다.
2. 인공신경망
2-1. 울타리로 데이터 표현하기
먼저 인공신경망에 대해 살펴보겠습니다.
이전 글에서 살펴본 바와 같이 인공신경망의 기본 아이디어는 이렇습니다.
먼저 위 그림처럼 2차원 공간상에 분포하는 데이터 점들을 구슬이라고 생각해 보겠습니다.
우리의 목표는 파란 실을 사용해서 초록색 구슬과 주황색 구슬을 분리하는 겁니다.
그럼 먼저 파란색 실을 초록색 구슬과 주황색 구슬 사이를 지나가도록 잘 배치해야겠죠? 꼬불꼬불 파란색 실을 잘 배치했으면 이제 쭉 당겨보겠습니다. 파란색 실을 잘 배치했다면 초록색 구슬과 주황색 구슬이 완벽하게 나뉘었을 겁니다. 여기까지의 과정이 학습 데이터를 사용하여 인공신경망을 학습하는 과정입니다. 인공신경망은 구불구불한 곡선을 사용해서 데이터셋 분포를 표현하는 방법입니다.
이렇게 학습 데이터를 잘 설명하는 경계 곡선을 찾았다면 이제 시험 데이터로 성능을 측정할 차례입니다.
위 그림의 아래 모습처럼 컴퓨터는 시험 데이터의 정답이 무엇인지 알 수 없습니다. 이제 학습 완료된 파란실을 시험 데이터 분포에 배치합니다. 학습 때 찾았던 구불구불한 상태 그대로 말이죠. 그러고 나서 마찬가지로 파란색 실을 쭉 당겨줍니다.
이제 시험 데이터 구슬들이 분리가 되었는데요. 잘 맞췄는지 확인해 볼 시간입니다. 정답을 몰랐던 시험용 구슬의 정답을 공개해 원래 색깔을 확인해 봅니다. 만약 학습이 잘 되었다면 학습 데이터때와 마찬가지로 초록색 구슬과 주황색 구슬이 잘 분리되었을 겁니다.
2-2. 사칙연산으로 울타리 만들기
여기까지는 일리가 있어 보입니다. 공간상에 구슬들이 어지럽게 퍼져있고 이 구슬들을 구불구불한 곡선으로 구분해 주겠다는 생각이 말이죠.
그런데 우리에게는 대전제가 있습니다. 컴퓨터는 사칙연산만 이해할 수 있다는 것이죠.
지금까지 논리대로라면 컴퓨터에게 이렇게 얘기해야겠죠. “초록색 점들과 주황색 점들을 잘 구분하게 만드는 구불구불한 곡선을 만들어.” 하지만 컴퓨터는 이러한 표현은 이해하지 못합니다. ‘잘 구분하는’ 또는 ‘구불구불한’ 같은 표현은 주관적이기 때문이죠. 컴퓨터에게는 모든 표현을 오직 사칙연산만으로 표현해주어야 합니다.
그럼 이제 문제는 이겁니다. 사칙연산을 사용해서 ‘구불구불한 곡선’을 어떻게 표현해 줄 수 있을까요?
함수를 사용할 수 있을 것 같습니다.
위 그림처럼 함수를 사용하면 직선, 곡선등을 표현할 수 있잖아요.
일차 함수로는 직선을 표현할 수 있습니다. 일차 함수가 아닌 다양한 함수들은 곡선을 표현할 수 있죠. 이렇게 다양한 직선, 곡선들의 조합을 사용하면 무한가지의 울타리를 표현해 줄 수 있습니다.
2-2-1. 퍼셉트론(Perceptron) : 직선 울타리 만들기
자 그럼 먼저 직선을 표현해 볼게요.
직선 위에 있는 점들은 좌표값들을 더했을 때 일정한 값을 갖는다는 특징이 있습니다.
위 그림처럼 보라색 직선 위의 점들은 x1과 x2 좌표값을 더하면 2로 같죠. 마찬가지로 갈색 점들은 3으로, 분홍색 점들은 4로 일정한 값을 갖습니다. 따라서 직선함수는 두 값을 더했을 때 일정한 값을 갖는 점들로 표현해 줄 수 있겠네요. 직선 함수를 사용하여 초록색 점들과 주황색 점들을 구분하면 다음과 같습니다.
파란색 선은 임의의 직선 함수를 표현한 것입니다.
이 파란색 선보다 위로는 초록색 점들이, 아래로는 주황색 점들로 구분할 수 있습니다. 이때의 파란색 선에 해당하는 직선 함수의 입력값과 함수 가중치를 그래프 형태로 표현하면 다음과 같습니다.
그래프 형태라고 해서 대단한 건 아니고요. 원으로 표현한 부분은 ‘입력값’과 ‘결괏값’을 의미합니다. 보통 노드(Node)라고 부릅니다.
선으로 표현한 부분은 ‘함수 가중치’를 의미합니다. 함수에서 x, y 등은 입력값과 결괏값에 해당하죠. 그리고 a, b, c 등은 함수의 모양을 결정하는 ‘함수 가중치’라고 표현했습니다. 이때 x1, x2 만 사용하면 원점을 지나는 직선밖에 표현이 안 되겠죠? 그래서 y절편에 해당하는 c값을 추가해 주었습니다. 이를 입력값에 상관없이 편향되어 있는 값이라는 의미로 편향(Bias)라고 부릅니다.
이러한 그래프 형태의 표현은 딥러닝을 공부하면서 계속 보게 될 겁니다. 이번 시리즈에서도 이후로는 위의 그래프 형태 표현을 계속 사용하겠습니다.
이렇게 직선함수를 사용하여 데이터 분포를 표현하는 방법을 퍼셉트론(Perceptron)이라고 합니다.
직선함수라고 하면 거창한데요. 더 쉽게 말하면 그저 각각의 입력값에 대해 숫자 (가중치)를 곱하고 모두 더해 최종 결괏값을 내는 방식을 말합니다. 데이터 분포가 복잡하지 않은 문제라면 이렇게 단순한 구조로도 어느 정도 설명이 가능했습니다. 초창기 인공신경망은 퍼셉트론 구조로 구성되었습니다.
2-2-2. 비선형 활성함수 (Non-Linear Activation Function) : 곡선 울타리 만들기
그런데 위에서 만든 직선 경계선으로는 초록색 구슬과 주황색 구슬이 충분히 잘 구분되지 않습니다.
이러한 상황은 데이터 분포가 복잡할수록, 즉 초록색 구슬과 주황색 구슬이 더욱 어지럽게 섞여 있을수록 심해지겠죠. 그럼 자연스럽게 이런 생각이 드는데요. 직선보다는 곡선으로 표현하는 게 더 유리하지 않을까요?
왼쪽의 직선만으로 표현하는 것보다는 오른쪽의 곡선으로 표현하는 편이 더 유리할 겁니다.
그럼 이제 곡선 함수를 적용해야겠군요. 가장 쉽게 떠오르는 곡선 함수인 y=x2 형태를 사용해 보죠. 위에서 살펴본 퍼셉트론 그래프에 이어서 적용하면 이렇게 될 겁니다.
퍼셉트론 연산 결과 나온 y1에 제곱 연산을 추가하여 y2를 계산하는 방식입니다. 이를 수식으로 보면 다음과 같습니다.
이때 y1식을 대입해서 전개하면 이렇게 되죠.
수식이 중요한 건 아니고, 하고 싶었던 말은 y2는 x1과 x2의 제곱 형태로 표현된다는 겁니다.
즉 곡선 형태의 경계선이 만들어진 거죠. 이렇게 곡선을 표현하기 위해 적용하는 함수를 비선형 활성함수(Non-Linear Activation Function)이라고 합니다. 비선형은 쉽게 말해서 곡선형태라고 생각하면 됩니다.
그럼 나머지 활성함수라는 이름은 왜 붙은 걸까요?
퍼셉트론 연산 결괏값이 일정 수준 이상이 되었을 때만 활성화되는 기능을 포함하고 있기 때문입니다. 이러한 기능은 사람의 신경세포 전달방식에서도 살펴볼 수 있습니다. 사람의 신경세포도 역치값 이상의 자극에서만 활성화되어 전기신호를 전달해 주는 방식이죠.
쉽게 이해하기 위해 내용을 많이 단순화해서 표현했는데요. 오해를 막기 위해 정확하게 짚어야 할 부분만 정리해 보겠습니다.
실제 인공신경망에서는 y=x2 형태의 함수를 사용하지는 않습니다. 다음과 같은 함수들을 주로 사용하죠.
세 가지 함수 모두 두 가지 특성을 갖고 있는 모습을 볼 수 있죠.
첫 번째는 비선형성입니다. 직선 형태로 일정하게 증가하거나 감소하지 않고 꺾이거나 구부러지는 형태로 구성된 모습을 볼 수 있죠.
두 번째는 활성화 기능입니다. x축을 입력값, y축을 출력값으로 봤을 때 특정 입력값이 넘어야 출력값이 크게 활성화되는 모습을 볼 수 있죠.
2-3. 인공신경망 : 사람의 신경망을 본떠 만든 AI
지금까지 사칙연산만을 사용하여 데이터셋을 잘 표현하는 울타리를 만드는 방법을 살펴봤습니다.
이러한 연산 과정을 그래프로 표현하여 설명했는데요. 요약하자면 이렇습니다.
크게 보면 곡선 울타리는 퍼셉트론과 비선형 활성함수로 구성되어 있었습니다. 퍼셉트론은 입력값에 대한 덧셈과 곱셈만으로 구성되어 직선 형태의 울타리를 만들어주었죠. 반면 비선형 활성함수는 비선형 함수들을 사용하여 곡선 형태의 울타리를 만들 수 있었습니다. 이러한 구조로 데이터셋 분포를 표현하는 AI를 인공신경망이라고 합니다.
왜 인공신경망이라는 이름이 붙었을까요?
바로 인공신경망의 연산 과정이 사람의 신경망과 매우 유사하기 때문입니다. 사람의 신경망을 단순화해서 표현하면 다음과 같습니다.
그림에서 뉴런으로 표현되어 있는 부분은 신경 세포의 기본 단위입니다. 전기신호를 받아들이고 내보내는 역할을 하죠.
뉴런은 인공신경망의 노드(Node)에 해당합니다. 뉴런과 뉴런은 전기적으로 연결되어 신호를 전달할 수 있습니다. 이러한 모습은 인공신경망의 퍼셉트론과 매우 유사하죠?
또한 하나의 뉴런으로 모인 전기자극은 바로 다음 뉴런으로 전달되지 않습니다. 일정 크기의 자극(역치) 이상일 때만 전달되죠. 이 또한 인공신경망의 비선형 활성함수의 기능과 매우 유사한 모습입니다.
이렇게 인공신경망은 사람의 신경망과 동작 방식이 매우 유사합니다. 그런 이유로 인공적으로 구현한 신경망이라는 의미로 인공신경망이라는 이름이 붙여졌죠.
2-4. 학습 데이터를 잘 설명하는 울타리 찾기
자 이제 데이터셋을 잘 표현할 수 있는 울타리를 찾는 방법이 인공신경망이라는 것을 알았습니다. 이때의 울타리는 퍼셉트론과 비선형 활성함수를 조합하여 만들 수 있다는 것도 알았죠. 즉 ‘구불구불한 울타리’를 사칙연산으로 표현하는 방법은 알았습니다.
그럼 이제 남은 의문은 이겁니다. ‘잘 구분하는’은 사칙연산으로 어떻게 표현해 줄 수 있을까요?
흔히들 인공지능 모델을 ‘학습’한다는 표현을 사용하는데요. 이때의 ‘학습’이 바로 ‘잘 구분하는’ 울타리를 찾아가는 과정입니다.
위 그림은 학습하기 전 울타리와 학습 후 울타리의 모습을 비교한 그림입니다.
학습 전에는 초록색 점과 주황색 점을 잘 구분하지 못하는 모습이죠? 반면 학습 후에는 완벽하지는 않지만 더 잘 구분하고 있는 모습입니다. 위에서 울타리는 여러 직선과 곡선 함수들을 조합해서 표현할 수 있다고 했습니다. 따라서 울타리의 모습은 어떤 직선, 곡선 함수들을 조합했는지에 따라 달라집니다. 결국 인공신경망 모델의 ‘학습’이란 인공신경망을 구성하고 있는 직선, 곡선 함수들의 모습을 바꿔주는 작업입니다.
이때 함수들의 모습은 위에서 언급했던 ‘함수 가중치’들에 의해 결정되죠. 따라서 인공신경망 모델의 ‘학습’이란 인공신경망을 구성하고 있는 함수들의 ‘가중치’를 변경하는 작업입니다.
어떻게 변경하면 될까요?
초록색 점과 주황색 점을 ‘잘’ 구분하도록 변경해야죠. 인공신경망 모델의 학습은 더 많은 설명이 필요합니다. 따라서 이 부분은 다음 글로 넘기겠습니다. 이번 글에서는 인공신경망과 딥러닝에 대해 개괄적으로 이해하는 데에 초점을 맞춰 이어나가겠습니다.
3. 딥러닝
3-1. 인공신경망의 한계
지금까지 인공신경망에 대해 살펴봤습니다. 인공신경망은 어떠한 아이디어를 갖고 있는지, 어떻게 구성되어 있고, 어떻게 학습하는지까지 대략적으로 살펴봤죠.
그런데 이렇게 구성하면 정말 좋은 성능의 AI가 만들어질까요? ‘초록색 구슬과 주황색 구슬을 구불구불한 실을 사용해서 구분해 준다.’ 충분히 일리는 있는데요. 그런데 만약 초록색 구슬과 주황색 구슬이 아주 어지럽게 섞여 있다면 어떻게 될까요? 딱 한 번의 시도로 모든 구슬을 잘 구분할 수 있을까요?
분명 어려운 상황이 있겠죠? 위 그림처럼 데이터 분포가 복잡해지면 하나의 곡선 형태로는 분포를 설명하기 어렵습니다.
따라서 인공신경망을 한번 시도하는 방법으로는 복잡한 문제를 풀 수 없습니다. 우리가 지금까지 풀고자 하는 강아지와 고양이 구분하기 문제도 이에 해당합니다. 실제 강아지와 고양이 이미지 데이터는 아주 복잡하게 섞여 있는 문제에 해당합니다. 단순히 한 번의 곡선 형태로는 구분하기 불가능하죠.
3-2. 딥러닝 : 인공신경망을 아주 깊게 쌓기
그럼 바로 이런 생각이 들지 않나요? 인공신경망을 한 번만 사용해서 풀기 어렵다면, 여러 번 연속으로 시도하면 어떨까요?
어쨌든 인공신경망 방법을 사용하면 조금씩 성능이 좋아지는 건 맞잖아요. 그럼 이런 시도를 만족스러운 결과가 나올 때까지 계속 반복하는 겁니다. 아래 그림처럼 말이죠.
먼저 파란색 실로 최대한 잘 구분을 해 보고요. 이제 이 실을 쭉 펴는 겁니다. 그럼 구슬들이 재배치되겠죠.
이 전보다는 초록색은 초록색끼리 주황색은 주황색 구슬들끼리 뭉쳐있을 겁니다. 그럼 다시 실을 배치하는 거예요.
이 작업을 만족스러운 결과가 나올 때까지 반복하는 겁니다. 이때 실을 배치하는 작업과 (울타리 치기) 실을 쭉 펴는 작업 (공간 변형)을 묶어서 ‘변형’ 작업이라고 할게요. 그럼 이렇게 표현할 수 있겠죠.
총 세 번의 변형 작업을 통해 거의 완벽하게 초록 구슬과 주황 구슬을 구분할 수 있게 되었습니다.
앞서 울타리는 직선, 곡선 함수들로 표현할 수 있다고 했었죠. 정확히는 퍼셉트론과 비선형 활성함수로 표현했었죠. 그럼 상세 작업으로 구분해서 보면 다음과 같을 겁니다.
입력값에 대해 퍼셉트론과 비선형 활성함수들이 연속적으로 배치되어 연산 결과를 도출하는 것이죠. 이때 퍼셉트론과 비선형 활성함수를 묶어서 그냥 함수라고 한다면, 다음과 같이 단순화하여 표현해 볼 수 있습니다.
인공신경망에서는 이렇게 퍼셉트론과 비선형 활성함수 덩어리를 ‘층 (Layer)’이라고 표현합니다. 층 별로 울타리를 치고 공간을 변형해 주는 작업을 수행하는 것이죠. 그럼 쉽게 생각해 봤을 때 이런 층을 많이 쌓을수록 성능이 더 좋은 AI가 만들어지겠죠? 인공신경망의 층을 아주 깊게 (Deep) 쌓으면 이런 모습이 될 겁니다.
층을 아주 깊게 (Deep) 쌓은 모습이죠.
이렇게 인공신경망을 깊게 (Deep) 쌓은 구조를 딥러닝 (Deep Learning)이라고 합니다. 러닝은 학습한다는 의미이죠. 앞서 인공신경망에서 학습이 어떤 의미인지는 살펴봤고, 딥은 층을 깊게 쌓았음을 의미합니다.
3-3. 딥러닝 – 정리
정리해 보겠습니다.
딥러닝은 인공신경망과 사실상 동일한 개념입니다. 인공신경망은 인공지능 연구 초창기부터 제안되었던 방법입니다. 이때는 단순한 퍼셉트론만으로 구성되어 있었죠. 하지만 퍼셉트론은 아무리 많이 연결해도 결국 직선 형태의 함수밖에 표현할 수 없다는 한계가 있었습니다. 여기에 비선형 활성함수가 추가되며 성능이 크게 개선되었습니다. 곡선 함수를 표현할 수 있게 되었기 때문이죠.
하지만 하나의 곡선만으로는 복잡한 데이터를 표현하기 어렵다는 한계가 있었습니다. 그래서 아주 오랫동안 인공신경망은 빛을 보지 못했죠. 그러다가 비교적 최근에 인공신경망을 깊게 쌓으면 아주 성능이 좋은 AI가 된다는 사실을 발견했습니다. 이때부터 우리가 아는 지금의 인공지능의 전성기가 시작된 것이죠.
이렇게 깊게 쌓은 인공신경망 모델은 기존의 인공신경망과는 비교도 할 수 없을 정도로 성능이 좋았는데요. 따라서 새로운 브랜딩을 위해 만든 새로운 이름이 딥러닝입니다. 즉 딥러닝은 ‘깊게 쌓은 인공신경망’입니다.
4. 마무리
지금까지 인공신경망과 딥러닝에 대해 살펴봤습니다.
먼저 인공신경망에 대해 자세히 살펴봤습니다. 인공신경망은 울타리를 사용해 데이터셋을 표현하고자 하는 방법이었죠. 이때의 울타리는 컴퓨터가 이해할 수 있는 사칙연산만을 사용하여 표현해야 했습니다. 따라서 사칙연산을 사용한 함수를 사용했죠. 퍼셉트론 구조를 사용해서 직선 형태를 표현했고요. 비선형 활성함수를 추가해서 곡선 형태까지 표현해 줄 수 있었습니다. 이렇게 만들 수 있는 곡선 형태는 무한가지의 경우가 존재하는데요. 우리 데이터셋을 잘 설명하는 곡선 형태를 찾는 과정을 ‘학습’이라고 합니다. 인공신경망의 학습 과정에 대해서는 다음 글에서 자세히 살펴보겠습니다.
하지만 이렇게 구성한 곡선으로는 복잡한 데이터셋을 설명하기 어려웠죠. 그래서 나온 아이디어가 인공신경망을 깊게 쌓는 것이었습니다. 울타리를 쳐서 데이터를 잘 구분해 주고 공간을 변형한 뒤 다시 울타리를 치는 작업을 반복하는 것이죠. 이렇게 인공신경망을 깊게 구성하는 방법을 딥러닝이라고 합니다. 지금의 인공지능 전성기는 바로 이 딥러닝으로 인해 시작되었다고 할 수 있습니다. 그동안의 인공지능 모델들보다 월등하게 성능이 좋기 때문이죠.
다음 글에서는 딥러닝 모델을 학습하는 방법에 대해 살펴보겠습니다.
설명이 너무 깔끔하게 잘 정리되어있어서, 너무 좋습니다.
감사합니다!